pax_global_header00006660000000000000000000000064141526426010014513gustar00rootroot0000000000000052 comment=e12d6cf6d49d05c226130a3e44400102c82b5163 scim-master/000077500000000000000000000000001415264260100133035ustar00rootroot00000000000000scim-master/.gitignore000066400000000000000000000000271415264260100152720ustar00rootroot00000000000000.c* .project .settings scim-master/AUTHORS000066400000000000000000000011051415264260100143500ustar00rootroot00000000000000Main authors: ============= James Su Developers: =========== LiuCougar Ryo Dairiki zh_TW.po: ========= Tetralet Jim Huang ja.po: ====== Yukiko Bando ko.po: ====== Kitae de.po: ====== Jan Hefti fr.po: ====== Damien Menanteau it.po: ====== Federico Zenith pa.po ====== Amanpreet Singh Alam scim-master/COPYING000066400000000000000000000634761415264260100143560ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! scim-master/ChangeLog000066400000000000000000000216301415264260100150570ustar00rootroot000000000000002012-03-30 gettextize * Makefile.am (EXTRA_DIST): Add m4/ChangeLog. 2009-11-25 14:09 paxerit * Integrated patch that fixed a focusing bug that has been reported on both the ubuntu and redhat bugtrackers * Added panel-controller functionality. it is now possible to programmatically change the selected IM via a socket connection to the panel. For a possible client implementation see http://projects.palaso.org/projects/show/autoswitcher 2009-04-27 10:09 yurivict * extras/gtk2_immodule/gtkimcontextscim.cpp: fixed the issues of dual uninitialization causing segv. 2008-12-21 02:07 ryo-dairiki * configs/config: - Remove "CapsLock" from valid key masks. 2008-12-20 12:01 ryo-dairiki * modules/FrontEnd/IMdkit/i18nPtHdr.c: - Import "scim-xim-block.patch". 2008-12-20 00:56 ryo-dairiki * ChangeLog: - Update Changelog. 2008-12-20 00:51 ryo-dairiki * po/nl.po: - Update Dutch translation. 2008-10-23 20:38 yurivict * ChangeLog: fixed ChangeLog date 2008-10-23 20:38 yurivict * ChangeLog, configure.ac, po/ca.po: added Catalan translation from scim-delel mailing list submission 2008-10-19 04:48 ryo-dairiki * data/icons/down.xpm, data/icons/full-letter.xpm, data/icons/full-punct.xpm, data/icons/half-letter.xpm, data/icons/half-punct.xpm, data/icons/help.xpm, data/icons/left.xpm, data/icons/menu.xpm, data/icons/pin-down.xpm, data/icons/pin-up.xpm, data/icons/right.xpm, data/icons/setup.xpm, data/icons/trademark.xpm, data/icons/up.xpm, extras/bridge_immodule, extras/gtk2_immodule/gtkimcontextscim.cpp, extras/panel/scim_panel_gtk.cpp, extras/setup/scim_setup_ui.cpp, modules/FrontEnd/IMdkit/i18nAttr.c, modules/FrontEnd/scim_x11_frontend.cpp, modules/FrontEnd/scim_x11_ic.cpp, modules/SetupUI/scim_panel_gtk_setup.cpp, src/scim.cpp, src/scim_compose_key.cpp, src/scim_debug.cpp, src/scim_event.cpp, src/scim_helper_manager.cpp, src/scim_helper_manager_server.cpp, src/scim_hotkey.cpp, src/scim_keyboard_layout_data.h, src/scim_launcher.cpp, src/scim_panel_client.cpp, src/scim_utility.cpp: - Eliminate warnings about implicit casting from 'const char*' to 'char *'. - Import ISO3-shift patch. 2008-09-22 00:18 yurivict * ChangeLog, src/ltdl.cpp, src/scim_helper_manager.cpp, src/scim_helper_manager_server.cpp, src/scim_socket.cpp: Fixed the problem when on FreeBSD scim-helper-module silently failed to launch. Added a workaround to module loading/unloading for some unknown problem of SEGV occuring after some module was unloaded in scim-helper-module. Improved error handling in scim-helper-module launching and in socket operations. 2008-09-19 18:45 yurivict * ., ChangeLog, configure.ac, extras/setup/scim_setup_ui.cpp, extras/setup/scim_setup_ui.h, po/cs.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/pa.po, po/pt_BR.po, po/scim.pot, po/sv.po, po/zh_CN.po, po/zh_TW.po, src/scim.h, src/scim_private.cpp, src/scim_socket.cpp: Merged all changes from scim/branches/scim-1.4 branch into scim/trunk and bumped the version of the trunk 1.4.6->1.4.8. 2008-09-15 19:03 yurivict * ChangeLog, configure.ac, po/pt-BR.po, po/pt_BR.po: Minor language files changes. 2008-09-14 20:53 yurivict * ChangeLog: Added missing ChangeLog files needed for auto*-tools 2008-08-26 07:18 juhp * po/ko.po: updated translations by Eunju Kim (Red Hat) with additional fixes by Choe Hwanjin 2008-06-23 05:21 juhp * po/vi.po: update from Nguyen Dinh Trung 2008-06-18 07:03 juhp * po/zh_CN.po: update from Leah Liu 2008-06-18 05:56 juhp * po/nl.po: update from Ronald Stroethoff 2008-06-13 08:48 juhp * configure.ac: update LINGUAS for new translations added 2008-06-13 08:29 juhp * po/sk.po: add Slovakian translation from 1.4 branch 2008-06-11 08:16 juhp * po/pa.po: update to Punjabi translation from Jaswinder Singh 2008-06-11 08:15 juhp * po/ja.po: update to Japanese translation from Kiyoto Hashida 2008-06-11 08:13 juhp * po/de.po: updated German translation from Timo Trinks 2008-06-11 08:10 juhp * po/it.po: update of Italian translation from Francesco Valente 2008-06-11 06:47 juhp * po/scim.pot: updated to recent strings 2008-06-11 06:43 juhp * po/ml.po: add translator 2008-06-11 06:42 juhp * po/te.po: add Telugu translation from Krishna Babu K 2008-06-11 06:42 juhp * po/ru.po: add Russian translations from Yulia Poyarkova 2008-06-11 06:41 juhp * po/pt-BR.po: add Brazilian Portuguese translation from Glaucia Cintra 2008-06-11 06:40 juhp * po/gu.po: add Gujarati translations from Ankit Patel 2008-06-11 06:39 juhp * po/ml.po: add Malayalam translations from Ani Peter 2008-06-11 06:34 juhp * po/mr.po: add Marathi translations from Sandeep Shedmake 2008-06-11 06:23 juhp * po/kn.po: add Kannada translations from Shankar Prasad 2008-06-11 06:22 juhp * po/hi.po: add Hindi translations by Rajesh Ranjan 2008-06-11 06:21 juhp * po/es.po: add Spanish translation by Angela Garcia 2008-06-11 06:16 juhp * po/bn_IN.po: add Bengali INDIA translation by Runa Bhattacharjee 2008-06-11 06:15 juhp * po/as.po: add Assamese translation by Amitakhya Phukan 2008-03-26 07:58 juhp * po/vi.po: add Vietnamese translation from Nguyễn Đình Trung 2008-03-12 06:13 huangpeng * extras/panel/scim_panel_gtk.cpp, src/scim_launcher.cpp: Avoid scim segfault during exiting. 2007-10-08 08:56 ryo-dairiki * extras/bridge_immodule/scim_bridge_transaction.c: 2007-09-13 08:02 juhp * po/ja.po: add Sinhala 2007-09-09 12:18 ryo-dairiki * extras/bridge_immodule/scim_bridge_transaction.c, extras/bridge_immodule/scim_bridge_type.h: 2007-09-06 17:10 ryo-dairiki * AUTHORS, configure.ac, extras/bridge_immodule/scim_bridge_attribute.c, extras/bridge_immodule/scim_bridge_attribute.h, extras/bridge_immodule/scim_bridge_lookup_table.c, extras/bridge_immodule/scim_bridge_transaction.c, extras/bridge_immodule/scim_bridge_utility.h: 2007-08-28 16:09 ryo-dairiki * extras/bridge_immodule/scim_bridge_lookup.h, extras/bridge_immodule/scim_bridge_lookup_table.c, extras/bridge_immodule/scim_bridge_lookup_table.h: 2007-08-26 08:44 ryo-dairiki * .cdtproject, .project, .settings, .settings/org.eclipse.cdt.core.prefs, extras/bridge_immodule, extras/bridge_immodule/scim_bridge_attribute.c, extras/bridge_immodule/scim_bridge_attribute.h, extras/bridge_immodule/scim_bridge_key_event.h, extras/bridge_immodule/scim_bridge_lookup.h, extras/bridge_immodule/scim_bridge_lookup_table.c, extras/bridge_immodule/scim_bridge_property.c, extras/bridge_immodule/scim_bridge_property.h, extras/bridge_immodule/scim_bridge_transaction.c, extras/bridge_immodule/scim_bridge_transaction.h, extras/bridge_immodule/scim_bridge_type.h, extras/bridge_immodule/scim_bridge_utility.c, extras/bridge_immodule/scim_bridge_utility.h: - Begin to import scim-bridge as an extra immodule. 2007-08-03 11:38 suzhe * src/scim_frontend_module.cpp: Don't unload FrontEnd module to avoid possible crash. 2007-07-22 02:44 suzhe * src/scim_utility.cpp: Add "Esperanto" language. 2007-07-09 11:52 suzhe * src/scim_private.cpp: Include necessary header file. 2007-07-09 11:49 suzhe * src/scim_private.cpp: Set locale correctly. 2007-07-09 11:41 suzhe * src/scim_utility.cpp: Use LC_MESSAGES instead of LC_CTYPE for current locale. 2007-06-26 02:37 suzhe * extras/gtk2_immodule/gtkimcontextscim.cpp: Fix include file issue. 2007-06-22 18:43 suzhe * po/cs.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/pa.po, po/scim.pot, po/sv.po, po/zh_CN.po, po/zh_TW.po: Update po files. 2007-06-22 17:09 suzhe * modules/FrontEnd/scim_x11_frontend.cpp: Fix high power consumption issue. 2007-06-22 02:36 suzhe * extras/gtk2_immodule/gtkimcontextscim.cpp, src/scim_event.cpp, src/scim_transaction.cpp: Add missing headers. 2007-06-22 00:08 suzhe * ChangeLog, ChangeLog.old, Makefile.am, developers, svn2cl.sh, svn2cl.xsl: Use svn2cl to generate ChangeLog. 2007-06-21 23:37 suzhe * src/scim_socket.cpp: Fix a bug in Socket::wait_for_data() and Socket::read(), Socket::write(). 2007-06-19 06:32 suzhe * extras/gtk2_immodule/gtkimcontextscim.cpp, modules/IMEngine/scim_socket_imengine.cpp: Add more debug message. Avoid focus an already focused IC. 2007-06-17 07:15 suzhe * .: Move scim-trunk (the head) to scim/trunk. 2007-06-17 07:13 suzhe * : Rename scim to trunk. 2007-06-17 07:09 suzhe * : Initial import scim 1.4 branch into svn as trunk. scim-master/ChangeLog.old000066400000000000000000006126201415264260100156410ustar00rootroot000000000000002007-04-16 05:42 James Su * configs/config, extras/gtk2_immodule/gtkimcontextscim.cpp, src/scim_keyevent_data.h, utils/scim_x11_utils.cpp (scim_1_4.[3,12,1,2]): Fix QuirkKanaRo support. 2007-04-14 08:35 James Su * src/scim_iconv.cpp (scim_1_4.1): Added missing header. 2007-04-11 15:24 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp, src/scim_event.h, utils/scim_x11_utils.cpp (scim_1_4.[11,1,1]): Prevent spot location from being changed too frequently. Add SCIM_KEY_QuirkKanaRoMask to KeyEvent::mask to distinguish two backslash keys on jp106 keyboard. 2007-04-11 11:30 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.15): Automatically adjust the position of toolbar according to the size of work area. Patch is provided by Takuro Ashie. 2007-04-11 06:10 James Su * modules/FrontEnd/scim_x11_frontend.cpp (scim_1_4.4): Just return when receiving events from an un-focused IC. 2007-04-10 09:46 James Su * configure.ac, po/cs.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/nl.po, po/pa.po, po/scim.pot, po/sv.po, po/zh_CN.po, po/zh_TW.po (scim_1_4.[8,3,3,2,4,3,3,3,1,3,9,2,3,3]): Added Dutch translation. 2007-04-10 09:18 James Su * src/scim_types.h.in (scim_1_4.1): Support for FreeBSD. 2007-04-10 09:14 James Su * configure.ac, scim-gtkutils.pc.in, scim-x11utils.pc.in, scim.pc.in, scim.spec.in, extras/gtk2_immodule/Makefile.am, extras/gtk2_immodule/imscim.cpp, extras/panel/Makefile.am, extras/setup/Makefile.am, modules/Config/Makefile.am, modules/Filter/Makefile.am, modules/FrontEnd/Makefile.am, modules/IMEngine/Makefile.am, modules/SetupUI/Makefile.am, src/Makefile.am, tests/Makefile.am, utils/Makefile.am (scim_1_4.[7,1,1,4,2,1,1,1,1,1,1,1,1,1,1,1,1]): Use SCIM_EPOCH=-1.0 macro to replace hardcoded -1.0 suffix. 2007-04-10 07:47 James Su * extras/panel/scim_panel_gtk.cpp, modules/IMEngine/scim_rawcode_imengine.cpp (scim_1_4.[14,7]): Use GtkEventBox instead of GtkButton in tray icon. Postpone the initialization of a static string object in rawcode imengine. 2007-03-13 07:57 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.10): Fixed a null pointer issue. 2007-03-11 12:35 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp, src/scim_private.cpp (scim_1_4.[9,1]): Don't call setlocale() if locale is already set. 2006-12-14 04:12 Jens-Ulrik Petersen * extras/panel/scim_panel_gtk.cpp (1.125): fix spelling of dragging in identifiers 2006-11-30 02:19 James Su * src/scim_compose_key_data.h (scim_1_4.1): Fixed a wrong sequence in compose key table. 2006-11-17 00:39 James Su * modules/FrontEnd/scim_x11_frontend.cpp (scim_1_4.3): Just return if the IC is not focused. 2006-11-02 04:14 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.13): Return menu_item in ui_create_factory_menu_entry(). 2006-11-02 04:11 James Su * src/scim_utility.cpp (scim_1_4.5): Accept language names such as "zh-cn" etc. 2006-10-08 09:31 tag scim_1_4_5 2006-10-08 09:31 James Su * ChangeLog, configure.ac (scim_1_4.[8,6]): Bump version to 1.4.5 2006-10-08 08:09 James Su * po/: scim.pot, sv.po (scim_1_4.[8,1]): Added Swedish translation. Thanks Leo Wallentin. 2006-09-30 07:40 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.12): Don't show factory and command menu twice in very short time. 2006-09-30 02:18 James Su * modules/FrontEnd/scim_x11_frontend.cpp (scim_1_4.2): Don't draw underline for characters which have attributes when drawing preedit string. 2006-09-29 15:17 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.8): Don't draw underline for characters with attributes when drawing preedit string. 2006-09-27 03:33 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.11): Fix multihead support of workarea code, by Takuro Ashie. 2006-09-24 16:17 James Su * ChangeLog (scim_1_4.7): Updated ChangeLog. 2006-09-24 16:00 James Su * scim.pc.in, configs/config, extras/gtk2_immodule/gtkimcontextscim.cpp, extras/panel/scim_panel_gtk.cpp, modules/SetupUI/scim_imengine_setup.cpp, po/scim.pot, src/scim_backend.cpp, src/scim_utility.cpp, tests/testlang.cpp (scim_1_4.[3,2,7,10,2,7,1,4,1]): Merge some patches from RedHat Fedora Core's scim package as well as some other contributors. 2006-09-22 07:52 James Su * src/scim_utility.cpp (scim_1_4.3): Use _exit() instead of exit() in scim_daemon(). 2006-08-23 16:12 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.9): Enable Exit command by default. 2006-08-10 13:59 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.6): Emit preedit-start/preedit-end signal correctly. 2006-08-10 05:16 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.5): Add option to disable key snooper.(Again3) 2006-08-09 14:02 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.4): Add option to disable key snooper.(Again2) 2006-08-09 13:48 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.3): Add option to disable key snooper.(Again) 2006-08-09 11:16 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_4.2): Add option to disable key snooper. 2006-07-11 03:50 James Su * ChangeLog (scim_1_4.6): Update ChangeLog. 2006-07-11 02:58 James Su * utils/scimtrayicon.c (scim_1_4.1): Applied patch for bug #1520119. Make tray icon transparent. 2006-07-03 04:49 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.8): Set initial toolbar position to not overlap desktop panel. Patch from Takuro Ashie. 2006-06-29 07:40 Jens-Ulrik Petersen * ChangeLog (scim_1_4.5): add entry for changes to scim_panel_gtk.cpp to use toplevel factory menu entries for single IME langs 2006-06-22 01:07 LiuCougar * po/ja.po (1.55): update ja, thanks to Yukiko Bando 2006-06-07 10:35 James Su * configure.ac, po/scim.pot (scim_1_4.[5,6]): Add --without-doxygen option 2006-06-07 09:40 James Su * configure.ac (1.151), extras/panel/scim_panel_gtk.cpp (1.124): Handle --without-doxygen option correctly. 2006-06-07 09:27 James Su * src/: scim_transaction.cpp (scim_1_4.1), scim_transaction.cpp (1.14): Handle empty LookupTable correctly in Transaction. 2006-06-06 05:39 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.7): Patch from Jens Petersen : Change the menu to put a single factory for a language on the main menu. Add variables `engines', `lang', `ime' and `text'. `engines' holds number of factories for `lang'. `ime' is the factory name. Label factories of miscellaneous `lang' with just the `ime' name. Add a tooltip to main menu entries with the `ime' name. 2006-06-01 06:04 James Su * po/: fi.po (scim_1_4.1), fi.po (1.2): Added fi.po 2006-06-01 06:00 James Su * configure.ac, po/scim.pot (scim_1_4.[4,5]), configure.ac (1.150), po/cs.po (1.21), po/de.po (1.42), po/fr.po (1.34), po/it.po (1.24), po/ja.po (1.54), po/ko.po (1.45), po/pa.po (1.8), po/scim.pot (1.113), po/zh_CN.po (1.159), po/zh_TW.po (1.160): Added fi.po 2006-04-24 01:59 James Su * modules/FrontEnd/IMdkit/: i18nIMProto.c (1.2), i18nIc.c (1.6), i18nMethod.c (1.5), i18nPtHdr.c (1.4): Fix endian issue in IMdkit. https://bugzilla.novell.com/show_bug.cgi?id=163522. 2006-04-24 01:46 James Su * modules/FrontEnd/IMdkit/: i18nIMProto.c, i18nIc.c, i18nMethod.c, i18nPtHdr.c (scim_1_4.[1,1,1,1]): Fix endian issue in IMdkit. https://bugzilla.novell.com/show_bug.cgi?id=163522. 2006-03-26 16:32 Kitae * po/ko.po (1.44): translate some undtaranslated word in ko.po file 2006-03-20 08:00 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (scim_1_4.1), scim_x11_frontend.cpp (1.180): Don't check whether ic is focused when doing helper related operations. 2006-03-01 10:25 James Su * ChangeLog (scim_1_4.4): Updated ChangeLog. 2006-02-24 04:32 James Su * scim.pc.in (scim_1_4.2): Revert the moduledir change, this may lead incompatibility issue. 2006-02-23 05:29 James Su * po/fr.po (scim_1_4.3): Fixed some fuzzy strings. 2006-02-23 04:35 James Su * modules/SetupUI/scim_imengine_setup.cpp (1.11): Initialize hotkey and filter buttons before factory list view to prevent NULL pointers from being used in callback function. 2006-02-23 04:32 James Su * modules/SetupUI/scim_imengine_setup.cpp (scim_1_4.1): Initialize hotkey and filter buttons before factory list view to prevent NULL pointers from being used in callback function. 2006-02-23 04:29 James Su * po/: cs.po, de.po, fr.po, it.po, ja.po, ko.po, pa.po, scim.pot, zh_CN.po, zh_TW.po (scim_1_4.[2,2,2,2,2,2,2,4,2,2]): Updated po files to add some new strings. 2006-02-23 04:03 James Su * scim.pc.in (scim_1_4.1), scim.pc.in (1.18): Change moduledir to @libdir@/scim-1.0/@SCIM_BINARY_VERSION@ 2006-02-22 04:03 Jens-Ulrik Petersen * ChangeLog, po/cs.po, po/de.po, po/fr.po, po/it.po, po/ja.po, po/ko.po, po/pa.po, po/scim.pot, po/zh_CN.po, po/zh_TW.po, src/scim_utility.cpp (scim_1_4.[3,1,1,1,1,1,1,1,3,1,1,2]): 2006-02-22 Jens Petersen * src/scim_utility.cpp (__languages): Name of pa is Punjabi. 2006-02-22 03:47 Jens-Ulrik Petersen * ChangeLog (1.68), po/cs.po (1.20), po/de.po (1.41), po/fr.po (1.33), po/it.po (1.23), po/ja.po (1.53), po/ko.po (1.43), po/pa.po (1.7), po/scim.pot (1.112), po/zh_CN.po (1.158), po/zh_TW.po (1.159), src/scim_utility.cpp (1.50): 2006-02-22 Jens Petersen * src/scim_utility.cpp (__languages): Name of pa is Punjabi. 2006-02-16 05:49 James Su * configure.ac, extras/panel/scim_panel_gtk.cpp, intl/localename.c, po/scim.pot, src/scim_utility.cpp (scim_1_4.[2,6,1,2,1]): Added some new language names. 2006-02-16 05:13 James Su * configs/config (1.44), docs/Makefile.am (1.7), extras/panel/scim_panel_gtk.cpp (1.123), extras/setup/scim_setup_helper.cpp (1.6), extras/setup/scim_setup_ui.cpp (1.53), intl/localename.c (1.3), modules/IMEngine/scim_rawcode_imengine.cpp (1.14), modules/SetupUI/scim_frontend_setup.cpp (1.7), modules/SetupUI/scim_imengine_setup.cpp (1.10), modules/SetupUI/scim_panel_gtk_setup.cpp (1.16), src/scim_utility.cpp (1.49), utils/scimkeyselection.cpp (1.8), utils/scimstringview.c (1.5), utils/scimtrayicon.c (1.2): Fixed some grammar errors. Added some new languages into scim_utility.cpp. 2006-02-06 06:59 LiuCougar * configure.ac (1.149): added option --without-doxygen to disable API doc generation (http://bugs.gentoo.org/show_bug.cgi?id=121295) 2006-01-18 05:44 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp (scim_1_4.6), scim_rawcode_imengine.cpp (1.13): Adjust max unicode length smartly according to the first inputted char, to enhance usability. 2006-01-13 01:27 James Su * extras/panel/scim_panel_gtk.cpp (scim_1_4.5): Move the page up/down buttons of horizontal lookup table back to right side. 2006-01-12 09:21 tag scim_1_4_4 2006-01-12 09:21 James Su * ChangeLog, scim.spec.in, po/scim.pot (scim_1_4.[2,1,1]): Ready to release 1.4.4 2006-01-12 07:22 James Su * extras/panel/: scim_panel_gtk.cpp (scim_1_4.4), scim_panel_gtk.cpp (1.122): Move horizontal page up/down buttons to the left of candidate list. 2006-01-12 06:59 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp, scim_rawcode_imengine.h (scim_1_4.[5,3]), scim_rawcode_imengine.cpp (1.12), scim_rawcode_imengine.h (1.8): Fix lookup table page up/down issue. 2006-01-12 06:12 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp (scim_1_4.4), scim_rawcode_imengine.cpp (1.11): Don't put the default locales string in po file. 2006-01-12 05:53 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp (scim_1_4.3), scim_rawcode_imengine.cpp (1.10): More fix. 2006-01-12 05:38 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp, scim_rawcode_imengine.h (scim_1_4.[2,2]), scim_rawcode_imengine.cpp (1.9), scim_rawcode_imengine.h (1.7): Make rawcode work correctly. 2006-01-11 09:54 James Su * ChangeLog, configure.ac, configs/config (scim_1_4.[1,1,1]): Ready to release 1.4.4 2006-01-11 08:43 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp, scim_rawcode_imengine.h (scim_1_4.[1,1]), scim_rawcode_imengine.cpp (1.8), scim_rawcode_imengine.h (1.6): Support switching among multiple encodings on the fly. 2006-01-11 03:11 James Su * extras/panel/: scim_panel_gtk.cpp (scim_1_4.3), scim_panel_gtk.cpp (1.121): Move page up/down buttons onto the top for vertical lookup table. 2006-01-09 14:32 James Su * src/scim_panel_agent.cpp (scim_1_4.1): Call transaction_start and transaction_end around all signals to fix some lock issues. 2006-01-09 14:16 James Su * src/scim_panel_agent.cpp (1.9): Call transaction_start and transaction_end around all signals to fix some lock issues. 2006-01-09 13:37 James Su * modules/Filter/scim_sctc_filter.cpp (scim_1_4.1): Use static encoding list instead of probing it dynamically. 2006-01-07 08:13 James Su * modules/Filter/scim_sctc_filter.cpp (1.8): Use static encoding list instead of probing it dynamically. 2006-01-01 14:07 tag scim_before_modulized_client_components 2006-01-01 14:07 James Su * src/: scim_imengine.cpp (1.16), scim_imengine.h (1.20): Pass IMEngineFactoryBase pointer instead, so that any IMEngineFactory can create DummyIMEngineInstance. 2005-12-31 08:57 James Su * extras/panel/: scim_panel_gtk.cpp (scim_1_4.2), scim_panel_gtk.cpp (1.120): Fixed a typo. 2005-12-30 08:50 James Su * extras/: gtk2_immodule/gtkimcontextscim.cpp, panel/scim_panel_gtk.cpp (scim_1_4.[1,1]): Two potential null pointer bugs were fixed. 2005-12-30 08:45 James Su * extras/: gtk2_immodule/gtkimcontextscim.cpp (1.171), panel/scim_panel_gtk.cpp (1.119): Two potential null pointer bugs were fixed. 2005-12-28 15:48 tag scim_1_4_3 2005-12-28 15:48 James Su * ChangeLog (1.67): Ready to release 1.4.3 2005-12-28 14:29 James Su * THANKS (1.8): Update THANKS file. 2005-12-18 16:05 James Su * ChangeLog (1.66): Ready to release 1.4.3 2005-12-18 10:20 James Su * po/: de.po (1.40), ko.po (1.42), zh_TW.po (1.158): Updated po files. 2005-12-16 13:59 James Su * po/de.po (1.39): de.po was updated. 2005-12-16 12:23 James Su * po/: cs.po (1.19), de.po (1.38), fr.po (1.32), it.po (1.22), ja.po (1.52), ko.po (1.41), pa.po (1.6), scim.pot (1.111), zh_CN.po (1.157): Update po files. 2005-12-16 12:13 James Su * po/zh_TW.po (1.157): Update zh_TW.po 2005-12-16 11:12 James Su * modules/Config/scim_socket_config.cpp (1.23), modules/Filter/Makefile.am (1.3), po/scim.pot (1.110), src/scim_backend.cpp (1.38), src/scim_filter_manager.cpp (1.4): A bug which cause scim-launcher won't exit was fixed. 2005-12-16 05:40 James Su * extras/panel/scim_panel_gtk.cpp (1.118): A bug in updating properties was fixed. 2005-12-13 07:59 James Su * po/: it.po (1.21), pa.po (1.5): Two more po files were updated. 2005-12-11 22:23 James Su * po/cs.po (1.18): cs.po was updated. 2005-12-11 15:02 James Su * po/: fr.po (1.31), zh_TW.po (1.156): fr.po and zh_TW.po were updated. 2005-12-11 03:16 James Su * po/ja.po (1.51): ja.po was updated. 2005-12-10 14:04 James Su * extras/panel/scim_panel_gtk.cpp (1.117), modules/SetupUI/scim_panel_gtk_setup.cpp (1.15), po/cs.po (1.17), po/de.po (1.37), po/fr.po (1.30), po/it.po (1.20), po/ja.po (1.50), po/ko.po (1.40), po/pa.po (1.4), po/scim.pot (1.109), po/zh_CN.po (1.156), po/zh_TW.po (1.155): Merge Hiroyuki Ikezoe's patch to add a toolbar never shown option. 2005-12-08 08:37 James Su * configure.ac (1.148), po/scim.pot (1.108): Bump to 1.4.3 2005-12-06 10:14 James Su * Makefile.am (1.22): Don't remove intltool-extract intltool-merge intltool-update when making clean. 2005-12-01 08:27 James Su * src/scim_socket.cpp (1.44): Fix scim_get_default_panel_socket_address to support inet socket address. 2005-11-24 06:21 James Su * configure.ac (1.147): Bump required gtk2 version to 2.4.0 2005-11-23 13:21 James Su * po/cs.po (1.16), po/de.po (1.36), po/fr.po (1.29), po/it.po (1.19), po/ja.po (1.49), po/ko.po (1.39), po/pa.po (1.3), po/scim.pot (1.107), po/zh_CN.po (1.155), po/zh_TW.po (1.154), utils/scimkeyselection.cpp (1.7): Don't accept empty Key Code in key selection dialog. 2005-10-30 04:19 James Su * ChangeLog (1.65), Makefile.am (1.21): Add --gmt option into cvs2cl.pl command line. 2005-10-25 03:27 James Su * configure.ac (1.146): Don't use LIBTOOL_EXPORT_OPTIONS, it will cause problem. 2005-10-06 18:02 LiuCougar * src/: scim_backend.h (1.26), scim_event.h (1.26), scim_filter_module.h (1.7), scim_frontend.h (1.42), scim_hotkey.h (1.5): corrected some API docs 2005-09-29 10:51 James Su * src/scim_global_config.cpp (1.7): Include cstdio to fix "implicit declaration of function snprintf" issue. 2005-09-25 12:01 James Su * ChangeLog (1.64), Makefile.am (1.20), cvs2cl.pl (1.1), developers (1.1), mkchlog (1.6): Use cvs2cl.pl (http://www.red-bean.com/cvs2cl/)instead of old mkchlog script. 2005-09-13 14:16 James Su * extras/gtk2_immodule/imscim.cpp (1.11): Prevent gtk from being choose SCIM immodule by default. 2005-08-25 14:29 James Su * modules/FrontEnd/IMdkit/: Makefile.am (1.5), Xi18nTr.h (1.2): Remove Xi18nTr.h as well. 2005-08-25 13:13 LiuCougar * modules/FrontEnd/IMdkit/: Makefile.am (1.4), i18nTr.c (1.2): remove useless file 2005-08-18 10:12 Mike FABIAN * po/ja.po (1.48): fix typo. 2005-08-16 07:48 tag scim_1_4_2 2005-08-16 07:48 James Su * ChangeLog (1.63): Updated ChangeLog. 2005-08-16 07:26 James Su * configure.ac (1.145), extras/gtk2_immodule/gtkimcontextscim.cpp (1.170), modules/FrontEnd/scim_x11_frontend.cpp (1.179), src/scim_compose_key.cpp (1.7), src/scim_compose_key.h (1.5): Only use ComposeKeyFactory as fallback in FrontEnds when ComposeKey input method is enabled. 2005-08-16 02:12 James Su * po/: cs.po (1.15), de.po (1.35), fr.po (1.28), it.po (1.18), ja.po (1.47), ko.po (1.38), pa.po (1.2), scim.pot (1.106), zh_CN.po (1.154), zh_TW.po (1.153): Updated po files. 2005-08-15 14:27 James Su * modules/IMEngine/scim_rawcode_imengine.cpp (1.7): * Enhanced RawCode IMEngine to support UCS-4. 2005-08-15 12:45 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.169), modules/FrontEnd/scim_x11_frontend.cpp (1.178), src/scim_iconv.cpp (1.18), src/scim_iconv.h (1.18), src/scim_imengine.h (1.19), src/scim_panel_agent.cpp (1.8): * Added IConvert::get_encoding () method. * Fixed a bug of focused ic handling in gtkimmodule, x11 FrontEnd and PanelAgent. 2005-08-15 06:33 James Su * modules/SetupUI/scim_imengine_setup.cpp (1.9): Always load all IMEngine modules, otherwise the disabled modules won't be displayed. 2005-08-10 06:26 tag scim_1_4_1 2005-08-10 06:26 James Su * ChangeLog (1.62): Updated ChangeLog. 2005-08-10 06:20 James Su * configure.ac (1.144), po/scim.pot (1.105): Bump to 1.4.1 2005-08-09 13:26 LiuCougar * AUTHORS (1.8), configure.ac (1.143), po/pa.po (1.1): added pa.po, thanks to Amanpreet Singh Alam 2005-08-05 16:12 James Su * src/scim_attribute.h (1.7): Added operator< for Attribute. 2005-08-05 01:54 James Su * src/: scim_debug.cpp (1.10), scim_debug.h (1.18): Fix potential crash bug when libscim and external modules use different debug compile option. 2005-08-02 08:48 James Su * future-plan.txt (1.1): Added future-plan.txt 2005-07-30 13:09 James Su * configure.ac (1.142), po/scim.pot (1.104): Fixed a typo in configure script. 2005-07-14 09:13 James Su * src/: scim_event.h (1.25), scim_keyboard_layout_data.h (1.3): Three new Keyboard Layouts (Icelandic, Lithuanian, Ukrainian) were added. 2005-07-13 08:54 tag scim_1_4_0 2005-07-13 08:54 James Su * TODO (1.14), src/scim_event.cpp (1.29): Return correct ascii code for some control keys. 2005-07-12 15:06 James Su * ChangeLog (1.61), scim.pc.in (1.17): Remove scimtabledir. 2005-07-12 14:30 James Su * docs/Makefile.am (1.6), docs/scim.cfg.in (1.13), po/Makefile.in.in (1.8), po/scim.pot (1.103): Fixed some path issue in build system 2005-07-12 03:10 James Su * docs/scim.cfg.in (1.12): Added Uses_SCIM_FILTER 2005-07-10 14:39 James Su * ChangeLog (1.60): Updated ChangeLog 2005-07-10 14:25 James Su * configure.ac (1.141): Bump version to 1.4.0 2005-07-10 13:45 James Su * TODO (1.13), extras/gtk2_immodule/Makefile.am (1.27), extras/panel/Makefile.am (1.17), extras/setup/Makefile.am (1.12), modules/Config/Makefile.am (1.18), modules/Filter/Makefile.am (1.2), modules/FrontEnd/Makefile.am (1.33), modules/IMEngine/Makefile.am (1.10), modules/SetupUI/Makefile.am (1.18), src/Makefile.am (1.55), tests/Makefile.am (1.15), utils/Makefile.am (1.11): Fixed build issue in separated directory. 2005-07-10 07:34 James Su * configure.ac (1.140), extras/gtk2_immodule/Makefile.am (1.26), modules/Config/Makefile.am (1.17), modules/IMEngine/Makefile.am (1.9), src/Makefile.am (1.54): disable ld version script by default. 2005-07-08 14:33 James Su * po/: cs.po (1.14), de.po (1.34), fr.po (1.27), it.po (1.17), ja.po (1.46), ko.po (1.37), scim.pot (1.102), zh_CN.po (1.153), zh_TW.po (1.152): Updated ko.po 2005-07-08 05:06 James Su * src/: scim_debug.cpp (1.9), scim_debug.h (1.17): Fixed a compilation warning when using gcc4. 2005-07-07 11:09 James Su * po/cs.po (1.13): Updated cs.po 2005-07-06 16:26 James Su * extras/gtk2_immodule/im-scim.version-script (1.2), src/libscim.version-script (1.2): Hide more symbols. 2005-07-06 14:28 James Su * po/zh_TW.po (1.151): Updated zh_TW.po 2005-07-06 13:11 James Su * po/ja.po (1.45): Updated ja.po 2005-07-06 09:38 James Su * po/fr.po (1.26): Updated fr.po 2005-07-06 04:47 tag scim_1_3_3 2005-07-06 04:47 James Su * configure.ac (1.139): Update version to 1.3.3 2005-07-06 04:25 James Su * ChangeLog (1.59), po/cs.po (1.12), po/de.po (1.33), po/fr.po (1.25), po/it.po (1.16), po/ja.po (1.44), po/ko.po (1.36), po/scim.pot (1.101), po/zh_CN.po (1.152), po/zh_TW.po (1.150): Ready to release 1.3.3 2005-07-06 03:57 James Su * configure.ac (1.138), modules/Config/scim_simple_config.cpp (1.35), modules/Config/scim_simple_config.h (1.22), modules/Config/scim_socket_config.cpp (1.22), modules/Config/scim_socket_config.h (1.11), modules/IMEngine/scim_socket_imengine.cpp (1.21), modules/IMEngine/scim_socket_imengine.h (1.13): Put some module classes into scim namespace to prevent being conflict with external classes. Bump version to 1.3.3 2005-07-05 16:13 James Su * configure.ac (1.137), extras/gtk2_immodule/Makefile.am (1.25), extras/gtk2_immodule/im-scim.version-script (1.1), modules/Config/Makefile.am (1.16), modules/Config/config.version-script (1.1), modules/IMEngine/Makefile.am (1.8), modules/IMEngine/imengine.version-script (1.1), src/Makefile.am (1.53), src/libscim.version-script (1.1), src/scim_chartraits.cpp (1.11): Use ld --version-script command to limit the exported symbols of libscim-1.0.so, im-scim.so, and all Config/IMEngine modules. It could workaround the incompatibility issue of libstdc++.so.5 and libstdc++.so.6 in some gtk apps. This hack is known to work with realplay. But acroread still doesn't work. 2005-07-03 08:36 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.168), modules/Config/scim_simple_config.cpp (1.34), modules/FrontEnd/scim_socket_frontend.cpp (1.37), src/scim_config_agent.cpp (1.10): Let string value could be empty. 2005-07-01 00:51 James Su * po/de.po (1.32): Updated de.po 2005-06-30 10:25 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.167), modules/FrontEnd/scim_x11_frontend.cpp (1.177), po/ja.po (1.43), po/scim.pot (1.100), src/scim_panel_agent.cpp (1.7): Focus the input context, no matter whether it's already focused or not, during inputing or focusing in. Update ja.po 2005-06-29 10:56 James Su * ChangeLog (1.58): update ChangeLog 2005-06-29 10:48 James Su * configure.ac (1.136), extras/gtk2_immodule/gtkimcontextscim.cpp (1.166), po/scim.pot (1.99), po/zh_CN.po (1.151): Ready to release 1.3.2 2005-06-29 10:29 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.176): Support On/Off keys. 2005-06-29 08:19 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.165), modules/SetupUI/scim_frontend_setup.cpp (1.6): Added a hack to clean-up the immodule when exiting, no matter whether im_module_exit () will be called. Fix a small issue in frontend setup module. 2005-06-28 13:36 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.164): Destroy all instance before exiting. 2005-06-27 15:31 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.163), extras/gtk2_immodule/gtkimcontextscim.h (1.12), extras/panel/scim_panel_gtk.cpp (1.116), modules/FrontEnd/scim_x11_frontend.cpp (1.175), po/cs.po (1.11), po/de.po (1.31), po/fr.po (1.24), po/it.po (1.15), po/ja.po (1.42), po/ko.po (1.35), po/scim.pot (1.98), po/zh_CN.po (1.150), po/zh_TW.po (1.149): Implement "Shared Input Method" feature in gtkimmodule. Optimized gtk panel to reduce glitters. 2005-06-26 16:35 James Su * configs/config (1.43), configs/global (1.2), extras/gtk2_immodule/gtkimcontextscim.cpp (1.162), extras/panel/scim_panel_gtk.cpp (1.115), modules/FrontEnd/scim_x11_frontend.cpp (1.174), modules/FrontEnd/scim_x11_frontend.h (1.56), modules/FrontEnd/scim_x11_ic.cpp (1.19), modules/FrontEnd/scim_x11_ic.h (1.10), modules/SetupUI/scim_frontend_setup.cpp (1.5), po/cs.po (1.10), po/de.po (1.30), po/fr.po (1.23), po/it.po (1.14), po/ja.po (1.41), po/ko.po (1.34), po/scim.pot (1.97), po/zh_CN.po (1.149), po/zh_TW.po (1.148), src/scim_backend.cpp (1.37), src/scim_backend.h (1.25), src/scim_config_agent.cpp (1.9), src/scim_config_path.h (1.35), src/scim_debug.cpp (1.8), src/scim_debug.h (1.16), src/scim_frontend.cpp (1.44), src/scim_frontend.h (1.41), src/scim_panel_agent.cpp (1.6), src/scim_panel_client.cpp (1.6), src/scim_panel_client.h (1.4), src/scim_trans_commands.h (1.9): Implement "shared input method" feature in x11 frontend. added register_input_context/remove_input_context methods in PanelClient. various bugfixes. 2005-06-25 23:54 LiuCougar * po/ja.po (1.40): updated ja 2005-06-25 18:15 LiuCougar * po/de.po (1.29): updated de 2005-06-23 05:12 James Su * configs/config (1.42), extras/setup/scim_setup_ui.cpp (1.52), po/scim.pot (1.95): Changed some default hotkeys to avoid conflict. Set windows icon in Setup UI. 2005-06-22 15:37 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.161): Only remove snooper if it's installed when finalizing gtkimmodule. 2005-06-22 15:33 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.160): Finalize panel connection correctly when finalizing gtkimmodule. 2005-06-18 13:19 tag scim_1_3_1 2005-06-18 13:19 James Su * src/scim_hotkey.cpp (1.8): Change the default FrontEnd KeyEvents. 2005-06-17 17:13 James Su * ChangeLog (1.57), po/scim.pot (1.94): Updated ChangeLog 2005-06-15 00:19 James Su * configs/config (1.41), extras/gtk2_immodule/gtkimcontextscim.cpp (1.159), extras/panel/scim_panel_gtk.cpp (1.114), modules/FrontEnd/scim_x11_frontend.cpp (1.172), po/scim.pot (1.92), src/scim.cpp (1.51), src/scim_launcher.cpp (1.9): Output all information to stdcerr. 2005-06-12 14:48 James Su * extras/panel/scim_panel_gtk.cpp (1.113): Fixed the input window and lookup table window overlapping issue. 2005-06-11 14:50 James Su * src/: scim_panel_agent.cpp (1.5), scim_panel_agent.h (1.2): Addes transaction_start/end signals into PanelAgent. 2005-06-05 14:12 James Su * po/: fr.po (1.20), it.po (1.11): Updated fr.po and it.po 2005-06-02 14:36 James Su * po/: cs.po (1.7), de.po (1.26), fr.po (1.19), it.po (1.10), ja.po (1.37), ko.po (1.31), scim.pot (1.91), zh_CN.po (1.146), zh_TW.po (1.145): Updated zh_TW.po 2005-05-31 13:49 James Su * configs/config (1.40), modules/FrontEnd/scim_x11_frontend.cpp (1.171), src/scim_event.cpp (1.28): Added /FrontEnd/X11/OnTheSpot back. 2005-05-30 14:36 James Su * po/ja.po (1.36): Updated ja.po 2005-05-29 11:35 James Su * po/: cs.po (1.6), de.po (1.25), fr.po (1.18), it.po (1.9), ja.po (1.35), ko.po (1.30), zh_CN.po (1.145), zh_TW.po (1.144): ja.po was updated. 2005-05-28 14:10 tag scim_1_3_0 2005-05-28 14:10 James Su * ChangeLog (1.56), scim.spec.in (1.75), po/scim.pot (1.90), po/zh_CN.po (1.144): Ready to release 1.3.0 2005-05-28 13:54 James Su * extras/setup/scim_setup_ui.cpp (1.51), modules/Config/scim_simple_config.cpp (1.33), modules/Config/scim_simple_config.h (1.21), modules/Filter/scim_sctc_filter.cpp (1.7), modules/SetupUI/scim_imengine_setup.cpp (1.8), po/cs.po (1.5), po/de.po (1.24), po/fr.po (1.17), po/it.po (1.8), po/ja.po (1.34), po/ko.po (1.29), po/scim.pot (1.89), po/zh_CN.po (1.143), po/zh_TW.po (1.143), src/scim_event.h (1.24), src/scim_filter.h (1.5), src/scim_filter_manager.cpp (1.3), src/scim_filter_manager.h (1.3): * Implemented Filter configuration dialog in IMEngine setup module. * Fixed erasing config key bug in simple config module. * Fixed a small bug in scim-setup ui code. * Added some useful methods into FilterManager. 2005-05-26 02:27 LiuCougar * extras/gtk2_immodule/gtkimcontextscim.cpp (1.158): typo 2005-05-26 02:05 James Su * extras/gtk2_immodule/: gtkimcontextscim.cpp (scim_1_2.4), gtkimcontextscim.cpp (1.157): Only update preedit string/caret when necessary. 2005-05-25 04:15 tag scim_1_2_3 2005-05-25 04:15 James Su * ChangeLog (scim_1_2.2): Ready to release 1.2.3 2005-05-25 04:05 James Su * configure.ac (scim_1_2.2): Bump to 1.2.3 2005-05-25 03:55 James Su * modules/IMEngine/scim_socket_imengine.cpp, src/scim_transaction.cpp (scim_1_2.[2,1]): Fixed the recursive calling issue of SocketIMEngine. 2005-05-25 03:08 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.156): Fixed preedit caret issue when turning off OnTheSpot mode. 2005-05-24 18:20 LiuCougar * modules/Filter/scim_sctc_filter.cpp (1.5): updated to the latest filter module API 2005-05-24 15:12 James Su * scim.spec.in (1.74), configs/config (1.39), extras/gtk2_immodule/gtkimcontextscim.cpp (1.155), modules/FrontEnd/scim_x11_frontend.cpp (1.170), modules/SetupUI/Makefile.am (1.17), modules/SetupUI/scim_frontend_setup.cpp (1.4), modules/SetupUI/scim_imengine_setup.cpp (1.7), modules/SetupUI/scim_x11_frontend_setup.cpp (1.16), po/POTFILES.in (1.20), src/scim_config_path.h (1.34), src/scim_imengine.h (1.18): * Added /FrontEnd/OnTheSpot for all FrontEnds. * /FrontEnd/X11/OnTheSpot is now obsoleted. * Remove X11 FrontEnd Setup module, it's now useless. 2005-05-24 12:22 James Su * extras/panel/scim_panel_gtk.cpp (1.112), modules/Filter/scim_sctc_filter.cpp (1.4), modules/IMEngine/scim_socket_imengine.cpp (1.20), modules/IMEngine/scim_socket_imengine.h (1.12), src/scim_backend.cpp (1.36), src/scim_config_path.h (1.33), src/scim_filter_manager.cpp (1.2), src/scim_filter_manager.h (1.2), src/scim_filter_module.cpp (1.5), src/scim_filter_module.h (1.6), src/scim_helper.cpp (1.13), src/scim_helper.h (1.16), src/scim_module.cpp (1.26), src/scim_panel_agent.cpp (1.4), src/scim_transaction.cpp (1.13), src/scim_transaction.h (1.10): Various bugfix and update. 2005-05-23 21:36 James Su * modules/IMEngine/scim_socket_imengine.cpp, po/scim.pot, src/scim_module.cpp (scim_1_2.[1,2,1]): Fixed two warnings. 2005-05-23 01:32 James Su * extras/panel/scim_panel_gtk.cpp, src/scim_transaction.h (scim_1_2.[1,1]): Two small bugfixes. 2005-05-17 14:56 James Su * configs/config (1.38), extras/gtk2_immodule/gtkimcontextscim.cpp (1.154), modules/Filter/scim_sctc_filter.cpp (1.3), modules/Filter/scim_sctc_filter.h (1.2), modules/FrontEnd/scim_x11_frontend.cpp (1.169): * Fixed Multi-level properties triggering issue. * Fixed SCTC Filter module to handle encoding correctly. 2005-05-17 08:53 James Su * src/: scim_filter_manager.cpp (1.1), scim_filter_manager.h (1.1): Added missing scim_filter_manager.h scim_filter_manager.cpp files. 2005-05-17 06:45 James Su * modules/Filter/scim_sctc_filter.cpp (1.2), src/Makefile.am (1.52), src/scim.h (1.38), src/scim_backend.cpp (1.35), src/scim_filter_module.cpp (1.4), src/scim_filter_module.h (1.5), src/scim_helper_manager.h (1.3): added class FilterManager to load and manage all Filter modules. 2005-05-16 05:22 James Su * configure.ac (1.134), scim.spec.in (1.73), data/icons/Makefile.am (1.15), data/icons/sctc-sc-to-tc.png (1.1), data/icons/sctc-tc-to-sc.png (1.1), data/icons/sctc.png (1.1), modules/Makefile.am (1.5), modules/Filter/.cvsignore (1.1), modules/Filter/Makefile.am (1.1), modules/Filter/scim_sctc_filter.cpp (1.1), modules/Filter/scim_sctc_filter.h (1.1), modules/Filter/scim_sctc_filter_data.h (1.1): * Added Simplified/Traditional Chinese conversion Filter. 2005-05-16 01:28 James Su * src/scim_helper_launcher.cpp (scim_1_2.1): * Make scim-helper-launcher uses the default config module set in global config file. 2005-05-16 01:25 James Su * src/: scim_filter.cpp (1.4), scim_filter.h (1.4), scim_filter_module.h (1.4), scim_helper_launcher.cpp (1.6): * Small update for Filter interface. * Make scim-helper-launcher uses the default config module set in global config file. 2005-05-16 01:12 LiuCougar * configs/config (1.37): scim-tables is in separate package now, so the default config file should not contain its default settings 2005-05-14 05:21 James Su * extras/panel/scim_panel_gtk.cpp (1.111): Revert the LookupTable window size limitation. 2005-05-13 17:03 LiuCougar * po/ja.po (1.33): updated ja 2005-05-13 04:21 James Su * extras/panel/scim_panel_gtk.cpp (1.110), src/scim_filter.h (1.3), src/scim_filter_module.cpp (1.3), src/scim_filter_module.h (1.3), src/scim_lookup_table.cpp (1.32), src/scim_lookup_table.h (1.32), src/scim_panel_common.h (1.4), src/scim_transaction.cpp (1.12): * Added is_page_size_fixed() and fix_page_size(bool) methods into LookupTable class to tell FrontEnd whether it's allowed to reduce the page size. * Removed the limitation of input window size of gtk panel. * Changed FilterModule interface a little. 2005-05-11 09:52 James Su * .cvsignore (1.5), Makefile.am (1.19), configure.ac (1.133), scim-x11utils.pc.in (1.1), scim.spec.in (1.72), configs/config (1.36), extras/gtk2_immodule/Makefile.am (1.24), extras/gtk2_immodule/gtkimcontextscim.cpp (1.153), modules/FrontEnd/Makefile.am (1.32), modules/FrontEnd/scim_x11_frontend.cpp (1.168), modules/FrontEnd/scim_x11_frontend.h (1.55), po/POTFILES.in (1.19), po/cs.po (1.4), po/de.po (1.23), po/fr.po (1.16), po/it.po (1.7), po/ja.po (1.32), po/ko.po (1.28), po/scim.pot (1.88), po/zh_CN.po (1.142), po/zh_TW.po (1.142), src/scim_hotkey.cpp (1.7), tests/scim_test_imengine.cpp (1.6), utils/Makefile.am (1.10), utils/scim_x11_utils.cpp (1.1), utils/scim_x11_utils.h (1.1), utils/scimkeyselection.cpp (1.6): * Added new utility library scim-x11utils-1.0.la to provide X11 related utilities, such as XKeyEvent <-> scim::KeyEvent conversion, etc. * Better Modifiers Mapping handling. 2005-05-09 13:31 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.152), modules/FrontEnd/scim_x11_frontend.cpp (1.167), utils/scimkeyselection.cpp (1.5): Match alt before meta in find_modifier_bits() 2005-05-07 10:15 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.166): Don't exit event if it's impossible to restart panel. 2005-05-07 09:42 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.151): Fixed the Panel restart issue. 2005-05-07 08:23 James Su * modules/FrontEnd/scim_x11_frontend.cpp (scim_1_2.1): Don't match language when switching to next/previous factory. 2005-05-06 17:17 LiuCougar * extras/gtk2_immodule/gtkimcontextscim.cpp (1.150): remove input sources from main loop when panel exits: fixed CPU load issue 2005-05-06 15:57 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.149), modules/FrontEnd/scim_x11_frontend.cpp (1.165), src/scim_panel_client.cpp (1.5): * Only match encoding when switching to next/previous factory. (X11 FrontEnd) 2005-05-06 03:49 James Su * src/: scim_helper.cpp (1.12), scim_helper.h (1.15), scim_panel_client.cpp (1.4), scim_panel_client.h (1.3): Added is_connected() method in PanelClient and HelperAgent. 2005-05-05 20:24 LiuCougar * extras/gtk2_immodule/gtkimcontextscim.cpp (1.148): cleanup 2005-05-04 13:35 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.147): Don't forward hotkeys to client. 2005-05-04 13:28 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.146): Turn off ic when selection English/Keyboard in factory menu. 2005-05-04 13:22 James Su * configure.ac (1.132), configs/config (1.35), extras/gtk2_immodule/gtkimcontextscim.cpp (1.145), modules/FrontEnd/scim_x11_frontend.cpp (1.164), modules/SetupUI/scim_imengine_setup.cpp (1.6), src/scim_hotkey.cpp (1.6), src/scim_panel_client.cpp (1.3), utils/scimkeyselection.cpp (1.4), utils/scimkeyselection.h (1.4): Fixed many bugs in gtkimmodule, X11 FrontEnd and PanelClient. Handle meta, super, hyper modifier keys in scimkeyselection. 2005-05-03 03:15 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.144): Only update preedit string when necessary. 2005-05-02 15:18 James Su * TODO (1.12), extras/gtk2_immodule/gtkimcontextscim.cpp (1.143), extras/gtk2_immodule/gtkimcontextscim.h (1.11), modules/FrontEnd/scim_x11_frontend.cpp (1.163), modules/FrontEnd/scim_x11_frontend.h (1.54), po/POTFILES.in (1.18), po/cs.po (1.3), po/de.po (1.22), po/fr.po (1.15), po/it.po (1.6), po/ja.po (1.31), po/ko.po (1.27), po/zh_CN.po (1.141), po/zh_TW.po (1.141), src/scim_launcher.cpp (1.8), src/scim_panel_common.h (1.3), src/scim_transaction.cpp (1.11), src/scim_transaction.h (1.9): Rewrite X11 FrontEnd and gtkimmodule using PanelClient and FrontEndHotkeyMatcher. 2005-04-30 09:20 James Su * modules/SetupUI/scim_imengine_setup.cpp (1.5): Rename IMEngineHotkeyMatcher::get_hotkeys() to get_all_hotkeys(). 2005-04-30 08:48 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.162), scim_x11_frontend.h (1.53), scim_x11_ic.cpp (1.18), scim_x11_ic.h (1.9): Updated X11FrontEnd to use PanelClient and FrontEndHotkeyMatcher. 2005-04-30 08:28 James Su * src/: scim_config_path.h (1.32), scim_frontend.cpp (1.43), scim_frontend.h (1.40), scim_hotkey.cpp (1.5), scim_hotkey.h (1.4), scim_panel_client.cpp (1.2), scim_panel_common.h (1.2): * Added FrontEndHotkeyMatcher * Added ON and OFF Hotkeys for FrontEnd. * Validate encoding in FrontEndBase::validate_factory(). * ... 2005-04-30 01:45 LiuCougar * src/scim_utility.cpp (1.48): fixed: scim freeze after uninstall skim if skim was setup as the default panel 2005-04-26 16:05 James Su * ChangeLog, po/scim.pot (scim_1_2.[1,1]): Updated ChangeLog 2005-04-25 18:07 tag scim_1_2_2 2005-04-25 18:07 James Su * configure.ac (scim_1_2.1): Bump to 1.2.2 2005-04-25 16:31 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_2.3): Fixed the looping issue of forwarding KeyEvent. 2005-04-24 06:49 James Su * src/: Makefile.am (1.51), scim_helper.cpp (1.11), scim_panel_agent.cpp (1.3), scim_panel_client.cpp (1.1), scim_panel_client.h (1.2): Added scim_panel_client.cpp Modified COMMIT_STRING command in Helper->PanelAgent->FrontEnd protocol to use WideString instead of String. 2005-04-15 10:16 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.142), modules/FrontEnd/scim_x11_frontend.cpp (1.161): Call update_client_capabilities(). 2005-04-14 17:01 James Su * TODO (1.11), extras/gtk2_immodule/gtkimcontextscim.cpp (1.141), modules/FrontEnd/scim_socket_frontend.cpp (1.35), modules/FrontEnd/scim_socket_frontend.h (1.26), modules/IMEngine/scim_socket_imengine.cpp (1.19), modules/IMEngine/scim_socket_imengine.h (1.11), src/Makefile.am (1.50), src/scim_frontend.cpp (1.42), src/scim_frontend.h (1.39), src/scim_imengine.h (1.17), src/scim_panel_agent.cpp (1.2), src/scim_trans_commands.h (1.8): Added update_client_capabilities () into IMEngineInstance interface. 2005-04-13 15:06 James Su * extras/panel/scim_panel_gtk.cpp (1.109): Use macro Uses_SCIM_PANEL_AGENT instead of Uses_SCIM_PANEL. 2005-04-13 15:02 James Su * src/: scim.h (1.37), scim_panel.cpp (1.16), scim_panel.h (1.23), scim_panel_agent.cpp (1.1), scim_panel_agent.h (1.1), scim_panel_client.h (1.1), scim_panel_common.h (1.1): Rename scim_panel.* to scim_panel_agent.*. Added scim_panel_client.h 2005-04-09 15:38 James Su * TODO (1.10), extras/gtk2_immodule/gtkimcontextscim.cpp (1.140), extras/panel/scim_panel_gtk.cpp (1.108), modules/Config/scim_simple_config.cpp (1.32), modules/Config/scim_simple_config.h (1.20), modules/Config/scim_socket_config.cpp (1.21), modules/Config/scim_socket_config.h (1.10), src/scim_config_agent.cpp (1.8), src/scim_config_base.cpp (1.19), src/scim_config_base.h (1.22), src/scim_config_module.cpp (1.15), src/scim_config_module.h (1.15), src/scim_helper.cpp (1.10), src/scim_helper.h (1.14), src/scim_helper_launcher.cpp (1.5), src/scim_launcher.cpp (1.7), src/scim_panel.h (1.22), src/scim_utility.cpp (1.47), src/scim_utility.h (1.36): Added get_name() into ConfigBase class. Removed app name parameter of ConfigBase class. Removed get_app_name() from ConfigBase class. 2005-04-08 15:24 James Su * src/: scim_filter.cpp (1.3), scim_filter.h (1.2), scim_filter_module.cpp (1.2), scim_filter_module.h (1.2), scim_imengine.cpp (1.15), scim_imengine.h (1.16): Added update_client_capabilities() method into IMEngineInstanceBase class. One Filter Module could provide multiple Filters. 2005-04-06 07:40 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_2.2): unref client window when finalize. 2005-04-05 08:04 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.139), modules/FrontEnd/scim_x11_frontend.cpp (1.160), modules/FrontEnd/scim_x11_frontend.h (1.52), src/scim_config_path.h (1.31), src/scim_event.h (1.23), src/scim_keyevent_data.h (1.2), src/scim_module.cpp (1.25): Fixed Modifier Keys issue. Removed Mod1-Mod5 and ScrollLock, added Meta,Super,Hyper. X11 FrontEnd and gtkimmodule will set correct Alt,Meta,Super,Hyper and NumLock state according to X11 ModifierMapping. 2005-04-05 01:07 LiuCougar * modules/IMEngine/Makefile.am (1.7): deleted remaining stuffs of removed table IMEngine 2005-04-02 15:31 James Su * src/: Makefile.am (1.49), scim.h (1.36), scim_filter.cpp (1.1), scim_filter.h (1.1), scim_filter_imengine.cpp (1.2), scim_filter_imengine.h (1.4), scim_filter_imengine_module.h (1.2), scim_filter_module.cpp (1.1), scim_filter_module.h (1.1), scim_imengine.cpp (1.14), scim_imengine.h (1.15): Rename FilterIMEngine to Filter. 2005-04-02 15:28 James Su * po/zh_TW.po (1.140): Updated zh_TW.po 2005-04-01 00:50 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_2.1): Fixed nested transaction sending issue in gtkimmodule. 2005-04-01 00:24 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.138), modules/FrontEnd/scim_x11_frontend.cpp (1.159), modules/FrontEnd/scim_x11_frontend.h (1.51), modules/FrontEnd/IMdkit/i18nClbk.c (1.2), modules/SetupUI/scim_frontend_setup.cpp (1.3), src/scim_panel.cpp (1.15): Fixed nested transaction sending issue in gtkimmodule. 2005-03-31 14:25 James Su * src/scim_filter_imengine.cpp (1.1): Added missing scim_filter_imengine.cpp :-) 2005-03-31 14:24 James Su * src/: Makefile.am (1.48), scim.h (1.35), scim_filter_imengine.h (1.3), scim_imengine.cpp (1.13): Finished scim_filter_imengine.cpp 2005-03-30 14:47 James Su * src/: scim_imengine.cpp (1.12), scim_imengine.h (1.14): Remove set_encoding() method. 2005-03-30 11:52 James Su * src/: scim_filter_imengine.h (1.2), scim_filter_imengine_module.h (1.1): Added scim_filter_imengine_module.h 2005-03-30 10:32 James Su * src/scim_filter_imengine.h (1.1): Added scim_filter_imengine.h 2005-03-24 14:40 James Su * modules/IMEngine/scim_socket_imengine.cpp (1.18): Fixed a compile warning. 2005-03-21 05:48 James Su * tests/Makefile.am (1.14): Added missing scim_test_imengine.h into Makefile.am 2005-03-16 15:33 James Su * modules/IMEngine/scim_rawcode_imengine.cpp (1.6), modules/SetupUI/scim_frontend_setup.cpp (1.2), po/POTFILES.in (1.17), po/cs.po (1.2), po/de.po (1.21), po/fr.po (1.14), po/it.po (1.5), po/ja.po (1.30), po/ko.po (1.26), po/scim.pot (1.87), po/zh_CN.po (1.140), po/zh_TW.po (1.139), src/scim_keyboard_layout_data.h (1.2), src/scim_utility.cpp (1.46): Updated some strings. 2005-03-16 05:13 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.137), extras/setup/scim_setup_ui.cpp (1.50), modules/FrontEnd/scim_x11_frontend.cpp (1.158), modules/FrontEnd/scim_x11_frontend.h (1.50), modules/SetupUI/Makefile.am (1.16), modules/SetupUI/scim_frontend_hotkeys_setup.cpp (1.3), modules/SetupUI/scim_frontend_setup.cpp (1.1), src/Makefile.am (1.47), src/scim_config_path.h (1.30), src/scim_event.cpp (1.27), src/scim_event.h (1.22), src/scim_keyboard_layout_data.h (1.1), src/scim_keyevent_data.h (1.1), tests/scim_test_imengine.cpp (1.5): Added Keyboard Layout mapping functions. 2005-03-11 16:02 tag scim_1_2_1 2005-03-11 16:02 James Su * ChangeLog (1.55), README (1.13): Update ChangeLog and README. 2005-03-11 14:35 James Su * configure.ac (1.130): Bump version to 1.2.1 2005-03-11 04:31 James Su * configure.ac (1.129), po/cs.po (1.1): Added cs.po 2005-03-08 23:52 James Su * intl/libgnuintl.h.in (1.1), intl/localcharset.h (1.1), intl/log.c (1.1), intl/printf-args.c (1.1), intl/printf-args.h (1.1), intl/printf-parse.c (1.1), intl/printf-parse.h (1.1), intl/printf.c (1.1), intl/relocatable.c (1.1), intl/relocatable.h (1.1), intl/vasnprintf.c (1.1), intl/vasnprintf.h (1.1), intl/vasnwprintf.h (1.1), intl/wprintf-parse.h (1.1), intl/xsize.h (1.1), m4/intmax.m4 (1.1), m4/longdouble.m4 (1.1), m4/longlong.m4 (1.1), m4/nls.m4 (1.1), m4/po.m4 (1.1), m4/printf-posix.m4 (1.1), m4/signed.m4 (1.1), m4/size_max.m4 (1.1), m4/wchar_t.m4 (1.1), m4/wint_t.m4 (1.1), m4/xsize.m4 (1.1), po/scim.pot (1.86), src/scim_event.cpp (1.26): Added missing files. 2005-03-08 23:50 James Su * intl/: gettext.h (1.2), libgettext.h (1.2), libgnuintl.h (1.3): Rmoved gettext.h libgettext.h libgnuintl.h. 2005-03-07 14:58 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.136): Fixed KeyEvent forward issue. 2005-03-07 05:40 James Su * m4/Makefile.am (1.4): Added intltool.m4 to Makefile.am 2005-03-07 04:25 James Su * ABOUT-NLS (1.3), bootstrap (1.7), config.rpath (1.2), configure.ac (1.128), intltool-extract.in (1.2), intltool-merge.in (1.2), intltool-update.in (1.2), mkinstalldirs (1.2), intl/ChangeLog (1.3), intl/Makefile.in (1.3), intl/VERSION (1.3), intl/bindtextdom.c (1.3), intl/config.charset (1.3), intl/dcgettext.c (1.3), intl/dcigettext.c (1.3), intl/dcngettext.c (1.3), intl/dgettext.c (1.3), intl/dngettext.c (1.3), intl/eval-plural.h (1.2), intl/explodename.c (1.2), intl/finddomain.c (1.2), intl/gettext.c (1.3), intl/gettextP.h (1.3), intl/gmo.h (1.2), intl/hash-string.h (1.3), intl/intl-compat.c (1.3), intl/l10nflist.c (1.3), intl/loadinfo.h (1.3), intl/loadmsgcat.c (1.3), intl/localcharset.c (1.3), intl/locale.alias (1.2), intl/localealias.c (1.3), intl/localename.c (1.2), intl/ngettext.c (1.3), intl/plural-exp.c (1.2), intl/plural-exp.h (1.2), intl/plural.c (1.3), intl/plural.y (1.3), intl/textdomain.c (1.3), m4/ChangeLog (1.2), m4/Makefile.am (1.3), m4/gettext.m4 (1.2), m4/intltool.m4 (1.1), m4/inttypes_h.m4 (1.2), m4/lib-ld.m4 (1.2), m4/lib-link.m4 (1.2), m4/lib-prefix.m4 (1.2), m4/progtest.m4 (1.2), m4/stdint_h.m4 (1.2), m4/uintmax_t.m4 (1.2), m4/ulonglong.m4 (1.2), po/ChangeLog (1.3), po/Makefile.in.in (1.7), po/Makevars (1.2), po/Rules-quot (1.2), po/de.po (1.20), po/fr.po (1.13), po/it.po (1.4), po/ko.po (1.25), po/scim.pot (1.85), po/zh_CN.po (1.139), po/zh_TW.po (1.138): Upgrade gettext and intltool. 2005-03-04 10:12 James Su * src/scim_utility.cpp (1.45): Fixed scim_get_current_language (). 2005-03-03 13:40 James Su * src/: scim_utility.cpp (1.44), scim_utility.h (1.35): Fix scim_get_locale_language () to return correct result when there is a '@' in locale string. Add scim_get_current_language () to return the current system language directly. 2005-03-02 01:54 LiuCougar * po/ja.po (1.29): updated ja translation 2005-02-27 14:47 tag scim_1_2_0 2005-02-27 14:47 James Su * ChangeLog (1.54), po/de.po (1.19), po/fr.po (1.12), po/it.po (1.3), po/ja.po (1.28), po/ko.po (1.24), po/scim.pot (1.84), po/zh_CN.po (1.138), po/zh_TW.po (1.137): Updated ChangeLog. 2005-02-23 14:26 James Su * TODO (1.9), configure.ac (1.127), scim.spec.in (1.71), extras/panel/scim_panel_gtk.cpp (1.107), modules/SetupUI/Makefile.am (1.15), modules/SetupUI/scim_imengine_setup.cpp (1.4), po/zh_CN.po (1.137): Bump to 1.2.0. Rename SetupUI/imengine-setup.so to aaa-imengine-setup.so in order to let it always on top of the list. 2005-02-22 08:04 James Su * po/: de.po (1.18), fr.po (1.11), it.po (1.2), ja.po (1.27), ko.po (1.23), scim.pot (1.83), zh_CN.po (1.136), zh_TW.po (1.136): Updated fr.po 2005-02-21 12:34 James Su * src/: scim_config_agent.cpp (1.7), scim_helper_launcher.cpp (1.4): Added --reload and --display options into scim-config-agent to force scim reloading the configurations. 2005-02-02 15:25 tag scim_1_1_3 2005-02-02 15:25 James Su * configure.ac (1.126), tests/scim_test_imengine.cpp (1.4), tests/scim_test_imengine.h (1.2): Prepare for 1.1.3 2005-02-01 14:55 James Su * po/zh_TW.po (1.135): Updated zh_TW.po, thanks Jim Huang. 2005-01-30 13:27 James Su * po/it.po (1.1): Added it.po 2005-01-30 13:24 James Su * AUTHORS (1.7), configure.ac (1.125), extras/gtk2_immodule/gtkimcontextscim.cpp (1.135), modules/FrontEnd/scim_socket_frontend.cpp (1.34), modules/FrontEnd/scim_x11_frontend.cpp (1.157), modules/FrontEnd/scim_x11_frontend.h (1.49), po/de.po (1.17), po/fr.po (1.10), po/ja.po (1.26), po/ko.po (1.22), po/scim.pot (1.82), po/zh_CN.po (1.135), po/zh_TW.po (1.134), src/scim_backend.cpp (1.34), src/scim_backend.h (1.24), src/scim_event.cpp (1.25), src/scim_event.h (1.21), src/scim_frontend.cpp (1.41), src/scim_frontend.h (1.38), src/scim_helper_manager_server.cpp (1.6), src/scim_hotkey.cpp (1.4), src/scim_imengine.cpp (1.11), src/scim_imengine.h (1.13), src/scim_signals.h (1.12), src/scim_transaction.cpp (1.10), utils/scimkeyselection.cpp (1.3): Refactory BackEnd and FrontEnd. Add entry for keyboard layout in KeyEvent. 2005-01-25 15:12 James Su * extras/panel/scim_panel_gtk.cpp (1.106), src/scim_panel.cpp (1.14), src/scim_panel.h (1.21), src/scim_socket.cpp (1.43), src/scim_socket.h (1.25): More fix for PanelAgent. initialize () and valid () were added. 2005-01-25 13:49 James Su * extras/panel/scim_panel_gtk.cpp (1.105): exit when PanelAgent::run returns false. 2005-01-25 13:47 James Su * src/: scim_panel.h (1.20), scim_panel.cpp (1.13): Don't throw exception in run (), instead of return true or false. 2005-01-15 11:58 tag scim_1_1_2 2005-01-15 11:58 James Su * po/: de.po (1.16), fr.po (1.9), ja.po (1.25), ko.po (1.21), scim.pot (1.81), zh_CN.po (1.134), zh_TW.po (1.133): Updated ja.po 2005-01-15 11:55 James Su * ChangeLog (1.53): Updated ChangeLog 2005-01-15 11:33 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.134), modules/FrontEnd/scim_x11_frontend.cpp (1.156), src/scim_helper.cpp (1.9), src/scim_helper.h (1.13), src/scim_panel.cpp (1.12), src/scim_socket.cpp (1.42), src/scim_trans_commands.h (1.7), tests/scim_test_helper.cpp (1.3), tests/scim_test_imengine.cpp (1.3): Helper APIs finally work. 2005-01-14 16:09 James Su * configure.ac (1.124), extras/gtk2_immodule/gtkimcontextscim.cpp (1.133), modules/FrontEnd/scim_socket_frontend.cpp (1.33), modules/FrontEnd/scim_x11_frontend.cpp (1.155), modules/IMEngine/scim_socket_imengine.cpp (1.17), src/scim_panel.cpp (1.11), tests/Makefile.am (1.13), tests/scim_test_helper.cpp (1.2), tests/scim_test_imengine.cpp (1.2): Helper APIs are almost workable. 2005-01-14 04:57 James Su * modules/IMEngine/scim_socket_imengine.cpp (1.16), tests/Makefile.am (1.12), tests/scim_test_helper.cpp (1.1), tests/scim_test_imengine.cpp (1.1), tests/scim_test_imengine.h (1.1): Fixed a bug in SocketIMEngine which prevents from sending helper event correctly. Addes test-imengine and test-helper modules to test Helper and surrounding APIs. 2005-01-13 14:53 James Su * configure.ac (1.123), extras/gtk2_immodule/gtkimcontextscim.cpp (1.132), extras/setup/scim_setup_helper.cpp (1.5), modules/FrontEnd/scim_socket_frontend.cpp (1.32), modules/FrontEnd/scim_socket_frontend.h (1.25), modules/FrontEnd/scim_x11_frontend.cpp (1.154), modules/FrontEnd/scim_x11_frontend.h (1.48), modules/IMEngine/scim_rawcode_imengine.h (1.5), modules/IMEngine/scim_socket_imengine.cpp (1.15), modules/IMEngine/scim_socket_imengine.h (1.10), po/de.po (1.15), po/fr.po (1.8), po/ja.po (1.24), po/ko.po (1.20), po/scim.pot (1.80), po/zh_CN.po (1.133), po/zh_TW.po (1.132), src/scim_backend.cpp (1.33), src/scim_backend.h (1.23), src/scim_frontend.cpp (1.40), src/scim_frontend.h (1.37), src/scim_helper.cpp (1.8), src/scim_helper.h (1.12), src/scim_imengine.cpp (1.10), src/scim_imengine.h (1.12), src/scim_trans_commands.h (1.6), tests/testpanel.cpp (1.15): Implemented get_surrounding_text/delete_surrounding_text Added parameter "const HelperAgent *" into signal-slot functions of HelperAgent. 2005-01-11 01:11 James Su * src/: scim_helper_manager_server.cpp (1.5), scim_transaction.cpp (1.9): Fixed two stupid return value bugs. 2005-01-10 11:20 tag scim_1_1_1 2005-01-10 11:20 James Su * configure.ac (1.122): Bump to 1.1.1 2005-01-10 11:18 James Su * modules/SetupUI/scim_imengine_setup.cpp (1.3): Load factory list in load_config (). 2005-01-10 08:36 tag scim_1_0_3 2005-01-10 08:36 James Su * configure.ac (scim_1_0.6): Bump to 1.0.3 2005-01-10 08:30 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.131), extras/gtk2_immodule/gtkimcontextscim.h (1.10), extras/gtk2_immodule/imscim.cpp (1.10), extras/panel/scim_panel_gtk.cpp (1.104), extras/setup/scim_setup_helper.cpp (1.4), extras/setup/scim_setup_module.cpp (1.9), extras/setup/scim_setup_module.h (1.9), extras/setup/scim_setup_ui.cpp (1.49), extras/setup/scim_setup_ui.h (1.23), modules/Config/scim_simple_config.cpp (1.31), modules/Config/scim_simple_config.h (1.19), modules/Config/scim_socket_config.cpp (1.20), modules/Config/scim_socket_config.h (1.9), modules/FrontEnd/scim_socket_frontend.cpp (1.31), modules/FrontEnd/scim_socket_frontend.h (1.24), modules/FrontEnd/scim_x11_frontend.cpp (1.153), modules/FrontEnd/scim_x11_frontend.h (1.47), modules/FrontEnd/scim_x11_ic.cpp (1.17), modules/FrontEnd/scim_x11_ic.h (1.8), modules/IMEngine/scim_rawcode_imengine.cpp (1.5), modules/IMEngine/scim_rawcode_imengine.h (1.4), modules/IMEngine/scim_socket_imengine.cpp (1.14), modules/IMEngine/scim_socket_imengine.h (1.9), modules/SetupUI/scim_frontend_hotkeys_setup.cpp (1.2), modules/SetupUI/scim_imengine_setup.cpp (1.2), modules/SetupUI/scim_panel_gtk_setup.cpp (1.14), modules/SetupUI/scim_x11_frontend_setup.cpp (1.15), po/POTFILES.in (1.16), po/de.po (1.14), po/fr.po (1.7), po/ja.po (1.23), po/ko.po (1.19), po/scim.pot (1.79), po/zh_CN.po (1.132), po/zh_TW.po (1.131), src/scim.cpp (1.50), src/scim.h (1.34), src/scim_attribute.h (1.6), src/scim_backend.cpp (1.32), src/scim_backend.h (1.22), src/scim_bind.h (1.10), src/scim_chartraits.cpp (1.10), src/scim_compose_key.cpp (1.6), src/scim_compose_key.h (1.4), src/scim_config_agent.cpp (1.6), src/scim_config_base.cpp (1.18), src/scim_config_base.h (1.21), src/scim_config_module.cpp (1.14), src/scim_config_module.h (1.14), src/scim_config_path.h (1.29), src/scim_connection.cpp (1.7), src/scim_connection.h (1.10), src/scim_debug.cpp (1.7), src/scim_debug.h (1.15), src/scim_event.cpp (1.24), src/scim_exception.h (1.10), src/scim_frontend.cpp (1.39), src/scim_frontend.h (1.36), src/scim_frontend_module.cpp (1.13), src/scim_frontend_module.h (1.16), src/scim_global_config.cpp (1.6), src/scim_global_config.h (1.4), src/scim_helper.h (1.11), src/scim_helper_manager.h (1.2), src/scim_helper_module.h (1.6), src/scim_iconv.cpp (1.17), src/scim_iconv.h (1.17), src/scim_imengine.cpp (1.9), src/scim_imengine.h (1.11), src/scim_imengine_module.cpp (1.3), src/scim_imengine_module.h (1.4), src/scim_launcher.cpp (1.6), src/scim_lookup_table.cpp (1.31), src/scim_lookup_table.h (1.31), src/scim_module.cpp (1.24), src/scim_module.h (1.19), src/scim_object.cpp (1.9), src/scim_object.h (1.9), src/scim_panel.h (1.19), src/scim_pointer.h (1.11), src/scim_private.cpp (1.6), src/scim_private.h (1.11), src/scim_property.h (1.7), src/scim_signals.cpp (1.7), src/scim_signals.h (1.11), src/scim_slot.cpp (1.5), src/scim_slot.h (1.8), src/scim_socket.cpp (1.41), src/scim_socket.h (1.24), src/scim_trans_commands.h (1.5), src/scim_transaction.cpp (1.8), src/scim_transaction.h (1.8), src/scim_utility.cpp (1.43), src/scim_utility.h (1.34): Update copyright information and po files. 2005-01-10 07:02 James Su * scim.spec.in (1.70), configs/config (1.34), extras/gtk2_immodule/gtkimcontextscim.cpp (1.130), extras/setup/scim_setup_ui.cpp (1.48), extras/setup/scim_setup_ui.h (1.22), modules/FrontEnd/scim_x11_frontend.cpp (1.152), modules/FrontEnd/scim_x11_frontend.h (1.46), modules/SetupUI/Makefile.am (1.14), modules/SetupUI/scim_imengine_setup.cpp (1.1), src/scim_config_path.h (1.28), src/scim_hotkey.cpp (1.3), src/scim_hotkey.h (1.3): Split IMEngine global setup into a separated module. 2005-01-09 14:43 James Su * modules/FrontEnd/scim_x11_frontend.cpp, po/de.po, po/fr.po, po/ja.po, po/ko.po, po/scim.pot, po/zh_CN.po, po/zh_TW.po (scim_1_0.[2,3,2,3,3,3,3,3]): Fixed XIM client freeze issue. 2005-01-09 14:32 James Su * scim.spec.in (1.69): Added frontend-hotkeys-setup.so into spec file. 2005-01-09 14:30 James Su * po/ja.po (1.22): Update ja.po 2005-01-09 14:27 James Su * modules/SetupUI/: Makefile.am (1.13), scim_frontend_hotkeys_setup.cpp (1.1), scim_x11_frontend_setup.cpp (1.14): Split the Hot Keys setting into a separated module. 2005-01-09 13:46 James Su * configure.ac (1.121), scim.spec.in (1.68), configs/Makefile.am (1.8), configs/config (1.33), configs/scim.schemas (1.30), extras/gtk2_immodule/gtkimcontextscim.cpp (1.128), modules/Config/Makefile.am (1.15), modules/Config/scim_gconf_config.cpp (1.19), modules/Config/scim_gconf_config.h (1.12), modules/FrontEnd/scim_x11_frontend.cpp (1.151), modules/FrontEnd/scim_x11_frontend.h (1.45), modules/SetupUI/scim_x11_frontend_setup.cpp (1.13), src/scim_config_path.h (1.27), src/scim_frontend.h (1.35): * Remove GConf Config module, it seems that this module is almost useless. * Use new configuration key strings for FrontEnd HotKeys. * Modify gtkimmodule and x11 frontend to use HotKeyMatcher. 2005-01-09 11:06 James Su * src/: scim_hotkey.cpp (1.2), scim_hotkey.h (1.2): Added get_hot_keys () in IMEngineHotKeyMatcher. 2005-01-08 17:14 James Su * src/scim_types.h (1.12): Remove scim_types.h. 2005-01-08 17:13 James Su * configure.ac (1.120), modules/FrontEnd/scim_x11_frontend.cpp (1.150), modules/FrontEnd/scim_x11_frontend.h (1.44), src/Makefile.am (1.46), src/scim.h (1.33), src/scim_backend.cpp (1.31), src/scim_backend.h (1.21), src/scim_config_path.h (1.26), src/scim_event.cpp (1.23), src/scim_event.h (1.20), src/scim_frontend.cpp (1.38), src/scim_frontend.h (1.34), src/scim_hotkey.cpp (1.1), src/scim_hotkey.h (1.1), src/scim_types.h (1.11): Added HotKey support. 2005-01-07 15:28 James Su * configure.ac (1.119), extras/panel/scim_panel_gtk.cpp (1.103), extras/setup/scim_setup_ui.cpp (1.47), modules/Config/scim_simple_config.cpp (1.30), modules/Config/scim_simple_config.h (1.18), modules/FrontEnd/scim_socket_frontend.h (1.23), modules/FrontEnd/scim_x11_frontend.cpp (1.149), modules/FrontEnd/scim_x11_frontend.h (1.43), modules/FrontEnd/scim_x11_ic.cpp (1.16), modules/FrontEnd/scim_x11_ic.h (1.7), modules/IMEngine/scim_socket_imengine.cpp (1.13), src/scim_backend.cpp (1.30), src/scim_global_config.cpp (1.5), src/scim_helper_manager_server.cpp (1.4), src/scim_panel.cpp (1.10), src/scim_stl_map.h (1.1): Added option to choose between hash_map and map. 2005-01-07 06:16 James Su * scim.spec.in (1.67): Don't strip. 2005-01-06 08:42 James Su * configure.ac (1.118): Set libtool option correctly. 2005-01-05 13:46 tag scim_1_1_0 2005-01-05 13:46 James Su * ChangeLog (1.52): Updated ChangeLog. 2005-01-05 13:41 James Su * src/scim_helper.cpp (1.7), src/scim_helper_launcher.cpp (1.3), src/scim_helper_manager.cpp (1.2), src/scim_helper_manager_server.cpp (1.3), src/scim_helper_module.cpp (1.5), src/scim_panel.cpp (1.9), src/scim_types.h.in (1.2), tests/testiconvert.cpp (1.2), tests/testlang.cpp (1.2), tests/testpanel.cpp (1.14), tests/testsocketclient.cpp (1.3), tests/testsocketserver.cpp (1.2): Updated copyright info. 2005-01-05 13:24 James Su * src/scim_helper.h (1.10): Updated some comment. 2005-01-05 10:50 James Su * extras/setup/.cvsignore (1.3), src/.cvsignore (1.5): Updated .cvsignore files. 2005-01-05 10:47 James Su * po/: POTFILES.in (1.15), de.po (1.12), fr.po (1.5), ja.po (1.20), ko.po (1.17), scim.pot (1.77), zh_CN.po (1.130), zh_TW.po (1.129): Removed table IMEngine completely. 2005-01-05 06:30 James Su * configure.ac (1.117), scim.spec.in (1.66), data/icons/Makefile.am (1.14), data/icons/table.png (1.3), modules/IMEngine/Makefile.am (1.6), modules/IMEngine/scim_generic_table.cpp (1.7), modules/IMEngine/scim_generic_table.h (1.6), modules/IMEngine/scim_make_table.cpp (1.3), modules/IMEngine/scim_table_imengine.cpp (1.11), modules/IMEngine/scim_table_imengine.h (1.5), modules/SetupUI/Makefile.am (1.12), modules/SetupUI/scim_table_imengine_setup.cpp (1.10): Split table IMEngine into scim-tables package. 2005-01-04 01:16 James Su * src/scim_utility.cpp (1.42): Fixed a compilation issue with gcc-4.0. 2005-01-03 07:40 James Su * scim.spec.in (1.65), po/de.po (1.11), po/fr.po (1.4), po/ja.po (1.19), po/ko.po (1.16), po/scim.pot (1.76), po/zh_CN.po (1.129), po/zh_TW.po (1.128): Updated spec file. 2005-01-03 06:41 James Su * data/icons/menu.png (1.2), extras/panel/scim_panel_gtk.cpp (1.102), modules/SetupUI/scim_panel_gtk_setup.cpp (1.13), po/POTFILES.in (1.14), po/de.po (1.10), po/fr.po (1.3), po/ja.po (1.18), po/ko.po (1.15), po/scim.pot (1.75), po/zh_CN.po (1.127), po/zh_TW.po (1.127): Added command menu button to panel toolbar. 2005-01-03 05:57 James Su * data/icons/: Makefile.am (1.13), menu.png (1.1), menu.xpm (1.1): Added menu icons 2005-01-03 03:40 James Su * configure.ac (1.116), data/icons/Makefile.am (1.12), extras/gtk2_immodule/Makefile.am (1.23), extras/panel/Makefile.am (1.16), extras/panel/scim_panel_gtk.cpp (1.101), extras/setup/Makefile.am (1.11), extras/setup/scim-setup.in (1.1), extras/setup/scim_setup.cpp (1.15), modules/Config/Makefile.am (1.14), modules/FrontEnd/Makefile.am (1.31), modules/IMEngine/Makefile.am (1.5), modules/SetupUI/Makefile.am (1.11), src/Makefile.am (1.45), src/scim_helper_launcher.cpp (1.2), src/scim_helper_manager_server.cpp (1.2), src/scim_launcher.cpp (1.5), src/scim_socket.cpp (1.40), src/scim_utility.cpp (1.41), src/scim_utility.h (1.33), tests/Makefile.am (1.11): Update Makefile.am, configure.ac. Addes scim-setup.in 2005-01-03 02:19 James Su * extras/setup/: Makefile.am (1.10), scim_setup.cpp (1.14), scim_setup.h (1.3), scim_setup_helper.cpp (1.1), scim_setup_ui.cpp (1.44), scim_setup_ui.h (1.19): New Setup Helper Module. 2005-01-02 16:28 James Su * src/: Makefile.am (1.44), scim.h (1.32), scim_config_path.h (1.25), scim_helper.cpp (1.6), scim_helper.h (1.9), scim_helper_launcher.cpp (1.1), scim_helper_manager.cpp (1.1), scim_helper_manager.h (1.1), scim_helper_manager_server.cpp (1.1), scim_helper_module.cpp (1.4), scim_helper_module.h (1.5), scim_panel.cpp (1.8), scim_panel.h (1.18), scim_socket.cpp (1.39), scim_socket.h (1.23), scim_trans_commands.h (1.4): Implemented new class HelperManager, program scim-helper-launcher and scim-helper-manager. 2004-12-31 06:48 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.148), src/Makefile.am (1.43), src/scim_helper.cpp (1.5), src/scim_helper.h (1.8), src/scim_panel.cpp (1.7), tests/testpanel.cpp (1.13): Updated HelperAgent,PanelAgent and testpanel. 2004-12-30 12:46 tag scim_1_0_2 2004-12-30 12:46 James Su * ChangeLog (scim_1_0.2): Updated ChangeLog. 2004-12-30 06:26 James Su * configure.ac (scim_1_0.5): Bump to 1.0.2 2004-12-30 04:51 James Su * modules/FrontEnd/scim_x11_frontend.cpp, src/scim_backend.cpp (scim_1_0.[1,2]): Fixed Firefox+flash freezing issue in X11 FrontEnd. 2004-12-29 02:13 James Su * extras/panel/scim_panel_gtk.cpp (1.100), src/scim.cpp (1.49), src/scim_panel.cpp (1.6): Now HEAD is workable again. 2004-12-27 15:19 James Su * extras/panel/scim_panel_gtk.cpp (1.99): Implementing new GTK Panel. 2004-12-27 12:48 James Su * src/: scim_lookup_table.cpp (1.29), scim_lookup_table.h (1.30), scim_transaction.cpp (1.7): Remove description support in LookupTable, it's hard to implement. 2004-12-27 12:38 James Su * src/: scim_lookup_table.cpp (1.28), scim_lookup_table.h (1.29), scim_panel.cpp (1.5), scim_panel.h (1.17): Hide details of class CommonLookupTable. 2004-12-26 14:07 James Su * configure.ac (1.115), extras/gtk2_immodule/Makefile.am (1.22), extras/panel/Makefile.am (1.15), extras/panel/scim_panel_gtk.cpp (1.98), extras/setup/Makefile.am (1.9), modules/Config/Makefile.am (1.13), modules/FrontEnd/Makefile.am (1.30), modules/IMEngine/Makefile.am (1.4), modules/SetupUI/Makefile.am (1.10), src/Makefile.am (1.42), src/scim_panel.cpp (1.4), tests/Makefile.am (1.10), utils/Makefile.am (1.9): New SCIM WIP. 2004-12-25 16:28 James Su * extras/gtk2_immodule/Makefile.am (1.21), extras/panel/Makefile.am (1.14), extras/setup/Makefile.am (1.8), modules/Config/Makefile.am (1.12), modules/FrontEnd/Makefile.am (1.29), modules/IMEngine/Makefile.am (1.3), modules/SetupUI/Makefile.am (1.9), src/Makefile.am (1.41), src/scim.h (1.31), src/scim_panel.cpp (1.3), src/scim_panel.h (1.16), tests/Makefile.am (1.9), utils/Makefile.am (1.8): New SCIM WIP. 2004-12-25 04:59 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.147), src/scim_panel.cpp (1.2): New SCIM WIP. 2004-12-22 15:14 James Su * docs/scim.cfg.in (1.11), extras/gtk2_immodule/gtkimcontextscim.cpp (1.127), modules/FrontEnd/scim_x11_frontend.cpp (1.146): New SCIM WIP. 2004-12-22 15:12 James Su * src/: Makefile.am (1.40), scim.h (1.30), scim_panel.cpp (1.1), scim_panel.h (1.15): Added scim_panel.{h,cpp} 2004-12-13 02:10 James Su * extras/panel/scim_panel_gtk.cpp (1.97): New gtk panel WIP. 2004-12-11 09:47 James Su * src/: scim_lookup_table.cpp (1.27), scim_lookup_table.h (1.28), scim_property.h (1.6), scim_transaction.cpp (1.6): Add description to each candidate in LookupTable. 2004-12-04 15:08 James Su * docs/scim.cfg.in (1.10), extras/gtk2_immodule/gtkimcontextscim.cpp (1.126), extras/gtk2_immodule/imscim.cpp (1.9), extras/panel/scim_panel_gtk.cpp (1.96), modules/FrontEnd/scim_x11_frontend.cpp (1.145), src/scim_frontend_module.h (1.15), src/scim_helper.cpp (1.4), src/scim_helper_module.h (1.4), src/scim_trans_commands.h (1.3), src/scim_utility.h (1.32): Helper implementation WIP. 2004-12-01 14:48 James Su * src/: scim_utility.cpp (scim_1_0.1), scim_utility.cpp (1.40): Added ne_NP (Nepali language) into the language list. 2004-11-30 16:20 James Su * src/: scim_helper.h (1.7), scim_launcher.cpp (1.4), scim_trans_commands.h (1.2): Added more comments in scim_trans_commands.h 2004-11-26 13:08 James Su * src/: scim_frontend.cpp (1.37), scim_frontend.h (1.33), scim_helper.cpp (1.3), scim_helper.h (1.6): Added FrontEnd::get_instance_uuid () 2004-11-20 14:16 James Su * src/: scim_backend.cpp (1.29), scim_helper_module.cpp (1.3), scim_helper_module.h (1.3): Added HelperModuleManager. 2004-11-18 03:35 James Su * src/: scim_helper_module.cpp (1.2), scim_helper_module.h (1.2), scim_imengine_module.h (1.3): Added some comments. 2004-11-17 17:22 James Su * src/scim_trans_commands.h (1.1): Put Transaction commands into scim_trans_commands.h 2004-11-17 17:21 James Su * src/: Makefile.am (1.39), scim.h (1.29), scim_helper.h (1.5), scim_helper_module.cpp (1.1), scim_helper_module.h (1.1): Added HelperModule class. 2004-11-15 14:41 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (scim_1_0.3): Fixed gnumeric killing data issue. 2004-11-15 14:40 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.125), extras/panel/scim_panel_gtk.cpp (1.95), modules/FrontEnd/scim_socket_frontend.cpp (1.30), modules/FrontEnd/scim_socket_frontend.h (1.22), modules/FrontEnd/scim_x11_frontend.cpp (1.144), modules/FrontEnd/scim_x11_frontend.h (1.42), modules/IMEngine/scim_socket_imengine.cpp (1.12), modules/IMEngine/scim_socket_imengine.h (1.8), src/scim_helper.cpp (1.2): Implement start_helper, stop_helper, send_helper_event in SocketFrontEnd, SocketIMEngine and Gtk IMModule. 2004-11-15 05:51 James Su * configure.ac (1.114), extras/gtk2_immodule/gtkimcontextscim.cpp (1.124), modules/FrontEnd/scim_x11_frontend.cpp (1.143), src/Makefile.am (1.38), src/scim.h (1.28), src/scim_helper.cpp (1.1), src/scim_helper.h (1.4): Added scim_helper.cpp 2004-11-14 16:30 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.123), extras/panel/scim_panel_gtk.cpp (1.94), modules/FrontEnd/scim_x11_frontend.cpp (1.142), src/scim.h (1.27), src/scim_helper.h (1.3), src/scim_panel.h (1.14), src/scim_transaction.h (1.7), tests/testpanel.cpp (1.12): Removed scim_panel.h, added scim_trans_commands.h instead. 2004-11-14 14:28 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.122), extras/gtk2_immodule/gtkimcontextscim.h (1.9), extras/gtk2_immodule/imscim.cpp (1.8), extras/panel/scim_panel_gtk.cpp (1.93), extras/setup/scim_setup.cpp (1.13), extras/setup/scim_setup.h (1.2), extras/setup/scim_setup_module.cpp (1.6), extras/setup/scim_setup_module.h (1.6), extras/setup/scim_setup_ui.cpp (1.43), extras/setup/scim_setup_ui.h (1.18), modules/Config/scim_gconf_config.cpp (1.18), modules/Config/scim_gconf_config.h (1.11), modules/Config/scim_simple_config.cpp (1.29), modules/Config/scim_simple_config.h (1.17), modules/Config/scim_socket_config.cpp (1.19), modules/Config/scim_socket_config.h (1.8), modules/FrontEnd/scim_socket_frontend.cpp (1.29), modules/FrontEnd/scim_socket_frontend.h (1.21), modules/FrontEnd/scim_x11_frontend.cpp (1.141), modules/FrontEnd/scim_x11_frontend.h (1.41), modules/FrontEnd/scim_x11_ic.cpp (1.15), modules/FrontEnd/scim_x11_ic.h (1.6), modules/IMEngine/scim_generic_table.cpp (1.6), modules/IMEngine/scim_generic_table.h (1.5), modules/IMEngine/scim_make_table.cpp (1.2), modules/IMEngine/scim_rawcode_imengine.cpp (1.4), modules/IMEngine/scim_rawcode_imengine.h (1.3), modules/IMEngine/scim_socket_imengine.cpp (1.11), modules/IMEngine/scim_socket_imengine.h (1.7), modules/IMEngine/scim_table_imengine.cpp (1.10), modules/IMEngine/scim_table_imengine.h (1.4), modules/SetupUI/scim_panel_gtk_setup.cpp (1.12), modules/SetupUI/scim_table_imengine_setup.cpp (1.9), modules/SetupUI/scim_x11_frontend_setup.cpp (1.12), src/scim.cpp (1.48), src/scim.h (1.26), src/scim_attribute.h (1.5), src/scim_backend.cpp (1.28), src/scim_backend.h (1.20), src/scim_bind.h (1.9), src/scim_chartraits.cpp (1.9), src/scim_compose_key.cpp (1.5), src/scim_compose_key.h (1.3), src/scim_config_agent.cpp (1.5), src/scim_config_base.cpp (1.17), src/scim_config_base.h (1.20), src/scim_config_module.cpp (1.13), src/scim_config_module.h (1.13), src/scim_config_path.h (1.24), src/scim_connection.cpp (1.6), src/scim_connection.h (1.9), src/scim_debug.cpp (1.6), src/scim_debug.h (1.14), src/scim_event.cpp (1.22), src/scim_event.h (1.19), src/scim_exception.h (1.9), src/scim_frontend.cpp (1.36), src/scim_frontend.h (1.32), src/scim_frontend_module.cpp (1.12), src/scim_frontend_module.h (1.14), src/scim_helper.h (1.2), src/scim_iconv.cpp (1.16), src/scim_iconv.h (1.16), src/scim_imengine.cpp (1.8), src/scim_imengine.h (1.10), src/scim_imengine_module.cpp (1.2), src/scim_imengine_module.h (1.2), src/scim_launcher.cpp (1.3), src/scim_lookup_table.cpp (1.26), src/scim_lookup_table.h (1.27), src/scim_module.cpp (1.23), src/scim_module.h (1.18), src/scim_object.cpp (1.8), src/scim_object.h (1.8), src/scim_panel.h (1.13), src/scim_pointer.h (1.10), src/scim_private.cpp (1.5), src/scim_private.h (1.10), src/scim_signals.cpp (1.6), src/scim_signals.h (1.10), src/scim_slot.cpp (1.4), src/scim_slot.h (1.7), src/scim_socket.cpp (1.38), src/scim_socket.h (1.22), src/scim_transaction.h (1.6), src/scim_utility.cpp (1.39), src/scim_utility.h (1.31): Updated copyright information. 2004-11-12 14:40 James Su * src/: scim_backend.h (1.19), scim_helper.h (1.1), scim_socket.cpp (1.37), scim_socket.h (1.21): Added scim_helper.h 2004-11-10 00:38 LiuCougar * configure.ac (1.113), po/fr.po (1.2): added french translation, thanks to Damien Menanteau 2004-11-08 02:04 James Su * src/: scim_attribute.h (1.4), scim_event.h (1.18), scim_exception.h (1.8), scim_global_config.h (1.3), scim_iconv.h (1.15), scim_imengine.h (1.9), scim_lookup_table.h (1.26), scim_module.h (1.17), scim_object.h (1.7), scim_pointer.h (1.9), scim_property.h (1.5), scim_socket.cpp (1.36), scim_socket.h (1.20), scim_transaction.cpp (1.5), scim_transaction.h (1.5), scim_utility.h (1.30): Added: SocketServer::insert_external_socket() SocketServer::remove_external_socket() Transaction::write_to_buffer() Transaction::read_from_buffer () 2004-11-08 01:57 James Su * src/scim_socket.cpp (scim_1_0.1): Fixed a bug in SocketServer::close_connection (). 2004-11-07 16:24 James Su * AUTHORS, configure.ac, po/fr.po (scim_1_0.[1,4,1]): Added fr.po 2004-11-02 09:38 James Su * src/: scim.h (1.25), scim_backend.cpp (1.27), scim_backend.h (1.18), scim_frontend.cpp (1.35), scim_frontend.h (1.31), scim_imengine.cpp (1.7), scim_imengine.h (1.8): Added Helper APIs. 2004-10-30 04:51 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.121), modules/FrontEnd/scim_socket_frontend.cpp (1.28), modules/FrontEnd/scim_socket_frontend.h (1.20), modules/FrontEnd/scim_x11_frontend.cpp (1.140), modules/FrontEnd/scim_x11_frontend.h (1.40), modules/IMEngine/scim_socket_imengine.cpp (1.10), src/scim_backend.cpp (1.26), src/scim_backend.h (1.17), src/scim_frontend.cpp (1.34), src/scim_frontend.h (1.30), src/scim_imengine.cpp (1.6), src/scim_imengine.h (1.7): Added beep method. 2004-10-26 15:17 James Su * modules/IMEngine/: scim_socket_imengine.cpp (1.9), scim_socket_imengine.h (1.6): Fixed the wrong usage of global Transaction object. 2004-10-26 12:58 James Su * configure.ac (1.112), extras/gtk2_immodule/gtkimcontextscim.cpp (1.120), extras/panel/scim_panel_gtk.cpp (1.92), modules/FrontEnd/scim_x11_frontend.cpp (1.139), modules/FrontEnd/scim_x11_frontend.h (1.39), src/scim.cpp (1.47), src/scim_launcher.cpp (1.2), src/scim_panel.h (1.12), src/scim_socket.cpp (1.35), src/scim_socket.h (1.19), src/scim_transaction.h (1.4), src/scim_utility.cpp (1.38), src/scim_utility.h (1.29), tests/testpanel.cpp (1.11): Use independent panel process for each display. 2004-10-23 10:41 James Su * modules/IMEngine/: scim_socket_imengine.cpp (1.8), scim_socket_imengine.h (1.5): Use global Transaction object instead of dynamicly creating. 2004-10-23 02:19 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.119), extras/panel/scim_panel_gtk.cpp (1.91), modules/Config/scim_socket_config.cpp (1.18), modules/FrontEnd/scim_socket_frontend.cpp (1.27), modules/FrontEnd/scim_socket_frontend.h (1.19), modules/FrontEnd/scim_x11_frontend.cpp (1.138), modules/FrontEnd/scim_x11_frontend.h (1.38), modules/IMEngine/scim_socket_imengine.cpp (1.7), modules/IMEngine/scim_socket_imengine.h (1.4), src/scim.cpp (1.46), src/scim_socket.cpp (1.34), src/scim_transaction.cpp (1.4), src/scim_transaction.h (1.3), tests/testpanel.cpp (1.10): New Transaction and TransactionReader classes are OK. 2004-10-21 15:21 James Su * src/: scim_socket.cpp (1.33), scim_transaction.cpp (1.3), scim_transaction.h (1.2): New Transaction and TransactionReader classes. 2004-10-19 09:07 James Su * src/scim_transaction.cpp (1.2): New Transaction WIP. 2004-10-15 05:39 James Su * modules/Config/scim_socket_config.cpp (1.17), modules/Config/scim_socket_config.h (1.7), po/de.po (1.9), po/ja.po (1.17), po/ko.po (1.14), po/scim.pot (1.74), po/zh_CN.po (1.126), po/zh_TW.po (1.126), src/Makefile.am (1.37), src/scim.cpp (1.45), src/scim.h (1.24), src/scim_imengine.cpp (1.5), src/scim_imengine.h (1.6), src/scim_socket.cpp (1.32), src/scim_socket.h (1.18), src/scim_socket_transaction.cpp (1.27), src/scim_socket_transaction.h (1.30), src/scim_transaction.cpp (1.1), src/scim_transaction.h (1.1): Rename SocketTransaction to Transaction. Add TransactionReader. 2004-10-10 14:07 James Su * modules/IMEngine/scim_generic_table.cpp (1.5): Change SELECT_KEYS, PAGE_UP_KEYS, PAGE_DOWN_KEYS and COMMIT_KEYS to optional. 2004-10-10 13:58 James Su * modules/IMEngine/scim_generic_table.cpp (scim_1_0.1): Change SELECT_KEYS, PAGE_UP_KEYS, PAGE_DOWN_KEYS and COMMIT_KEYS to optional. 2004-10-03 13:54 James Su * extras/gtk2_immodule/imscim.cpp, po/de.po, po/ja.po, po/ko.po, po/scim.pot, po/zh_CN.po, po/zh_TW.po, src/scim_backend.cpp, src/scim_launcher.cpp (scim_1_0.[1,2,2,2,2,2,2,1,1]): Disable loading information by default. 2004-09-29 06:15 James Su * extras/gtk2_immodule/: gtkimcontextscim.cpp (scim_1_0.2), gtkimcontextscim.cpp (1.118): Set preedit caret to the end of preedit string when updating preedit string. 2004-09-28 05:19 LiuCougar * configure.ac (scim_1_0.3): DOT should only contain the path 2004-09-28 05:18 LiuCougar * src/: scim_frontend_module.h, scim_imengine_module.h, scim_property.h, scim_utility.h (scim_1_0.[1,1,1,1]): updated typo 2004-09-21 04:20 tag scim_1_0_1 2004-09-21 04:20 James Su * ChangeLog, configure.ac (scim_1_0.[1,2]): Bump to 1.0.1 2004-09-21 04:00 James Su * utils/: scimstringview.c (scim_1_0.2), scimstringview.c (scim_0_9.[2,1]), scimstringview.c (1.4): Fixed gtk2 binary compatibility issue. 2004-09-21 03:06 James Su * utils/: scimstringview.c (scim_1_0.1), scimstringview.c (1.3): Draw the second insertion cursor correctly. 2004-09-11 13:17 James Su * extras/gtk2_immodule/: gtkimcontextscim.cpp (scim_1_0.1), gtkimcontextscim.cpp (1.117): Call focus_out when turning off instance. 2004-09-06 06:46 James Su * configure.ac (scim_1_0.1), configure.ac (1.111): Added missing SCIM_BUILD_GTK_UTILS definition 2004-09-02 07:29 tag scim_1_0_0 2004-09-02 07:29 James Su * ChangeLog (1.51), configure.ac (1.110): Bump to 1.0.0 2004-09-01 01:41 LiuCougar * configure.ac (1.109): display whether or not to compile gtk utils correctly 2004-09-01 01:24 James Su * configure.ac (1.108), po/de.po (1.8), po/ja.po (1.16), po/ko.po (1.13), po/scim.pot (1.73), po/zh_CN.po (1.125), po/zh_TW.po (1.125): Improve --disable-panel-gtk a little. 2004-08-31 02:29 LiuCougar * configure.ac (1.107): added new option --disable-gtk2-panel to disable scim-panel-gtk only compile libscim-gtkutils when at least one of panel/gtk-immodule is needed 2004-08-29 14:34 tag scim_0_99_9 2004-08-29 14:34 James Su * ChangeLog (1.50): Update ChangeLog. 2004-08-29 13:18 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.137): Move caret to the end of preedit string when updating preedit string. 2004-08-28 18:18 James Su * ChangeLog (1.49), po/de.po (1.7), po/ja.po (1.15), po/ko.po (1.12), po/scim.pot (1.72), po/zh_CN.po (1.124), po/zh_TW.po (1.124): Update ChangeLog. 2004-08-28 17:49 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.136): Improve OnTheSpot support. 2004-08-28 03:58 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.116), modules/FrontEnd/scim_x11_frontend.cpp (1.135), src/scim.cpp (1.44): Try to fix the start failure issue. 2004-08-27 14:33 LiuCougar * AUTHORS (1.6): update kitae email 2004-08-27 14:18 James Su * AUTHORS (1.5), po/de.po (1.6), po/ja.po (1.14), po/ko.po (1.11), po/scim.pot (1.71), po/zh_CN.po (1.123), po/zh_TW.po (1.123): Added more people. 2004-08-27 08:54 James Su * src/scim_config_path.h (1.23): Indent the source code. 2004-08-26 12:55 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.115), src/scim.cpp (1.43): Make the timeout of waiting socket FrontEnd process to start longer. 2004-08-26 02:47 LiuCougar * po/de.po (1.5): updated de translation (http://freedesktop.org/pipermail/scim/2004-August/000810.html) 2004-08-25 13:15 James Su * ChangeLog (1.48), extras/gtk2_immodule/gtkimcontextscim.cpp (1.114), modules/FrontEnd/scim_x11_frontend.cpp (1.134): Don't set default trigger/previous_factory/next_factory keys. 2004-08-25 12:51 James Su * po/: de.po (1.4), ja.po (1.13), ko.po (1.10): Update de, ja, ko po files. 2004-08-24 17:31 LiuCougar * po/de.po (1.3): updated de translation 2004-08-24 17:24 LiuCougar * configure.ac (1.106): version 0.99.9 2004-08-24 15:01 James Su * po/scim.pot (1.70): Updated scim.pot 2004-08-24 14:56 James Su * po/: zh_CN.po (1.122), zh_TW.po (1.122): Updated zh_CN zh_TW po 2004-08-24 14:42 James Su * configs/config (1.32), configs/scim.schemas (1.29), extras/gtk2_immodule/gtkimcontextscim.cpp (1.113), modules/FrontEnd/scim_x11_frontend.cpp (1.133), modules/FrontEnd/scim_x11_frontend.h (1.37), modules/SetupUI/scim_x11_frontend_setup.cpp (1.11), po/de.po (1.2), po/ja.po (1.12), po/ko.po (1.9), po/zh_CN.po (1.121), po/zh_TW.po (1.121), src/scim_config_path.h (1.22): Added hotkeys to show input method menu. 2004-08-24 12:23 James Su * po/: ja.po (1.11), ko.po (1.8), zh_CN.po (1.120), zh_TW.po (1.120): Added de.po, updated ja.po 2004-08-24 04:39 LiuCougar * po/scim.pot (1.69): this file is needed for new translator to begin with 2004-08-24 03:13 LiuCougar * configure.ac (1.105), po/de.po (1.1): add German translation (thanks to Jan Hefti ) 2004-08-23 16:16 James Su * modules/IMEngine/: scim_table_imengine.cpp (1.9), scim_table_imengine.h (1.3): Save user table immediately when adding or deleteing phrase. 2004-08-22 11:45 tag scim_0_99_8 2004-08-22 11:45 James Su * ChangeLog (1.47): Update ChangeLog. 2004-08-22 11:19 James Su * src/scim_backend.cpp (1.25): Added ComposeKeyFactory object when there is no factory. 2004-08-22 11:09 James Su * po/ko.po (1.7): Updated ko.po 2004-08-22 05:41 James Su * po/: ja.po (1.10), ko.po (1.6): Update ja.po and ko.po 2004-08-22 05:21 James Su * Makefile.am (1.18), scim.m4 (1.2), scim.pc.in (1.16), modules/SetupUI/scim_table_imengine_setup.cpp (1.8): Removed scim.m4, it's not necessary. We should use scim.pc instead. 2004-08-22 01:35 LiuCougar * configure.ac (1.104): version 0.99.8 2004-08-22 01:23 LiuCougar * Makefile.am (1.17), scim.m4 (1.1): added a m4 function to check scim version which should be used by scim-* 2004-08-21 23:35 LiuCougar * scim.spec.in (1.64): specify the new homepage for SCIM 2004-08-21 14:32 James Su * extras/setup/scim_setup_ui.cpp (1.42): Use NULL instead of 0 for pointer. 2004-08-20 05:59 James Su * modules/SetupUI/scim_table_imengine_setup.cpp (1.7), po/ja.po (1.9), po/ko.po (1.5), po/zh_CN.po (1.119), po/zh_TW.po (1.119): Added DISCARD_INVALID_KEY into setup module. 2004-08-20 05:22 James Su * extras/setup/scim_setup_ui.cpp (1.41), src/scim_backend.cpp (1.24): Re-add "English/European" into menu, but can be disabled by scim-setup. 2004-08-20 01:50 James Su * src/scim_backend.cpp (1.23): Do not add English/European entry. 2004-08-19 17:21 tag scim_0_99_7 2004-08-19 17:21 James Su * ChangeLog (1.46), TODO (1.8), configure.ac (1.103): Bump to 0.99.7 2004-08-18 16:56 James Su * modules/IMEngine/: scim_generic_table.cpp (1.4), scim_generic_table.h (1.4), scim_table_imengine.cpp (1.8): Added DISCARD_INVALID_KEY option (useful for WuBi table). 2004-08-16 10:50 James Su * po/ko.po (1.3): Updated ko.po 2004-08-16 05:52 James Su * po/: ja.po (1.7), ko.po (1.2): Updated ja.po 2004-08-16 04:08 James Su * modules/IMEngine/: scim_rawcode_imengine.cpp (1.3), scim_table_imengine.cpp (1.7): Hide preedit string before committing. 2004-08-14 12:45 James Su * po/ko.po (1.1): Added ko.po 2004-08-14 03:26 James Su * modules/FrontEnd/: scim_x11_ic.cpp (1.14), IMdkit/i18nIc.c (1.5), IMdkit/i18nPtHdr.c (1.3): Fixed some 64bit and endian issues. 2004-08-14 02:54 James Su * configure.ac (1.102), po/ja.po (1.6), po/zh_CN.po (1.117), po/zh_TW.po (1.117): Added ko.po 2004-08-14 02:28 James Su * modules/FrontEnd/IMdkit/i18nMethod.c (1.4): Fixed an endian issue. 2004-08-13 02:24 LiuCougar * scim-gtkutils.pc.in (1.3): fixed a typo 2004-08-13 01:22 tag scim_0_99_6 2004-08-13 01:22 James Su * ChangeLog (1.45), po/ja.po (1.5), po/zh_CN.po (1.116), po/zh_TW.po (1.116): Updated ChangeLog. 2004-08-13 00:26 James Su * configs/: config (1.31), scim.schemas (1.28): Turn off on the spot support by default. 2004-08-13 00:02 James Su * src/ltdl.cpp (1.2): Fix compilation issue for gcc 3.4.x 2004-08-12 23:52 James Su * po/: ja.po (1.4), zh_CN.po (1.115), zh_TW.po (1.115): Updated zh_TW.po 2004-08-12 11:56 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.132): Fixed crash issue on x86_64. 2004-08-11 00:44 James Su * src/: Makefile.am (1.36), ltdl.c (1.6), ltdl.cpp (1.1), ltdl.h (1.3): Make libltdlc totally private by putting it into scim namespace. 2004-08-10 13:19 James Su * po/ja.po (1.3): Updated ja.po 2004-08-10 08:04 James Su * src/: conv_compose.cpp (1.2), scim_compose_key.cpp (1.4), scim_compose_key.h (1.2), scim_compose_key_data.h (1.2): Added Unicode keycodes. 2004-08-10 03:22 James Su * po/: ja.po (1.2), zh_CN.po (1.114), zh_TW.po (1.114): Added button for show_key_prompt option. 2004-08-10 03:13 James Su * modules/SetupUI/scim_table_imengine_setup.cpp (1.6): Added button for show_key_prompt option. 2004-08-09 14:46 James Su * configure.ac (1.100), po/ja.po (1.1), po/ja_JP.po (1.14), po/zh_CN.po (1.113), po/zh_TW.po (1.113): Rename ja_JP.po to ja.po 2004-08-08 08:20 James Su * modules/IMEngine/scim_generic_table.cpp (1.3), modules/IMEngine/scim_generic_table.h (1.3), modules/IMEngine/scim_table_imengine.cpp (1.6), po/ja_JP.po (1.13), po/zh_CN.po (1.112), po/zh_TW.po (1.112): Add SHOW_KEY_PROMPT option into generic table, in order to show key prompt instead of the raw key. 2004-08-06 07:25 James Su * scim.spec.in (1.63): Ditto. 2004-08-06 07:22 James Su * extras/panel/Makefile.am (1.13), src/Makefile.am (1.35), src/scim_utility.cpp (1.37): Move scim-launcher and scim-panel-gtk to /usr/lib/scim-1.0, to follow the new FHS standard. 2004-08-05 02:38 James Su * src/: Makefile.am (1.34), conv_compose.cpp (1.1), scim_compose_key.cpp (1.3), scim_compose_key_data.h (1.1): Split the compose key data to a separate file. 2004-08-04 14:58 James Su * src/: scim_compose_key.cpp (1.2), scim_event.cpp (1.21), scim_event.h (1.17): Fixed get_key_string () for directly encoded UCS keycode. Fixed compose key table. 2004-08-03 04:05 James Su * src/scim_event.cpp (1.20): Fixed get_key_string () behaviour on key mask string. 2004-08-03 00:40 James Su * modules/SetupUI/scim_table_imengine_setup.cpp (1.5): Delete some unused variables. 2004-08-03 00:36 James Su * modules/SetupUI/scim_table_imengine_setup.cpp (1.4), po/ja_JP.po (1.12), po/zh_CN.po (1.111), po/zh_TW.po (1.111), src/scim_utility.cpp (1.36), src/scim_utility.h (1.28): Added scim_get_language_name_english () 2004-07-28 09:08 tag scim_0_99_5 2004-07-28 09:08 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.131): Don't unset focused ic when changing factory via menu. 2004-07-27 12:47 James Su * ChangeLog (1.44), configure.ac (1.99), po/ja_JP.po (1.11), po/zh_CN.po (1.110), po/zh_TW.po (1.110): pump to 0.99.5 2004-07-24 02:14 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.112), src/scim_backend.cpp (1.22), src/scim_backend.h (1.16): Added get_factory_pointer () into BackEndBase for scim-qtimm. More compose key support in gtkimmodule. 2004-07-23 16:20 James Su * configs/config (1.30): Do not use dynamic XIM mode by default. 2004-07-23 16:17 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.111), extras/gtk2_immodule/gtkimcontextscim.h (1.8), modules/FrontEnd/scim_socket_frontend.cpp (1.26), modules/FrontEnd/scim_socket_frontend.h (1.18), modules/FrontEnd/scim_x11_frontend.cpp (1.130), modules/FrontEnd/scim_x11_frontend.h (1.36), po/ja_JP.po (1.10), po/zh_CN.po (1.109), po/zh_TW.po (1.109), src/scim_backend.cpp (1.21), src/scim_backend.h (1.15), src/scim_frontend.cpp (1.33), src/scim_frontend.h (1.29): * Moved many code from FrontEndBase to BackEndBase in order to reuse these code in other special FrontEnds like gtkimmodule etc. * Added transparent support for compose keys in x11 FrontEnd and gtkimmodule. * Rename some methods of FrontEndBase. 2004-07-21 13:44 tag scim_before_refactory_backend 2004-07-21 13:44 James Su * modules/SetupUI/scim_table_imengine_setup.cpp (1.3), modules/SetupUI/scim_x11_frontend_setup.cpp (1.10), po/ja_JP.po (1.9), po/zh_CN.po (1.108), po/zh_TW.po (1.108): Fixed some tooltips. 2004-07-20 10:43 James Su * po/: POTFILES.in (1.13), ja_JP.po (1.7), zh_CN.po (1.106), zh_TW.po (1.106): Added scim_compose_key.cpp 2004-07-20 10:33 James Su * src/: Makefile.am (1.33), scim.h (1.23), scim_backend.cpp (1.20), scim_compose_key.cpp (1.1), scim_compose_key.h (1.1), scim_event.cpp (1.19), scim_imengine.h (1.5), scim_module.cpp (1.22): * Added ComposeKeyFactory and ComposeKeyInstance to support compose key. * Close new_handle if the old module failed to unload. 2004-07-20 05:31 James Su * extras/panel/scim_panel_gtk.cpp (1.90): Fixed crash issue if PropertyList is empty. 2004-07-18 13:14 James Su * modules/IMEngine/: scim_socket_imengine.cpp (1.6), scim_socket_imengine.h (1.3), scim_table_imengine.cpp (1.5): Put all global variable into a class object to fix the wrong destruction sequence issue. 2004-07-17 15:52 James Su * po/: zh_CN.po (1.105), zh_TW.po (1.105): Updated zh_TW.po and zh_CN.po. 2004-07-17 10:41 tag scim_0_99_4 2004-07-17 10:41 James Su * ChangeLog (1.43): Updated ChangeLog. 2004-07-17 03:03 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.110): Don't finalize the whole imcontext when exiting scim. 2004-07-17 02:44 James Su * src/scim_event.cpp (1.18): Freeing __scim_keys_by_name is not necessary. 2004-07-16 15:35 James Su * po/ja_JP.po (1.5): Update ja_JP.po. 2004-07-15 18:41 LiuCougar * modules/IMEngine/scim_socket_imengine.cpp (1.4): fixed the segfault issue when using scim-qtimm 2004-07-15 18:35 LiuCougar * src/scim_event.cpp (1.17): add a class to handle static variable cleanup and fixed a mem leak identified by valgrind 2004-07-15 15:03 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.109): Connect to panel on demand. 2004-07-15 14:49 James Su * po/ja_JP.po (1.4), po/zh_CN.po (1.103), po/zh_TW.po (1.103), utils/scimkeyselection.cpp (1.2), utils/scimkeyselection.h (1.3): Improve the Key Selection dialog. Now using a key grabbing window to get a key event. 2004-07-14 08:52 James Su * src/scim_event.cpp (1.16): Don't generate key code string if key.code == 0. 2004-07-14 08:34 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.108), src/scim_event.cpp (1.15): Use get_unicode_code instead of get_ascii_code. 2004-07-13 23:17 James Su * src/: scim_event.cpp (1.14), scim_event.h (1.16): Add more key events and methods. Use binary search in string<->key conversion. 2004-07-13 03:25 James Su * extras/gtk2_immodule/: gtkimcontextscim.cpp (1.105), gtkimcontextscim.h (1.7): Use key_snooper to process the key event instead of filter_keypress. Use a simple gtk im context to post-process the key event to fix the dead/multi key issue. 2004-07-12 14:17 James Su * src/scim_utility.cpp (1.35): Include errno.h in scim_utility.cpp. 2004-07-11 12:34 tag scim_0_99_3 2004-07-11 12:34 James Su * configure.ac (1.97), po/ja_JP.po (1.3), po/zh_CN.po (1.102), po/zh_TW.po (1.102): Bump to 0.99.3. 2004-07-11 04:21 James Su * ChangeLog (1.42): Updated ChangeLog. 2004-07-10 02:30 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.104), extras/setup/scim_setup_ui.cpp (1.40), modules/FrontEnd/scim_x11_frontend.cpp (1.129), src/scim_backend.cpp (1.19), src/scim_config_path.h (1.21), src/scim_global_config.cpp (1.4), src/scim_global_config.h (1.2), src/scim_private.cpp (1.4): Implemented scim_global_config_write, scim_global_config_reset and scim_global_config_flush. Moved /DefaultIMEngineFactory and /DisabledIMEngineFactories to global config. 2004-07-09 00:00 James Su * configure.ac (1.96), docs/manual/zh_CN/user-manual.xml (1.21), extras/gtk2_immodule/gtkimcontextscim.cpp (1.103), modules/FrontEnd/scim_x11_frontend.cpp (1.128), src/scim.cpp (1.42), src/scim_utility.cpp (1.34), src/scim_utility.h (1.27): Added scim_usleep (). Fixed the check_socket_frontend delay issue. 2004-07-08 03:18 James Su * extras/panel/scim_panel_gtk.cpp (1.89): Disable tray icon code, if ENABLE_TRAY_ICON is not defined. 2004-07-07 20:28 LiuCougar * extras/gtk2_immodule/gtkimcontextscim.cpp (1.102): use a timeout to check whether the socket frontend has fully started 2004-07-05 07:15 James Su * src/scim_utility.cpp (1.33): Added .eucCN, .eucJP, .eucKR, .eucTW. 2004-07-05 06:23 James Su * src/scim_socket_transaction.h (1.29): Update comments. 2004-07-05 03:40 James Su * src/.cvsignore (1.4): Added scim-launcher. 2004-07-04 10:19 James Su * configs/Makefile.am (1.7), data/pixmaps/Makefile.am (1.4), extras/gtk2_immodule/Makefile.am (1.20), extras/panel/Makefile.am (1.12), m4/Makefile.am (1.2), tests/Makefile.am (1.8): Delete Makefile.in when make maintainer-clean. 2004-07-04 03:04 James Su * po/zh_TW.po (1.101), THANKS (1.7): Updated zh_TW.po. 2004-07-03 11:02 James Su * po/ja_JP.po (1.2): Updated ja_JP.po. 2004-07-02 14:43 James Su * modules/IMEngine/scim_table_imengine.cpp (1.4): Do not use different attrs for user defined phrases. 2004-07-02 14:06 James Su * src/: scim_config_agent.cpp (1.4), scim_config_base.cpp (1.16), scim_config_base.h (1.19): Get the default config module name from global config file. 2004-07-02 13:24 James Su * THANKS (1.6), configure.ac (1.95), po/ja_JP.po (1.1), po/zh_CN.po (1.101), po/zh_TW.po (1.100): Added ja_JP.po. 2004-07-01 04:59 tag scim_0_99_2 2004-07-01 04:59 James Su * ChangeLog (1.41), configure.ac (1.94), po/zh_CN.po (1.100), po/zh_TW.po (1.99): Bump to 0.99.2. Update ChangeLog. 2004-07-01 04:32 James Su * configure.ac (1.93), extras/panel/scim_panel_gtk.cpp (1.88), po/zh_CN.po (1.99), po/zh_TW.po (1.98): Show help dialog even there is no focused ic. 2004-06-29 15:38 James Su * src/scim_global_config.cpp (1.3): More fix for global config interface. 2004-06-29 15:19 James Su * extras/setup/scim_setup_ui.cpp (1.39), src/scim_global_config.cpp (1.2): Added a per user global config file ~/.scim/global to store the user specified global configs. 2004-06-29 14:42 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.101), src/scim.cpp (1.40): Read the default config module name from global config file. 2004-06-28 14:54 James Su * scim.spec.in (1.62), configs/Makefile.am (1.6), configs/config (1.29), configs/global (1.1), configs/scim.schemas (1.26), extras/gtk2_immodule/gtkimcontextscim.cpp (1.100), extras/panel/Makefile.am (1.11), modules/FrontEnd/scim_x11_frontend.cpp (1.127), src/Makefile.am (1.32), src/scim.h (1.22), src/scim_backend.cpp (1.18), src/scim_config_path.h (1.20), src/scim_global_config.cpp (1.1), src/scim_global_config.h (1.1), src/scim_socket.cpp (1.31), src/scim_utility.cpp (1.32), src/scim_utility.h (1.26): Added scim_global_config_read methods to read configurations from a global configuration file (usually /etc/scim/global). This file is used to store the global configurations for libscim. Added scim_launch_panel methods to launch a panel process. Moved scim-panel-gtk to ${libexecdir}. 2004-06-28 02:32 James Su * po/zh_TW.po (1.97): Updated zh_TW.po 2004-06-27 13:18 James Su * NEWS (1.2), extras/gtk2_immodule/gtkimcontextscim.cpp (1.99), modules/FrontEnd/scim_x11_frontend.cpp (1.126): If the panel program name is not a full path, just prepend the SCIM_BINDIR to it. 2004-06-27 01:27 LiuCougar * modules/FrontEnd/scim_x11_frontend.cpp (1.125): use execvp to start panel program, so that no matter where it is installed, as long as it is under one of the PATH, it can be executed (now x11_frontend can start scim-panel-kde directly no matter where skim is install 2004-06-27 01:25 LiuCougar * extras/gtk2_immodule/gtkimcontextscim.cpp (1.98): use execvp to start panel program, so that no matter where it is installed, as long as it is under one of the PATH, it can be executed (now gtk2_immodule can start scim-panel-kde directly no matter where skim is install 2004-06-26 07:30 James Su * src/scim_chartraits.cpp (1.8): Added using namespace scim; 2004-06-26 06:38 James Su * extras/setup/scim_setup_ui.cpp (1.38): Collapse IMEngineFactory list by default. 2004-06-26 06:32 James Su * modules/SetupUI/scim_panel_gtk_setup.cpp (1.11), po/zh_CN.po (1.98): Remove unused configurations. 2004-06-26 06:20 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.97), extras/panel/scim_panel_gtk.cpp (1.87), src/scim_chartraits.cpp (1.7): Use only UTF-8 encoding in gtk2 immodule. Enhanced the Lookup Table position algorithm. Don't include stdint.h in scim_chartraits.cpp directly. Use scim_types.h instead. 2004-06-26 03:49 James Su * ChangeLog (1.40), extras/gtk2_immodule/gtkimcontextscim.cpp (1.95), po/zh_CN.po (1.97), po/zh_TW.po (1.96), src/scim.cpp (1.39), src/scim_utility.cpp (1.31): Sleep one second after launching the Socket FrontEnd process. Added a missing dot in ja_JP locale list. 2004-06-26 03:03 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.94): Send back the key event when the context_scim is invalid. 2004-06-25 21:07 LiuCougar * src/scim_backend.cpp (1.17): SCIM_CONFIG_SUPPORTED_UNICODE_LOCALES should have a none empty default value, otherwise scim can not be used under UTF-8 locale(s) 2004-06-25 13:08 tag scim_0_99_1 2004-06-25 13:08 James Su * configure.ac (1.92), po/zh_CN.po (1.96), po/zh_TW.po (1.95): Bump to 0.99.1 2004-06-25 03:48 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.93), modules/FrontEnd/scim_x11_frontend.cpp (1.124): Start panel with --no-stay option. 2004-06-25 03:16 James Su * Makefile.am (1.16), extras/setup/Makefile.am (1.7), po/Makefile.in.in (1.6), po/zh_CN.po (1.95), po/zh_TW.po (1.94): Delete some temporary files during "make clean". 2004-06-24 05:48 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.92), extras/panel/scim_panel_gtk.cpp (1.86), modules/FrontEnd/scim_x11_frontend.cpp (1.123), modules/FrontEnd/scim_x11_frontend.h (1.35), src/scim_socket_transaction.h (1.28): Added exit command. If debug is enabled, an "Exit" command will be shown on the command menu of GTK Panel. This command is used to let all scim relates process exit. 2004-06-23 03:04 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.91): Try socket frontend connection several times. 2004-06-22 14:02 James Su * modules/SetupUI/scim_x11_frontend_setup.cpp (1.9): Get rid off the "Show status box" option. 2004-06-22 13:06 James Su * src/: scim.cpp (1.38), scim_socket.cpp (1.30): Use AF_UNIX/PF_UNIX instead of AF_LOCAL/PF_LOCAL. 2004-06-22 13:01 LiuCougar * modules/SetupUI/scim_x11_frontend_setup.cpp (1.8): default value of SCIM_CONFIG_FRONTEND_X11_ONTHESPOT should be false 2004-06-21 04:21 James Su * scim.spec.in (1.61), po/zh_CN.po (1.94), po/zh_TW.po (1.93): Fixed the %post %postun scripts. 2004-06-20 23:13 LiuCougar * mkchlog (1.5): change liuspider's email 2004-06-20 15:42 James Su * docs/manual/zh_CN/user-manual.xml (1.20): Update gtk2 immodule doc. 2004-06-20 13:07 tag scim_0_99_0 2004-06-20 13:07 James Su * scim.spec.in (1.60), po/zh_CN.po (1.93), po/zh_TW.po (1.92): Fixed the configure options. 2004-06-20 10:07 James Su * modules/IMEngine/scim_socket_imengine.cpp (1.3): Fixed the socket reconnect issue. 2004-06-20 09:22 James Su * scim.spec.in (1.59): Added configure options. 2004-06-20 08:47 James Su * scim.spec.in (1.58), po/zh_CN.po (1.91), po/zh_TW.po (1.90): Merge all binary packages into one package. 2004-06-20 07:50 James Su * docs/: topng (1.2), manual/zh_CN/figures/distributed-scim.png (1.2): Updated distributed-scim.png. Remove useless topng script. 2004-06-20 07:35 James Su * docs/design.zh_CN (1.3), docs/developers (1.3), docs/manual/zh_CN/user-manual.xml (1.19), extras/gtk2_immodule/gtkimcontextscim.cpp (1.90), extras/panel/scim_panel_gtk.cpp (1.85), extras/setup/scim_setup_ui.cpp (1.37), modules/Config/scim_socket_config.cpp (1.16), modules/SetupUI/scim_panel_gtk_setup.cpp (1.10), po/zh_CN.po (1.90), po/zh_TW.po (1.89), src/scim.cpp (1.37), src/scim_socket.cpp (1.29), tests/testpanel.cpp (1.9): Updated the documents a little. Fixed the config reload issue of SocketConfig module. Added "Show property label" option into the gtk panel setup module. Use "stderr" as the debug output target by default. Updated testpanel to use the standard open connection api. 2004-06-19 14:22 James Su * ChangeLog (1.39): Updated ChangeLog. 2004-06-19 12:57 James Su * configure.ac (1.91), scim-gtkutils.pc.in (1.2), scim.pc.in (1.15), scim.spec.in (1.57), configs/config (1.28), configs/scim.schemas (1.25), docs/manual/zh_CN/user-manual.xml (1.18), docs/manual/zh_CN/figures/scim-setup-engines.png (1.1), docs/manual/zh_CN/figures/scim-setup-frontend-x11.png (1.3), docs/manual/zh_CN/figures/scim-setup-panel-gtk.png (1.3), docs/manual/zh_CN/figures/scim-setup-servers.png (1.2), docs/manual/zh_CN/figures/scim-setup-splash.png (1.3), extras/gtk2_immodule/Makefile.am (1.19), extras/gtk2_immodule/gtkimcontextscim.cpp (1.89), extras/panel/Makefile.am (1.10), extras/panel/scim_panel_gtk.cpp (1.84), extras/setup/Makefile.am (1.6), modules/Config/Makefile.am (1.11), modules/Config/scim_socket_config.cpp (1.15), modules/FrontEnd/Makefile.am (1.28), modules/FrontEnd/scim_socket_frontend.cpp (1.25), modules/FrontEnd/scim_socket_frontend.h (1.17), modules/FrontEnd/scim_x11_frontend.cpp (1.122), modules/IMEngine/Makefile.am (1.2), modules/IMEngine/scim_socket_imengine.cpp (1.2), modules/IMEngine/scim_socket_imengine.h (1.2), modules/SetupUI/Makefile.am (1.8), modules/SetupUI/scim_panel_gtk_setup.cpp (1.9), modules/SetupUI/scim_socket_frontend_setup.cpp (1.5), modules/SetupUI/scim_socket_imengine_setup.cpp (1.2), po/POTFILES.in (1.12), po/zh_CN.po (1.89), po/zh_TW.po (1.88), src/Makefile.am (1.31), src/scim.cpp (1.36), src/scim_imengine.cpp (1.4), src/scim_imengine.h (1.4), src/scim_launcher.cpp (1.1), src/scim_panel.h (1.11), src/scim_socket.cpp (1.28), src/scim_socket.h (1.17), src/scim_socket_transaction.cpp (1.26), src/scim_socket_transaction.h (1.27), src/scim_utility.cpp (1.30), src/scim_utility.h (1.25), tests/Makefile.am (1.7), utils/Makefile.am (1.7): Added command scim-launcher to start scim process. Added scim_launch method to start a scim process by using scim-launcher command. Modified scim.cpp to use scim_launch and start a scim SocketFrontEnd process if necessary. Modified gtkimcontextscim.cpp to use scim_launch to start a SocketFrontEnd process if necessary. Made the socket addresses of SocketFrontEnd SocketIMEngine SocketConfig and Panel static. Added scim_get_default_socket_frontend_address (), scim_get_default_socket_imengine_address () and scim_get_default_panel_socket_address () to get the default addresses. Added scim_get_default_socket_timeout () to get the default socket timeout. Removed the setup modules of SocketFrontEnd and SocketIMEngine. Simplifed the libtool versioning rule. Rename the library name to libscim-1.0 2004-06-18 02:35 LiuCougar * tests/testpanel.cpp (1.8): as long as ident contains Panel it should be OK 2004-06-17 00:27 James Su * extras/panel/scim_panel_gtk.cpp (1.83): Use single underline instead of double underline. 2004-06-15 14:41 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.88): Draw underline when necessary. 2004-06-15 14:12 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.87): Don't draw double underline. 2004-06-15 10:41 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.86), extras/panel/scim_panel_gtk.cpp (1.82), modules/SetupUI/scim_table_imengine_setup.cpp (1.2), po/zh_CN.po (1.88), po/zh_TW.po (1.87), src/scim_utility.cpp (1.29): Add some missing language names. Limit spot location within current screen in gtk panel. 2004-06-15 06:25 James Su * extras/panel/scim_panel_gtk.cpp (1.81): Don't hide toolbar if any menu is activated. 2004-06-15 04:31 James Su * po/zh_CN.po (1.87), po/zh_TW.po (1.86), src/scim_lookup_table.cpp (1.25): Fixed a deadlock in set_cursor_pos. 2004-06-15 03:25 James Su * extras/panel/scim_panel_gtk.cpp (1.80), src/scim_lookup_table.cpp (1.24), src/scim_lookup_table.h (1.25), src/scim_socket_transaction.cpp (1.25): Rename LookupTable::get_cursor_in_page to get_cursor_in_current_page. Add LookupTable::set_cursor_pos and set_cursor_pos_in_current_page. 2004-06-15 02:37 James Su * modules/FrontEnd/IMdkit/i18nMethod.c (1.3): More buffer overflow fix. 2004-06-15 02:35 James Su * extras/setup/scim_setup_ui.cpp (1.36), modules/FrontEnd/scim_x11_frontend.cpp (1.121), modules/FrontEnd/IMdkit/i18nMethod.c (1.2), modules/IMEngine/scim_table_imengine.cpp (1.3), modules/IMEngine/scim_table_imengine.h (1.2), src/scim_frontend.cpp (1.32), src/scim_frontend.h (1.28), src/scim_imengine.cpp (1.3), src/scim_imengine.h (1.3): Hide implementation details of IMEngineFactoryBase, IMEngineInstanceBase and FrontEndBase. Fixed a buffer overflow in IMdkit. 2004-06-14 10:23 James Su * extras/setup/scim_setup_ui.cpp (1.35): Use normalized language id to categorize the factories. 2004-06-14 10:07 James Su * src/: scim_imengine.cpp (1.2), scim_imengine.h (1.2): Add m_language into IMEngineFactoryBase. This breaks the ABI. 2004-06-14 01:33 LiuCougar * THANKS (1.5): change liuspider's email 2004-06-12 11:17 James Su * modules/SetupUI/: scim_socket_imengine_setup.cpp (1.1), scim_table_imengine_setup.cpp (1.1): Added missing files. 2004-06-12 11:05 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.120), modules/FrontEnd/scim_x11_frontend.h (1.34), modules/IMEngine/scim_generic_table.cpp (1.2), modules/IMEngine/scim_generic_table.h (1.2), modules/IMEngine/scim_rawcode_imengine.cpp (1.2), modules/IMEngine/scim_rawcode_imengine.h (1.2), modules/IMEngine/scim_table_imengine.cpp (1.2), po/zh_CN.po (1.86), po/zh_TW.po (1.85), src/scim_backend.cpp (1.16), src/scim_utility.cpp (1.28): Uses set_languages instead of set_locales in IMEngines. Filtered the locales which do not supported by Xlib when initializing XIM Server in X11 FrontEnd. Fixed the duplicated locales in CommonBackEnd. 2004-06-11 23:55 James Su * po/: POTFILES.in (1.11), zh_CN.po (1.85), zh_TW.po (1.84): Fixed po compilation. 2004-06-11 15:36 James Su * src/scim.cpp (1.35): Add -s -ns option for backward compatibility. 2004-06-10 13:30 James Su * README (1.12): Updated README a little. 2004-06-10 13:19 James Su * README (1.11), THANKS (1.4), TODO (1.7), configure.ac (1.90), modules/SetupUI/Makefile.am (1.7): Fixed a compilation issue. 2004-06-09 15:12 James Su * README (1.10), configure.ac (1.89), scim.spec.in (1.56), configs/config (1.27), configs/scim.schemas (1.24), extras/gtk2_immodule/gtkimcontextscim.cpp (1.85), extras/panel/scim_panel_gtk.cpp (1.79), extras/setup/scim_setup_ui.cpp (1.34), extras/setup/scim_setup_ui.h (1.17), modules/Makefile.am (1.4), modules/FrontEnd/scim_socket_frontend.cpp (1.24), modules/FrontEnd/scim_socket_frontend.h (1.16), modules/FrontEnd/scim_x11_frontend.cpp (1.119), modules/FrontEnd/scim_x11_frontend.h (1.33), modules/IMEngine/.cvsignore (1.1), modules/IMEngine/Makefile.am (1.1), modules/IMEngine/scim_generic_table.cpp (1.1), modules/IMEngine/scim_generic_table.h (1.1), modules/IMEngine/scim_make_table.cpp (1.1), modules/IMEngine/scim_rawcode_imengine.cpp (1.1), modules/IMEngine/scim_rawcode_imengine.h (1.1), modules/IMEngine/scim_socket_imengine.cpp (1.1), modules/IMEngine/scim_socket_imengine.h (1.1), modules/IMEngine/scim_table_imengine.cpp (1.1), modules/IMEngine/scim_table_imengine.h (1.1), modules/SetupUI/Makefile.am (1.6), modules/SetupUI/scim_panel_gtk_setup.cpp (1.8), modules/SetupUI/scim_socket_server_setup.cpp (1.5), modules/SetupUI/scim_table_server_setup.cpp (1.28), modules/SetupUI/scim_x11_frontend_setup.cpp (1.7), src/Makefile.am (1.30), src/scim.cpp (1.34), src/scim.h (1.21), src/scim_backend.cpp (1.15), src/scim_backend.h (1.14), src/scim_config_path.h (1.19), src/scim_debug.cpp (1.5), src/scim_debug.h (1.13), src/scim_frontend.cpp (1.31), src/scim_frontend.h (1.27), src/scim_frontend_module.h (1.13), src/scim_imengine.cpp (1.1), src/scim_imengine.h (1.1), src/scim_imengine_module.cpp (1.1), src/scim_imengine_module.h (1.1), src/scim_lookup_table.h (1.23), src/scim_panel.h (1.10), src/scim_property.h (1.4), src/scim_server.cpp (1.33), src/scim_server.h (1.32), src/scim_server_module.cpp (1.15), src/scim_server_module.h (1.15), src/scim_socket_transaction.h (1.26): Rename ServerFactory to IMEngineFactory, ServerInstance to IMEngineInstance. 2004-06-09 05:41 tag scim_before_rename_server 2004-06-09 05:41 James Su * extras/panel/scim_panel_gtk.cpp (1.78), src/scim_utility.cpp (1.27), src/scim_utility.h (1.24), tests/Makefile.am (1.6), tests/testlang.cpp (1.1): Added scim_get_language_locales into scim_utility Added scim_get_normalized_language. Modified scim_validate_language to not get the normalized lang code. Added testlang.cpp to test the language methods. 2004-06-08 10:21 James Su * extras/panel/scim_panel_gtk.cpp (1.77): New LookupTable API finally works. 2004-06-08 03:32 James Su * src/scim_lookup_table.cpp (1.22): New LookupTable finally works. 2004-06-08 02:17 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.84), extras/panel/scim_panel_gtk.cpp (1.76), modules/FrontEnd/scim_socket_frontend.cpp (1.23), modules/FrontEnd/scim_socket_frontend.h (1.15), modules/FrontEnd/scim_x11_frontend.cpp (1.118), modules/FrontEnd/scim_x11_frontend.h (1.32), src/scim_frontend.cpp (1.30), src/scim_lookup_table.h (1.22), src/scim_socket_transaction.h (1.25), tests/testpanel.cpp (1.7): Updated LookupTable API: * Use candidate labels instead of page index keys. * Rename get_content_in_page to get_candidate_in_current_page * Rename number_of_entries to number_of_candidates * Rename append_entry to append_candidate * Remove page up/down keys API * Added lookup_table_page_up/down to ServerInstance API. 2004-06-07 15:47 James Su * src/: scim_lookup_table.cpp (1.21), scim_lookup_table.h (1.21), scim_socket_transaction.cpp (1.24): Rename set_page_labels to set_candidate_labels. 2004-06-07 10:20 James Su * src/: scim.h (1.20), scim_frontend.cpp (1.29), scim_frontend.h (1.26), scim_lookup_table.cpp (1.20), scim_lookup_table.h (1.20), scim_server.cpp (1.32), scim_server.h (1.31), scim_socket_transaction.cpp (1.23), scim_socket_transaction.h (1.24): Updating LookupTable interface. WIP. 2004-06-06 02:32 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.83), extras/panel/scim_panel_gtk.cpp (1.75), src/scim_attribute.h (1.3): Fixed some issue in using Attribute. 2004-06-06 02:04 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.82), extras/panel/scim_panel_gtk.cpp (1.74), modules/FrontEnd/scim_x11_frontend.cpp (1.117), src/scim_attribute.h (1.2), src/scim_socket_transaction.cpp (1.22), src/scim_socket_transaction.h (1.23): Extend Attribute to support foreground/background color. 2004-06-05 23:34 James Su * extras/panel/scim_panel_gtk.cpp (1.73), src/scim_socket_transaction.cpp (1.21): Rename set_tips to set_tip. It's not a typo. 2004-06-05 23:25 James Su * src/scim_property.h (1.2): Rename set_tips to set_tip. It's not a typo. 2004-06-05 14:35 James Su * extras/panel/scim_panel_gtk.cpp (1.72), src/Makefile.am (1.29), src/scim.h (1.19), src/scim_attribute.h (1.1), src/scim_attributes.h (1.11), src/scim_properties.h (1.4), src/scim_property.h (1.1): Rename scim_attributes.h to scim_attribute.h. Rename scim_properties.h to scim_property.h. 2004-06-05 11:56 James Su * extras/panel/scim_panel_gtk.cpp (1.71), src/scim_properties.h (1.3), tests/testpanel.cpp (1.6): Property API. Almost done. 2004-06-04 17:07 James Su * extras/panel/scim_panel_gtk.cpp (1.70): Property. Working in progress. 2004-06-04 14:40 James Su * extras/panel/scim_panel_gtk.cpp (1.69): Property API, working in progress. 2004-06-04 03:59 James Su * extras/panel/scim_panel_gtk.cpp (1.68), src/scim_properties.h (1.2), src/scim_socket_transaction.cpp (1.20), tests/testpanel.cpp (1.5): Property API, working in progress. 2004-05-28 14:26 James Su * src/scim_properties.h (1.1): Add scim_properties.h 2004-05-28 14:22 James Su * src/scim_panel.h (1.9): Add checkable option into Property. 2004-05-28 10:03 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.81): Implemented Property APIs. 2004-05-27 15:28 James Su * modules/FrontEnd/: scim_socket_frontend.cpp (1.22), scim_socket_frontend.h (1.14), scim_x11_frontend.cpp (1.116), scim_x11_frontend.h (1.31): Implemented Property APIs. 2004-05-27 10:19 James Su * src/: scim.h (1.18), scim_frontend.cpp (1.28), scim_frontend.h (1.25), scim_panel.h (1.8), scim_server.cpp (1.31), scim_server.h (1.30), scim_socket_transaction.cpp (1.19), scim_socket_transaction.h (1.22), scim_utility.h (1.23): Added Property and PropertyList interface. Full width punctuation/letter APIs are obsoleted. Status String are obsoleted. (Working In Progress...) 2004-05-23 14:20 tag scim_before_implement_properties 2004-05-23 14:20 James Su * docs/scim.cfg.in (1.9): Updated to doxygen 1.3.6 2004-05-23 14:17 James Su * src/: scim_socket.h (1.16), scim_socket_transaction.h (1.21): Updated doxygen comments. 2004-05-22 13:46 James Su * src/: scim_bind.h (1.8), scim_config_path.h (1.18): Use smart pointer in slot bind methods. 2004-05-22 08:52 James Su * src/: ltdl.c (1.5), ltdl.h (1.2): Update ltdl.c ltdl.h to libtool 1.5.2 2004-05-21 16:03 James Su * extras/panel/scim_panel_gtk.cpp (1.67): Reload config if scim-setup returns none-zero. 2004-05-21 16:00 James Su * extras/setup/scim_setup_ui.cpp (1.33): Updated restart hint message. 2004-05-21 15:18 James Su * po/zh_CN.po (1.84), po/zh_TW.po (1.83), src/scim_connection.cpp (1.5), src/scim_connection.h (1.8), src/scim_signals.cpp (1.5), src/scim_signals.h (1.9): Use smart pointer in Connection and Signal class to hold SlotNode pointer. 2004-05-21 10:55 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.80): Delete server module before destroy config instance. 2004-05-19 10:45 James Su * ChangeLog (1.38): Update ChangeLog 2004-05-19 08:55 James Su * modules/: Config/scim_socket_config.cpp (1.14), Config/scim_socket_config.h (1.6), FrontEnd/scim_socket_frontend.cpp (1.21), FrontEnd/scim_x11_frontend.cpp (1.115): (All) Use new methods scim_socket_trans_open_connection () and scim_socket_trans_accept_connection () to establish socket connection. (Server modules) Disconnect config reload signal connection when destroying the IM Server objects. (Socket Config) Try to re-establish the connection if socket read/write failed. 2004-05-19 08:50 James Su * extras/: gtk2_immodule/gtkimcontextscim.cpp (1.79), panel/scim_panel_gtk.cpp (1.66): Use new method scim_socket_trans_open_connection () and scim_socket_trans_accept_connection () to establish socket connection. 2004-05-19 08:36 James Su * src/: scim_private.cpp (1.3), scim_socket_transaction.cpp (1.18), scim_socket_transaction.h (1.20): Add scim_socket_trans_open_connection () and scim_socket_trans_accept_connection () to abstract the connection hand shake protocol. 2004-05-19 08:34 James Su * src/: scim_connection.cpp (1.4), scim_connection.h (1.7), scim_signals.cpp (1.4), scim_signals.h (1.8): Unreference the slot when disconnecting it. 2004-05-13 11:25 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.78), extras/panel/scim_panel_gtk.cpp (1.65), modules/FrontEnd/scim_x11_frontend.cpp (1.114): run scim-panel-gtk and scim-setup with right config module option. 2004-05-13 10:05 James Su * modules/FrontEnd/: scim_socket_frontend.cpp (1.20), scim_x11_frontend.cpp (1.113): Only connect the config reload signal when the config pointer is not null. 2004-05-13 09:19 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.77): Implemented configuration reload code. 2004-05-13 09:07 James Su * src/scim.cpp (1.33): Don't unload any module when exit. 2004-05-13 09:03 James Su * modules/Config/: scim_gconf_config.cpp (1.17), scim_gconf_config.h (1.10), scim_simple_config.cpp (1.28), scim_simple_config.h (1.16): Fire the reload signal not only when the config file has been changed by other app, but also when there is any key changed within itself. 2004-05-13 08:54 James Su * modules/FrontEnd/: scim_socket_frontend.cpp (1.19), scim_socket_frontend.h (1.13), scim_x11_frontend.cpp (1.112), scim_x11_frontend.h (1.30): Implemented configuration reload code. 2004-05-13 06:11 James Su * extras/panel/scim_panel_gtk.cpp (1.64): Implemented the reload configuration code. 2004-05-13 06:10 James Su * modules/Config/: scim_gconf_config.cpp (1.16), scim_gconf_config.h (1.9), scim_simple_config.cpp (1.27): flush only when modification took place. 2004-05-13 06:07 James Su * src/scim_config_base.h (1.18): Pass ConfigPointer reference instead of ConfigBase * in config reload signal call. 2004-05-10 12:55 James Su * modules/Config/scim_socket_config.cpp (1.13): The reply from Socket FrontEnd contains a REPLY command. 2004-05-10 12:34 James Su * modules/Config/scim_socket_config.cpp (scim_0_9.1): Transaction from socket frontend contains a reply command. 2004-05-10 08:46 James Su * ChangeLog, extras/panel/scim_panel_gtk.cpp, modules/FrontEnd/scim_x11_frontend.cpp, po/zh_CN.po, po/zh_TW.po, src/scim_socket.cpp (scim_0_9.[1,2,1,2,2,1]): Workaround for gcc 3.4 compilation issue. 2004-05-10 08:24 James Su * ChangeLog (1.37), extras/panel/scim_panel_gtk.cpp (1.63), extras/setup/scim_setup.cpp (1.12), extras/setup/scim_setup_ui.cpp (1.32), extras/setup/scim_setup_ui.h (1.16), modules/Config/scim_gconf_config.cpp (1.15), modules/Config/scim_gconf_config.h (1.8), modules/Config/scim_simple_config.cpp (1.26), modules/Config/scim_simple_config.h (1.15), modules/Config/scim_socket_config.cpp (1.12), modules/Config/scim_socket_config.h (1.5), modules/FrontEnd/scim_socket_frontend.cpp (1.18), src/scim_config_base.h (1.17), src/scim_config_path.h (1.17): More config reload implementation. Fixed vector, vector load and save of GConf config module. 2004-05-10 00:49 James Su * docs/manual/zh_CN/user-manual.xml (scim_0_9.1): Updated the homepage url. 2004-05-10 00:44 James Su * docs/manual/zh_CN/user-manual.xml (1.17): Updated the homepage url. 2004-05-09 08:23 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.76), modules/FrontEnd/scim_x11_frontend.cpp (1.111): Added code to handle RELOAD_CONFIG socket command. 2004-05-09 08:10 James Su * extras/panel/scim_panel_gtk.cpp (1.62): Uses gtk_image_menu_item to draw menu items. Added Reload Configuration command into the command menu. 2004-05-08 08:17 James Su * modules/Config/scim_gconf_config.cpp (1.14), modules/Config/scim_simple_config.cpp (1.25), modules/Config/scim_socket_config.cpp (1.11), src/scim_config_base.cpp (1.15), src/scim_config_base.h (1.16): Added reload signal to config interface, which can inform the other objects connecting to this signal to reload the configurations. 2004-05-08 06:23 James Su * modules/FrontEnd/scim_socket_frontend.cpp (1.17), modules/FrontEnd/scim_socket_frontend.h (1.12), modules/FrontEnd/scim_x11_frontend.cpp (1.110), src/scim_config_base.cpp (1.14), src/scim_config_base.h (1.15), src/scim_socket_transaction.h (1.19), modules/Config/scim_gconf_config.cpp (1.13), modules/Config/scim_simple_config.cpp (1.24), modules/Config/scim_gconf_config.h (1.7), modules/Config/scim_simple_config.h (1.14), modules/Config/scim_socket_config.cpp (1.10), modules/Config/scim_socket_config.h (1.4): Added reload () method into config interface. 2004-05-07 20:32 LiuCougar * modules/FrontEnd/scim_x11_frontend.cpp (1.109): do not send SCIM_TRANS_CMD_PANEL_UPDATE_SPOT_LOCATION if the position is the same as before 2004-05-07 02:07 tag scim_0_9_7 2004-05-07 02:07 James Su * configure.ac, mkchlog (scim_0_9.[2,1]): Release 0.9.7 2004-05-07 02:04 James Su * scim.spec.in (scim_0_9.2): Changed the gtkimmodule path to @GTKLIBDIR@/gtk-2.0/immodules/ 2004-05-06 16:33 James Su * ChangeLog (1.36), extras/setup/scim_setup_ui.cpp (1.31), extras/setup/scim_setup_ui.h (1.15): New method to load and save server list config. And rewrite server_list_recalculate_insistent function, also renamed it to server_list_update_inconsistent. 2004-05-06 03:42 James Su * ChangeLog (1.35), ChangeLog.old (1.2), mkchlog (1.4): Updated mkchlog and regenerated ChangeLog. 2004-05-06 03:14 James Su * extras/panel/scim_panel_gtk.cpp (1.61), modules/FrontEnd/scim_x11_frontend.cpp (1.108): More fix of the gcc 3.4 compilation issue. 2004-05-05 16:26 James Su * extras/panel/scim_panel_gtk.cpp (1.60): Settle the toolbar window after adding/deleting GUI client commands. 2004-05-05 14:53 James Su * src/scim_socket.cpp (1.27): Try to solve the gcc 3.4 compilation issue. 2004-05-05 14:21 James Su * ChangeLog (1.34), extras/panel/scim_panel_gtk.cpp (1.59), src/scim_socket.cpp (1.26): Fixed the void pointer inc issue. 2004-05-05 03:42 James Su * ChangeLog (1.33), ChangeLog.old (1.1), extras/panel/scim_panel_gtk.cpp (1.58), tests/testpanel.cpp (1.4): Fixed the icon loading issue. Added GUI Client commands into the command menu. 2004-05-04 16:16 James Su * configure.ac, scim.spec.in, extras/gtk2_immodule/Makefile.am (scim_0_9.[1,1,1]): Fixed the gtkimmodule install path issue. 2004-05-04 14:57 James Su * configure.ac (1.88), scim.spec.in (1.55), extras/gtk2_immodule/Makefile.am (1.18): Fixed the gtkimmodule install path issue. 2004-05-04 12:31 LiuCougar * extras/setup/: scim_setup_ui.cpp (1.30), scim_setup_ui.h (1.14): make the checkbox conresponding with a group work 2004-05-04 03:53 James Su * extras/panel/scim_panel_gtk.cpp (1.56), src/scim_panel.h (1.6), tests/testpanel.cpp (1.2): Implemented GUI_ADD_COMMAND, GUI_DEL_COMMAND, GUI_UPDATE_COMMAND. 2004-05-03 21:50 LiuCougar * extras/setup/scim_setup_ui.cpp (1.29): fixed bugs: disabled server list can not be saved and loaded 2004-05-03 04:40 James Su * src/scim_frontend.cpp (1.27): Fixed an initialization bug in Socket Server. 2004-05-02 06:11 James Su * scim.pc.in (1.14): Added SCIM_BINARY_VERSION into scim.pc.in 2004-05-02 05:15 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.74), extras/panel/scim_panel_gtk.cpp (1.54), modules/Config/scim_socket_config.cpp (1.9), modules/FrontEnd/scim_socket_frontend.cpp (1.16), modules/FrontEnd/scim_socket_frontend.h (1.11), modules/FrontEnd/scim_x11_frontend.cpp (1.106), src/scim_panel.h (1.4): Unified the protocol of SocketFrontEnd and Panel. 2004-05-01 16:36 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.73), modules/FrontEnd/scim_x11_frontend.cpp (1.105): Enhanced the panel communication protocol. 2004-05-01 16:06 James Su * extras/panel/scim_panel_gtk.cpp (1.53), modules/FrontEnd/scim_socket_frontend.cpp (1.15), modules/FrontEnd/scim_x11_frontend.cpp (1.104), modules/FrontEnd/scim_x11_frontend.h (1.29): WIP. 2004-05-01 13:31 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.72), extras/panel/scim_panel_gtk.cpp (1.52), extras/setup/scim_setup.cpp (1.11), src/Makefile.am (1.28), src/scim.cpp (1.32), src/scim_config_agent.cpp (1.3), src/scim_private.cpp (1.2), src/scim_private.h (1.9), tests/Makefile.am (1.3): Fixed the libintl detection issue and the textdomain binding issue. 2004-05-01 13:23 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp, extras/panel/scim_panel_gtk.cpp, extras/setup/scim_setup.cpp, src/Makefile.am, src/scim.cpp, src/scim_config_agent.cpp, src/scim_private.cpp, src/scim_private.h, tests/Makefile.am (scim_0_9.[1,1,1,1,1,1,1,1,1]): Fixed the libintl detection issue and the textdomain binding issue. 2004-04-30 14:58 James Su * modules/FrontEnd/: scim_socket_frontend.cpp (1.14), scim_socket_frontend.h (1.10): WIP. 2004-04-30 14:46 James Su * extras/panel/scim_panel_gtk.cpp (1.51): WIP. 2004-04-29 13:41 James Su * modules/Config/scim_socket_config.cpp (1.7), modules/FrontEnd/scim_socket_frontend.cpp (1.12), src/scim_panel.h (1.2): Add version check in socket frontend/server communication protocol. 2004-04-29 06:27 James Su * README (scim_0_9.1), README (1.9): Change the email address in README. 2004-04-29 05:59 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.27), po/zh_CN.po (1.83), po/zh_TW.po (1.82): Add language info in table server setup module. 2004-04-28 15:59 James Su * configure.ac (1.87): bump the version to 0.99.0 2004-04-28 15:56 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.71), extras/panel/scim_panel_gtk.cpp (1.50), extras/setup/scim_setup_ui.cpp (1.28), modules/FrontEnd/scim_x11_frontend.cpp (1.103), src/scim_server.cpp (1.30), src/scim_utility.cpp (1.26), src/scim_utility.h (1.21): language group is now working. 2004-04-25 14:09 James Su * modules/FrontEnd/scim_socket_frontend.cpp (1.11), modules/FrontEnd/scim_socket_frontend.h (1.9), modules/FrontEnd/scim_x11_frontend.cpp (1.101), po/zh_CN.po (1.81), po/zh_TW.po (1.80), src/scim_frontend.cpp (1.26), src/scim_frontend.h (1.24), src/scim_socket_transaction.h (1.17), src/scim_utility.cpp (1.22), src/scim_utility.h (1.19): Language menu WIP. 2004-04-23 12:30 James Su * src/: scim_server.cpp (1.26), scim_server.h (1.28): Added get_language () into ServerFactory interface. 2004-04-22 10:19 James Su * configure.ac (1.86), scim.spec.in (1.54), src/scim_utility.h (1.18): scim 0.9.6 2004-04-22 09:37 James Su * docs/manual/zh_CN/user-manual.xml (1.16): Don't store configs into locale and encoding specific config files. 2004-04-22 07:55 James Su * modules/Config/: scim_simple_config.cpp (1.23), scim_simple_config.h (1.13): Don't store configs into locale and encoding specific config files. 2004-04-22 02:38 James Su * extras/setup/: scim_setup_ui.cpp (1.24), scim_setup_ui.h (1.12): Added --config option to select the default config module. 2004-04-22 00:21 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.68), modules/FrontEnd/scim_x11_frontend.cpp (1.100), po/zh_CN.po (1.80), po/zh_TW.po (1.79): Focus out the server instance when the input method is turned off by user. 2004-04-18 22:05 LiuCougar * configure.ac (1.85): typo 2004-04-18 09:45 tag scim_0_9_5 2004-04-18 09:45 James Su * configure.ac (1.84), docs/manual/zh_CN/user-manual.xml (1.15), po/zh_CN.po (1.79), po/zh_TW.po (1.78): Ready for 0.9.5 2004-04-18 07:01 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.26), po/zh_CN.po (1.78), po/zh_TW.po (1.77): Added DEF_FULL_WIDTH_PUNCT and DEF_FULL_WIDTH_LETTER options into generic table. 2004-04-13 16:06 LiuCougar * scim.pc.in (1.13): typo fixed 2004-04-13 02:54 tag scim_0_9_4 2004-04-13 02:54 James Su * po/quot.sed (1.1): Update gettext and intltool. 2004-04-13 02:48 James Su * .cvsignore (1.3), ABOUT-NLS (1.2), ChangeLog (1.32), Makefile.am (1.14), bootstrap (1.6), config.rpath (1.1), configure.ac (1.82), mkinstalldirs (1.1), extras/panel/Makefile.am (1.9), extras/setup/Makefile.am (1.5), intl/ChangeLog (1.2), intl/Makefile.in (1.2), intl/VERSION (1.2), intl/bindtextdom.c (1.2), intl/config.charset (1.2), intl/dcgettext.c (1.2), intl/dcigettext.c (1.2), intl/dcngettext.c (1.2), intl/dgettext.c (1.2), intl/dngettext.c (1.2), intl/eval-plural.h (1.1), intl/gettext.c (1.2), intl/gettextP.h (1.2), intl/gmo.h (1.1), intl/hash-string.h (1.2), intl/intl-compat.c (1.2), intl/l10nflist.c (1.2), intl/libgnuintl.h (1.2), intl/loadinfo.h (1.2), intl/loadmsgcat.c (1.2), intl/localcharset.c (1.2), intl/localealias.c (1.2), intl/localename.c (1.1), intl/ngettext.c (1.2), intl/os2compat.c (1.1), intl/os2compat.h (1.1), intl/osdep.c (1.1), intl/plural-exp.c (1.1), intl/plural-exp.h (1.1), intl/plural.c (1.2), intl/plural.y (1.2), intl/textdomain.c (1.2), m4/.cvsignore (1.1), m4/ChangeLog (1.1), m4/Makefile.am (1.1), m4/codeset.m4 (1.1), m4/gettext.m4 (1.1), m4/glibc21.m4 (1.1), m4/iconv.m4 (1.1), m4/intdiv0.m4 (1.1), m4/inttypes-pri.m4 (1.1), m4/inttypes.m4 (1.1), m4/inttypes_h.m4 (1.1), m4/isc-posix.m4 (1.1), m4/lcmessage.m4 (1.1), m4/lib-ld.m4 (1.1), m4/lib-link.m4 (1.1), m4/lib-prefix.m4 (1.1), m4/progtest.m4 (1.1), m4/stdint_h.m4 (1.1), m4/uintmax_t.m4 (1.1), m4/ulonglong.m4 (1.1), modules/Config/Makefile.am (1.10), modules/FrontEnd/Makefile.am (1.27), modules/SetupUI/Makefile.am (1.5), po/.cvsignore (1.2), po/ChangeLog (1.2), po/Makefile.in.in (1.5), po/Makevars (1.1), po/Rules-quot (1.1), po/boldquot.sed (1.1), po/en@boldquot.header (1.1), po/en@quot.header (1.1), po/insert-header.sin (1.1), po/mkzhtw.sh (1.2), po/remove-potcdate.sin (1.1), po/scim.pot (1.68), src/.cvsignore (1.2), src/Makefile.am (1.27), src/scim_private.h (1.8), utils/Makefile.am (1.6): Update gettext and intltool. 2004-04-12 21:46 LiuCougar * modules/Config/scim_socket_config.cpp (1.6): SCIM_TRANS_CMD_GET_CONFIG_VECTOR_STRING should be SCIM_TRANS_CMD_GET_CONFIG_VECTOR_INT 2004-04-11 10:53 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.24): Added always_show_lookup option into generic table. 2004-04-10 13:05 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.20): Added Auto Fill option into setup ui. 2004-04-07 15:29 James Su * src/scim_panel.h (1.1): Move scim_panel.h to src/ 2004-04-07 15:20 James Su * bootstrap (1.5), configure.ac (1.81), extras/gtk2_immodule/gtkimcontextscim.cpp (1.66), extras/panel/Makefile.am (1.8), extras/panel/scim_panel.h (1.8), extras/panel/scim_panel_gtk.cpp (1.47), modules/FrontEnd/scim_x11_frontend.cpp (1.98), modules/SetupUI/scim_panel_gtk_setup.cpp (1.7), src/Makefile.am (1.26), src/scim.h (1.17): Move scim_panel.h to src/ 2004-04-03 15:15 LiuCougar * configure.ac (1.79): X11 FrontEnd no longer depends on GTK2 2004-04-01 06:01 James Su * src/scim.cpp (1.31): Fixed bug in setting Supported Unicode Locales. 2004-03-29 18:01 James Su * AUTHORS (1.4), configure.ac (1.78), extras/setup/scim_setup_ui.cpp (1.22), modules/FrontEnd/scim_x11_frontend.cpp (1.97): Change the email to suzhe@tsinghua.org.cn 2004-03-20 12:41 James Su * configure.ac (1.77), scim.spec.in (1.52): Fixed the gtk version issue. 2004-03-15 03:35 tag scim_0_9_3 2004-03-15 03:35 James Su * configure.ac (1.76), scim.spec.in (1.51): scim 0.9.3 2004-03-15 02:18 James Su * docs/manual/zh_CN/: user-manual.xml (1.14), figures/Makefile.am (1.2), figures/scim-setup-frontend-x11.png (1.2), figures/scim-setup-panel-gtk.png (1.2), figures/scim-setup-servers.png (1.1), figures/scim-setup-splash.png (1.2): Updated user manual for 0.9.3. 2004-03-14 00:32 James Su * po/: scim.pot (1.67), zh_CN.po (1.74), zh_TW.po (1.73): Update zh_TW.po 2004-03-12 08:18 James Su * extras/setup/scim_setup_ui.cpp (1.20), extras/setup/scim_setup_ui.h (1.11), po/scim.pot (1.66), po/zh_CN.po (1.73), po/zh_TW.po (1.72): Added server list view. 2004-03-11 07:55 James Su * utils/scimstringview.c (1.2), configure.ac (1.75): Added support for gtk+-2.4 2004-03-09 09:38 James Su * configure.ac (1.74), scim.spec.in (1.50), docs/manual/zh_CN/user-manual.xml (1.13), po/scim.pot (1.65), po/zh_CN.po (1.72), po/zh_TW.po (1.71): bump to 0.9.3 2004-03-08 04:21 James Su * AUTHORS (1.3), modules/SetupUI/scim_panel_gtk_setup.cpp (1.6), modules/SetupUI/scim_socket_frontend_setup.cpp (1.3), modules/SetupUI/scim_socket_server_setup.cpp (1.4), modules/SetupUI/scim_x11_frontend_setup.cpp (1.6), po/scim.pot (1.64), po/zh_CN.po (1.71), po/zh_TW.po (1.70): Changed some strings in setup modules. 2004-03-06 15:48 James Su * src/: scim.cpp (1.30), scim_config_path.h (1.16), scim_server_module.cpp (1.14), scim_server_module.h (1.14): Added disable server factory ability. 2004-03-06 14:46 James Su * modules/Config/scim_simple_config.cpp (1.22): Fixed reading double and int-list issue. 2004-03-04 10:19 James Su * scim.spec.in (1.49): Added scim-config-agent. 2004-03-04 05:53 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.65), extras/panel/scim_panel_gtk.cpp (1.46), modules/FrontEnd/scim_x11_frontend.cpp (1.96): Fixed the panel daemon restart behaviour of gtk2 immodule and x11 frontend. 2004-03-02 09:07 James Su * modules/Config/scim_gconf_config.cpp (1.12), modules/Config/scim_simple_config.cpp (1.20), modules/Config/scim_simple_config.h (1.11), po/scim.pot (1.63), po/zh_CN.po (1.70), po/zh_TW.po (1.69), src/scim_config_agent.cpp (1.2): Fixed a bug in simple config module. 2004-03-01 09:41 James Su * src/: Makefile.am (1.25), scim.cpp (1.29), scim_config_agent.cpp (1.1), scim_config_base.h (1.14): Added a utility to get/set configuration at command line. 2004-03-01 03:47 James Su * src/scim_lookup_table.h (1.19): Update the API docs. 2004-02-27 14:47 James Su * extras/panel/scim_panel_gtk.cpp (1.45): Fixed some control reaches end of non void function issues. 2004-02-27 08:25 tag scim_0_9_2 2004-02-27 08:25 James Su * configure.ac (1.73): 0.9.2 2004-02-27 04:09 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.17): Updated the table setup module according to the new table server module. 2004-02-25 23:38 James Su * src/scim_module.cpp (1.21): Work around for gcc 2.95.x. 2004-02-20 09:07 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.15), po/scim.pot (1.61), po/zh_CN.po (1.68), po/zh_TW.po (1.67): * Fixed a crash in table module * Added AUTO_COMMIT, AUTO_SPLIT options in table format. 2004-02-16 06:32 tag scim_0_9_1 2004-02-16 06:32 James Su * configure.ac (1.72): Bump to 0.9.1 2004-02-16 06:22 James Su * docs/manual/zh_CN/user-manual.xml (1.11): Updated the SCIM version. 2004-02-16 06:17 James Su * po/: scim.pot (1.60), zh_CN.po (1.67), zh_TW.po (1.66): Updated po files. 2004-02-16 05:15 James Su * src/: scim_iconv.h (1.14), scim_lookup_table.h (1.18): Updated the API reference. 2004-02-12 09:40 James Su * src/: scim_event.h (1.15), scim_frontend.h (1.23), scim_frontend_module.h (1.12), scim_iconv.h (1.13), scim_server.h (1.27), scim_server_module.h (1.13): Updated the API references. 2004-02-10 08:10 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.13): All features of the new table setup module were implemented. 2004-02-09 09:44 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.12): New table setup module WIP. 2004-02-06 07:53 James Su * src/: scim.h (1.16), scim_attributes.h (1.10), scim_backend.h (1.13), scim_bind.h (1.7), scim_config_base.h (1.13), scim_config_module.h (1.12), scim_config_path.h (1.14), scim_connection.h (1.6), scim_debug.h (1.12), scim_event.h (1.14), scim_exception.h (1.7), scim_frontend.h (1.22), scim_frontend_module.h (1.11), scim_iconv.h (1.12), scim_lookup_table.h (1.17), scim_module.h (1.16), scim_object.h (1.6), scim_pointer.h (1.8), scim_private.h (1.7), scim_server.h (1.26), scim_server_module.h (1.12), scim_signals.h (1.7), scim_slot.h (1.6), scim_socket.h (1.15), scim_socket_transaction.h (1.16), scim_utility.h (1.17): Added copyright msgs. 2004-02-06 07:50 James Su * modules/SetupUI/: Makefile.am (1.4), scim_table_server_setup.cpp (1.11): New table setup module WIP. 2004-02-05 09:32 James Su * modules/SetupUI/: Makefile.am (1.3), scim_table_server_setup.cpp (1.10): Table Management WIP. 2004-02-05 07:57 James Su * extras/setup/scim_setup_ui.cpp (1.19): Fixed a memory leak. 2004-02-05 03:54 James Su * extras/setup/scim_setup_ui.cpp (1.18): Fixed some memory leaks. 2004-02-02 09:56 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.9): Add UserPhraseFirst option. 2004-01-30 08:48 tag scim_0_9_0 2004-01-30 08:48 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.8): Changed the default add/delete phrase keys. Fixed a bug in adding new phrase. 2004-01-30 07:40 James Su * modules/Config/scim_simple_config.h (1.10), po/scim.pot (1.57), po/zh_CN.po (1.64), po/zh_TW.po (1.63), src/scim_iconv.h (1.11): Updated po files. 2004-01-30 06:59 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.7): update to new table module. 2004-01-29 08:24 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.6): Revert the changes made by liuspider (continue). 2004-01-29 08:11 James Su * po/Makefile.in.in (1.4): Revert the changes made by Liuspider. 2004-01-28 04:19 LiuCougar * modules/SetupUI/scim_table_server_setup.cpp (1.5): add AutoCommit support into table server 2004-01-27 02:36 LiuCougar * po/Makefile.in.in (1.3): correct value of mkinstalldirs 2004-01-20 00:03 LiuCougar * .cvsignore (1.1), config.h.in (1.29): Remove some useless files Add .cvsignore 2004-01-14 09:31 James Su * src/scim_socket.cpp (1.25): Fix the socket file permission issue. 2004-01-08 10:30 James Su * po/: zh_CN.po (1.62), zh_TW.po (1.61): Updated zh_TW.po. 2003-12-31 05:09 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.64), modules/FrontEnd/scim_socket_frontend.cpp (1.10), modules/FrontEnd/scim_socket_frontend.h (1.8), modules/FrontEnd/scim_x11_frontend.cpp (1.95), modules/FrontEnd/scim_x11_frontend.h (1.28), src/scim.cpp (1.28), src/scim_attributes.h (1.9), src/scim_bind.h (1.6), src/scim_config_base.cpp (1.13), src/scim_config_base.h (1.12), src/scim_config_module.h (1.11), src/scim_config_path.h (1.13), src/scim_connection.h (1.5), src/scim_event.h (1.13), src/scim_exception.h (1.6), src/scim_frontend.cpp (1.25), src/scim_frontend.h (1.21), src/scim_frontend_module.h (1.10), src/scim_iconv.h (1.10), src/scim_lookup_table.h (1.16), src/scim_module.h (1.15), src/scim_object.h (1.5), src/scim_pointer.h (1.7), src/scim_server.cpp (1.25), src/scim_server.h (1.25), src/scim_server_module.h (1.11), src/scim_signals.h (1.6), src/scim_slot.h (1.5), src/scim_socket.h (1.14), src/scim_socket_transaction.cpp (1.17), src/scim_socket_transaction.h (1.15), src/scim_utility.h (1.15): Updated the doxygen documentation. Changed forward_keypress to forward_keyevent in Server and FrontEnd. 2003-12-29 04:54 uid67192 * config.h.in (1.28), configure.ac (1.71), configs/scim.schemas (1.23), po/scim.pot (1.55), po/zh_CN.po (1.61), po/zh_TW.po (1.60), src/Makefile.am (1.24), src/scim_types.h (1.10), src/scim_types.h.in (1.1): Use configure script to generate scim_types.h. 2003-12-26 09:41 uid67192 * src/scim_exception.h (1.5): Updated scim_exception.h 2003-12-26 09:35 uid67192 * src/scim_event.h (1.12): Updated the doxygen comments of scim_event.h 2003-12-26 08:15 uid67192 * docs/scim.cfg.in (1.8), src/scim_config_module.h (1.10), src/scim_config_path.h (1.12), src/scim_debug.h (1.11): Updated the doxygen comments of scim_debug.h. 2003-12-26 04:40 uid67192 * modules/Config/scim_gconf_config.cpp (1.11), modules/Config/scim_gconf_config.h (1.6), modules/Config/scim_simple_config.cpp (1.19), modules/Config/scim_simple_config.h (1.9), modules/Config/scim_socket_config.cpp (1.5), modules/Config/scim_socket_config.h (1.3), src/scim_config_base.cpp (1.12), src/scim_config_base.h (1.11): Simplfied the scim::ConfigBase interface. 2003-12-24 09:51 uid67192 * src/: scim_attributes.h (1.8), scim_backend.h (1.12), scim_config_base.cpp (1.11), scim_config_base.h (1.10): Updated the doxygen comments. 2003-12-24 08:17 uid67192 * src/: scim_attributes.h (1.7), scim_backend.cpp (1.14), scim_backend.h (1.11), scim_bind.h (1.5), scim_chartraits.cpp (1.6): Updated the doxygen comments of scim_attributes.h and scim_backend.h 2003-12-24 06:10 uid67192 * config.h.in (1.27), configure.ac (1.70), docs/scim.cfg.in (1.7), src/scim_attributes.h (1.6): * Bump version to 0.9.0 * Change the interface of scim::Attribute. * Fixed a bug in scim_generic_table.cpp 2003-11-24 06:49 James Su * src/scim_types.h (1.9): Added uint64 define 2003-11-21 02:06 James Su * configs/: config (1.26), scim.schemas (1.22): Added entries /FrontEnd/X11/PanelProgram and /GtkIMModule/PanelProgram. 2003-11-20 04:45 James Su * configs/: config (1.25), scim.schemas (1.21): Added /Server/Table/ShowKeyHint entry 2003-11-19 02:13 James Su * src/: scim.cpp (1.26), scim.h (1.14), scim_config_module.cpp (1.12), scim_frontend_module.cpp (1.11), scim_server_module.cpp (1.13), scim_socket_transaction.cpp (1.16): Make scim.cpp exception safe 2003-11-15 09:11 James Su * config.h.in (1.26), src/scim_attributes.h (1.5), src/scim_backend.h (1.10), src/scim_bind.h (1.4), src/scim_config_base.h (1.9), src/scim_config_module.h (1.9), src/scim_config_path.h (1.11), src/scim_connection.h (1.4), src/scim_debug.h (1.10), src/scim_event.h (1.11), src/scim_exception.h (1.4), src/scim_frontend.h (1.20), src/scim_frontend_module.h (1.9), src/scim_iconv.cpp (1.15), src/scim_iconv.h (1.9), src/scim_lookup_table.cpp (1.19), src/scim_lookup_table.h (1.15), src/scim_module.cpp (1.19), src/scim_module.h (1.14), src/scim_object.h (1.4), src/scim_pointer.h (1.6), src/scim_private.h (1.6), src/scim_server.h (1.24), src/scim_server_module.h (1.10), src/scim_signals.h (1.5), src/scim_slot.h (1.4), src/scim_socket.cpp (1.24), src/scim_socket.h (1.13), src/scim_socket_transaction.cpp (1.15), src/scim_socket_transaction.h (1.14), src/scim_types.h (1.8), src/scim_utility.h (1.14), tests/Makefile.am (1.2), tests/testiconvert.cpp (1.1), tests/testsocketclient.cpp (1.2): Refactory to hide the class implementation details. 2003-11-13 09:49 James Su * Makefile.am (1.13), configure.ac (1.69), src/scim_socket.cpp (1.22), src/scim_socket.h (1.12), tests/Makefile.am (1.1), tests/testsocketclient.cpp (1.1), tests/testsocketserver.cpp (1.1): Added tests directory to hold all testing programs. Added two testing programs of the Socket Interfaces. More work done for the Exceptional Safety of libscim. 2003-11-12 02:03 James Su * src/scim_socket.cpp (1.21): WIP: Refactorying the code to meet the exception safety requirement. (More) 2003-11-10 09:37 James Su * src/: scim_iconv.cpp (1.14), scim_lookup_table.h (1.14), scim_module.cpp (1.18), scim_module.h (1.13), scim_socket.cpp (1.20), scim_socket.h (1.11), scim_utility.cpp (1.20): WIP: Refactorying the code to meet the exception safety requirement. 2003-10-30 09:09 tag scim_0_8_2 2003-10-30 09:09 James Su * configure.ac (1.68), scim.spec.in (1.48), docs/Makefile.am (1.5), docs/manual/zh_CN/Makefile.am (1.1), docs/manual/zh_CN/user-manual.xml (1.9), docs/manual/zh_CN/figures/Makefile.am (1.1), po/scim.pot (1.54), po/zh_CN.po (1.60), po/zh_TW.po (1.59): Ready for 0.8.2 2003-10-27 09:34 James Su * docs/manual/zh_CN/user-manual.xml (1.6): Updated the user-manual.xml 2003-10-27 08:46 James Su * docs/manual/zh_CN/figures/: scim-setup-frontend-x11.png (1.1), scim-setup-panel-gtk.png (1.1), scim-setup-splash.png (1.1): Added some figures of scim-setup 2003-10-22 09:18 James Su * extras/panel/scim_panel_gtk.cpp (1.44): Fixed a bug in scim-panel-gtk:socket_update_lookup_table 2003-10-22 08:06 James Su * src/scim_lookup_table.cpp (1.18): Fixed a bug in LookupTable::page_up. 2003-10-17 09:29 James Su * src/scim_utility.cpp (1.19): Improved scim_get_user_name to return a string contains the current UID, if no user name can be found. 2003-09-10 03:43 James Su * src/scim_socket.cpp (1.19): Fixed a bug which fail to delete the broken socket file correctly. 2003-09-08 04:38 James Su * docs/manual/zh_CN/user-manual.xml (1.1): Initial import user-manual.xml 2003-09-08 03:07 James Su * po/scim.pot (1.53), po/zh_CN.po (1.59), po/zh_TW.po (1.58), src/scim_socket.cpp (1.18), src/scim_utility.cpp (1.18), src/scim_utility.h (1.13): * Add utility function scim_get_user_name (); * Append the current user name to the local socket address, to avoid different users use the same socket. 2003-09-05 03:13 tag scim_0_8_1 2003-09-05 03:13 James Su * po/: mkzhtw.sh (1.1), zh_CN.po (1.58), zh_TW.po (1.57): Added a small script to generate zh_TW.po from zh_CN.po. Little message translation update. 2003-09-05 02:23 James Su * po/: zh_CN.po (1.57), zh_TW.po (1.56): Update a message translation. 2003-09-04 08:47 James Su * configure.ac (1.67): 0.8.1 2003-09-04 08:42 James Su * modules/SetupUI/scim_table_server_setup.cpp (1.4), po/scim.pot (1.52), po/zh_CN.po (1.56), po/zh_TW.po (1.55): Generic Table Server Module: Added a feature to show key hint on the lookup table. 2003-09-04 07:18 James Su * extras/panel/scim_panel_gtk.cpp (1.42): Fix the bug which tray icon is destroyed and can not restart when notification area exits. 2003-09-03 05:45 tag scim_0_8_0 2003-09-03 05:45 James Su * scim.spec.in (1.47), po/scim.pot (1.51), po/zh_CN.po (1.55), po/zh_TW.po (1.54): Cleanup the spec file, merge the suite into the main package. 2003-09-03 02:58 James Su * extras/panel/scim_panel_gtk.cpp (1.41), po/scim.pot (1.50), po/zh_CN.po (1.54), po/zh_TW.po (1.53): Show correct "Stick/Unstick Windows" command menu item. 2003-09-03 02:02 James Su * extras/panel/scim_panel_gtk.cpp (1.40), modules/SetupUI/scim_panel_gtk_setup.cpp (1.5), po/scim.pot (1.49), po/zh_CN.po (1.53), po/zh_TW.po (1.52): Ready to release 0.8.0 2003-09-02 10:13 James Su * configure.ac (1.66), scim.pc.in (1.11), scim.spec.in (1.46), data/icons/Makefile.am (1.11), data/icons/rawcode.png (1.2), data/icons/table.png (1.2), extras/panel/scim_panel_gtk.cpp (1.39), po/scim.pot (1.48), po/zh_CN.po (1.52), po/zh_TW.po (1.51): Prepare for 0.8.0 2003-08-19 07:52 James Su * data/icons/: Makefile.am (1.5), keyboard.png (1.1): added keyboard.png 2003-08-03 14:52 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.84): Fixed a bug in x11 frontend. 2003-07-31 10:25 James Su * src/: scim.cpp (1.23), scim.h (1.12), scim_attributes.h (1.4), scim_backend.cpp (1.12), scim_backend.h (1.8), scim_bind.h (1.3), scim_config_base.h (1.8), scim_config_module.h (1.8), scim_config_path.h (1.8), scim_connection.h (1.3), scim_debug.h (1.8), scim_event.h (1.10), scim_exception.h (1.3), scim_frontend.cpp (1.22), scim_frontend.h (1.17), scim_frontend_module.h (1.8), scim_iconv.h (1.8), scim_lookup_table.h (1.13), scim_module.h (1.12), scim_object.h (1.3), scim_pointer.h (1.5), scim_private.h (1.5), scim_server.cpp (1.19), scim_server.h (1.20), scim_server_module.cpp (1.12), scim_server_module.h (1.9), scim_signals.h (1.4), scim_slot.h (1.3), scim_socket.h (1.10), scim_socket_transaction.h (1.11), scim_types.h (1.7), scim_utility.h (1.10): Replace all tab with spaces 2003-07-31 04:04 tag scim_0_6_1 2003-07-31 04:04 James Su * configure.ac (1.64), docs/tutorial/tutorial-zh_CN.sgml (1.3), extras/panel/scim_panel_gtk.cpp (1.12), po/scim.pot (1.42), po/zh_CN.po (1.46), po/zh_TW.po (1.45): Ready to release 0.6.1 2003-07-30 07:49 James Su * docs/tutorial/tutorial-zh_CN.sgml (1.1): Added tutorial-zh_CN.sgml 2003-07-30 07:00 James Su * src/scim_socket.cpp (1.16): Fixed the bug of the broken socket file. 2003-07-29 06:25 tag scim_0_6_0 2003-07-29 06:25 James Su * configure.ac (1.63), scim.spec.in (1.43), po/POTFILES.in (1.8), po/scim.pot (1.40), po/zh_CN.po (1.44), po/zh_TW.po (1.43): Ready for 0.6.0 2003-07-28 08:41 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.79): New X11 FrontEnd is almost done. 2003-07-28 05:53 James Su * modules/: FrontEnd/Makefile.am (1.24), FrontEnd/scim_socket_frontend_setup.cpp (1.6), FrontEnd/scim_x11_frontend_setup.cpp (1.11), SetupUI/Makefile.am (1.1), SetupUI/scim_socket_frontend_setup.cpp (1.1), SetupUI/scim_socket_server_setup.cpp (1.1), SetupUI/scim_table_server_setup.cpp (1.1), SetupUI/scim_x11_frontend_setup.cpp (1.1): Split setup modules into SetupUI dir 2003-07-18 07:54 James Su * extras/: gtk2_immodule/Makefile.am (1.16), gtk2_immodule/gtkimcontextscim.cpp (1.47), panel/scim_panel_gtk.cpp (1.5): New panel and gtk2immodule is almost ready. 2003-07-16 03:05 James Su * configure.ac (1.60), extras/Makefile.am (1.3), extras/panel/Makefile.am (1.1), extras/panel/scim_panel.h (1.1), extras/panel/scim_panel_gtk.cpp (1.1), po/scim.pot (1.39), po/zh_CN.po (1.43), po/zh_TW.po (1.42): Split panel into separated directory. 2003-07-16 02:31 James Su * extras/gtk2_immodule/: panel.cpp (1.12), panel.h (1.5): Move panel.* to ../panel 2003-07-16 02:05 James Su * utils/: Makefile.am (1.4), gtkstringview.c (1.5), gtkstringview.h (1.3), scimstringview.c (1.1), scimstringview.h (1.1): Rename gtkstringview to scimstringview. 2003-07-16 01:47 James Su * utils/: Makefile.am (1.3), gtkkeyselection.cpp (1.3), gtkkeyselection.h (1.2), scimkeyselection.cpp (1.1), scimkeyselection.h (1.1): Rename gtkkeyselection to scimkeyselection. 2003-07-15 10:15 James Su * ChangeLog (1.30), README (1.8), configure.ac (1.59), scim.spec.in (1.42), extras/gtk2_immodule/gtkimcontextscim.cpp (1.46), extras/gtk2_immodule/panel.cpp (1.11): Ready for 0.5.2 2003-07-12 02:03 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.41): Try to fix the crash bug of im-scim. 2003-07-10 10:32 James Su * extras/gtk2_immodule/: Makefile.am (1.13), gtkimcontextscim.cpp (1.38), imscim.cpp (1.7), panel.cpp (1.5): Updated gtkimcontextscim to use panel 2003-07-10 02:49 James Su * extras/gtk2_immodule/panel.cpp (1.4): A prototype of panel has been finished. 2003-07-09 09:40 James Su * extras/gtk2_immodule/: Makefile.am (1.11), panel.cpp (1.2), panel.h (1.2): panel is still not finished. 2003-07-08 10:02 James Su * extras/gtk2_immodule/: panel.cpp (1.1), panel.h (1.1): Added panel.cpp panel.h 2003-07-07 08:07 James Su * modules/Config/: scim_gconf_config.cpp (1.9), scim_gconf_config.h (1.4): Use GConfClient instead of GConfEngine. 2003-07-07 03:45 James Su * src/scim_chartraits.cpp (1.4): Updated scim_chartraits.cpp to check GCC version 2003-07-05 02:29 James Su * src/scim_chartraits.cpp (1.3): Fixed bug in scim_chartraits.cpp 2003-07-04 08:58 tag scim_0_5_1 2003-07-04 08:58 James Su * config.h.in (1.22), configure.ac (1.55), modules/FrontEnd/Makefile.am (1.21), modules/FrontEnd/IMdkit/Makefile.am (1.3): Fixed X11 detection in configure.ac 2003-07-04 07:27 James Su * README (1.7), docs/Makefile.am (1.4): Merged some bugfixes from Foka's patch. 2003-07-04 07:04 James Su * ChangeLog (1.29), po/scim.pot (1.36), po/zh_CN.po (1.40), po/zh_TW.po (1.39): Update ChangeLog 2003-07-04 06:48 James Su * THANKS (1.3), src/scim_chartraits.cpp (1.2), src/scim_iconv.cpp (1.12), src/scim_utility.cpp (1.14): Fixed FreeBSD compatibility problem 2003-07-04 06:26 James Su * src/: Makefile.am (1.22), scim_chartraits.cpp (1.1): Added scim_chartraits.cpp 2003-07-04 05:49 James Su * THANKS (1.2), configure.ac (1.54), scim.spec.in (1.41), extras/setup/scim_setup.cpp (1.8), extras/setup/scim_setup_ui.cpp (1.14), modules/FrontEnd/scim_x11_frontend.cpp (1.72), modules/FrontEnd/scim_x11_frontend.h (1.19), src/scim_iconv.cpp (1.11), src/scim_utility.cpp (1.13): Finally fixed the crashing issue of the X11 FrontEnd. 2003-07-01 04:22 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.67), scim_x11_frontend.h (1.16): Fixed some bugs in X11 FrontEnd. 2003-06-30 11:02 James Su * config.h.in (1.20), configure.ac (1.52), modules/FrontEnd/scim_x11_frontend.cpp (1.66), modules/FrontEnd/scim_x11_frontend.h (1.15): Added multihead support into X11 FrontEnd. Server menu won't work in the second screen because of a bug in gtk2. 2003-06-26 09:39 James Su * modules/FrontEnd/IMdkit/IMConn.c (1.2): use stdlib.h instead of malloc.h 2003-06-23 06:33 tag scim_0_5_0 2003-06-23 06:33 James Su * src/scim_socket.cpp (1.13): Fixed a bug in scim_socket.cpp 2003-06-23 02:52 James Su * Makefile.am (1.12), README (1.6), po/scim.pot (1.34), po/zh_CN.po (1.37), po/zh_TW.po (1.36): Added missing intltool*.in into Makefile.am 2003-06-20 09:51 James Su * bootstrap (1.4), configure.ac (1.51), scim.spec.in (1.39), data/pixmaps/Makefile.am (1.3), extras/setup/Makefile.am (1.4), extras/setup/scim-setup.desktop.in (1.2), extras/setup/scim_setup_ui.cpp (1.13), po/POTFILES.in (1.7), po/scim.pot (1.33), po/zh_CN.po (1.36), po/zh_TW.po (1.35): ready for 0.5.0 2003-06-20 06:46 James Su * data/: Makefile.am (1.2), pixmaps/Makefile.am (1.1), pixmaps/scim-setup.png (1.1): Added scim-setup.png 2003-06-20 03:50 James Su * TODO (1.4), configure.ac (1.49), modules/FrontEnd/scim_socket_frontend_setup.cpp (1.4), modules/FrontEnd/scim_x11_frontend_setup.cpp (1.8), po/scim.pot (1.31), po/zh_CN.po (1.33), po/zh_TW.po (1.32): pump the version to 0.5.0, some messages are updated. 2003-06-19 10:49 James Su * AUTHORS (1.2), README (1.5), configure.ac (1.48), scim.spec.in (1.38), po/POTFILES.in (1.5): Prepare for 0.4.2 2003-06-19 07:46 James Su * Makefile.am (1.11), scim-gtkutils.pc.in (1.1), modules/FrontEnd/Makefile.am (1.19): Added scim-gtkutils.pc.in 2003-06-18 08:55 James Su * Makefile.am (1.10), THANKS (1.1): Added THANKS 2003-06-18 08:36 James Su * modules/FrontEnd/scim_x11_frontend_setup.cpp (1.7): Updated generic table module, thanks liuspider@21cn.com 2003-06-18 05:24 James Su * configs/: config (1.19), scim.schemas (1.18): rename UserTableFormat to UserTableBinary 2003-06-17 10:52 James Su * configure.ac (1.47), scim.spec.in (1.37), extras/gtk2_immodule/Makefile.am (1.10), modules/FrontEnd/Makefile.am (1.18), modules/FrontEnd/scim_socket_frontend_setup.cpp (1.3), modules/FrontEnd/scim_x11_frontend_setup.cpp (1.6): Split gtkstringview and gtkkeyselection into libscim-gtkutils.la 2003-06-17 10:47 James Su * utils/: Makefile.am (1.2), gtkkeyselection.cpp (1.1), gtkkeyselection.h (1.1): gtkkeyselection.* added 2003-06-16 07:40 James Su * modules/FrontEnd/: Makefile.am (1.16), scim_socket_frontend_setup.cpp (1.1), scim_x11_frontend_setup.cpp (1.4): socket frontend setup module checked in 2003-06-13 02:42 James Su * src/: scim_config_module.cpp (1.10), scim_config_module.h (1.7), scim_frontend_module.cpp (1.9), scim_frontend_module.h (1.7), scim_module.cpp (1.15), scim_module.h (1.11), scim_server_module.cpp (1.11), scim_server_module.h (1.8): Make many functions in *module class const. 2003-06-12 10:14 James Su * configure.ac (1.45), extras/Makefile.am (1.2), extras/setup/scim_setup.cpp (1.3), extras/setup/scim_setup_module.cpp (1.3), extras/setup/scim_setup_module.h (1.3), extras/setup/scim_setup_ui.cpp (1.3), extras/setup/scim_setup_ui.h (1.3), modules/FrontEnd/Makefile.am (1.15), modules/FrontEnd/scim_x11_frontend_setup.cpp (1.1): Prototype of SetupUI is workable. 2003-06-12 05:41 James Su * extras/setup/: Makefile.am (1.1), scim_setup.cpp (1.1), scim_setup.h (1.1), scim_setup_module.cpp (1.1), scim_setup_module.h (1.1), scim_setup_ui.cpp (1.1), scim_setup_ui.h (1.1): Initial import scim-setup 2003-06-10 01:51 James Su * src/scim_socket_transaction.h (1.9): Added SCIM_TRANS_CMD_USER_DEFINED 2003-05-27 04:00 James Su * src/: scim_event.cpp (1.12), scim_event.h (1.9): Added more keycode into scim_event.* 2003-05-26 05:30 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.65), scim_x11_ic.cpp (1.8): Fixed a crash when lookup table is not embedded 2003-05-26 01:12 James Su * scim.spec.in (1.36), po/scim.pot (1.29), po/zh_CN.po (1.31), po/zh_TW.po (1.30): Added missing config file into scim-suite package 2003-05-21 08:17 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.62): More fix for auto hide toolbar feature 2003-05-21 06:36 tag scim_0_4_1 2003-05-21 06:36 James Su * configure.ac (1.44), configs/config (1.17), configs/scim.schemas (1.16), modules/Config/scim_socket_config.cpp (1.3), modules/FrontEnd/scim_socket_frontend.cpp (1.6), po/scim.pot (1.28), po/zh_CN.po (1.29), po/zh_TW.po (1.28), src/scim_socket_transaction.cpp (1.7), src/scim_socket_transaction.h (1.8): Use int for SocketCommand instead of a special enum type. Added SCIM_TRANS_DATA_RAW data type to transfer a raw buffer. 2003-05-21 04:14 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.60), scim_x11_frontend.h (1.14): Finished toolbar hide feature 2003-05-20 10:34 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.58), scim_x11_frontend.h (1.13): Added auto Snap and Hide for toolbar 2003-05-19 02:22 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.57): Updated ims_sync_ic 2003-05-19 01:41 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.56), scim_x11_frontend.h (1.12): Added ims_sync_ic 2003-05-13 07:56 James Su * modules/FrontEnd/: scim_x11_frontend.cpp (1.46), scim_x11_ic.cpp (1.7), scim_x11_ic.h (1.3): Fixed preedit caret behaviour in OnTheSpot mode 2003-05-09 08:13 James Su * src/scim_utility.h (1.9): Add const to scim_bytestouint32 2003-04-29 10:01 James Su * src/: scim_iconv.cpp (1.10), scim_iconv.h (1.7): added const properties to some methods of IConvert 2003-04-18 08:13 James Su * bootstrap (1.3), config.h.in (1.19), modules/FrontEnd/scim_x11_frontend.cpp (1.45), modules/FrontEnd/scim_x11_frontend.h (1.9): Updated to autoconf-2.57 automake-1.7.3 2003-04-18 07:49 James Su * src/ltdl.c (1.4): Updated ltdl to libtool-1.5a 2003-04-03 06:54 James Su * ChangeLog (1.28), mkchlog (1.1), scim.spec.in (1.34), po/scim.pot (1.27), po/zh_CN.po (1.28), po/zh_TW.po (1.27): * Added suite package into scim.spec.in, which includes all necessary components to run SCIM. * Generate ChangeLog from cvs log. * Added mkchlog script to help generate ChangeLog. 2003-04-03 05:36 James Su * modules/Config/scim_simple_config.cpp (1.14), src/scim_socket.cpp (1.12): Use String::size_type when finding in a string 2003-04-03 03:51 James Su * modules/Config/scim_simple_config.cpp (1.13): More fixes for blank line bugs. 2003-04-03 03:43 James Su * scim.spec.in (1.33), modules/Config/scim_simple_config.cpp (1.12): Fixed blank line bugs in Simple Config module and Table Server module 2003-04-01 09:39 tag scim_0_4_0 2003-04-01 09:39 James Su * ChangeLog (1.27), configure.ac (1.43): Release 0.4.0 2003-04-01 08:40 James Su * po/: scim.pot (1.26), zh_CN.po (1.27), zh_TW.po (1.26): Updated po files 2003-04-01 08:22 James Su * docs/: design.zh_CN (1.2), developers (1.2): Updated the docs a little 2003-04-01 07:50 James Su * utils/gtkstringview.c (1.4): Add SCIM_ prefix to gtkstringview type name 2003-04-01 07:27 James Su * README (1.4), po/scim.pot (1.25), po/zh_CN.po (1.26), po/zh_TW.po (1.25): Update README 2003-03-31 04:38 James Su * configs/: config (1.16), scim.schemas (1.15): Updated the configuration for Socket FrontEnd/Server 2003-03-31 03:54 James Su * extras/gtk2_immodule/: gtkimcontextscim.cpp (1.36), imscim.cpp (1.6): use socket config/server modules in gtk2 immodule by default. 2003-03-31 03:31 James Su * src/scim.cpp (1.18): added -ns (--no-servers) option to prevent loading some server modules. use x11-gtk as default FrontEnd module if available. use simple as default Config module if available. 2003-03-31 02:32 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.35), extras/gtk2_immodule/imscim.cpp (1.5), po/scim.pot (1.24), po/zh_CN.po (1.25), po/zh_TW.po (1.24), src/scim.cpp (1.17), utils/gtkstringview.c (1.3), utils/gtkstringview.h (1.2): Make string_view_type registered dynamically within gtk2 immodule. make argc always larger than zero to prevent x11-gtk frontend from crashing. 2003-03-28 08:30 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.34): Make SCIM GTK+2 IM Module resident into the memory. 2003-03-27 06:59 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.33), extras/gtk2_immodule/gtkimcontextscim.h (1.6), extras/gtk2_immodule/imscim.cpp (1.4), utils/gtkstringview.c (1.2): Fixed the gtk2 immodule crash bug. Make the module resident into memory once loaded. Gedit still crash with this module. 2003-03-26 03:27 James Su * src/scim.cpp (1.16): Pass arguments after '--' to FrontEnd. 2003-03-26 03:05 James Su * modules/Config/scim_socket_config.cpp (1.2), modules/FrontEnd/scim_socket_frontend.cpp (1.5), src/scim_socket.cpp (1.11): Ignore SIGPIPE when writing to a socket. This fixed client exit when SocketFrontEnd is broken. 2003-03-25 07:28 James Su * modules/Config/Makefile.am (1.9), modules/Config/scim_socket_config.cpp (1.1), modules/Config/scim_socket_config.h (1.1), modules/FrontEnd/scim_socket_frontend.cpp (1.3), modules/FrontEnd/scim_socket_frontend.h (1.5), src/scim_socket_transaction.h (1.7): Added SocketConfig module 2003-03-25 06:23 James Su * config.h.in (1.18), configure.ac (1.42), extras/gtk2_immodule/gtkimcontextscim.cpp (1.32), modules/FrontEnd/Makefile.am (1.14), src/scim_socket_transaction.cpp (1.6): Finished SocketServer module 2003-03-24 11:52 James Su * config.h.in (1.17), configure.ac (1.41), modules/FrontEnd/Makefile.am (1.13), modules/FrontEnd/scim_socket_frontend.cpp (1.2), modules/FrontEnd/scim_socket_frontend.h (1.4), src/scim_socket_transaction.cpp (1.5), src/scim_socket_transaction.h (1.6): Finished SocketFrontEnd 2003-03-17 10:41 James Su * src/: scim_socket.cpp (1.3), scim_socket.h (1.5): Finished a very early version of Socket classes 2003-03-14 11:05 James Su * config.h.in (1.16), configure.ac (1.39), scim.pc.in (1.10), docs/scim.cfg.in (1.5), po/scim.pot (1.21), po/zh_CN.po (1.22), po/zh_TW.po (1.21), src/Makefile.am (1.20), src/scim.h (1.10), src/scim_socket.cpp (1.1), src/scim_socket.h (1.3): added scim_socket.cpp 2003-03-05 10:59 James Su * src/: scim_backend.h (1.7), scim_config_base.h (1.6), scim_errors.h (1.10), scim_frontend.h (1.11), scim_module.h (1.10), scim_server.h (1.17), scim_socket.h (1.1): Added scim_socket.h 2003-03-05 03:52 James Su * po/scim.pot (1.19), po/zh_CN.po (1.20), po/zh_TW.po (1.19), src/scim_config_module.cpp (1.9), src/scim_event.cpp (1.10), src/scim_frontend.cpp (1.16), src/scim_frontend_module.cpp (1.8), src/scim_iconv.cpp (1.8), src/scim_lookup_table.cpp (1.13), src/scim_module.cpp (1.12), src/scim_server_module.cpp (1.10), src/scim_utility.cpp (1.12): eliminated the usage of NULL. fixed the bug of loading modules if *.la files is missing. 2003-03-04 03:52 James Su * extras/gtk2_immodule/gtkimcontextscim.cpp (1.21), modules/FrontEnd/scim_x11_frontend.cpp (1.37), po/scim.pot (1.17), po/zh_CN.po (1.18), po/zh_TW.po (1.17): Fixed memory leaks in FrontEnd::update_preedit_string caused by attrlist 2003-02-10 08:13 tag scim_0_3_1 2003-02-10 08:13 James Su * Makefile.am (1.9), configure.ac (1.34), data/Makefile.am (1.1), data/icons/Makefile.am (1.1), data/icons/configure.xpm (1.1), data/icons/down.xpm (1.1), data/icons/full_width_letter.xpm (1.1), data/icons/full_width_punct.xpm (1.1), data/icons/half_width_letter.xpm (1.1), data/icons/half_width_punct.xpm (1.1), data/icons/help.xpm (1.1), data/icons/left.xpm (1.1), data/icons/pin_down.xpm (1.1), data/icons/pin_up.xpm (1.1), data/icons/right.xpm (1.1), data/icons/trademark.xpm (1.1), data/icons/up.xpm (1.1), utils/Makefile.am (1.1), utils/gtkstringview.c (1.1), utils/gtkstringview.h (1.1): Move icons into data dir, gtkstringview.* to utils dir 2003-02-07 07:50 James Su * modules/FrontEnd/gtkstringview.c (1.6), modules/FrontEnd/gtkstringview.h (1.3), modules/FrontEnd/scim_x11_frontend.cpp (1.33), modules/FrontEnd/scim_x11_frontend.h (1.6), src/scim_attributes.h (1.2), src/scim_server.h (1.16): Use AttributeList instead of highlight_start and highlight_end in server 2003-01-02 01:48 tag scim_0_3_0 2003-01-02 01:48 James Su * ChangeLog (1.21), TODO (1.2), configure.ac (1.30), extras/gtk2_immodule/Makefile.am (1.4), po/scim.pot (1.13), po/zh_CN.po (1.13), po/zh_TW.po (1.13): Ready to release 0.3.0 2002-11-21 11:04 James Su * extras/gtk2_immodule/: Makefile.am (1.1), gtkimcontextscim.cpp (1.3), gtkimcontextscim.h (1.2), imscim.cpp (1.2): GTK IMModule WIP 2002-11-18 09:10 tag scim_lib_0 2002-11-18 09:10 James Su * extras/: Makefile.am (1.1.1.1), gtk2_immodule/gtkimcontextscim.h (1.1.1.1), gtk2_immodule/imscim.c (1.1.1.1), gtk2_immodule/gtkimcontextscim.cpp (1.1.1.1), gtk2_immodule/gtkstringview.c (1.1.1.1), gtk2_immodule/gtkstringview.h (1.1.1.1): Import extras/ 2002-11-18 09:10 James Su * extras/: Makefile.am (1.1), gtk2_immodule/gtkimcontextscim.h (1.1), gtk2_immodule/imscim.c (1.1), gtk2_immodule/gtkimcontextscim.cpp (1.1), gtk2_immodule/gtkstringview.c (1.1), gtk2_immodule/gtkstringview.h (1.1): Initial revision 2002-11-04 01:33 tag scim_0_2_2 2002-11-04 01:33 James Su * ChangeLog (1.18), configure.ac (1.22), scim.spec.in (1.23): v0.2.2 2002-10-17 10:11 tag scim_0_2_3 2002-10-17 10:11 James Su * docs/scim.cfg.in (1.2): Update scim.cfg.in 2002-10-10 10:46 James Su * ABOUT-NLS (1.1), ChangeLog (1.14), Makefile.am (1.4), config.h.in (1.2), configure.ac (1.16), scim.pc.in (1.3), scim.spec.in (1.17), intl/ChangeLog (1.1), intl/Makefile.in (1.1), intl/VERSION (1.1), intl/bindtextdom.c (1.1), intl/config.charset (1.1), intl/dcgettext.c (1.1), intl/dcigettext.c (1.1), intl/dcngettext.c (1.1), intl/dgettext.c (1.1), intl/dngettext.c (1.1), intl/explodename.c (1.1), intl/finddomain.c (1.1), intl/gettext.c (1.1), intl/gettext.h (1.1), intl/gettextP.h (1.1), intl/hash-string.h (1.1), intl/intl-compat.c (1.1), intl/l10nflist.c (1.1), intl/libgettext.h (1.1), intl/libgnuintl.h (1.1), intl/loadinfo.h (1.1), intl/loadmsgcat.c (1.1), intl/localcharset.c (1.1), intl/locale.alias (1.1), intl/localealias.c (1.1), intl/ngettext.c (1.1), intl/plural.c (1.1), intl/plural.y (1.1), intl/ref-add.sin (1.1), intl/ref-del.sin (1.1), intl/textdomain.c (1.1), modules/Config/Makefile.am (1.5), modules/Config/scim_gconf_config.cpp (1.3), modules/Config/scim_simple_config.cpp (1.7), modules/FrontEnd/Makefile.am (1.4), modules/FrontEnd/gtkstringview.c (1.4), modules/FrontEnd/scim_x11_frontend.cpp (1.20), modules/FrontEnd/scim_x11_ic.cpp (1.3), po/ChangeLog (1.1), po/Makefile.in.in (1.1), po/POTFILES.in (1.1), po/scim.pot (1.1), po/zh_CN.po (1.1), po/zh_TW.po (1.1), src/Makefile.am (1.7), src/scim.cpp (1.4), src/scim_backend.cpp (1.6), src/scim_config_base.cpp (1.3), src/scim_config_module.cpp (1.3), src/scim_event.cpp (1.4), src/scim_frontend.cpp (1.5), src/scim_frontend_module.cpp (1.3), src/scim_iconv.cpp (1.3), src/scim_lookup_table.cpp (1.7), src/scim_module.cpp (1.6), src/scim_private.h (1.1), src/scim_server.cpp (1.4), src/scim_server_module.cpp (1.4), src/scim_utility.cpp (1.6): prepare for version 0.2.0 2002-10-08 05:33 James Su * src/: scim.cpp (1.3), scim_server_module.cpp (1.3), scim_server_module.h (1.3): API of Server Module was updated to support multiple Factories within one module. 2002-09-30 10:28 tag scim_0_1_4 2002-09-30 10:28 James Su * ChangeLog (1.13), configure.ac (1.15), scim.spec.in (1.16), configs/config (1.7), configs/scim.schemas (1.7), modules/FrontEnd/scim_x11_frontend.cpp (1.19), src/Makefile.am (1.6), src/scim_types.h (1.2), src/scim_utility.cpp (1.5): scim-0.1.4 2002-09-23 13:41 tag scim_0_1_3 2002-09-23 13:41 James Su * configs/Makefile.am (1.3): 0.1.3 2002-09-08 13:29 James Su * ChangeLog (1.11), scim.spec.in (1.13), modules/Config/scim_gconf_config.cpp (1.2), modules/Config/scim_gconf_config.h (1.2), modules/Config/scim_simple_config.cpp (1.6), modules/Config/scim_simple_config.h (1.4), modules/FrontEnd/scim_x11_frontend.cpp (1.17), src/scim_config_base.cpp (1.2), src/scim_config_base.h (1.2), src/scim_lookup_table.cpp (1.6), src/scim_lookup_table.h (1.5), src/scim_utility.cpp (1.4), src/scim_utility.h (1.5): Simplified the utilities api 2002-08-21 11:46 James Su * ChangeLog (1.10), configure.ac (1.13), scim.spec.in (1.12), configs/Makefile.am (1.2), configs/config (1.6), configs/scim.schemas (1.6), modules/Config/Makefile.am (1.4), modules/FrontEnd/Makefile.am (1.3): added configuration options to disable modules. 2002-08-21 09:09 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.16): Added ShowStatusBox option 2002-08-10 18:54 James Su * ChangeLog (1.9), configure.ac (1.12), scim.spec.in (1.11), configs/config (1.5), configs/scim.schemas (1.5), modules/FrontEnd/gtkstringview.c (1.3), modules/FrontEnd/scim_x11_frontend.cpp (1.14): X11 FrontEnd was enhanced. 2002-08-09 17:54 James Su * ChangeLog (1.8), configure.ac (1.11), scim.spec.in (1.10), modules/FrontEnd/scim_x11_frontend.cpp (1.13), src/scim.cpp (1.2), src/scim_backend.cpp (1.5), src/scim_config_module.cpp (1.2), src/scim_event.cpp (1.3), src/scim_frontend_module.cpp (1.2), src/scim_module.cpp (1.5), src/scim_server.cpp (1.3), src/scim_server.h (1.5), src/scim_server_module.cpp (1.2): Bugfixes, feature enhancements 2002-08-08 19:38 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.12), src/scim_event.cpp (1.2), src/scim_event.h (1.3), src/scim_frontend.cpp (1.4), src/scim_frontend.h (1.4): FrontEnd updated, scim_event.* updated. 2002-08-07 07:10 James Su * configs/config (1.4), configs/scim.schemas (1.4), modules/FrontEnd/scim_x11_frontend.cpp (1.11), src/scim_config_path.h (1.6): Add a work around for KeyMask problem of X11 FrontEnd 2002-08-02 06:05 James Su * ChangeLog (1.7), configure.ac (1.10), scim.spec.in (1.9), modules/FrontEnd/scim_x11_frontend.cpp (1.10), src/scim_utility.h (1.4): Minor bugfixes of X11 FrontEnd. 2002-07-29 07:53 James Su * ChangeLog (1.6), configure.ac (1.9), scim.spec.in (1.8), configs/config (1.2), configs/scim.schemas (1.2), modules/FrontEnd/scim_x11_frontend.cpp (1.8), src/scim_config_path.h (1.5): Minor bugfixes 2002-07-28 05:21 James Su * ChangeLog (1.5), README (1.2), configure.ac (1.8), scim.spec.in (1.7), src/scim_backend.cpp (1.4): Minor bugfixes 2002-07-22 17:21 James Su * modules/Config/scim_simple_config.cpp (1.5): Fixed a small bug in simple config module 2002-07-22 08:24 James Su * ChangeLog (1.4), scim.spec.in (1.5), docs/design.zh_CN (1.1), modules/Config/scim_simple_config.cpp (1.3), modules/Config/scim_simple_config.h (1.2), src/Makefile.am (1.5), src/scim.cpp (1.1): Added a main program: scim.cpp 2002-07-20 18:28 James Su * modules/Config/Makefile.am (1.2), modules/Config/scim_simple_config.cpp (1.1), modules/Config/scim_simple_config.h (1.1), src/scim_module.h (1.4), src/scim_utility.cpp (1.3), src/scim_utility.h (1.3): added a simple config module. 2002-07-13 03:14 James Su * src/: scim_iconv.cpp (1.2), scim_iconv.h (1.2): Fixed a bug in scim_iconv.cpp 2002-07-11 06:22 James Su * configure.ac (1.5), src/Makefile.am (1.2), src/scim.h (1.2), src/scim_array.h (1.2), src/scim_config_module.h (1.2), src/scim_frontend.cpp (1.3), src/scim_frontend.h (1.3), src/scim_frontend_module.h (1.2), src/scim_lookup_table.cpp (1.5), src/scim_lookup_table.h (1.4), src/scim_module.cpp (1.2), src/scim_module.h (1.2), src/scim_server.cpp (1.2), src/scim_server.h (1.4), src/scim_server_module.h (1.2): Removed scim_phrase.*. Added key release event type. Added module search functions. 2002-07-07 19:38 James Su * src/scim_lookup_table.cpp (1.4): Fixed a bug in scim_lookup_table.cpp 2002-07-06 23:46 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.5), src/scim_config_path.h (1.3): Fixed a typo in scim_config_path.h, a bug in scim_x11_frontend.cpp 2002-07-06 09:26 James Su * ChangeLog (1.2), Makefile.am (1.2), configure.ac (1.4), scim.pc.in (1.1), scim.spec.in (1.2): Added scim.pc.in, updated ChangeLog. 2002-07-06 08:41 James Su * configure.ac (1.3), modules/FrontEnd/scim_x11_frontend.cpp (1.4), src/scim_backend.cpp (1.2): A critical bug in scim_backend.cpp was fixed. A minor bug in scim_x11_frontend.cpp was fixed. A changed was made in scim_main.cpp to load specified Server module 2002-07-04 15:02 James Su * configure.ac (1.2), modules/FrontEnd/gtkstringview.c (1.2), modules/FrontEnd/gtkstringview.h (1.2), modules/FrontEnd/scim_x11_frontend.cpp (1.3), src/scim_lookup_table.cpp (1.3), src/scim_lookup_table.h (1.3), src/scim_server.h (1.3): Finished the string highlight support in X11 FrontEnd 2002-07-03 17:51 James Su * modules/FrontEnd/scim_x11_frontend.cpp (1.2), modules/FrontEnd/scim_x11_frontend.h (1.2), modules/FrontEnd/scim_x11_ic.cpp (1.2), src/scim_config_path.h (1.2), src/scim_frontend.cpp (1.2), src/scim_frontend.h (1.2), src/scim_lookup_table.cpp (1.2), src/scim_lookup_table.h (1.2), src/scim_server.h (1.2): Updated the APIs of ServerInstance and FrontEnd, string highlighting and lookup table cursor were added. 2002-07-02 03:56 tag scim_0_0 2002-07-02 03:56 James Su * modules/FrontEnd/IMdkit/i18nPtHdr.c (1.1), modules/FrontEnd/IMdkit/i18nTr.c (1.1), modules/FrontEnd/IMdkit/i18nUtil.c (1.1), modules/FrontEnd/IMdkit/i18nX.c (1.1), src/Makefile.am (1.1), src/ltdl.c (1.1), src/ltdl.h (1.1), src/scim.h (1.1), src/scim_array.h (1.1), src/scim_backend.cpp (1.1), src/scim_backend.h (1.1), src/scim_config_base.cpp (1.1), src/scim_config_base.h (1.1), src/scim_config_module.cpp (1.1), src/scim_config_module.h (1.1), src/scim_config_path.h (1.1), src/scim_errors.h (1.1), src/scim_event.cpp (1.1), src/scim_event.h (1.1), src/scim_frontend.cpp (1.1), src/scim_frontend.h (1.1), src/scim_frontend_module.cpp (1.1), src/scim_frontend_module.h (1.1), src/scim_iconv.cpp (1.1), src/scim_iconv.h (1.1), src/scim_lookup_table.cpp (1.1), src/scim_lookup_table.h (1.1), src/scim_module.cpp (1.1), src/scim_module.h (1.1), src/scim_phrase.cpp (1.1), src/scim_phrase.h (1.1), src/scim_server.cpp (1.1), src/scim_server.h (1.1), src/scim_server_module.cpp (1.1), src/scim_server_module.h (1.1), src/scim_types.h (1.1), src/scim_utility.cpp (1.1), src/scim_utility.h (1.1): Initial revision 2002-07-02 03:56 James Su * modules/FrontEnd/IMdkit/i18nPtHdr.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nTr.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nUtil.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nX.c (1.1.1.1), src/Makefile.am (1.1.1.1), src/ltdl.c (1.1.1.1), src/ltdl.h (1.1.1.1), src/scim.h (1.1.1.1), src/scim_array.h (1.1.1.1), src/scim_backend.cpp (1.1.1.1), src/scim_backend.h (1.1.1.1), src/scim_config_base.cpp (1.1.1.1), src/scim_config_base.h (1.1.1.1), src/scim_config_module.cpp (1.1.1.1), src/scim_config_module.h (1.1.1.1), src/scim_config_path.h (1.1.1.1), src/scim_errors.h (1.1.1.1), src/scim_event.cpp (1.1.1.1), src/scim_event.h (1.1.1.1), src/scim_frontend.cpp (1.1.1.1), src/scim_frontend.h (1.1.1.1), src/scim_frontend_module.cpp (1.1.1.1), src/scim_frontend_module.h (1.1.1.1), src/scim_iconv.cpp (1.1.1.1), src/scim_iconv.h (1.1.1.1), src/scim_lookup_table.cpp (1.1.1.1), src/scim_lookup_table.h (1.1.1.1), src/scim_module.cpp (1.1.1.1), src/scim_module.h (1.1.1.1), src/scim_phrase.cpp (1.1.1.1), src/scim_phrase.h (1.1.1.1), src/scim_server.cpp (1.1.1.1), src/scim_server.h (1.1.1.1), src/scim_server_module.cpp (1.1.1.1), src/scim_server_module.h (1.1.1.1), src/scim_types.h (1.1.1.1), src/scim_utility.cpp (1.1.1.1), src/scim_utility.h (1.1.1.1): first import of scim-lib into subversions.gnu.org 2002-07-02 03:53 James Su * AUTHORS (1.1), COPYING (1.1), ChangeLog (1.1), INSTALL (1.1), Makefile.am (1.1), NEWS (1.1), README (1.1), bootstrap (1.1), config.h.in (1.1), configure.ac (1.1), scim.spec.in (1.1), docs/Makefile.am (1.1), docs/developers (1.1), docs/scim.cfg.in (1.1), docs/topng (1.1), modules/Makefile.am (1.1), modules/Config/Makefile.am (1.1), modules/Config/scim_gconf_config.cpp (1.1), modules/Config/scim_gconf_config.h (1.1), modules/FrontEnd/Makefile.am (1.1), modules/FrontEnd/gtkstringview.c (1.1), modules/FrontEnd/gtkstringview.h (1.1), modules/FrontEnd/scim_x11_frontend.cpp (1.1), modules/FrontEnd/scim_x11_frontend.h (1.1), modules/FrontEnd/scim_x11_ic.cpp (1.1), modules/FrontEnd/scim_x11_ic.h (1.1), modules/FrontEnd/IMdkit/FrameMgr.c (1.1), modules/FrontEnd/IMdkit/FrameMgr.h (1.1), modules/FrontEnd/IMdkit/IMConn.c (1.1), modules/FrontEnd/IMdkit/IMMethod.c (1.1), modules/FrontEnd/IMdkit/IMValues.c (1.1), modules/FrontEnd/IMdkit/IMdkit.h (1.1), modules/FrontEnd/IMdkit/Makefile.am (1.1), modules/FrontEnd/IMdkit/Xi18n.h (1.1), modules/FrontEnd/IMdkit/Xi18nTr.h (1.1), modules/FrontEnd/IMdkit/Xi18nX.h (1.1), modules/FrontEnd/IMdkit/XimFunc.h (1.1), modules/FrontEnd/IMdkit/XimProto.h (1.1), modules/FrontEnd/IMdkit/Xtrans.h (1.1), modules/FrontEnd/IMdkit/i18nAttr.c (1.1), modules/FrontEnd/IMdkit/i18nClbk.c (1.1), modules/FrontEnd/IMdkit/i18nIMProto.c (1.1), modules/FrontEnd/IMdkit/i18nIc.c (1.1), modules/FrontEnd/IMdkit/i18nMethod.c (1.1): Initial revision 2002-07-02 03:53 James Su * AUTHORS (1.1.1.1), COPYING (1.1.1.1), ChangeLog (1.1.1.1), INSTALL (1.1.1.1), Makefile.am (1.1.1.1), NEWS (1.1.1.1), README (1.1.1.1), bootstrap (1.1.1.1), config.h.in (1.1.1.1), configure.ac (1.1.1.1), scim.spec.in (1.1.1.1), docs/Makefile.am (1.1.1.1), docs/developers (1.1.1.1), docs/scim.cfg.in (1.1.1.1), docs/topng (1.1.1.1), modules/Makefile.am (1.1.1.1), modules/Config/Makefile.am (1.1.1.1), modules/Config/scim_gconf_config.cpp (1.1.1.1), modules/Config/scim_gconf_config.h (1.1.1.1), modules/FrontEnd/Makefile.am (1.1.1.1), modules/FrontEnd/gtkstringview.c (1.1.1.1), modules/FrontEnd/gtkstringview.h (1.1.1.1), modules/FrontEnd/scim_x11_frontend.cpp (1.1.1.1), modules/FrontEnd/scim_x11_frontend.h (1.1.1.1), modules/FrontEnd/scim_x11_ic.cpp (1.1.1.1), modules/FrontEnd/scim_x11_ic.h (1.1.1.1), modules/FrontEnd/IMdkit/FrameMgr.c (1.1.1.1), modules/FrontEnd/IMdkit/FrameMgr.h (1.1.1.1), modules/FrontEnd/IMdkit/IMConn.c (1.1.1.1), modules/FrontEnd/IMdkit/IMMethod.c (1.1.1.1), modules/FrontEnd/IMdkit/IMValues.c (1.1.1.1), modules/FrontEnd/IMdkit/IMdkit.h (1.1.1.1), modules/FrontEnd/IMdkit/Makefile.am (1.1.1.1), modules/FrontEnd/IMdkit/Xi18n.h (1.1.1.1), modules/FrontEnd/IMdkit/Xi18nTr.h (1.1.1.1), modules/FrontEnd/IMdkit/Xi18nX.h (1.1.1.1), modules/FrontEnd/IMdkit/XimFunc.h (1.1.1.1), modules/FrontEnd/IMdkit/XimProto.h (1.1.1.1), modules/FrontEnd/IMdkit/Xtrans.h (1.1.1.1), modules/FrontEnd/IMdkit/i18nAttr.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nClbk.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nIMProto.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nIc.c (1.1.1.1), modules/FrontEnd/IMdkit/i18nMethod.c (1.1.1.1): first import of scim-lib into subversions.gnu.org scim-master/Makefile.am000066400000000000000000000041031415264260100153350ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. AUX_DIST = $(ac_aux_dir)/config.guess \ $(ac_aux_dir)/config.sub \ $(ac_aux_dir)/compile \ $(ac_aux_dir)/depcomp \ $(ac_aux_dir)/install-sh \ $(ac_aux_dir)/ltconfig \ $(ac_aux_dir)/ltmain.sh \ $(ac_aux_dir)/missing EXTRA_DIST = config.rpath THANKS \ mkinstalldirs \ bootstrap \ scim.spec \ intltool-extract.in \ intltool-merge.in \ intltool-update.in AUTOMAKE_OPTIONS = gnu SUBDIRS = src utils modules configs po extras data docs tests MAINTAINERCLEANFILES = Makefile.in \ aclocal.m4 \ configure \ config.h.in \ $(AUX_DIST) DISTCLEANFILES = scim.pc scim-gtkutils.pc intltool-extract intltool-merge intltool-update CLEANFILES = *.bak *.tar.* ACLOCAL = aclocal -I $(ac_aux_dir) pkgconfigdir = $(libdir)/pkgconfig if SCIM_BUILD_GTK_UTILS GTK_UTILS_PKGCONFIG = scim-gtkutils.pc endif if SCIM_BUILD_X11_UTILS X11_UTILS_PKGCONFIG = scim-x11utils.pc endif pkgconfig_DATA = scim.pc \ $(GTK_UTILS_PKGCONFIG) \ $(X11_UTILS_PKGCONFIG) ACLOCAL_AMFLAGS = -I m4 .PHONY: update-ChangeLog docs update-ChangeLog: /bin/sh $(top_srcdir)/svn2cl.sh --authors=$(top_srcdir)/developers -f $(top_srcdir)/ChangeLog docs: (cd $(top_srcdir)/docs ; make html ; cd - ; mv -iv docs/*.tar.* $(top_srcdir)/) scim-master/NEWS000066400000000000000000000003611415264260100140020ustar00rootroot000000000000002017-07-31 marguerite 1.4.18 bugfix * define G_GNUC_BEGIN/END_IGNORE_DEPRECATIONS in scim-private.h * fixed a no return in non void function error * FTBFS with GCC-7: invalid conversion from 'char' to 'const void*' scim-master/README000066400000000000000000000121271415264260100141660ustar00rootroot00000000000000Source-derived documentation for developers is provided separately, courtesy of doxygen. Look for scim-doc-$(VERSION).tar.gz on our website for download or browse online at http://oss.leggewie.org/scim/ To compile scim from VCS, be sure to run the bootstrap script in the toplevel directory first. To prepare a new tarball for release, adjust the values of the AC_INIT, SCIM_*_VERSION, SCIM_CURRENT and SCIM_REVISION variables in configure.ac as necessary. Then run "./bootstrap && ./configure && make dist && make docs". The main program of SCIM is named scim. The usage of scim is: scim [option]... The options are: -l, --list List all of available modules. -f, --frontend name Uses specified FrontEnd module. -c, --config name Uses specified Config module. -e, --engines name Load specified set of input method engines. -ne,--no-engines name Do not load those set of engines. -d, --daemon Run scim as a daemon. --no-socket Do not try to start a SCIM SocketFrontEnd daemon. -h, --help Show this help message. By default, scim will use x11 frontend module and simple config module if they are available, unless you specify the module names. And if --no-socket option is not used, scim will try to start a separated daemon with SocketFrontEnd to provide the service, and X11 FrontEnd will try to connect to this service daemon. TIPS of X11 FrontEnd: ===================== * You can drag input window, lookup window by pressing down right mouse button. * export GDK_USE_XFT=1 before running scim to let scim use Anti-Aliased font. * Font and color of preedit, status and lookup area can be changed in config file. TIPS of Socket FrontEnd, IMEngine and Config module: ================================================== *********** Notice ************ From 1.0.0, scim will make use of SocketFrontEnd to construct a single user client/server input method environment automatically. Unless you use --no-socket option when starting scim. ******************************* Socket FrontEnd/IMEngine/Config module is useless under X11 environment. It's only useful to work with GTK2 SCIM IM Module. The purpose of Socket FrontEnd is to listen and accept request on a local/inet socket. Socket IMEngine and Config module serve as clients of Socket FrontEnd. The default socket address is local:/tmp/scim-socket-frontend, the prefix local: indicates that it's a unix/local socket. If you want to create a inet socket, use inet: prefix, e.g. inet:localhost:12345, 12345 is the port number. Use following command to start scim daemon to listen a socket: $ scim -f socket -c simple -ne socket -d To specify a different address, you can do: $ SCIM_SOCKET_ADDRESS=inet:localhost:12345 scim -f socket -c simple -ne socket -d the option "-ne socket" tells scim does not load Socket IMEngine IM module, because there is no Socket FrontEnd running yet. Then to use this scim to serve another scim, you can do like this: $ SCIM_SOCKET_ADDRESS=inet:localhost:12345 scim -f x11 -c socket -e socket -d (This command starts a SCIM X11 XIM server which only forward request between X11 and the previous started SCIM Socket FrontEnd.) The option "-e socket" tells scim only uses Socket IMEngine IM module. Other module should not be loaded directly, because they will be accessed via Socket FrontEnd by Socket IMEngine IM module. -c socket tells scim to load configuration from remote Socket FrontEnd instead of local config file. Or if you want to use GTK2 IM Module within a GTK2/GNOME2 application, you can: $ export SCIM_SOCKET_ADDRESS=inet:localhost:12345 $ testgtk Then you can use SCIM directly within testgtk, by right clicking on an entry widget and selecting SCIM input method. By default, GTK2 SCIM IM Module will only use Socket IMEngine/Config modules, if you want to load other modules directly, you may set the environment variables, e.g.: $ export GTK_IM_SCIM_CONFIG_MODULE=simple $ export GTK_IM_SCIM_IMENGINE_MODULES=table In case you do not understand how Socket FrontEnd/IMEngine module work, here is a simple diagram to explain it: +--------+ |IMEngine| |Mod 1 |--+ +--------+ | | +--------+ | +--------+ inet +--------+ +--------+ |IMEngine| | |Socket | +--------+ |Socket | |X11 | /-----\ |Mod 2 |--+--+ |-|a socket| <- -> |IMEngine|--| |-| X11 |<->app +--------+ | |FrontEnd| +--------+ |Module | |FrontEnd| \-----/ . | +--------+ local +--------+ +--------+ . | . | +--------+ | |IMEngine| | |Mod n |--+ +--------+ Then you see, IMEngine Modules 1 to n (like pinyin, table, rawcode etc.) with Socket FrontEnd together act as a socket daemon (like apache), Socket IMEngine Module with X11 FrontEnd act as a client. All requests from application will first be sent to X11 FrontEnd, then transfered to Socket FrontEnd via Socket IMEngine IM Module, then those requests will be proceeded by the real IMEngine Modules (1 to n), all reply will be sent back to application via the same route. Have fun! James Su Rolf Leggewie scim-master/THANKS000066400000000000000000000002151415264260100142140ustar00rootroot00000000000000Thanks all contributors and users. Without your support, SCIM won't be successful. (There are too many contributors and users to list here). scim-master/TODO000066400000000000000000000006311415264260100137730ustar00rootroot00000000000000Stage 1: * Hotkeys for Helper Module and Panel. * Refactory FrontEndBase class to make it into a generic SCIM Client interface. * Common GUI Setup framework * Common storage framework Stage 2: * Modulize Panel component, use an UI independent hub server to manage all client components, including FrontEnds, Helpers, Common UI components etc. * Multi-user enabled Socket FrontEnd and Socket IMEngine/Config. scim-master/bootstrap000077500000000000000000000005711415264260100152510ustar00rootroot00000000000000#! /bin/sh set -x AUTOPOINT=`which autopoint` AUTORECONF=`which autoreconf` INTLTOOLIZE=`which intltoolize` if test -z $AUTOPOINT -o -z $INTLTOOLIZE -o -z $AUTORECONF; then echo "Error: no autopoint, intltoolize, or autoreconf found, please install them" >&2 exit 1 fi $AUTOPOINT --force AUTOPOINT="$INTLTOOLIZE --automake --copy" $AUTORECONF --force --install --verbose scim-master/configs/000077500000000000000000000000001415264260100147335ustar00rootroot00000000000000scim-master/configs/Makefile.am000066400000000000000000000004001415264260100167610ustar00rootroot00000000000000MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak if SCIM_BUILD_CONFIG_SIMPLE configdir = $(sysconfdir)/scim config_DATA = config global #config_source_data = $(foreach file, $(config_DATA), $(srcdir)/$(file)) endif EXTRA_DIST = $(config_DATA) scim-master/configs/config000066400000000000000000000030601415264260100161220ustar00rootroot00000000000000# This file is encoded in UTF-8 encoding. /FrontEnd/OnTheSpot = true /FrontEnd/SharedInputMethod = true /FrontEnd/ChangeFactoryGlobally = false /FrontEnd/Socket/ConfigReadOnly = false /FrontEnd/Socket/MaxClients = 512 /FrontEnd/X11/BrokenWchar = true /FrontEnd/X11/Dynamic = false /FrontEnd/X11/OnTheSpot = true /FrontEnd/X11/ServerName = SCIM /Hotkeys/FrontEnd/NextFactory = Control+Alt+Down,Shift+Control+KeyRelease+Shift_L,Shift+Control+KeyRelease+Shift_R /Hotkeys/FrontEnd/PreviousFactory = Control+Alt+Up,Shift+Control+KeyRelease+Control_L,Shift+Control+KeyRelease+Control_R /Hotkeys/FrontEnd/ShowFactoryMenu = Control+Alt+Right /Hotkeys/FrontEnd/Trigger = Control+space,Zenkaku_Hankaku,Hangul /Hotkeys/FrontEnd/ValidKeyMask = Shift+Control+Alt+Meta+QuirkKanaRo /Panel/Gtk/Color/ActiveBackground = light sky blue /Panel/Gtk/Color/ActiveText = black /Panel/Gtk/Color/NormalBackground = #F7F3F7 /Panel/Gtk/Color/NormalText = black /Panel/Gtk/Font = default /Panel/Gtk/DefaultSticked = false /Panel/Gtk/LookupTableEmbedded = true /Panel/Gtk/LookupTableVertical = false /Panel/Gtk/ShowStatusBox = false /Panel/Gtk/ShowTrayIcon = true /Panel/Gtk/ToolBar/AlwaysShow = false /Panel/Gtk/ToolBar/AutoSnap = true /Panel/Gtk/ToolBar/HideTimeout = 2 /Panel/Gtk/ToolBar/POS_X = -1 /Panel/Gtk/ToolBar/POS_Y = -1 /Panel/Gtk/ToolBar/ShowHelpIcon = true /Panel/Gtk/ToolBar/ShowFactoryIcon = true /Panel/Gtk/ToolBar/ShowFactoryName = true /Panel/Gtk/ToolBar/ShowMenuIcon = true /Panel/Gtk/ToolBar/ShowSetupIcon = true /Panel/Gtk/ToolBar/ShowStickIcon = false /IMEngine/RawCode/Locales = default scim-master/configs/global000066400000000000000000000007131415264260100161170ustar00rootroot00000000000000/SupportedUnicodeLocales = en_US.UTF-8 /DefaultPanelProgram = scim-panel-gtk /DefaultConfigModule = simple /DefaultSocketFrontEndAddress = local:/tmp/scim-socket-frontend /DefaultSocketIMEngineAddress = local:/tmp/scim-socket-frontend /DefaultSocketConfigAddress = local:/tmp/scim-socket-frontend /DefaultPanelSocketAddress = local:/tmp/scim-panel-socket /DefaultHelperManagerSocketAddress = local:/tmp/scim-helper-manager-socket /DefaultSocketTimeout = 5000 scim-master/configure.ac000066400000000000000000000712041415264260100155750ustar00rootroot00000000000000# Process this file with autoconf to produce a configure script AC_INIT([scim],[1.4.18],[https://github.com/scim-im/scim]) AC_CONFIG_SRCDIR([src/scim.h]) ########################################################### ## Some definitions of Version macros. ## ########################################################### SCIM_MAJOR_VERSION=1 SCIM_MINOR_VERSION=4 SCIM_MICRO_VERSION=18 SCIM_VERSION=$SCIM_MAJOR_VERSION.$SCIM_MINOR_VERSION.$SCIM_MICRO_VERSION AC_SUBST(SCIM_MAJOR_VERSION) AC_SUBST(SCIM_MINOR_VERSION) AC_SUBST(SCIM_MICRO_VERSION) AC_SUBST(SCIM_VERSION) # increment if the interface has additions, changes, removals. SCIM_CURRENT=10 # increment any time the source changes; set to 0 if you increment CURRENT SCIM_REVISION=6 # increment if any interfaces have been added; set to 0 # if any interfaces have been removed. removal has # precedence over adding, so set to 0 if both happened. SCIM_AGE=2 AC_SUBST(SCIM_CURRENT) AC_SUBST(SCIM_REVISION) AC_SUBST(SCIM_AGE) # Define a string for the earliest version that this release cannot # coexist with. This is used for directory hierarchies. # SCIM_EPOCH=-1.0 AC_SUBST(SCIM_EPOCH) # Define a string for the earliest version that this release has # binary compatibility with. This is used for module locations. # SCIM_BINARY_VERSION=1.4.0 AC_SUBST(SCIM_BINARY_VERSION) AC_DEFINE_UNQUOTED(SCIM_BINARY_VERSION, "$SCIM_BINARY_VERSION", [The binary version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_VERSION, "$SCIM_VERSION", [The release version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_MAJOR_VERSION, $SCIM_MAJOR_VERSION, [The Major version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_MINOR_VERSION, $SCIM_MINOR_VERSION, [The Minor version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_MICRO_VERSION, $SCIM_MICRO_VERSION, [The Micro version of SCIM library.]) # for scim-bridge integration SCIM_BRIDGE_MAJOR_VERSION=$SCIM_MAJOR_VERSION SCIM_BRIDGE_MINOR_VERSION=$SCIM_MINOR_VERSION SCIM_BRIDGE_MICRO_VERSION=$SCIM_MICRO_VERSION SCIM_BRIDGE_VERSION=$SCIM_VERSION AC_SUBST(SCIM_BRIDGE_MAJOR_VERSION) AC_SUBST(SCIM_BRIDGE_MINOR_VERSION) AC_SUBST(SCIM_BRIDGE_MICRO_VERSION) AC_SUBST(SCIM_BRIDGE_VERSION) AC_DEFINE_UNQUOTED(SCIM_BRIDGE_VERSION, "$SCIM_BRIDGE_VERSION", [The release version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_BRIDGE_MAJOR_VERSION, $SCIM_BRIDGE_MAJOR_VERSION, [The Major version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_BRIDGE_MINOR_VERSION, $SCIM_BRIDGE_MINOR_VERSION, [The Minor version of SCIM library.]) AC_DEFINE_UNQUOTED(SCIM_BRIDGE_MICRO_VERSION, $SCIM_BRIDGE_MICRO_VERSION, [The Micro version of SCIM library.]) GETTEXT_PACKAGE=scim AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [The gettext domain]) ########################################################### ## Start Configuration. ## ########################################################### # Init automake stuff AM_INIT_AUTOMAKE([]) AM_CONFIG_HEADER([config.h]) # Init libtool LT_CONFIG_LTDL_DIR([libltdl]) LT_INIT([dlopen]) LTDL_INIT AC_SUBST(LIBTOOL_DEPS) # libtool option to control which symbols are exported # right now, symbols starting with _ are not exported # !!! DO NOT USE IT !!! LIBTOOL_EXPORT_OPTIONS='' AC_SUBST(LIBTOOL_EXPORT_OPTIONS) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_LANG(C) # Init gettext ALL_LINGUAS="as bn_IN ca cs de es fi fr gu hi it ja kn ko ml mr nl pa pt_BR ru sk sv ta te vi zh_CN zh_TW" AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION(0.14.1) # Checks if doxygen is avaiable AC_ARG_WITH([doxygen], AS_HELP_STRING([--without-doxygen], [Don't build API documentation]) ) DOXYGEN=no if test "x$with_doxygen" != "xno"; then AC_PATH_PROG(DOXYGEN, doxygen, no) fi AM_CONDITIONAL(HAVE_DOXYGEN, test x$DOXYGEN != xno) AC_SUBST(DOXYGEN) # Checks if graphviz is available AC_CHECK_PROG(HAVE_GRAPHVIZ, dot, YES, NO) AC_PATH_PROG(DOT, dot) DOT=`dirname $DOT` AC_SUBST(DOT) AC_PATH_PROG(PERL, perl) AC_SUBST(PERL) # Checks if xsltproc is available AC_PATH_PROG(XSLTPROC, xsltproc, no) AM_CONDITIONAL(HAVE_XSLTPROC, test x$XSLTPROC != xno) AC_SUBST(XSLTPROC) # Checks if docbook-style-xsl is available AC_CHECK_FILE( [/usr/share/sgml/docbook/xsl-stylesheets/html/tldp-html.xsl], [DOCBOOK_XSL=/usr/share/sgml/docbook/xsl-stylesheets/html/tldp-html.xsl], [AC_CHECK_FILE( [/usr/share/sgml/docbook/xsl-stylesheets/html/docbook.xsl], [DOCBOOK_XSL=/usr/share/sgml/docbook/xsl-stylesheets/html/docbook.xsl], [AC_CHECK_FILE( [/usr/share/xml/docbook/stylesheet/nwalsh/current/html/docbook.xsl], [DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/current/html/docbook.xsl], [DOCBOOK_XSL=no] )] )] ) AC_SUBST(DOCBOOK_XSL) AM_CONDITIONAL(HAVE_DOCBOOK, test x$DOCBOOK_XSL != xno) AM_CONDITIONAL(BUILD_MANUAL, test x$XSLTPROC != xno -a x$DOCBOOK_XSL != xno) # Check intltool IT_PROG_INTLTOOL([0.33], [no-xml]) # Checks for libraries. AC_HEADER_STDC AC_HEADER_TIME AC_CHECK_HEADERS([langinfo.h libintl.h string.h dirent.h hash_map ext/hash_map]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T if test x$ac_cv_type_size_t != xyes; then AC_MSG_ERROR([No type size_t, but SCIM needs it!]) fi AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(unsigned short int) AC_CHECK_SIZEOF(unsigned int) AC_CHECK_SIZEOF(unsigned long int) AC_CHECK_SIZEOF(unsigned long long int) AC_CHECK_HEADERS([stdint.h],[has_stdint=yes],[has_stdint=no]) if test x$ac_cv_sizeof_unsigned_short_int = x2 && test x$ac_cv_sizeof_char = x1 ; then : else AC_MSG_ERROR([ *** SCIM requires *** sizeof (unsigned short int) == 2 *** sizeof (char) == 1 *** You might want to consider using the GNU C compiler. ]) fi if test x$ac_cv_sizeof_wchar_t = x0 ; then AC_MSG_ERROR([ *** SCIM requires a compiler that supports wchar_t, *** You might want to consider using the GNU C compiler. ]) fi if test x$has_stdint = xyes; then INCLUDE_STDINT="#include " UINT16="uint16_t" UINT32="uint32_t" UINT64="uint64_t" else INCLUDE_STDINT="//#include " UINT16="unsigned short int" if test x$ac_cv_sizeof_unsigned_int = x4; then UINT32="unsigned int" else if test x$ac_cv_sizeof_unsigned_long_int = x4; then UINT32="unsigned long int" else AC_MSG_ERROR([*** No suitable integer type for uint32 found.]) fi fi if test x$ac_cv_sizeof_unsigned_long_long_int = x8; then UINT64="unsigned long long int" else AC_MSG_ERROR([*** No suitable integer type for uint64 found.]) fi fi AC_SUBST(INCLUDE_STDINT) AC_SUBST(UINT16) AC_SUBST(UINT32) AC_SUBST(UINT64) # Checks for library functions. AC_FUNC_MALLOC AC_CHECK_FUNCS([gettimeofday memmove memset nl_langinfo setlocale daemon]) AC_CHECK_FUNCS([opendir closedir readdir]) AC_CHECK_FUNCS([usleep nanosleep]) AC_CHECK_FUNCS([gethostbyname gethostbyname_r socket bind accept connect listen], [socket_ok=yes], [socket_ok=no]) AM_ICONV PKG_PROG_PKG_CONFIG # Check if we should build scim-panel-gtk daemon PKG_CHECK_MODULES(GTK2, [gtk+-2.0 >= 2.4.0 pango >= 1.1.0 gdk-pixbuf-2.0 >= 2.4.0], [SCIM_HAS_GTK2=yes], [SCIM_HAS_GTK2=no]) PKG_CHECK_MODULES(GTK3, [gtk+-3.0 >= 3.0.0 pango >= 1.1.0 gdk-pixbuf-2.0 >= 2.4.0], [SCIM_HAS_GTK3=yes], [SCIM_HAS_GTK3=no]) PKG_CHECK_MODULES(GTK4, [gtk4 >= 4.0.0 pango >= 1.48.0 gdk-pixbuf-2.0 >= 2.42.0], [SCIM_HAS_GTK4=yes], [SCIM_HAS_GTK4=no]) SCIM_HAS_GTK2_2=no if test "$SCIM_HAS_GTK2" = "yes"; then if $PKG_CONFIG --exists "gtk+-2.0 >= 2.2" ; then AC_DEFINE(GDK_MULTIHEAD_SAFE,1,[Force use of GDK's multihead-safe APIs.]) fi GTK2_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0` GTK2_LIBDIR=`$PKG_CONFIG --variable=libdir gtk+-2.0` GTK2_IM_MODULEDIR=$GTK2_LIBDIR/gtk-2.0/$GTK2_BINARY_VERSION/immodules AC_SUBST(GTK2_IM_MODULEDIR) fi if test "$SCIM_HAS_GTK3" = "yes"; then GTK3_VERSION=3.0.0 GTK3_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0` GTK3_LIBDIR=`$PKG_CONFIG --variable=libdir gtk+-3.0` GTK3_IM_MODULEDIR=$GTK3_LIBDIR/gtk-3.0/$GTK3_BINARY_VERSION/immodules AC_SUBST(GTK3_IM_MODULEDIR) fi if test "$SCIM_HAS_GTK4" = "yes"; then GTK4_VERSION=4.0.0 GTK4_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk4` GTK4_LIBDIR=`$PKG_CONFIG --variable=libdir gtk4` GTK4_IM_MODULEDIR=$GTK4_LIBDIR/gtk-4.0/$GTK4_BINARY_VERSION/immodules AC_SUBST(GTK4_IM_MODULEDIR) fi # Check if we have gthread PKG_CHECK_MODULES(GTHREAD2,[gthread-2.0 >= 2.0.0], [SCIM_HAS_GTHREAD2=yes], [SCIM_HAS_GTHREAD2=no]) # Check if we should build scim-bridge-qt-immodule PKG_CHECK_MODULES(QT3, [qt-mt >= 3.3], [SCIM_HAS_QT3=yes], [SCIM_HAS_QT3=no]) if test "$SCIM_HAS_QT3" = "yes"; then if test -z "$QT3_PREFIX"; then QT3_PREFIX=`$PKG_CONFIG --variable=prefix qt-mt` QT3_LIBDIR=`$PKG_CONFIG --variable=libdir qt-mt` fi QT3_MOC=$QT3_PREFIX/bin/moc QT3_IM_MODULEDIR=$QT3_LIBDIR/qt3/plugins/inputmethods AC_SUBST(QT3_MOC) AC_SUBST(QT3_IM_MODULEDIR) AC_SUBST(QT3_PREFIX) AC_SUBST(QT3_LIBDIR) fi PKG_CHECK_MODULES(QT4, [QtGui >= 4.0, QtCore >= 4.0], [SCIM_HAS_QT4=yes], [SCIM_HAS_QT4=no]) if test "$SCIM_HAS_QT4" = "yes"; then if test -z "$QT4_PREFIX"; then QT4_PREFIX=`$PKG_CONFIG --variable=prefix QtCore` QT4_LIBDIR=`$PKG_CONFIG --variable=libdir QtCore` fi QT4_MOC=$QT4_PREFIX/bin/moc QT4_IM_MODULEDIR=$QT4_LIBDIR/qt4/plugins/inputmethods AC_SUBST(QT4_MOC) AC_SUBST(QT4_IM_MODULEDIR) AC_SUBST(QT4_PREFIX) AC_SUBST(QT4_LIBDIR) fi # Check if we should build scim-bridge-clutter-immodule PKG_CHECK_MODULES(CLUTTER, clutter-1.0, [SCIM_HAS_CLUTTER=yes], [SCIM_HAS_CLUTTER=no]) PKG_CHECK_MODULES(CLUTTERIMCONTEXT, clutter-imcontext-0.1, [SCIM_HAS_CLUTTERIMCONTEXT=yes], [SCIM_HAS_CLUTTERIMCONTEXT=no]) if test "$SCIM_HAS_CLUTTER" = "yes" -a "$SCIM_HAS_CLUTTERIMCONTEXT" = "yes"; then CLUTTERIMCONTEXT_LIBDIR=`$PKG_CONFIG --variable=libdir clutter-imcontext-0.1` CLUTTER_IM_MODULEDIR=$CLUTTERIMCONTEXT_LIBDIR/clutter-imcontext/immodules AC_SUBST(CLUTTER_IM_MODULEDIR) fi # Checks for X11 header files. AC_PATH_XTRA # Add -lX11 to X_LIBS if test "$have_x" = "yes"; then X_LIBS="$X_LIBS -lX11" fi ########################################################### ## Definiation of compile args. ## ########################################################### AC_ARG_WITH([gtk2-im-module-dir], [AS_HELP_STRING([--with-gtk2-im-module-dir=dir], [Select GTK2 immodule dir])], [GTK2_IM_MODULEDIR=$with_gtk2_im_module_dir]) AC_ARG_WITH([gtk2-im-module-dir], [AS_HELP_STRING([--with-gtk2-im-module-dir=dir], [Select GTK2 immodule dir])], [GTK2_IM_MODULEDIR=$with_gtk2_im_module_dir]) AC_ARG_WITH([gtk3-im-module-dir], [AS_HELP_STRING([--with-gtk3-im-module-dir=dir], [Select GTK3 immodule dir])], [GTK3_IM_MODULEDIR=$with_gtk3_im_module_dir]) AC_ARG_WITH([gtk4-im-module-dir], [AS_HELP_STRING([--with-gtk4-im-module-dir=dir], [Select GTK4 immodule dir])], [GTK4_IM_MODULEDIR=$with_gtk4_im_module_dir]) AC_ARG_WITH([qt3-moc], [AS_HELP_STRING([--with-qt3-moc=file], [Select QT3 moc program (default to QT3_PREFIX/bin/moc)])], [QT3_MOC=$with_qt3_moc]) AC_ARG_WITH([qt4-moc], [AS_HELP_STRING([--with-qt4-moc=file], [Select QT4 moc program (default to QT4_PREFIX/bin/moc)])], [QT4_MOC=$with_qt4_moc]) AC_ARG_WITH([qt3-im-module-dir], [AS_HELP_STRING([--with-qt3-im-module-dir=dir], [Select QT3 immodule dir])], [QT3_IM_MODULEDIR=$with_qt3_im_module_dir]) AC_ARG_WITH([qt4-im-module-dir], [AS_HELP_STRING([--with-qt4-im-module-dir=dir], [Select QT4 immodule dir])], [QT4_IM_MODULEDIR=$with_qt4_im_module_dir]) AC_ARG_WITH([clutter-im-module-dir], [AS_HELP_STRING([--with-clutter-im-module-dir=dir], [Select clutter immodule dir])], [CLUTTER_IM_MODULEDIR=$with_clutter_im_module_dir]) AC_ARG_WITH([gtk-version], [AS_HELP_STRING([--with-gtk-version=2 or 3], [Select gtk version if both gtk2 and gtk3 are available (default is 3)])], [WANT_GTK_VERSION=$withval], [WANT_GTK_VERSION=3]) AC_ARG_ENABLE([ld-version-script], [AS_HELP_STRING([--enable-ld-version-script], [Use ld version script to limit exported symbols])], [], [enable_ld_version_script=no]) AC_ARG_ENABLE([ltdladvise], [AS_HELP_STRING([--enable-ltdladvise], [Use lt_dladvise for module loading])], [], [enable_ltdladvise=no]) AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], [Turn on debugging])], [], [enable_debug=no]) AC_ARG_ENABLE([tests], [AS_HELP_STRING([--enable-tests], [Build tests/*])], [], [enable_tests=no]) AC_ARG_ENABLE([documents], [AS_HELP_STRING([--enable-documents], [build documents])], [], [enable_documents=no]) AC_ARG_ENABLE([hash-map], [AS_HELP_STRING([--enable-hash-map], [Use hash_map instead of std::map internally])], [], [enable_hash_map=no]) AC_ARG_ENABLE([config-simple], [AS_HELP_STRING([--disable-config-simple], [Do not build Simple Config module])], [], [enable_config_simple=yes]) AC_ARG_ENABLE([config-socket], [AS_HELP_STRING([--disable-config-socket], [Do not build Socket Config module])], [], [enable_config_socket=yes]) AC_ARG_ENABLE([frontend-x11], [AS_HELP_STRING([--disable-frontend-x11], [Do not build X11 FrontEnd module])], [], [enable_frontend_x11=yes]) AC_ARG_ENABLE([frontend-socket], [AS_HELP_STRING([--disable-frontend-socket], [Do not build Socket FrontEnd module])], [], [enable_frontend_socket=yes]) AC_ARG_ENABLE([im-rawcode], [AS_HELP_STRING([--disable-im-rawcode], [Do not build RawCode IMEngine module])], [], [enable_im_rawcode=yes]) AC_ARG_ENABLE([im-socket], [AS_HELP_STRING([--disable-im-socket], [Do not build Socket IMEngine module])], [], [enable_im_socket=yes]) AC_ARG_ENABLE([filter-sctc], [AS_HELP_STRING([--disable-filter-sctc], [Do not build Simplified/Traditional Chinese conversion Filter module])], [], [enable_filter_sctc=yes]) AC_ARG_ENABLE([orig-gtk2-immodule], [AS_HELP_STRING([--enable-orig-gtk2-immodule], [Build original GTK2 IMModule])], [], [enable_orig_gtk2_immodule=no]) AC_ARG_ENABLE([orig-gtk3-immodule], [AS_HELP_STRING([--enable-orig-gtk3-immodule], [Build original GTK3 IMModule])], [], [enable_orig_gtk3_immodule=no]) AC_ARG_ENABLE([agent], [AS_HELP_STRING([--disable-im-agent], [Do not build scim-im-agent (required by other immodules)])], [], [enable_im_agent=yes]) AC_ARG_ENABLE([gtk2-immodule], [AS_HELP_STRING([--disable-gtk2-immodule], [Do not build GTK2 IMModule])], [], [enable_gtk2_immodule=yes]) AC_ARG_ENABLE([gtk3-immodule], [AS_HELP_STRING([--disable-gtk3-immodule], [Do not build GTK3 IMModule])], [], [enable_gtk3_immodule=yes]) AC_ARG_ENABLE([gtk4-immodule], [AS_HELP_STRING([--disable-gtk4-immodule], [Do not build GTK4 IMModule])], [], [enable_gtk4_immodule=yes]) AC_ARG_ENABLE([qt3-immodule], [AS_HELP_STRING([--disable-qt3-immodule], [Do not build QT3 IMModule])], [], [enable_qt3_immodule=yes]) AC_ARG_ENABLE([qt4-immodule], [AS_HELP_STRING([--disable-qt4-immodule], [Do not build QT4 IMModule])], [], [enable_qt4_immodule=yes]) AC_ARG_ENABLE([clutter-immodule], [AS_HELP_STRING([--enable-clutter-immodule], [Do not build CLUTTER IMModule])], [], [enable_clutter_immodule=no]) AC_ARG_ENABLE([panel-gtk], [AS_HELP_STRING([--disable-panel-gtk], [Do not build GTK2 Panel])], [], [enable_panel_gtk=check]) AC_ARG_ENABLE([setup-ui], [AS_HELP_STRING([--disable-setup-ui], [Do not build Setup UI])], [], [enable_setup_ui=yes]) if test "$have_x" = "yes"; then SCIM_BUILD_X11_UTILS=1 enable_x11_utils=yes else SCIM_BUILD_X11_UTILS=0 enable_x11_utils=no fi if test "$enable_hash_map" = "yes"; then AC_DEFINE(ENABLE_HASH_MAP,1,[Use hash map instead of map in libscim]) fi if test "$enable_debug" = "yes"; then AC_DEFINE(ENABLE_DEBUG,1,[Define this to enable the debug facility in libscim]) CFLAGS="$CFLAGS -g" CXXFLAGS="$CXXFLAGS -g" else enable_debug=no fi if test "$enable_tests" = "yes"; then SCIM_BUILD_TESTS=1 else SCIM_BUILD_TESTS=0 enable_tests=no fi if test "$enable_documents" = "yes"; then SCIM_DOCUMENTS=1 else SCIM_DOCUMENTS=0 enable_documents=no fi if test "$enable_ltdladvise" = "yes"; then SCIM_LTDLADVISE=1 else SCIM_LTDLADVISE=0 fi if test "$enable_config_simple" = "yes"; then SCIM_BUILD_CONFIG_SIMPLE=1 else SCIM_BUILD_CONFIG_SIMPLE=0 enable_config_simple=no fi if test "$enable_config_socket" = "yes" -a "$socket_ok" = "yes"; then SCIM_BUILD_CONFIG_SOCKET=1 else SCIM_BUILD_CONFIG_SOCKET=0 enable_config_socket=no fi if test "$enable_frontend_x11" = "yes" -a "$have_x" = "yes"; then SCIM_BUILD_FRONTEND_X11=1 else SCIM_BUILD_FRONTEND_X11=0 enable_frontend_x11=no fi if test "$enable_frontend_socket" = "yes" -a "$socket_ok" = "yes"; then SCIM_BUILD_FRONTEND_SOCKET=1 else SCIM_BUILD_FRONTEND_SOCKET=0 enable_frontend_socket=no fi if test "$enable_im_rawcode" = "yes"; then SCIM_BUILD_IMENGINE_RAWCODE=1 else SCIM_BUILD_IMENGINE_RAWCODE=0 enable_im_rawcode=no fi if test "$enable_im_socket" = "yes" -a "$socket_ok" = "yes"; then SCIM_BUILD_IMENGINE_SOCKET=1 else SCIM_BUILD_IMENGINE_SOCKET=0 enable_im_socket=no fi if test "$enable_filter_sctc" = "yes"; then SCIM_BUILD_FILTER_SCTC=1 else SCIM_BUILD_FILTER_SCTC=0 enable_filter_sctc=no fi if test "$enable_orig_gtk2_immodule" = "yes" -a "$SCIM_HAS_GTK2" = "yes"; then SCIM_BUILD_ORIG_GTK2_IMMODULE=1 else SCIM_BUILD_ORIG_GTK2_IMMODULE=0 enable_orig_gtk2_immodule=no fi if test "$enable_orig_gtk3_immodule" = "yes" -a "$SCIM_HAS_GTK3" = "yes"; then SCIM_BUILD_ORIG_GTK3_IMMODULE=1 else SCIM_BUILD_ORIG_GTK3_IMMODULE=0 enable_orig_gtk3_immodule=no fi if test "$enable_gtk3_immodule" = "yes" -a "$SCIM_HAS_GTK3" = "yes"; then SCIM_BUILD_GTK3_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BUILD_GTK3_IMMODULE=0 enable_gtk3_immodule=no fi if test "$enable_gtk4_immodule" = "yes" -a "$SCIM_HAS_GTK4" = "yes"; then SCIM_BUILD_GTK4_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BUILD_GTK4_IMMODULE=0 enable_gtk4_immodule=no fi if test "$enable_im_agent" = "yes"; then SCIM_BUILD_IM_AGENT=1 else SCIM_BUILD_IM_AGENT=0 enable_im_agent=no fi SCIM_BUILD_IMMODULE=0 enable_immodule=no if test "$enable_gtk2_immodule" = "yes" -a "$SCIM_HAS_GTK2" = "yes"; then SCIM_BUILD_GTK2_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_GTK2_IMMODULE=0 enable_gtk2_immodule=no fi if test "$enable_gtk3_immodule" = "yes" -a "$SCIM_HAS_GTK3" = "yes"; then SCIM_BUILD_GTK3_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_GTK3_IMMODULE=0 enable_gtk3_immodule=no fi if test "$enable_gtk4_immodule" = "yes" -a "$SCIM_HAS_GTK4" = "yes"; then SCIM_BUILD_GTK4_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_GTK4_IMMODULE=0 enable_gtk4_immodule=no fi if test "$enable_qt3_immodule" = "yes" -a "$SCIM_HAS_QT3" = "yes"; then SCIM_BUILD_QT3_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_QT3_IMMODULE=0 enable_qt3_immodule=no fi if test "$enable_qt4_immodule" = "yes" -a "$SCIM_HAS_QT4" = "yes"; then SCIM_BUILD_QT4_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_QT4_IMMODULE=0 enable_qt4_immodule=no fi if test "$enable_clutter_immodule" = "yes" -a \ "$SCIM_HAS_CLUTTER" = "yes" -a \ "$SCIM_HAS_CLUTTERIMCONTEXT" = "yes" ; then SCIM_BUILD_CLUTTER_IMMODULE=1 SCIM_BUILD_IMMODULE=1 enable_immodule=yes SCIM_BUILD_IM_AGENT=1 enable_im_agent=yes else SCIM_BUILD_CLUTTER_IMMODULE=0 enable_clutter_immodule=no fi if test "$SCIM_HAS_GTK4" = "yes" -a "$SCIM_HAS_GTK3" = "yes" -a "$SCIM_HAS_GTK2" = "yes"; then if test "$WANT_GTK_VERSION" = "2"; then USE_GTK_VERSION="2" elif test "$WANT_GTK_VERSION" = "3"; then USE_GTK_VERSION="3" else USE_GTK_VERSION="4" fi elif test "$SCIM_HAS_GTK4" = "yes"; then USE_GTK_VERSION="4" elif test "$SCIM_HAS_GTK3" = "yes"; then USE_GTK_VERSION="3" elif test "$SCIM_HAS_GTK2" = "yes"; then USE_GTK_VERSION="2" fi if test "$USE_GTK_VERSION" = "4"; then SCIM_HAS_GTK=yes GTK_LIBDIR=$GTK4_LIBDIR GTK_VERSION=$GTK4_VERSION GTK_MAJOR_VERSION=4 GTK_BINARY_VERSION=$GTK4_BINARY_VERSION GTK_CFLAGS=$GTK4_CFLAGS GTK_LIBS=$GTK4_LIBS AC_SUBST(GTK_LIBDIR) AC_SUBST(GTK_VERSION) AC_SUBST(GTK_MAJOR_VERSION) AC_SUBST(GTK_BINARY_VERSION) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) elif test "$USE_GTK_VERSION" = "3"; then SCIM_HAS_GTK=yes GTK_LIBDIR=$GTK3_LIBDIR GTK_VERSION=$GTK3_VERSION GTK_MAJOR_VERSION=3 GTK_BINARY_VERSION=$GTK3_BINARY_VERSION GTK_CFLAGS=$GTK3_CFLAGS GTK_LIBS=$GTK3_LIBS AC_SUBST(GTK_LIBDIR) AC_SUBST(GTK_VERSION) AC_SUBST(GTK_MAJOR_VERSION) AC_SUBST(GTK_BINARY_VERSION) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) elif test "$USE_GTK_VERSION" = "2"; then SCIM_HAS_GTK=yes GTK_LIBDIR=$GTK2_LIBDIR GTK_VERSION=$GTK2_VERSION GTK_MAJOR_VERSION=2 GTK_BINARY_VERSION=$GTK2_BINARY_VERSION GTK_CFLAGS=$GTK2_CFLAGS GTK_LIBS=$GTK2_LIBS AC_SUBST(GTK_LIBDIR) AC_SUBST(GTK_VERSION) AC_SUBST(GTK_MAJOR_VERSION) AC_SUBST(GTK_BINARY_VERSION) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) else SCIM_HAS_GTK=no fi if test "$enable_setup_ui" = "yes" -a "$SCIM_HAS_GTK" = "yes"; then SCIM_BUILD_SCIM_SETUP=1 AC_DEFINE(HAVE_SCIM_SETUP,1,[Have scim-setup program.]) else SCIM_BUILD_SCIM_SETUP=0 enable_setup_ui=no fi if test "$SCIM_HAS_GTK" = "yes"; then enable_gtk_utils=yes SCIM_BUILD_GTK_UTILS=1 else enable_gtk_utils=no SCIM_BUILD_GTK_UTILS=0 fi enable_tray_icon=no if test \( "$SCIM_HAS_GTK4"="yes" -o "$SCIM_HAS_GTK3"="yes" -o "$SCIM_HAS_GTK2_2" = "yes" \) -a "$no_x" != "yes"; then enable_tray_icon=yes AC_DEFINE(ENABLE_TRAY_ICON,1,[Enable the TrayIcon code.]) fi SCIM_BUILD_PANEL_GTK=0 if test "$enable_panel_gtk" != "no"; then enable_panel_gtk=no if test "$SCIM_HAS_GTHREAD2" = "yes" -a "$SCIM_HAS_GTK" = "yes"; then SCIM_BUILD_PANEL_GTK=1 enable_panel_gtk=yes fi fi #if nothing needs libscim-gtkutils, just disable it if test "$enable_panel_gtk" != "yes" -a "$enable_setup_ui" != "yes"; then enable_gtk_utils=no SCIM_BUILD_GTK_UTILS=0 fi AM_CONDITIONAL(SCIM_LD_VERSION_SCRIPT, [test "$enable_ld_version_script" = "yes"]) AM_CONDITIONAL(SCIM_LTDLADVISE, [test "$enable_ltdladvise" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_TESTS, [test "$enable_tests" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_DOCUMENTS, [test "$enable_documents" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_CONFIG_SIMPLE, [test "$enable_config_simple" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_CONFIG_SOCKET, [test "$enable_config_socket" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_FRONTEND_X11, [test "$enable_frontend_x11" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_FRONTEND_SOCKET, [test "$enable_frontend_socket" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_IMENGINE_SOCKET, [test "$enable_im_socket" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_IMENGINE_RAWCODE, [test "$enable_im_rawcode" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_ORIG_GTK2_IMMODULE, [test "$enable_orig_gtk2_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_ORIG_GTK3_IMMODULE, [test "$enable_orig_gtk3_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_IM_AGENT, [test "$enable_im_agent" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_GTK2_IMMODULE, [test "$enable_gtk2_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_GTK3_IMMODULE, [test "$enable_gtk3_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_GTK4_IMMODULE, [test "$enable_gtk4_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_QT3_IMMODULE, [test "$enable_qt3_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_QT4_IMMODULE, [test "$enable_qt4_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_CLUTTER_IMMODULE, [test "$enable_clutter_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_IMMODULE, [test "$enable_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_FILTER_SCTC, [test "$enable_filter_sctc" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_SCIM_SETUP, [test "$enable_setup_ui" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_GTK_UTILS, [test "$enable_gtk_utils" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_X11_UTILS, [test "$enable_x11_utils" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_TRAY_ICON, [test "$enable_tray_icon" = "yes"]) AM_CONDITIONAL(SCIM_BUILD_PANEL_GTK, [test "$enable_panel_gtk" = "yes"]) AC_SUBST(SCIM_LTDLADVISE) AC_SUBST(SCIM_BUILD_TESTS) AC_SUBST(SCIM_BUILD_DOCUMENTS) AC_SUBST(SCIM_BUILD_CONFIG_SIMPLE) AC_SUBST(SCIM_BUILD_CONFIG_SOCKET) AC_SUBST(SCIM_BUILD_FRONTEND_X11) AC_SUBST(SCIM_BUILD_FRONTEND_SOCKET) AC_SUBST(SCIM_BUILD_IMENGINE_RAWCODE) AC_SUBST(SCIM_BUILD_IMENGINE_TABLE) AC_SUBST(SCIM_BUILD_IMENGINE_SOCKET) AC_SUBST(SCIM_BUILD_FILTER_SCTC) AC_SUBST(SCIM_BUILD_ORIG_GTK2_IMMODULE) AC_SUBST(SCIM_BUILD_ORIG_GTK3_IMMODULE) AC_SUBST(SCIM_BUILD_SCIM_SETUP) AC_SUBST(SCIM_BUILD_PANEL_GTK) AC_SUBST(SCIM_BUILD_GTK_UTILS) AC_SUBST(SCIM_BUILD_X11_UTILS) AC_SUBST(SCIM_BUILD_IM_AGENT) AC_SUBST(SCIM_BUILD_GTK2_IMMODULE) AC_SUBST(SCIM_BUILD_GTK3_IMMODULE) AC_SUBST(SCIM_BUILD_GTK4_IMMODULE) AC_SUBST(SCIM_BUILD_QT3_IMMODULE) AC_SUBST(SCIM_BUILD_QT4_IMMODULE) AC_SUBST(SCIM_BUILD_CLUTTER_IMMODULE) AC_SUBST(SCIM_BUILD_IMMODULE) # Output All necessary Paths. SCIM_DATADIR="$datadir/scim" SCIM_SYSCONFDIR="$sysconfdir" SCIM_ICONDIR="$datadir/scim/icons" SCIM_MODULE_PATH="$libdir/scim$SCIM_EPOCH" SCIM_LIBEXECDIR="$libdir/scim$SCIM_EPOCH" SCIM_LOCALEDIR="$datadir/locale" SCIM_TEMPDIR="/tmp" SCIM_PREFIX="$prefix" SCIM_LIBDIR="$libdir" AC_SUBST(SCIM_DATADIR) AC_SUBST(SCIM_SYSCONFDIR) AC_SUBST(SCIM_ICONDIR) AC_SUBST(SCIM_MODULE_PATH) AC_SUBST(SCIM_LIBEXECDIR) AC_SUBST(SCIM_LOCALEDIR) AC_SUBST(SCIM_TEMPDIR) AC_SUBST(SCIM_PREFIX) AC_SUBST(SCIM_LIBDIR) ########################################################### ## Output files. ## ########################################################### AC_SUBST(ac_aux_dir) AC_CONFIG_FILES([Makefile po/Makefile.in src/Makefile src/scim_types.h utils/Makefile data/Makefile data/icons/Makefile data/pixmaps/Makefile modules/Makefile modules/FrontEnd/IMdkit/Makefile modules/FrontEnd/Makefile modules/IMEngine/Makefile modules/Filter/Makefile modules/Config/Makefile modules/SetupUI/Makefile docs/scim.cfg docs/Makefile docs/manual/Makefile configs/Makefile extras/Makefile extras/gtk_immodule/gtk2/Makefile extras/gtk_immodule/gtk3/Makefile extras/setup/Makefile extras/setup/scim-setup extras/panel/Makefile extras/immodules/Makefile extras/immodules/common/Makefile extras/immodules/agent/Makefile extras/immodules/client-common/Makefile extras/immodules/client-gtk/gtk2/Makefile extras/immodules/client-gtk/gtk3/Makefile extras/immodules/client-gtk/gtk4/Makefile extras/immodules/client-clutter/Makefile extras/immodules/doc/Makefile tests/Makefile scim.pc scim-gtkutils.pc scim-x11utils.pc scim.spec]) AC_OUTPUT AC_MSG_RESULT([ Build options: Version $SCIM_VERSION Install prefix $prefix Build shared libs $enable_shared Build static libs $enable_static Build tests/* $enable_tests Enable debug $enable_debug Enable ld version script $enable_ld_version_script Enable lt_dladvise $enable_ltdladvise Build documents $enable_documents Module options: Simple config module $enable_config_simple Socket config module $enable_config_socket X11 FrontEnd module $enable_frontend_x11 Socket FrontEnd module $enable_frontend_socket RawCode IMEngine module $enable_im_rawcode Socket IMEngine module $enable_im_socket SCTC Filter module $enable_filter_sctc GTK Utility Library $enable_gtk_utils X11 Utility Library $enable_x11_utils GTK Version $USE_GTK_VERSION GUI Setup Utility $enable_setup_ui GTK Panel GUI $enable_panel_gtk Enable TrayIcon $enable_tray_icon GTK2 IMModule dir $GTK2_IM_MODULEDIR GTK3 IMModule dir $GTK3_IM_MODULEDIR GTK4 IMModule dir $GTK4_IM_MODULEDIR QT3 IMModule dir $QT3_IM_MODULEDIR QT4 IMModule dir $QT4_IM_MODULEDIR Clutter IMModule dir $CLUTTER_IM_MODULEDIR QT3 moc program $QT3_MOC QT4 moc program $QT4_MOC Original GTK2 IMModule $enable_orig_gtk2_immodule Original GTK3 IMModule $enable_orig_gtk3_immodule Scim IM Agent $enable_im_agent GTK2 IMModule $enable_gtk2_immodule GTK3 IMModule $enable_gtk3_immodule GTK4 IMModule $enable_gtk4_immodule QT3 IMModule $enable_qt3_immodule QT4 IMModule $enable_qt4_immodule CLUTTER IMModule $enable_clutter_immodule ]) scim-master/data/000077500000000000000000000000001415264260100142145ustar00rootroot00000000000000scim-master/data/Makefile.am000066400000000000000000000015501415264260100162510ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak SUBDIRS = icons pixmaps scim-master/data/icons/000077500000000000000000000000001415264260100153275ustar00rootroot00000000000000scim-master/data/icons/Makefile.am000066400000000000000000000032621415264260100173660ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in NOINST_ICONS = setup.xpm \ full-letter.xpm \ half-letter.xpm \ help.xpm \ up.xpm \ down.xpm \ left.xpm \ right.xpm \ pin-down.xpm \ pin-up.xpm \ full-punct.xpm \ half-punct.xpm \ trademark.xpm \ menu.xpm INST_ICONS = pin-up.png \ pin-down.png \ full-letter.png \ half-letter.png \ full-punct.png \ half-punct.png \ setup.png \ help.png \ up.png \ down.png \ left.png \ right.png \ trademark.png \ rawcode.png \ keyboard.png \ menu.png SCTC_FILTER_ICONS = sctc.png \ sctc-sc-to-tc.png \ sctc-tc-to-sc.png if SCIM_BUILD_FILTER_SCTC INST_SCTC_ICONS = $(SCTC_FILTER_ICONS) endif EXTRA_DIST = $(NOINST_ICONS) \ $(INST_ICONS) \ $(SCTC_FILTER_ICONS) icondir = @SCIM_ICONDIR@ icon_DATA = $(INST_ICONS) $(INST_SCTC_ICONS) scim-master/data/icons/down.png000066400000000000000000000022341415264260100170050ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  ~tIME .rТ)IDATxLu_߻ $1 Cݰ `ٜ"QilZHT gBQ)4ښjMe 6j:A?;{~`hv{Hi|ѽ)w^~0뀛[ Gw+I-qvBvzߤ΋vNm?sn:>?<V (ؘz7n:K ڽ=pmhHNDRˤtۺ>lvf; VS ] xJDFA͏mO6i>? ΋l+BN_)N r(BpHnٷ%@ ` Τ+U@*ٴEdJ=1'%+x=f5x^IENDB`scim-master/data/icons/down.xpm000066400000000000000000000025561415264260100170340ustar00rootroot00000000000000/* XPM */ static const char *down_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 64 1", " c #000000", ". c #03060c", "X c #050b12", "o c #060f19", "O c #001f03", "+ c #05141e", "@ c #071620", "# c #0b293e", "$ c #070144", "% c #0b0265", "& c #0c026b", "* c #0c0271", "= c #0d324c", "- c #0d3652", "; c #026f0c", ": c #02710c", "> c #144059", ", c #18425f", "< c #0d4864", "1 c #0e5775", "2 c #114560", "3 c #124d6f", "4 c #254a64", "5 c #600a01", "6 c #6d0b02", "7 c #106589", "8 c #10698f", "9 c #337f9e", "0 c #0e8fb6", "q c #0e96bd", "w c #1697b7", "e c #1299bb", "r c #1f95b2", "t c #2b91ae", "y c #2695b1", "u c #0e9ec3", "i c #0fa0c4", "p c #0eadcb", "a c #14a5c9", "s c #1ca2c3", "d c #1babca", "f c #1bb2ce", "g c #1db4d0", "h c #1bbad1", "j c #2ab4d1", "k c #15c1da", "l c #64a3bd", "z c #46b8d5", "x c #53b7d4", "c c #54bdd7", "v c #40d1db", "b c #5fc0d8", "n c #46dbe6", "m c #48dfe9", "M c #8fcce2", "N c #a0cbdf", "B c #a7dcec", "V c #bfdfee", "C c #d3e5f0", "Z c #dfeff8", "A c #e0f1fb", "S c #eff3fc", "D c white", "F c None", /* pixels */ "FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF", "FFFFF3334,=FFFFF", "FFFFF3NSCl+FFFFF", "FFFFF3AcMt+FFFFF", "FFFFF3Spvy+FFFFF", "FFFFF4Aqmr+FFFFF", "F-3344Vqhe12># F", "FF-9ABc0qkms7.FF", "FFF-9Duqims7oFFF", "FFFF=tDams7XFFFF", "FFFFF=9As7XFFFFF", "FFFFFF-87oFFFFFF", "FFFFFFF-.FFFFFFF", "FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF" }; scim-master/data/icons/full-letter.png000066400000000000000000000032221415264260100202730ustar00rootroot00000000000000PNG  IHDR szz pHYs  d_tIME>#SbKGDIDATXoWk̹۩+4ͥmhR@JU CHE oHSEUm U^8 v-9>'2^Gt䄯()9! VtXkiftȅ2vA@8mn>i)zOt;0#`D6:ߘJ C޲yC! @Cuӈr vҰ(8H#"H}&EI&N ЮN'a`ּR'h1A!uHHuJFX3Yt+^e)0 ##"^PQUz$"獵"D$MXk :koeT];.8gCǑ^C"/8Ysc76˕:qcus,2/Ӝjl5a)eN.dL-5-8_AfIENDB`scim-master/data/icons/full-letter.xpm000066400000000000000000000006321415264260100203150ustar00rootroot00000000000000/* XPM */ static const char *full_letter_xpm[]={ "16 16 2 1", ". c None", "# c #0000ff", "................", ".....######.....", "....#.....##....", "...#........#...", "..#..........#..", ".##...........#.", ".#............#.", ".#............#.", ".#............#.", ".#............#.", ".#...........##.", "..#..........#..", "...#........#...", "....##.....#....", ".....######.....", "................"}; scim-master/data/icons/full-punct.png000066400000000000000000000015721415264260100201330ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  ~tIME f IDATxOhW?ovvd[MZEhKj.D R,hCEEZ  m-ے?./Iv;;3~&T}~{RZlr֖ȇx)˦)ZvHWŵp ?9Jyeryy{t||;0g`f Ewn}rGK.Mqt[ 6 G_zm¸9NvxRŅfu}-;p aS)#I CahSUB3q`x9vFP3h7[W l G|Pp=Hsr*^`"iC@p\G8B!hLN!Bz҂xZIlg>{=4J + `f ;ㆈ:)@6c=qK+;>N,ktnj?FP{ڐT| sYG?}\Cm ^ ۡ(=3󼿱_Q5p{5<L Nᗃ݌wyY&$2ԃ%>#bdh/zs v2=[{ aߝS?.M<"bucɕ$=OxޫHǺD)Rk̥ H}.\fދsr!`'*KoZk{?6Ӊ7:zo pi#UeGj)ڰRN'?MɏלWk0<S0=^ !AR/aurA44_|]jK sp"8+:aJ(!4AD<5 6x 8w,\N)l;6^G$6vqLJ3]u);yZAn>XQǃziz%A,ٽMg`ag7wpÓ04^ajeu;ӰFgZCzKaEe]o8G!MkV>jPUs 㗠šyDkxMI&; Wߦ\%W'0u}VOul]$Pj$Z"i+ x*]C۔B FxlmPZ3^`%Fsjs9Uҗ]E'Б8uV5sQCe]=q5[(- PI!CI̫Ϝ:U㤲MiچƱGqxoɜCSK a@wqޥZGj $ ue2|mGv{F&8Ym@zxɬRox櫖˳Pk񃇟\J:*!)^ZU|o i]Eyl8\q(փC <\,S.#]`|RhHg{qd/WulM-A#yJ!͈I`$sSٛvm dN΍yϞ(3 ុ]Pm q^T`nF&9Nbިg|€20 y-g#$0WP:fDZ 91秨,`-S60ڙwP< 1H:hk 9}Ne~wneӳzLδўwQWq(MЖVqr#1[{ӁϩGCΕԬ̪8/ Lz]u)X^ efhhY:m[֞;&,}ǡ~#0j+|⿩[p/ ox 0x (7qϑ2ÇNIe OtjW:.s"mW(+kӳr:?)>EYuBNm'.nO؏R [x $>(`Yܚ&u44%mLڤmؚMZcv4U!f7nnk.gfv:;̦d|*׉'֡(nMQ<4{~ė+SQ)8(K(;;4y%PC03 '$c"I?uQ_O=;(8~!'mbea:_:M3ix",_*4mLKQ ?5 \OQʆN5B!13gd/Ka 'kS ӭ\vqծbӳz5(rj IFիFdVSb 67[xR[ Lكq RT F^;> ?o!ʝoHt)ŦUعcK`~H|GM#v-..pRM(k-3[/~ g,WMRGbEC{Hmw[4[vrw8OxORYش2QMEj9,V8s|@RYO384 ń^O߅ gdvϓ'oaބw7H".Ā)8O@)^ 4ܖD-샸C**4V1_K.X8k,>p3{CG]*Y5k椋?l6zSCCC(y͛7gKπ޸wgϞ]|-/}ȑQ) #{& SSS~@Ѐ$Mƾ᜙T*+P @%|_w&Gsoߞ>3^WLy?>@ki 뺸KFAբj.B2 X ]׉D"hi,--1555 8'x℔CH$( A,4M?N(BUU F 0220u]P(/^( (FA"@Q\ץTUru/č7T*iTUZ<{vRR*(H)d2@r100iXT=."0 àZň88$I6 *0<<.o~(“'OmM4e8i VhrzNp)$h4 8fyBE.pLmnH?=t8+ CcyqV-`uDw_0u7pGXH=7g$ [Fm;bX޴BF*ֳ"Y0233ۏv%S1L,5s!#W2#hFb>BVj%HSVZH܌VA 6r:'@QIENDB`scim-master/data/icons/left.xpm000066400000000000000000000017211415264260100170100ustar00rootroot00000000000000/* XPM */ static const char * left_xpm[] = { "16 16 40 1", " c None", ". c #000000", "+ c #0A121F", "@ c #071728", "# c #105375", "$ c #155678", "% c #1CA2C3", "& c #16597A", "* c #138DB0", "= c #3CD7E1", "- c #0A263B", "; c #081E31", "> c #48DFE9", ", c #0EA0C5", "' c #159ABC", ") c #2A98B3", "! c #178EAC", "~ c #061625", "{ c #0E97BF", "] c #26BDD3", "^ c #43D5DE", "/ c #2CC7D5", "( c #19B3CE", "_ c #091A2B", ": c #124C6E", "< c #819EBA", "[ c #DDEFF8", "} c #59C3DA", "| c #1197B9", "1 c #58ACC5", "2 c #FDFBFD", "3 c #71D1E0", "4 c #9DDAEB", "5 c #CDEBF6", "6 c #80C2DB", "7 c #1A4C6B", "8 c #114760", "9 c #E2F0F9", "0 c #7DA0B8", "a c #20374F", " ", " . ", " +. ", " @#. ", " @$%. ", " @&*=&---.. ", " ;$*>,'')!!. ", " ~$*=,{]^^/(_ ", " :<[}({||||1_ ", " $<23(45256_ ", " 7<2}8$#### ", " 7<9. ", " 70. ", " :a ", " $ ", " "}; scim-master/data/icons/menu.png000066400000000000000000000014761415264260100170110ustar00rootroot00000000000000PNG  IHDR D pHYs  tIME*xAPLTEJ$&:JH#SJ<JZ3?J"M2J'jho *IC demt3 f%u*??J#S.7Y5O888^Z<˒hu ӞYnH[T"b;$Fjg"@i?$!xpZVGbᬵi>0]Pw`r@dbb1BT+#T &Qep|Z<vwSٿp Jtu* *(xx~?GcF9m(F{=K[/v; ә=q,O͢0\ZDPV%bcD]5|Wj뛖7\qC1x|'l;͎/+[/WQgSem& KtNڍ*WǗcuu0U"& 2ݳK`As^dpdF¬kUnώJ2)a/̔U_W+U܅jrs4fz`sOU53%M39vI> XX ;w L#uy5O#B\T(?{Gcg㙼Bl0垘S3n H2os<}{-,W䳎~4ÀmNܵv$(1W߀ fPS"<{\f:eHmÆ{+<0ܷUC4*"U#W^ ͂ш2n${]@kcUPU?x`f&Sk v%Z%`q%: 2fio7# (mR 5Wg^_+-yo(rB3ADW~Skn/lI5XVgO.m^"@:&UwBn"@"BAU=rq1Vx"~닛{t64h1'f|i+&cY(2`(KO'hq˝W,qS{nڕWcc  =y8sXPSAY UeX :|mi?^u>xմ{0k ߭+_<2kNg͝ 0S;==f#րGl$7͆<EۛS}-&0~̊IHv `Vcɀ׳H_R~ҋn#Ǚ1="vɤg$>۫iM~5*odwL:ZHbh͎G5ǹ/zN.]=|[ERNzqX&!U5"ga8kAa၀K;f=Ǐ:@b %5>Q6㮜-`K|֑AeB#XX[( vt,abBB9vRh,Z˛=$q 0Qn(W  ðc[m3`1 !lh&vFp6M&!(odA[@M8h3X8`L:2 %X (ԜJs|+޳gO`p1hȱu2O X9vZ {C/طw_L7 E 2`Ԛ!WM]04 "EX@z*1P*+-\1|-p9eA1918? 1E@GKؽ*ln"zʩg:vh7c~r1Bbn "!HBI0C_^>#m. x<?:f !x*` @؜BTp,3a[fhriKΏQ<ܮ+_,;]X=Q[?|ѻd\7/[O~lg2oMu; YAT. ̆{?f\_0IENDB`scim-master/data/icons/pin-up.xpm000066400000000000000000000006661415264260100172750ustar00rootroot00000000000000/* XPM */ static const char * pin_up_xpm[] = { "16 16 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #B4B6B4", " ", " ", " ", " ", " .. . ", " .+. .. ", " .++...+. ", " ++++++.@+@+@+. ", " @@@@@@.@+@+@+. ", " .......@@.@.@. ", " .@...... ", " ... .. ", " .. . ", " ", " ", " "}; scim-master/data/icons/rawcode.png000066400000000000000000000031141415264260100174600ustar00rootroot00000000000000PNG  IHDRw= pHYs  ~tIME  & ;bKGDIDATHU{LWoK miGϯ軴G yL>njgP)D0Ĉ :T|iB3aEm{ rwolZM~rνwνK"_>j|.{9t u> 1 hS䈏cSKtE !gnij|Q(?FQiQO˝^A:Fv:இupM 9gO>} 1ji[>MȵIEabǜ` B] PLl"{iai|î Joxpjj D6E,Ot<٥ܚd0v!WοTVr7]3?as%|䖾? {l-1Jo%f>nh0|qO`&<9a ~X6.7%A꺡y,xׯ咼{Bn&e7*enj#?6Mdo Lkk XQ+o*"jkR/p.f4K6t% =0B*K'N?Ԗ#Vi$UUsjnv !¢>40L 70 ~,[8ίՀPW &m%HWn}9j!Y¤9ҩ&;ǣT $3KbRUt;QD+D3~i6b}FYl8cuU>%dNI!xbYK%7)uk4.)( M[&[ %Hiҥ`Lp<"I,r&vT6TQh9Qס3[yPW ؇ŢN#WuFyCЮ;?'o_pdy=)jFdn&$C|?GmRPƻRЀžv%**3X^iF; }="bQ3x,rnf]Ƭ =(jƅՂj#KSw7-0ؔj0]){qIϔqþo_]Z8LYc5bԠqURhG2Հı n0yU:~o0++ {„5 Ksw IDATxŗoLUe?rewt"KWK -ݒjeiMW3 /ܘ*!p$ ݰ0׸{<^\}uϹ mߝٳ|w0x2 d@})@н1 ز,#i Z  hܺoF8rǚْ͖@р};{vW)5YఈVz ޕPN0 yqr%iV/Y9lzw|Rc%">\%U'DK"QV}"eDeXe@{kU*5,Մ0)vP4$0gϞ?nntդt5K +kJY6!BIf]ucUTAoѱ=|*6AMc&0X'OT)4&`}- E Y9 }V/5ϣd'Rbfd>c7c`0',^-0æ7;N5b4nh%nֶ{#X^7Z\8QHf_d}ss#.0p'hh6_ +7p'VDtQ}23Kb$>Nn<r7'U &vtYu y!9 `6m- $0n`ڝ]奩0%#v8+ټm  H& ]Mwt`}(kԨ$pYQ6xa^n?i? j롥v~]/"P@FY?3V՟J hOx*0 e{#w}żvT MdwݤhV^O%D!?g[hRb(2$ Ҡ+H Zǹ0 dqpn}mݸ_)0 Iі{.ў=Bs)䞍zq;7;/pbN_IENDB`scim-master/data/icons/right.xpm000066400000000000000000000017771415264260100172060ustar00rootroot00000000000000/* XPM */ static const char * right_xpm[] = { "16 16 43 1", " c None", ". c #000000", "+ c #0B293E", "@ c #03060C", "# c #144059", "$ c #106589", "% c #060F19", "& c #114560", "* c #1CA2C3", "= c #050B12", "- c #0D324C", "; c #05141E", "> c #0E5775", ", c #48DFE9", "' c #18425F", ") c #64A3BD", "! c #2B91AE", "~ c #2695B1", "{ c #1F95B2", "] c #1299BB", "^ c #15C1DA", "/ c #254A64", "( c #D3E5F0", "_ c #8FCCE2", ": c #40D1DB", "< c #1BBAD1", "[ c #0E96BD", "} c #0FA0C4", "| c #124D6F", "1 c #EFF3FC", "2 c #54BDD7", "3 c #0EADCB", "4 c #0E8FB6", "5 c #14A5C9", "6 c #E0F1FB", "7 c #10698F", "8 c #0D3652", "9 c #A0CBDF", "0 c #BFDFEE", "a c #0E9EC3", "b c #FFFFFF", "c c #337F9E", "d c #A7DCEC", " ", " . ", " +@ ", " #$% ", " &*$= ", " -;;;;>,*$= ", " ')!~{]^,*$% ", " /(_:,<[},*$@ ", " |123[[4[5678 ", " |961602abc8 ", " ||||//db!- ", " /6c- ", " |c8 ", " |8 ", " 8 ", " "}; scim-master/data/icons/sctc-sc-to-tc.png000066400000000000000000000034341415264260100204240ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs  tIME6 tEXtCommentCreated with The GIMPd%nbKGDpIDATiPU,p/ Ql4*FQP BT& u7B\RF K*b#.uAbc5%X 1+_iF2H_)f+N@x;@T@s=KoJ_i]O_6`->sdwcؿe鮗.uKݴ'ݴePS 3[?FMJݭ.SoտӍsS >|Pt@t)Rƙyp҄æ uOԡ.J:r{hh^*~9,mY]X 'm0R_{ePh&ސ}3:u c{E012܄E{wu;!4: X"䷁I0m!TfCߓpy :Azo( 3 bBǯ~sX@G@+@i:@Fd{v~Uۡ--Lz\(Ɇa\6 ` a&A0𢅩aH6ªyvxg?v6-&܅)G\:l:<(ɃB 0_!hVA70Z8`2P;P Pi_yIENDB`scim-master/data/icons/sctc-tc-to-sc.png000066400000000000000000000034331415264260100204230ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs  tIME56wtEXtCommentCreated with The GIMPd%nbKGDoIDAT{t>5kBD4t!Y.A ȂKRP,nYe.'!mMq(a)!TG*'iYxGwARfO>'?5vPm*sE_z k6WÛ<=.}R{O[ֲ urN}.CM.՘u@DvuhZ,?mY> ԷUrO7)Ĕ`wM(4 0K>`/kzkg ͋@T[z7,1CPjY@(H'bvࡉ)V)Mp}n`8˩1 hM6KČNlKUpw%C[lŀA30my hҩS3ߥ'ZSClISELgqt%.}{o[-lbWܶ6O@C˛-.ƾBSL<8=FY-fU6J["WTD1ESSZ8ƙhKd|ibC[9w6`:ntko^~kVUbM`9J]5`t Upt:+q' Q/FzE3&ԋt.C x Ӱb68D)Q~!!]>!((2RPyc:NU/CrZClpKŐ{U7юVaUeZR5k̍ %5aV9'x ݐ%@<঑k?&O=㾮 rWf4γ !OV<&Jèm ɐ| sd XB# -Gs=_ eyR){z="ې| TBd䭃 S‚q@}|?닡5(bq(̙ZURaI.>ʥ1C>&G( ߅0);u-^5'-SjݿbsDʟd5H#C64fRXOunǣ@B%;h @`@[ .5z_{@9E MZ綯##%<mOZ cagspr(C?9ҁrkk#?1_dd“)pPr V m|4OC{Q? YgɒO@Ԑ)"D9Wjkޛܘri%AԭrJzx}rlC}rlr]R]HyPI{_.DF㝽M46 ZB4^\GOfÏ'*٣'p{1ޱ8:(`H)yu}!Z=PzvϨ7\Cc1>;Vv!UYǀbkW:듮Y+h,&ϣ7Yyxݢ,בETҷ'.\G{=^oEux͓,ZxJzn\* iϤB`РV49q0n^_!ZV*YrdHwޘ|!ˢWQVeЉ|X)D?s- [G5_1)le\T*1: eȦ`ذa! |Xx/EMZċWY'lJ7rG>yvpl}l}).^ɩnS,=̊]{Mtl>l;F41eUVA/г}]UP@Lvw3^71SF61,0ULҽ~u93]1!VE1" gY?#-|93@7~@ymxi|X¤Qt`s!~j,|s~f!ɵ_p;ܩFpgYa>x ȾšQ}ܵ?)$I@ DD]b #o!>ƿV 10iIENDB`scim-master/data/icons/setup.png000066400000000000000000000031761415264260100172040ustar00rootroot00000000000000PNG  IHDR szzbKGD3IDATX͗iPSWob"bU[U;TGi/ԙu de V`GE ., p H K!yNEk13y7ws.nݺ,(XXXU"VkFS@E(.K{~bܼ)i^&&(-Bvv@H$e699>2Y}Go B6Cnnٵ/DV6#=hzl=uzc@\r6-qq a '1.l8&7LTh .))WsX[r8ܹOtNjk̀h4q &&C+k\tO_?} Oϯvv!5Øg\, #h,K_a%&&=Z BS&鎊Jk@BB A{hOJH\hi8P[[h0226Ks;$"#SэZךX\2'N$gDR'1կoiQHE` 2\fDәE)ƨv)44"Ȍ۠VkLBPVYMΞMɶ܈aTvo$T*(XUп2B#2SV!wn %*dx*R#i- ׁ={`% Xh:!! fhllE)*>[M+ղX >֯F`pأd>J|oݻP|IMTTԶB9U#pw&?d-`l3@ Xl3кر#j_v:҈0m~~x~["#SKB=%B ``:X0KCA_'5$&>}nĻs۶ P_>KCq)Svach4,@F;2, 4mXgt9t OU֜Dx/!UN8I6svcaK\-Є*1*\>7af"|,78&Y?`k)l;A |x6 * Θ.\-u!)М! D4?lº_/axt*#lEo| ѸoT}XvsNg͝»^Jb>as\*4fD[)4A5ߛP J7—V``IFCk]83ۓ+2&ᕸݫ[ ,P6(;! O*y7աIAJc.`AnA|Xrn07ϕKhB0#01jpz#qny:Nv( W&qr4CNŎM{'<.fk]IENDB`scim-master/data/icons/setup.xpm000066400000000000000000000011301415264260100172100ustar00rootroot00000000000000/* XPM */ static const char *setup_xpm[]={ "16 16 15 1", ". c None", "# c #000000", "l c #303030", "i c #585858", "b c #646464", "f c #787878", "a c #808080", "d c #a0a0a0", "j c #b7b7b7", "e c #b8b8b8", "c c #c2c2c2", "m c #cfcfcf", "k c #e7e7e7", "h c #ededed", "g c #ffffff", "...######.......", "...#ab.cd##.....", "....#efb.cd#....", "###..##eb.c#....", "#gc##..#b..d#...", "#gh.c#ibc..j#...", "#bgh......kcd##.", "lgbfghh..kcmcdd#", "#c.gbbbfdch.mcjd", ".##c.cccfbfgh.mc", "...###d.ccdbfgh.", "......####h.dbfg", "..........##h.db", "............##h.", "..............##", "................"}; scim-master/data/icons/trademark.png000066400000000000000000000036151415264260100200140ustar00rootroot00000000000000PNG  IHDR szzbKGD22BIDATX͗ PSW}cw!!ܛPL D.T!G`@<,oQHeXC+VmǶZ묻k[`qgzgL~9߹g޼!4ޣm*ggXPM7Y` uS&AYb\\Ó=qw9P)QE NĭIƿ5Xf1lu܍ƒ5eʒ5+ krN7KE \c8giQ,p15ے8Gdp6}: i4,6a,|WI_a)"97*EB=jͧԦjm~pNCW!~ ZS35WMnrsK9[>dכLTث @`( @!]tQs #G0<uCª-ya 0YGT0hdNя[gKvMsgxeo>h42w}}f̪\ ߉4x54옌CÐ aوZJW,}=UZf׺QLMoGA;%ٙ_ƌe^BB1| E'ixr-U8~{}]OwZ(FOk^MI&2 Q]]"03NZ]p/j`bnQ->5jS{P|r$cȨ2gzy6lEg#P;t$_!(DI:UV0CYgNJ-Qn8L058)*p\d/JR_Få?[>gNu /E@>3 ?+2i7k97u7+:9 wCUN*_Dbqh4lX?ή 鷊 ծVδPN&h[lO esm9eBVg;;ڲC[.dD!M'P Î׼Uo|*4UPF$ 3a6+#{3- "XXBJB$,BU}#ׄQjDlnÄ GAny翜1hIENDB`scim-master/data/icons/trademark.xpm000066400000000000000000000014501415264260100200270ustar00rootroot00000000000000/* XPM */ static const char * trademark_xpm[] = { "24 24 5 1", " c None", ". c #3D55FD", "+ c #D71FEF", "@ c #568C56", "# c #F93E00", " ", " ", " ...... +++ ", " ... ... +++++++ ", " .. ++ ++ ", " .. ++ ", " ..... ++ ", " .... ++ ", " .. ++ ", " .. ++ ++ ", " ... ... +++++++ ", " ...... +++++ ", " ", " @@@@@@@@ ## ## ", " @@@@@@@@ ## ## ", " @@ ### ### ", " @@ ### ### ", " @@ ######## ", " @@ ######## ", " @@ ## ## ## ", " @@ ## ## ## ", " @@@@@@@@ ## ## ## ", " @@@@@@@@ ## ## ## ", " "}; scim-master/data/icons/up.png000066400000000000000000000022371415264260100164650ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  ~tIME  ,IDATx[lTev϶Kٖ*1HA6UClx/\/(DBD4P_0DX"XirQPP l.e--sƇ-v[cfg,CZ6: 0H AM@,y 3.70#S$̓)  L9^DzY%QS)ԠD$yVH.1 wys|XojWHqBf\8(QTRRJ܉6?T`ߙQN{ꌕ'lں4Ay^v{X c %vWW{0 =^ǼV9ado;_ocWxk*6 Mtِ%\Ǯ\K4yXD(S,19Y?5>*@+1 *k+R_j2p]pč p= u̠ȭPS:kXMjN= h1gE߰#4@PGѥ11H8w|=r/5hSg?gع4m%^!ctS'Qm:%zuyk8H_=@]IzVhkeϟ#U5Lz]0g [S)Mu{U/"ަJ*^7L H_pv4{?#n-6{8hn}q!D b}t:R.%ngnIlu@#Й@Ri_ö:gAo]ݢqJRV,eItɲ;ـnQYŔ*Hg `Dž[cmJ)+]f"jC_p`ɩ "H0IENDB`scim-master/data/icons/up.xpm000066400000000000000000000025751415264260100165120ustar00rootroot00000000000000/* XPM */ static const char *up_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 65 1", " c #000000", ". c #06101d", "X c #0a121f", "o c #061625", "O c #071728", "+ c #071a2b", "@ c #091a2b", "# c #081e31", "$ c #082033", "% c #0a263b", "& c #2f0500", "* c #323e01", "= c #20374f", "- c #18415d", "; c #0f4b6a", ": c #0f5d7e", "> c #114760", ", c #124c6e", "< c #1a4c6b", "1 c #105375", "2 c #155678", "3 c #16597a", "4 c #214764", "5 c #3c5c73", "6 c #710c02", "7 c #42556d", "8 c #116c92", "9 c #287c9f", "0 c #14839f", "q c #0e97bf", "w c #178eac", "e c #138db0", "r c #1290b4", "t c #1197b9", "y c #159abc", "u c #2294b1", "i c #2a98b3", "p c #0ea0c5", "a c #14a5c9", "s c #1ca2c3", "d c #19b3ce", "f c #1bb8d2", "g c #26bdd3", "h c #2cc7d5", "j c #3cd7e1", "k c #5486a3", "l c #7da0b8", "z c #4bbfd8", "x c #58acc5", "c c #50b3cf", "v c #43d5de", "b c #50c1d9", "n c #59c3da", "m c #48dfe9", "M c #71d1e0", "N c #c3162e", "B c #819eba", "V c #80c2db", "C c #9ddaeb", "Z c #b6dae9", "A c #cdebf6", "S c #ddeff8", "D c #e2f0f9", "F c #fdfbfd", "G c None", /* pixels */ "GGGGGGGGGGGGGGGG", "GGGGGGGGGGGGGGGG", "GGGGGGG,oGGGGGGG", "GGGGGG2B2#GGGGGG", "GGGGGCtgy3 G", "GGGGG2Atvy%GGGGG", "GGGGG1Ftvi%GGGGG", "GGGGG1Athw%GGGGG", "GGGGG1Vxdw GGGGG", "GGGGG1@@@ GGGGG", "GGGGGGGGGGGGGGGG", "GGGGGGGGGGGGGGGG" }; scim-master/data/pixmaps/000077500000000000000000000000001415264260100156755ustar00rootroot00000000000000scim-master/data/pixmaps/Makefile.am000066400000000000000000000017311415264260100177330ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in if SCIM_BUILD_SCIM_SETUP SCIM_SETUP_PNG = scim-setup.png endif pixmapsdir = $(datadir)/pixmaps pixmaps_DATA = $(SCIM_SETUP_PNG) EXTRA_DIST = scim-setup.png scim-master/data/pixmaps/scim-setup.png000066400000000000000000000053161415264260100205010ustar00rootroot00000000000000PNG  IHDR00W pHYs  d_tIME)'턧{bKGDݱh [IDAThZil\W,/c'9; 1$FmZ m4B-AHE !BTjDh4cK66OR M1I# 2g1`'?? TwgݙxF@Ҵ# 0 N٥yyy+WBDc)%nwUh4jIJe*C4gڳAnib&hhPR|:7,3$`?G2( ߸&pOM5D>g~0ON4CY4\@ThQ6}aRJP_֣;8\TC}k\xKWf{JP+Cr;۠f"n6|}"_ʔ=Xjʬ/E1xbf|(9Tff<ΠšE`6`}wBv% @9=9 m~^eU%_;whH# }XmuZhkr)mcN$2PȠ=Y~ѷ-gVVX[:͙U5J_J3mcQ)0fL/NGB42nZP>4Ut2O8s^$*om+g5QR\Ĥ'ڑcȨ<K]Ve苻]Fr2n1)"24>iDs]s P~~"GVR @@]/ًټ cFt ^l8{ƯN]Mw?|5kO78ׄ{ ݳB3|x"-F~_{v;o{ p{QH4^Af6k Y%PHpJ\` Vik] JIɠEvnG|<>::j)Mj>1Zε/"4O?WS|cߑ/Eѯ1eT1}i*h㎝iGPÞȥ4܇V σӊ]lyōpE -ZPY0t3I_@)TmltcVv>Lnx:Э:s[(0:=bD vCmj@/ 'LRϟ? \śfR/ڄힺ%t>>Vsl/6!@ukwbWo\7յwo~`QoHRn%͙1hkf/*kPT\ R_0yU>V1-CU/Up^ȌٌLUc E{QN`8Fo|*ʏGB3|VkȷG\U0;UADj%<=A) Qe _( .T0Ԃ-=Bx}aS1ܰ:@7@{e3+_ ƆQxYk"Qh \ڣT㱺a: :^{98 tu=qe8ոGW=C(l fj.&<xkp;kSi6\0:'VfVbݟi%g!&1酄={0N50wlŬ1ݡ tEVk.Ք۲ ^r<#󞡵bDRSiێ@d8+g}}}Vk1 *8ai-$6X4zcRbT%r}uWsk218$b~X͒1ծʈ ^7;~>11=s,AҤ(hI&y$nUWClvvvlJ XLEJ/ &)M~Ux:3N@ bdd[naxx؊ 3liJTr'Cj HvkXJ1%]$( E]ttB dIrJb""$&PBs[VՔ16M[̄* wՔc$Kf"f$r~XQFo|H 0Chܰ͘o|311mOȘ1)*rZ1¨92 ]pLcy'IENDB`scim-master/developers000066400000000000000000000030231415264260100153740ustar00rootroot00000000000000 James Su <suzhe@tsinghua.org.cn> Bao haojun <baohaojun@users.sourceforge.net> cooleyes.lin <cooleyes_lf@users.sourceforge.net> Choe Hwanjin <hwanjin@users.sourceforge.net> Jan Hefti <janhefti@users.sourceforge.net> Jens-Ulrik Petersen <juhp@users.sourceforge.net> lin shiqun <linshiqun@users.sourceforge.net> LiuCougar <liuspider@users.sourceforge.net> Mike FABIAN <mfabian@users.sourceforge.net> Kitae <neeum@users.sourceforge.net> Ryo Dairiki <ryo-dairiki@users.sourceforge.net> Subbo <subbo@users.sourceforge.net> Roy Chan <voidoo@users.sourceforge.net> William J Beksi <wjbeksi@users.sourceforge.net> Yukiko Bando <ybando@users.sourceforge.net> Rolf Leggewie <foss@rolf.leggewie.biz> Tz-Huan Huang <tzhuan@gmail.com> scim-master/docs/000077500000000000000000000000001415264260100142335ustar00rootroot00000000000000scim-master/docs/Makefile.am000066400000000000000000000022431415264260100162700ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in html/* CLEANFILES = *.bak EXTRA_DIST = scim.cfg developers design.zh_CN SUBDIRS = manual .PHONY: html html: if HAVE_DOXYGEN (cd $(top_builddir)/docs; rm -fr html/*; $(DOXYGEN) scim.cfg; tar -czf scim-doc-$(SCIM_VERSION).tar.gz html) else echo "***" echo "*** Warning: Doxygen not found" echo "*** Warning: Documentation not built" echo "***" endif scim-master/docs/design.zh_CN000066400000000000000000000171221415264260100164320ustar00rootroot00000000000000SCIM 设计概要 ============= SCIM 库是一个通用的输入法开发平台, 可以大大简化输入法的开发难度. 在 SCIM 中, 输入法被分为三大部分: FrontEnd, IMEngine 和 BackEnd. 这三部分的功能是: FrontEnd: 负责用户界面的显示, 与客户程序通讯, 将客户程序的按键请求转发给 IMEngine, 执行 IMEngine 发出的各种命令, 如绘制预编辑字符串等等. IMEngine: 接收由 FrontEnd 发送的按键事件, 并向 FrontEnd 发送相应的命令, 如显示预编辑字符串, 向客户程序提交字符串等等. BackEnd: 管理所有的 IMEngine. 以上三大部分通过四个虚基类(FrontEndBase, IMEngineFactoryBase, IMEngineInstanceBase, BackEndBase)定义了统一的接口, 所有具体实现必须由这些基类派生出来. SCIM 还提供了丰富的工具函数和类, 如负责做编码转换的 IConvert 类, 负责管理候选字(词)查找表的 LookupTable 类, 读写配置文件的 ConfigBase 类等等. SCIM 的一个显著特点是, FrontEnd, IMEngine, Config 等部分都实现了模块化, 可以通过动态模块来实现具体的功能, 支持不同的系统和环境. 大大增强了 SCIM 的灵活性和可移植性. SCIM 的工作原理: 在 SCIM 中最关键的部分是 FrontEnd 和 IMEngine. 这两部分的实现及其之间的通讯方式是 SCIM 与其它同类平台最不一样的地方. 首先介绍一下 IMEgine 部分的组成. IMEngine 部分分为 IMEngineFactory 和 IMengineInstance 两个接口类. 每个输入法引擎都要提供这两个类的具体实现. IMengineFactory 负责管理输入法使用的公共数据, 如词库等等, 它还负责创建 IMEngineInstance 实例. IMEngineInstance 类负责实际的按键到字符串的转换工作. 现有输入法开发平台中的 IC (Input Context) 部分其实就是对应 IMEngineInstance 类. IMEngineInstance 类就是 IC 的数据与处理函数的封装. 每个 IC 对应一个 IMEngineInstance 实例. 所有 IMEngineInstance 实例由 FrontEnd 基类管理. 每个 IC 对应的状态变量, 分为两部分, 其中预编辑字符串等与用户界面无关的数据都保存在 IMEngineInstance 实例中; 而输入窗口位置等与用户界面相关的数据则由 FrontEnd 派生类负责管理. FrontEnd 的详细内容将在下面介绍. 下面介绍一下 FrontEnd 和 IMEngine 之间的数据交换和通讯方式. 为了简化编程接口, 在 FrontEnd 和 IMEngine 之间采用了一种松散的接口形式, 即 signal-slot 技术. 首先, 将输入法所需的所有动作以及用户界面中包含的所有基本元素总结归纳出来, 其中, 输入法中所需要的元素包括: 预编辑字符串 (Preedit String): 用户输入的字符在转换成实际字符串提交给客户程序之前, 将显示在预编辑字符串区域中. 预编辑光标 (Preedit Caret): 预编辑字符串中的光标, 用户可以利用这个光标对预编辑字符串进行编辑. 状态字符串 (Status String): 显示输入法引擎当前的状态, 如当前编码, 语言等. 候选字/词查找表 (Lookup Table): 用户输入的按键与结果字符串可能是一对多的关系, 一个(组)按键对应的所有可能的结果字符串将显示在查找表内, 供用户选择. 辅助字符串 (Aux String): 输入法可能需要显示某些辅助信息, 可以显示在这个区域. 另外, 对于亚洲语言来说(尤其是中文), 还需要显示字符和标点(全角/半角)状态. 由此可以归纳出输入法引擎所需的所有动作: * 显示/隐藏/更新 预编辑字符串 * 更新 预编辑光标 * 显示/隐藏/更新 状态字符串 * 显示/隐藏/更新 辅助字符串 * 显示/隐藏/更新 查找表 * 向客户程序提交结果字符串 * 注册屬性列表 (如全角半角标点) * 更新一个屬性 而输入法引擎需要处理的事件有: * 用户的按键事件 * 用户选择查找表的事件 * 用户请求移动预编辑光标的事件 * 获得/丢失输入焦点的事件 * 用户触发某一个屬性的事件 为了简化设计, 采用了单向的 signal-slot 结构, 即输入法引擎所需的所有动作都经由signal-slot 发送给 FrontEnd, 而输入法引擎需要处理的事件则直接由 FrontEnd 调用 IMEngineInstance 类的相应函数来传递. 所有动作信号的触发与事件函数的调用都封装在 IMEngineInstance 和 FrontEnd 基类里. 派生类只需要调用基类的相应函数即可, 完全不用关心 FrontEnd 和 IMEngineInstance 之间的具体通讯方式. FrontEnd 的工作机理: FrontEnd 除了负责用户界面的绘制, 及与客户程序交互的功能以外, FrontEndBase 基类还负责管理所有 IMEngineInstance 实例. 每个 IMEngineInstance 实例都被赋予了一个唯一的 id, FrontEnd 派生类无需直接处理 IMEngineInstance 实例或者其指针. 所有对 IMEngineInstance 的操作都由 FrontEndBase 类提供的函数和 IMEngineInstance 的 id 来完成. 目前 FrontEndBase 类提供以下一些函数来管理 IMEngineInstance 和 IMEngineFactory: * int get_server_factory_list (vector& ids, vector& names, const String &encoding); 取得支持特定编码的所有 IMEngineFactory 的列表. 这个函数主要用于 FrontEnd 派生类显示输入法列表. 每个 IMEngineFactory 对应一个唯一的 id. 可以用下面的函数选择当前的 IMEngineFactory. * int new_server_instance (int server_factory_id, const String& encoding); 从特定的 IMEngineFactory 创建一个支持特定编码的 IMEngineInstance, 返回这个 IMEngineInstance 的 id. FrontEnd 派生类应当保存这个 id, 以用来和这个 IMEngineInstance 通讯, 和销毁这个 IMEngineInstance. * bool delete_server_instance (int id); 销毁一个 IMEngineInstance. * WideString get_server_instance_name (int id); 取得 IMEngineInstance 的名称, 即输入法的名称. * void delete_all_server_instances (); 销毁所有 IMEngineInstance. 以下函数用来和特定的 IMEngineInstance 通讯: * bool process_key_event (int id, KeyEvent& key); * void reset_server_instance (int id); * void focus_in_server_instance (int id); * void focus_out_server_instance (int id); * void select_lookup_table (int id, unsigned int item); * void move_preedit_caret (int id, unsigned int pos); * void update_lookup_table_page_size (int id, unsigned int page_size); * void trigger_property (int id, const String &property); FrontEnd 派生类通过继承 FrontEndBase 提供的一系列纯虚函数来处理 IMEngineInstance 发出的动作请求. 这些接口函数有: virtual void show_preedit_string (int id) = 0; virtual void show_aux_string (int id) = 0; virtual void show_lookup_table (int id) = 0; virtual void hide_preedit_string (int id) = 0; virtual void hide_aux_string (int id) = 0; virtual void hide_lookup_table (int id) = 0; virtual void update_preedit_caret (int id, int caret) = 0; virtual void update_aux_string (int id, const WideString & str) = 0; virtual void update_lookup_table (int id, const LookupTable & table) = 0; virtual void commit_string (int id, const WideString & str) = 0; virtual void forward_keypress (int id, const KeyEvent & key) = 0; virtual void register_properties (int id, const PropertyList & properties) = 0; virtual void update_property (int id, const Property & property) = 0; 这些函数由 FrontEndBase 类调用. 参数 id 为发出动作请求的 IMEngineInstance 的 id. scim-master/docs/developers000066400000000000000000000023431415264260100163300ustar00rootroot00000000000000Development notes for SCIM ========================== If you want to write your own input method with SCIM, you should implement three classes, BackEnd, IMEngineFactory and IMEngineInstance: * BackEnd Manage all of the IMEngineFactory objects in order to let FrontEnd use them. See src/scim_backend.* to learn how to implement it. * IMEngineFactory An input method has one IMEngineFactory objects which manages all of the IMEngineInstance objects that FrontEnd requests to create. If there are any global data which should be shared among all IMEngineInstances, such as phrase library etc.,they should be put into IMEngineFactory and only transfer the pointer to IMEngineInstance. See src/scim_imengine.* and modules/IMEngine/* to learn how to implement it. * IMEngineInstance The real keyevents -> strings conversion work is done by this class. The keyevents fired by client program will be transported to IMEngineInstance by calling IMEngineInstance::process_key_event (...) from FrontEnd. IMEngineInstance objects should process these key events and make response to FrontEnd by calling base class functions show_preedit_string, update_preedit_string etc. See modules/IMEngine/* to learn how to implement it. scim-master/docs/manual/000077500000000000000000000000001415264260100155105ustar00rootroot00000000000000scim-master/docs/manual/Makefile.am000066400000000000000000000015161415264260100175470ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak scim-master/docs/manual/zh_CN/000077500000000000000000000000001415264260100165115ustar00rootroot00000000000000scim-master/docs/manual/zh_CN/Makefile.am000066400000000000000000000025321415264260100205470ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in *.html CLEANFILES = *.bak SUBDIRS = figures if BUILD_MANUAL HTML_FILES = user-manual.html XML_FILES = user-manual.xml .xml.html: $(XSLTPROC) -o $@ $(DOCBOOK_XSL) $< html_zh_CN: $(HTML_FILES) dist-hook: html_zh_CN cp -Rp $(srcdir)/$(HTML_FILES) $(distdir) else HTML_FILES = XML_FILES = html_zh_CN: echo "***" echo "*** Warning: Manual not built" echo "***" dist-hook: echo "***" echo "*** Warning: Manual not built" echo "*** DISTRIBUTION IS INCOMPLETE" echo "***" endif EXTRA_DIST = $(XML_FILES) .PHONY: html_zh_CN scim-master/docs/manual/zh_CN/figures/000077500000000000000000000000001415264260100201555ustar00rootroot00000000000000scim-master/docs/manual/zh_CN/figures/Makefile.am000066400000000000000000000017641415264260100222210ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in FIGURES = distributed-scim.png \ scim-setup-panel-gtk.png \ scim-setup-frontend-x11.png \ scim-setup-engines.png \ scim-setup-splash.png EXTRA_DIST = $(FIGURES) scim-master/docs/manual/zh_CN/figures/distributed-scim.png000066400000000000000000001076121415264260100241450ustar00rootroot00000000000000PNG  IHDR1B pHYs2XtIME0")ctEXtCommentCreated with The GIMPd%nbKGDIDATxXGl`X0 *h+X"b?w [`K4(#FF J Fw%" *arw pw|?><{mnsû3,% (2Pd@"E (2Pd@"E (2 (2Pd@"E Lg&Pd*,[|5O"s|p'f(29qap ،uЉ3S8'W7 lPd}c3cve(2X\ +Zce(2 EC2}qA&&|ٝm76S`kYbS~bi2  ?V5!d|پr7ٞȦ13`wقCl,6}SiRf>{@TynK`k0 ٢H5PdbohjUeWdIv LzIqGV oEvb g5mdniVnҩUOwJ%[Y1(~4Пuʺ 6u›`% i3d4AY{c-oVo Gt }Հ}w6kI'mth_z)r1-=^ Pd]}om+6,L?fҿHV=Y>,zL d+MF3qY?[ᆽ#ɏ"{Ndÿѱ̷ҏi19{O`gKcs>t'<B],] U?|s"=`Р9]5lZ K"S7%؂ÙJeM:~SS{vy4łC_nj,^ݏ| ;*oʺ`V \*sm2R3eBO3sL-єr(3X(&osw}&17/G!NCy/c"r'o,skk ?;3w3x01Nj`!2w?;, PY}&YS;Py]ϵU+"j,Wj厓?e..,7 !;H"@tfJ$6-;Â멋'J8D*XrGrV|5E.h4k{&trٕCǪ'%| loŽ_u<enOfV, /2 1/l볬r9?ے-q}>`Z2@Wr +1{3 fM4'sW9vvl-sgKSA]74[wcj̬f[B(zE(v,K{(ʹd毼-Y{PٝMakym诳o*8Ε"۵zP2Qn[qiih=(2,9ӌ/NDv0)3,YKX7eg,v׾^|[z]EE?Mk|tT+}&sG,2@qc==29!F_Sq&JC:4ͺI}&E|ʣ-Y4Bs ^KylU[O,QdrEwQ~,Y EP}VE؊3ο"VtDi>`~˜/k҉u{PUm!h΃"7X(2@q,y%7hբH!7wΚ?-Y|Şvxx*;LCRZrECev6] oiŏijօmyM&g5 flf'云 `~ KTX~ E(b?%˙_I(2(2,Y}qa1@'8˒!E*Pdc.1@\r E]E&C'nJ0nqpe]2c(2 WF@B͕\o"1~jWYcΎ~Ge=c\ެ^JfysZr7Q [%ІhPd1" cE(2@ ?Pd=* y | R0-KQ%@xZ %Pd|Cq=P\LE7W@xl ŕPd|Cq'P\CE7@xx Pdp<\:E<@uPdCTaeC"K E"g2~,d\ @S ޟ.w2t"@tM.DgKp~&Pdn,?SSq G7"Z-K+g5[bo]"` 5Z\dS6bZzn+*,_!pqqԩS&M\]]޾}߿XN?ϟyFz.ex۰0x9cKZ"Zd2O2y6u3A}!Zw9?'(r6 ~?_ƭU1 ʘ(2PHceeH.ZСCEZZQɓ'Eynd%J3?~.˚tdfM}WZhT%yw^ݏ| ;*oʺ`V# \*sm2R3eBO3sL-єr(sS<Pdg|QQQϞ=,Y2?jfccWdW+YoxEI͋QPĘɛ" FZx̝L:^4̃vD(jxtw!8.S EzVHf͚eeePNڬY3gggӧOСC֭"2bŊ nݺ5p@GGGWW׎;nڴIqmΝg@'޺uqi(2~_L3z5&4}w:~Z=kUq!VE^7X ;'>],]HY0woBrA2E($"iiiV255%\lٝ;w$ ^~Mh>y&00ABݕ+W{NHC";vuŵ?677 իWΝ;U>"oSeeF{Dnٲ<,ؼaq*{Ld+w$g՘׮/[s/Y  NvgR^Io-Wݟ]J9zyY2j(2Blddz9qռy(I?l0a~ޒ.K9..nƍ/Ib__ߑ#G*.9uTӦMߐaGrm䵄D밮#U2`l9̂Gq(oĆfK'\ya40wE&!#%m}5Q#g[%G4Eօ4udL9HN:|XX.+r1cMvU8oh{>ȇY9;McVD2C,ɼ~NC2Z<ͥ9EFof? 9:;ƍkݺuZh믿*& Ki޼/1c$"'$$̘1ViӦ}^^^=V?\rtƟ~~prrܿvvv… %b6e˖d*_""yf9U@媝ɼdŸ xM6EF'P}VE؊32=8dl=[}9_Sˈxhރ(oM]΃"d EPd(r+0 &=(N4.D"k.qIDE+wV\.&gm{!K{2Vڱk'C)wg/XG(EpqqԩS&M\]]Tvv[߿XNt^pEEȂs}4qLyΙ"[RKx /.*Txx O[YI6Ǜ$FOPa [mfoo#,yڵkK.yɁ-ٶ| Ƞhp^#Z+1'H!\'k1KPd@Q* - gҌO<177WOA"CYYԃFmYiC%b˗;INN~왶G!o$%%]E4ezfݛ/ +Ww2$n*8@!+Y"##KԩS5k&tj-ӧOСC֭R RbEoݺ5p@GGGWW׎;nڴIqmΝg@Gۺuqi!SPW^Y[[yɓ 4 )߻wN:B),k677 CE;qYm\>q}+zaኟ"+IC WyZԔsٲewܑy5 A  +W6dq=uرׯ+c͐aIvΝ*Ve+SиÇ׏7oL\w΅)))d0-ZمPTdJT* StY>-gEFrQ1POĠ ggg###WWsΉi͛G2'pذa>>>㽽% ]VT丸7Ҏ$)}}}GԩSM6OA.q)pqIRRٿqɒ%nnnT YE_G&&&£‚~Y[[ /_,BcǏW\Y8U:T ǎQa;wIE*|,t^Q6Ldo(C:uΝQF-[V|.""BѣjEߖSyڵ*%WGI$''J՜]Sjdӧ͛7aaa/^YE&.\@7Cҥ;rݻt6mfѯ)2POO\5)r׎Fl=D|Q}9"~Wy36l(̓|(H%)U$vBYoN&M6W09+rllS 9 K=i$O( EswWڄΗ?x@M6\btlB)SFyULLL9=cb4}UJe_"hHZ#r EM;tR ̙3gϞZ0_F $.d$+kUv5G,@OA.(ӧ+Wcǎر#WgQЊYn */ux:i;6!ʖ-  e(PdYwܨd׺3E6]=-"6P‰'$I-,,yډ'JL6K=z$۷oi9=#\b#F,ZH˗O:|qU)ſ+GZj2ydIӵ]?,!OE& @.;5kTBvԉ3ڵkƎMyРA⼜]Et„ m֬YyVFպ+|@cEF·"_tY= M;33~I:2˗ 5jD$C P@@/%ׯ_9r+W3BLnTvm'Xr7 o>|6OIIm:uBCC0: a^)Ŏ;876l,Y"Yq2ע"ROuY{7n82:hEһ}M|||7o.3F/2}Cg̘AڴiӾ}{Ggtv!*`ll駟 ׯ/NNN’>Ύ6wuu@!6 .rww'UGSP {{{ᐨZ\W^YZZ*I߅ HyPdiӦt"$''投ybb"-!Sl׮5bڴi~~~'"? E`Qi]_O󏮣=nmpsΥY9dUVT/̙3GoW\߿wy&=ZhGtIoGKN۞9saÆzOOOz*7M˗T{{{h711<JCCu=]uWha*"2o-(dER"(`ko|Y\EGB?$?oɓoA(oN%d3VfցE.o4ʯ B"_g޲e0?;R~qnݺǟӧO,Y .HFZbŨQď򳵶V5=o2e(.zk׎9r*UP23 uss#ѣGݺu899-X 9o^"޽tc^5uENB޽{d0-yaVˆjc-ąwe]?/_R.]tĤk׮={^z:u;F"(6>z/4BR+* &Ϙ1NJAfL{n,i~Ud)))VVV+>taaaͣ +D{i޼m/^ãZjrj(2Н'VzE)Em^\.lll$}")$pUƌckb::6d(200E&;_de.]KzJM*@fYvǫ?/^HLں{f`ii)̻m۶ȭ[Iϟ?Qt4iү_?8 GGGJ5dȐsM2R7nڴiryC9Z AU4Vt/JYc5L #g'Oο"kBRݯYGTYX(204Eرc{##/| 6jԨAԫWd1 TR}9~mkNcIϜ9Cf*Y|fbŊleE~ y͛#""C?VZEڵѣlGQyK(EPdSRtUJ/ԓ9tܺuKDyT:6!o!!!#jfz+Wӧrv F!3Ghfw3ᅡic ;94!($Evww߻w/U$.] /ܹCU I!8͛7{{{h{GHR<(رcWP+"O0ƍk֬]oϠ|򑑑'OO*ի{zzF}B))?̙3{=JO=9]vرcfffyj+W%UTʎM?^jULLLjԨe۸qcx=&Zg0hР?f͚?c*r DjvTѶNYZ%OCPŋJ*[noh1jݺu/V4i)cNRn*Te0P֭+T@#FPN GZnU,Y"Q䔔 . )rNʀ*PZBիŔ6lhذ!]+___7KF+2 ~7cyN1c攊8v/!~hR䐐;|hhh޽2) -buBBŋ$t}UVU"3\\2pkN%X]UE6Uc>2%KzEhh[!PQW^ *,^~]QdXaaa}QNyb*Bbccs5r|WX18887o4o3;dt+WzFEXܹsWWWmaʕWݾ}266RΝ;<'%%ƍ9<{lGGGP ggg&ǶmZZZq^tI=x.EU@EΧ"*"k V|y[[^zI-/lѢ$Y"&NNNB*ٺukj.^rwv$ ݻ+>rFIƔ r*UHU*2E!YҊ,WVٳg _^f2 B j1S\X9(r޿]?#)/ "sEzFHCZy900?Vȏ=ҥݹsV\YIMBppȕ+WZn-Y!}v3331rbΝ\I9 cРAI% XBt*piٲeҙTEPd@Y OS^z 111E>qǏr5--mĉFFFǏ⪯M6Ǩƍ_pҥK=Xb޼y3f̘2eJj՚7oɓ'JR\BNFC9::5<2 B9"il2sY[[ 󡡡"mݺ4i8f^dduY2iѣVÇ-V,uqww0aʕ+SKmۦfG;|d7h[III~Ph[-z鈵wqq/;;;7kLx՞={ڵkG[:XNRwޝYHBٳrC R^ղe-Z(1 zMnݺ5nܸ5jPJt(2"t7pKQAU ޵k0˗˗ѡN:5tPe'>T*,?HJJR*--gϞ*{[;y򤇇s9_ ' `Y8*2z8 =",l,tuY _E=kPdr.G$5(2@e ^%ˎP>ERd! J7(KF`1*7(2@} TbÒoEޯV'U*Vd >WKVzN+Z PE_[/*N `_.8]c"T@@M(%<',@@iK|叢$| J ŧQKV{kOI(2(2[ |̃%'. P(2eZr\/FuBsh<,hxLsicgu:Xle[Vx(2"ECQΓuhgKA)2xfEpFr]MXDjI]'gPd\H- PDק/^V@f=>\V~]C6U2:p #hƺڨ E 7rEuI,@7]G8ʱn2P$@:g]Z"4( E'Pd@E;v6(lMLލ3";nm.rYŦ2P@}s7>|?xf^ G%+8}D6-9vg% bCf雲Mc2s[\I<E%CjP^fx Msv UUlj,.W}@I/br3nʖcخWlﬦ lԍD!S6~]:Nɶ+Q1f-*K"c Oչ $i`8LBLGK<,kG϶dKkߟ XD Ex(2(ޠA[vB:fJޅ'yLuɜqU4G'yuP׍1Mz]a-c73ٖPn%Jd^@'@n18@P U%r<iϡ%7|a*#q{>M:`u~MǹRdYJ&M1b3.9 EGiA.,8"4Li^0 <ÒxuSzfObqE*'iUTTGGoYg2w}"T%@B( ۓ.;b<i4OӬ $ KgR^/̧<ߙEC>!1>hUOffSL&F%yE(9v}o)c0KG򌪯yާ2V;qiҿrʱ;#~-!3BgM1$C}\sZ+QdX2n.n4@mP Ւ'Rd3*Jrdwb܅w-S⒫W^vȑ#gϞRÇvؠ#{{/WN$gg„ 3fxМ$λwȒgϞ-[V,%%* `߇Λ7ttHjϞ=͛7׸˗/6L]v?.PdDE"/;K ?.@E&;${_dey/]KzJM*@fYvǫ?/^:uJb޴w2Kwww ,--y77m_r2)5*2N&MHd4)eTTԐ!CΝ;7eJ9nܸiӦ?'O^~c߼ydjjCTb0,Y8@-H}}};vίgϒ>x`Æ 5jԠALLLիGPT}q ccv)643gzxx<|PX5eU P 05;+Vd++'O7oA'NGާO1j*p׮]Gd>rH54w]yŋuˏ=pO|Hr !qV)w^PK.嗩?&&&&7oTMIzA@AHR<(رcgQFgΜQ&Lqƚ5kh3(_|ddd``ɓӼ~===5^Um@{,+z EPdP("U/^TT~ݺu'NҬ[nŊ[ϓ&M"e)[ʭB Bl~4jݺu3G@"7kɓaENIIp͐"w jԨAK|||V^-ܰaCÆ Z޽{W͑?~\ï E0Pb-E@SPұcG ݻѣGIImMLL_{{{33/&&& 6IFSdNNN&j޽{;v쐣ȓ'OVW:+>Be, :UV[s9r:.E||4hPD]+:N]|補$T$%%FNjLLAΟ?_b߼yӼyskkkIYT\իYbs} -[/^WWWmaʕWݾ}266RΝ;<'%%ƍO߿sE={b3]c۶m---8/]ftuu=qǏr5--mĉFFFǏ⪯M6Ǩƍ_pҥK=Xb޼y3f̘2eJj՚7oɓ'JR\BNFC9::5 %x\+blٲeboΝCCCEۺu=i$q̼,d\ѣGˇncc#ZN:&LXr޽{>}Jiնm(55^z,qmE:夤$J? (/|2*< @(!l..._eggGB>QFQH@dkk+F3 4xⅰ#Gr֭[tݢ=U׮][966fƍK~iiiRRR$G[NPa>,,>(@Eޟӓ1hvkn߾=nܸ֭[wСE...bd͛ "3F/rBBŒ3hU6mڷo#a˕+Glll駟 ׯ/Ç\]].\(  Ϧlݝ]PdE.@K"(2dèk(G>"C, (>PdEPdPp5>"C@1 ȘȰdEc(rT\lPd(2"n>Q}AuRgdͻ2],{kۛMa;Ҍz}jl_rBWF-Sh=WE&̢4ǾչhV _X{,% hǕQ@YִjMR=a[r(2@Ў+)"|GEk/Ca vD9WK@@E /_=\yǏW\Y8UС9v<Çsε?:In=uEV#c3WEPdEʹ_.\ܹs$55uɒ%Kr $yU^~]:M6D3/^tvvΛ":tӓ̃"W}o3W"(2"=6<+2&da6m =ZîuZ.۷o722Rl9~8%kٲ5f8`~͜93::ZaΟ?9%Xp۷UMHHxw͚5KysWNO)IbbbhC_xqZZZTT^hh֏t_._K.}]BZRD 9+2!)wAy=(2"Q@a-_ˌț"7PdZ ΝۡCIYZj7g9o]r%""͛#!^SOˇӶgΜiذa^gXܓgK///oo?|̘1&&&g@i`6mJhݺu}Ucy{jlX"-m PdZ,W/CBBٳgoٲE?~ǎSSSݏ?.sׯ_֭[8}tɒ%Ow⒧O)SFqիW]vR*U88XTs:0R՗V{ʏs3g|(=]d+z",s$Z##*9Y2'nE3f̌!UZ5AoʕiI*U$jNi-[R#ǫV*Q?cƍ~^8u 5ksuӋ03EyO&E.ϓ{gF!xvىSb_la>/bͺ;%^C " K}={\6lبQNP^=ŀRJ7'NkNZI*yxxޚ*ZfSSbEIK"?yjtt}V w%9BD(ׯܺuv+ʑ-~@ 7E+VdRv^sƞiu6Dj1A'038n0ޕ\hy[֪/RNl{R \) "ݻ4ҥK_~pĤ͛I4IR<(޽{;88I_|E;v4jH:"O0ƍk֬]oϠ|򑑑'OOիWx[nۀХ/ Xv%3\8tڙYܳ'._u9ִ<{ "tؑCCC{}QR@R[!,!!ŋMъʐY:99 Zt &r;vQɓ'++XŊt2YWzV"&>rHzF?CK (Qk׮"8p?zj~cP J*2\@ E֎"mΎE5kִRJPPfÆ 43gJII2SVVV?8FHcccMw\֭2ŏt<5rpp{;8?$fzA I;&}_""d ٥H4dLo$M!eߗzyI2qν瞹Θaf}s9ٟ{>;ϩ8 e9&rdDcbbtҦMǏϘ1ԩSCM:t萛~*Ğs.2=o޼Tɲ^Rq5 t"F@ E̩ȗ/_6#';vQb=zuK&M$LQLǷ\~DG|?Ȟ={rT7;#&-{7o^ܤd'N<+Oޮ];~C;:ut+9}3ߺ-$]5u%K!jrw(2(2`ɐl6)db9s9˓RK.)RÎ#ի) f;ن 6Xe 66ֲ{ѣGwձ7)E4iȑ#׽{w`Yohhlo߾3gǟ8q"gnӦM+V;T#LAڐ_,(2 (2:|3fϹ"{Ƚz44b=w\7[r…gϞٳGb:⸦.<&Z8yfۮ^ZB _cylٲw5'K_¹ENnڢE~G`?7\zu{Z@'Oz5kָvsoRQFk׮ 2Hio\YvlsNqh~-Z޳*_{(},L??T8"Ȁ"wȎڴiSc&E޾}s\nР7zAe͚uϟw4u5j?ŕ+Wn޽ܰaqܹ&M>|!C/145'X,\7\/Vz# <>_{\/ҧ%PdۗEz(rj)ٳ޽;00^d}ݫjg֭[۴ic7%w]l>s%J[_XΛ7/&&f߾}/^2iʕnVPdɍ7?~\u߽+Wŋ--qWE)T iM Ȑ~yu1ҥKo߾RJF~ŵk֭[WV-ޫ73ԍ5o!ߒZljDDE9gϞUT\c"n6ɓ/TA[ʕ"]3.8_wȑk׮5w5g8tPڵCܹcǎy={}ʕ+n޼)۸qcY;v{{ Qd@rN"S{jpGrk_Qp >{/B+2"ȥs(2w@s \ 8M_Pd:pD9q8 ~L=n(2:@|A}E;SM@\8YS-?wCd Qd & )c*6pOD/2dJEbDk)'Eඈ"p-qƁ@MCp8@\8kzPPd.5>P2IeSw g-ye)pM}şݺuo>p{p U m#>GZ.G P p[:ܺ7UZ ̢|; ZA.\)rX3.4@rBFrJ2 |B j&Zr>Do>p* {99ע7: %f;Qc * p*ޭ[eŕ}5UHB((2PjV,NޠHkFW>MKWC>P7ӏ%(27P !hIal 5WnդZ^[6RYEԒԔ/T1jrxiSPMyu \yI-EۥzO.Pd do"~#ESOU\+~ za*4݊Z{MI=RB).2+B{ѫQj9ihU}ԆݗE.@EAFc#ճUNQn5(^A/7ݸjӘտkMlƬ2  ?!q*(ļLrwd]O5WCOF1I) ]@ŃRAt۰R[Y&1EƪV Bf|U:E*^sTڰb%wX~܏N:5͛GLy\Ԁw|xN}?=WEa~N]u"Ͽs"/;-ȮK+rH,PZD*GO2Z+ AWKU,jFwsuUr~ttuM1 V+x6NS[nZʍ̣wQEЛ=!V+rTnNQe!2Sӣe w!En-@=f4!wJ1sCg\xUyD2,ADRI"F;z9So5uTesHpMo~40bÞ23-K~%]4Hl@߷{5SPw:~ޏ~ WlVIϴB옋<;ݫRvܤ1 YP'ǨGKlTMwt#Za#L u;~EeK>K YrNcVī[7uKF d[ /(7zn|PSB"n5wZ*G9;tϜcUyw uα~E˩'ҲdQO6En* U |KMr< 4˘џJUtڃewӶrO{^{,ڤGTݧ:jN8N"ܡ)diѿiiNz(2pSN(WybƑuibO1wNϩv_6,j=S[$w_zF׷wkV+En1X>8=Rl\ۑx!aGSyo2BP.SŠx5%/RzolRE #\:C5Vt5W$>}yE^_(9MM4Ȉ5͝}3RK2iַI.j#ŽK #-cJDy4'5դɉ[:J%l5-Y"HrL\}';]xN|"{,Xy5p;N+UH9+[+rϙwUӿ2M5YEM%k*(*ߣI]@ Pd [Sg)ƯK5iz)+:kIF߅]@ Pd Can}sIm5Tz,TgTUJgu;V+8;V=^UW-wd=X tu۰ļ]UEB:yդ*1Zg|m#%?Y(2 1@:R؛|3^Ւe>SOj7Jjy6/ y: (Uy EuMߦsZh\6)]cw*lT[Pg0K1]shGbWVq(2 " N|Y7ste4cNqp]٬yETTI_\W1sv'wU b{ԭOWq(2 "~ K~T s$>V\lڗ¶E,3"_ڎ@:Oe)]fbBRID_T~PQ'l_["'c/<.EFPd@ ^ٲ6U2l%?hO*Kޗ͜;ȣWiQv*;fÞ^ ެn-*f{*[S?Io9CzRzXOT*O$Lx "TTfY?`87pB[EmŪŖ9ѓȝ_{ۭuU䩛=7FaR̫3ǬN^"2jDWeuXueNHo׎Lzثw䮓-G(2ǀ"Z=Kn/ XmX s֯ОުawsqC[uY%E?f}!뺵KqP ެ_RؠjMW3"K?^piXru'2CveƦ#>M P\ۉ|,buU9_( j/B= ~\wywۘEku&Y:c=/=o>t ?)뮛`15xIb*l1qYŘշ+GlzQ=gZ{_,?WDm'oT>>rp#*Kfqeσ?  c)  (m9/]]wl\*_ܻXr>d_F/Ei3\O*SC'T5x@% a+h)ۗ0(6惟U@=90,(UE7E:._EM%9bbr,ݯgEj4b";<2ZXzRUVe͚566ֵ7@*Uy\c6mZj5z}y 'O>tPRx͛qqq2ג%KҿpR172"KddQŏ}H['N3ψ Zfj7n8o??|͛[n-8q" @V$k4q9s:wԼ}2e6mڙ͛kαsD{ٳwޯK/ml̓Oy睑#Glqk+U$"CLdbE6[v&qTCo]/-Zd ;vŊɓ֭pڵoU 6tun7ڵ۱c޽{/_8iܹݺu~wvsٳ;9rѣGl?˗ٳgΜ#s鳷 ~/.$$$dʔ)(2(2Ƹ摧XsQd g{͛7n.VիWm&"ho_ʗ/믋zvگ:YܹsFs"֮]O?RM߿[9LŮ_^hQFEEE~lٲ%KL4It|Æ EMI֭ N5PdENI߭7fy!a/ #Te;+rX/1M )J*e$f38&hͲ-Zϗ]/b۷߲eKBET.p[ ORMY0gG {Ų#9 +rXXXLLhccc_[y|p'NOݻH o,Yf*T0>)P_~yȑǜ)[^x ȪW&gΜ[n0a??͛7޼}E9 R=FF>YV)Tdo+0 ۰aC)No߾۷eyӧ;ꫢI-V+W.QUV7C xn;wŵ7\R;vFM{Qg}vm *$coKeʔcշoߟ~)͐5ʢwETT,Zj˗_v- (2L߈5}T_%cWd]*13"azQ9I-ZTn]^dIf;KQ@Q[#W@.]ڿhabI-V2$$h=AqK;&W^"<_er} +E6V!%soٲEƈwQŅ gɒ瞋t+Z~` 2Dl^d_<9WzzQlٲ*T[^=zL0C(1##*ӥK6mlݺh1cƩS*t!#իWeve̕+WPd@0"%Nl_X)&}UE2kߵS˜yo_|f, 1Yڵk m;x=ze˚4i2E1Br%J=z8p {ɝ;wdddRI7n lE޼y9QM?q˾Xbڵ7o:u6XIeEE&Z2"ۇMg4نgΜٳgOX|yR|ҥ"E>|qdTTTz<>6l0+Km ڰa[Ȗk=k׮mI)_=iҤ#Gׯ{P?|߾}gΜ?q̥ Pd Pd@P=:cƌM6"{Ƚz44b=w\7[r…gϞٳGbAq\Sr-ټyBzj .\"" 9!!a֭-Zȓ'UeGE^~} ,zey捋st)ϯhѢZ^={E1[n}qw`?7hԨcG?SٲeMN3g˗<,[hȲ׆dS+M6lvE~cȁ=y1F>\E&E9oW(bTTsŭ) 6"O0^T_~~w'N7o^'5Fsv>\zu{vVZU@GM5kָvsoRQFk׮ 2Hid۶ms%β m۶T=`O^Y1E  ]+6m>p@@@Io~9WE4h޼ysРAYf0`'M:Fqqqʕۻw7l k;wI>d` /^T U;(2L|뤻WS9T'N:ڎTVUcAD //TjOʿTXoE YEѶTjBTq37쮖Mz:%$D*9">7<QdUdj<>MEOXyՠS*׈GK~0U,Γ>W]'(2n N7Wb! 5: *7TK֒QdPd4NVrO'Fz>cTv=ZeWP5Y(26E!W5yZaM.RZ>UY=}1}qM?/B`1m(2 (2LEIpyt;ܷpPֳIۋMb9:4 "||Ae1_UՔUY{M_[?T~J(^Af<^?e wPa=Nɠ]&jYT_(I=?RekrUܗM c:K,P @OaQHȕO5zɫ2)6UK*Qy n3"S|N*]]Onu uz/IBt)*zCNCEH, Z)h~Г^\!΀Gr\cnw֊9ݾ9)EvSF68jBgSc"C"{sCQdP*r6 +X4eվ8y[B{3S hܦt-˗2Hlx ]UlE@ENmEUa/Y$1^L^T䮓UҶDM&.lA{2FwO31EFPd@SƋ3&`$"kzMzv~{O_yǮIW~RX7c{SFETdQڞ2zhSc9WqϬOقy|ϙPqz^ ""\?S-P9WXYh+EpqzfXE~Z_Bۈ:k9@ckeKOw7e\Z-trp*7i*!7*lTO1us! wA! J$aGCsCwVf?dLT!Ă"(2";D>KK?fGtuEuo{P|Vy}B \N>)۞Yz YN*+rSѫ)aO0n3XJhb?};.+a _|SUضtC㉦[>ˊj}L_~>8%urvdSewsU =F$QdE9yL -Pd@ Pd@ Pd@ Pd@ EPd(2 AJS=ې6#)*m@ @E۸A(2L(2 " ""(2A(2L(2 " ""(2A(2L (2L (2L (2L (2L (2L "L "L "L "L "L "0 PdE&E@ E@WdHpE@PdEE@PdE@PdEHGe4 rIENDB`scim-master/docs/manual/zh_CN/figures/scim-setup-engines.png000066400000000000000000001655171415264260100244210ustar00rootroot00000000000000PNG  IHDR0/IDATx U3\3<^rkHInH2DtJ)2JP$ IEM<ШA4wksNsz~skxkzO?T n5P8S P(9 9ی &.  lm~z{y}-{A(L\ b:5dkL}$Z_Aضci}7ϥC#Kk|kWu棱&Ɨ3ߘ3{m:1dՖ P+>iF^4x-m\[l/sCSfɡM)Y'+ʹŘ!~Ԧ PrquM^Ծ`ڦ&KyГY)4m4yyfmI[a˄Yu ndooĿ)w4x|cM %(/O ..xj*pB`~̙c;3e3x`sM n^ k84-lled߸l~W/ڋ|.檺/^1o7VO֘S6tk73up) |\Q%PUآ*U*kl UmdVXal&z}e}6|:kNf̨oGŋԪs992MZ>ݗ\.(Q.-?. ^ψ}}ޢT?Q$m %W@Ums ̵ZJRT|Qoԩ^3]Ȍ2 }+;ofҥgϞZ)0畿ׄ0 =)mm7i.IJMqeslT]skZ7uΈW_7okƬ#m7zjkDS+ l\QEKjm?gZ7n>/U+/ gݽ3f)gw 5thF ,[̺!ݻw75nͅ0aaq2͏榻yvlLverٿLǪ +) u]6s Cd'}hmR~2h/KŘ+MvA->+vϴ>K2݁~%U *^C={拡#CͷYرv]s5M*l@̴L㦹n9)um63-GDCo~ɾm\{?@onAFin۟awG^֦-ۮ$ %eod ԖnM;Q'}/0qk47AT%<u9+ӹcMLO*j3.ol¦gtYgٶsv [,soQᖗwj>&m>ʃ/3c>YjZW&QsMub煵+ l[pjKʦK9ny_aRek2ATa3w\.Z|ЦY0`{3fmM~UV71ekfj }Olpe2o N6~kecam7l߳~GBWlysǻ^Ap3|ޘV=&w?;tcLn4&]ƚ-y hZ_k} P Be_˦}/q?.uU'MUonbf@3Q̬qg^2߶b~g҈ͣ>j*^s9-;LX{΂I-MƸeLvsݏ Cn~ԿO 602/:4]>\j'ӌyLpMW'S17}emWAئԖnM;Q'00ny_aRW zffҤ6 dႅf'1͒˖9>7k׬>h? u[>g^l,jizIX'\ z{{ۍ0M}6}3SWg}ә, m->,vO> _aRjof̈́ kfڴicy'n_иqcS~}sejwknkc fLmeۦoaʦLz䲏I{6sM㗾6fujzXkȟƌɘi^jβwЖ -->+vϴ>K2݁~^wϋ&4oenvs%ҥm)s)[,ʖ-kW)[ݦz&=[-fZqI^Вiq}vfW:M'(M-\`̫ P6AGtlډZ>n}|_aahTu9LusV!dop\Msu5iؾ@`+0>9ˆfCW~/?ǵvl]O5ti/g7_smnVekrZ_A(yp*j~"ٶN~d~}[~T; kTpS se&H,\sӛ`Ai]?Ll6Ԓl'l?bIsFL5d=?lmo6=JcAG'%ٶH ?.ULϚ*%FU\?; [&{ĭL&Y?nf+|{ iv6n˃M\ (_aRo~ʄӅnKo{&}l%r_v`{ FӡBfԂt1nHZ_k}@i#({*sc& W\_xﶴ~Z-qq߾NQ ؑ<wڌvΘ[|ҶIZ_k}_|w*FX Sǥ.a# Fd88@*_ۂ P(pJ~8R }ogni>о Ba 4k]k &  \`p?@AA@AAAPAA(? *uwuץAן  \?5 O&d"bI% B LPADEe"  ((A@LPADe2mq(`,[,]4u,X`~%K1r &SNm{ʔ)fΜ9y~Wa/]7 (5kgy,Z(^{9M=J^yg-qg^fw6W_ 0 0o3_~6mZעE sǚ]4o<5SN#0ZV۪ZOb9]weƏcseݻ7n\VmC۷oofϞ{y~ݿ8-Effʕ_~17n\yfY~ٰaؓPw}1c>Ǝkvavۙm~j]s5]vo͹l緗*Ur-r|4ibITTGdoիWb:3fH@ ?U7p@;;iw#Ni$pw4ӧOOM9sEܶxG3/m~͉'h{,vs9ǒ/9ڵk[48[o /4\rI \pAXq3hР$r9(")}N3K6쳏|Ai|_W|gz]gY|B v믿}ѡ{/ @Пƾ|Cu[Xқkm…ܜuYϲ*-Kt|v^ =Ƽ{avuW;E&?pێO0ӘO;Ct =Es6. |@l͚5})mڵySP y衇BfD!3.W^y%mE]d⒉ ;QFo/]Yf;/rΝ[C~ziڴ_¬Y#Fl5GKD BZpE:БpP<*l U&Tʤ~NQ'OP?iTfpWF.;Gy]nF2.;n[V-;ENoyS`젃2CM :TA:0ln馴mҡp/_\lLPȍL?1 {1J0Aɓ'qg-gy@=Eevy73.lE83P#EERP T 0u.3_|Uj瞶3-$ ^ "tZllOecǎ:uD %mDS6d G}d,L.x؉ A y`thQu0I\BXT 7jLő!Re˖$W-^Kq<a$D[BL̞SH* 9q\9˕yq?gp:gsqC J) L.#lWjqCׯ pĩ|{oGI%&>j]J-{TF1Pfq:+E߿"7dAȜI$<x+}z!(('#;ut<\F)P~҈ =󛕉}Jm4:Ul۠.sOt޸3e9&] ?(pQ@JDGr@( L68@.L͏}ʋq `Et p L1YHrrDwBb̩\[NTsyy ҅: pKbZ(EPF2ø1 ?ssp 3\ v)؀VS""B:x9➠`:RHGKg:WOQpQ ,?{tN$C2v!I`՝_ Ie\jPI"y-Ӳ<\?_8(xC,qg([?#Æ KN\ǾsT|\a9S$չ %\'qtuy}TMS._ݻwGjQb {BAի*W;֭['(( \n#N#~(Cq30r_dF@hwҞSP$i@m~ʱ%fZ%,^D#yjԨa>cy\Zx{u2ʞgJ%QNY srTz&d}%~#qz(nĕ:G[QY\5u =ȳ+ ;I.;ȋA(X FP'7ެ<"%nHj2 E@J(`7Lp[.(:u:ٻt(~O @yGZ b1|-82ܯq UXÇ4Xb$:5ܸaqbnl3)>e(x? O\'Y@Q}2]**ˉ ?Ey1@ Ng\;Tl Ǒ߭Mr 8x8IP'jwĨuQ 0.n/ꥆ]Ǹ3e3T@>$N 9< y=hH5冂Èq!nyB<44{_ws=vr/@[ frrk jDa.@! `7Xh fr%L>3!TXڵCqb;L_usqGRpEҎk?)#9Qu\tj>Pa87AUva.d^hO>܅ֹ^E-J3XW 8qMD%>/8RO?mbSUDK8$;^^+0Hd*l> tawjz[0QqfZ+f_/He.%_P= # 1 sm\gϞiqB 帮|9?D TAZ t /Ԛtӈd36B k5u0UUPP&F q 5iA̢+ ,n: ~* D2ٰWFZpa!pe5o,cKrZ(DZXt:pq׹jAR,w{ 7sY2d;0l+LGH=| Ғ@mXStEyJ2!QI(D@$oP2D?Ӣ ԙ׬YEx'>k$keLF,V9*-1wQ#P49aYj&.R=F>_TLOrBGp*DΟu@3㎊utIυ&& pJ8#Re#h3v%PPP&(c3T$?%3@-* ߓRq{cL2(|3q9 Oy)Ũ0Nʌdv"  D0z' $-*aPkWŕ$G3yaݰlNs{ 4Q%#иB. "SB9j7n7H@AP&( J)S v R"@b8#6* t$1 &Ptq/fǸ{R$8O?D+SM5sYιŎEwzQnpsR5'è#%*1LVjR4STBT8XГdtGHQpjdXh*CMk_UQ$wy=Q/XL&X'݂@;WsBE惎ߕ2Jϸ`2$dQP_pn\pW6\ I\MäŦ( i$AQ!N=1]&q(]dhܬGXbyNW9 LR#ܢ瞩2+a͹ֈ#$RZ$ 8B&ڑL/@Lա syAm2Ϗ vrdKR-׌[7ʜP~(Vyu 0($0RG"Y(9haeR!I;oa;v-+X8ԣ - n";RyA%3: HBvFY41 xI>C( X*7lჀ[ȍ?TD{}p>P Iʽnj EШVagKTh9&įYH $ KM`,f7^TPA3/kqxd32 (,p%]KK @SD܊^V.#mdrEa\FO5HIx((IRiǃqC%W8 4\+qgC#׍6| ȹB1e=&H5$S5!H>elqn0@9G$^q_*&3٥KT526 62 \㾻g='Ee2sS8r9,JAbB, 2 evM9ڐ0%6ׄ!/ 4!$̔X60£lp؈+^dd6 H&2A_Xj}ː ((b˲# t8k**y5.XOO(yuLfADe""  (A۴i_ĪDAA()rG _dEӂzj[$ɼ  dV^ݖA~S@48TbE|Z,KPADd|e7mYƺ~C.F XՉJ""  XD CA u8ɁߩdfTF׮]k]~  @LdfJ[\(wA[nد_?{J*G$˕+g{DAA0%!،3r"4jtA)qرvoi"e\ʶmۦg8@5EAA0 8%%شiB `$ 4ݵ^k37;w6'tٰa7t#U} `61aj]66eʔ@bKo4oܴl\vevK/4kw.%( "&8–-a˖N>=m?.\hoܸ&y[ԫW}vZjvͬXBKPADs΅a&L qt9̙cq}su;715~s7y3H.  d"W|sQ{{1d̙vofZV t"GyFm(d2,~@2us!GN}wdnv;vLwҥ㏷ٿ( XABy}oB_~eh{(;찃̨!$}^:E,vȔgy>뭷2矛3fD֭͘/j,}&]O>$aP IÇ AP&+O>f9, :mLBkvQFCd'ݏg}.fĈyö/ǶAL)Fvo?sEꫯ^z)1Q={ve(裏&j_~Z+qqRsڴiy~7E>ga#AP& pɦF~M 2oF(Au]g=c>裴i/ !svPaBтds2f5eԼ/8cw߿&M۪ oaQ%,?i$StiK,Y 4I{{챇ywgyd]l2-(~low}ĉ̃\AP&+D=OU> i(i A܌rܹstUA79_??E_/Ka ClI֏?hɱ[s=M޽S$<\.\ȹqM˖-U.Ɲs~ǧ~F9'n>;slO<va`P]A a2 b[LzēH#<x~غ6VV-JF2=Vv%i+W% 4ޡjwnC'%(jM۶mkƌcy-WfM6}.ZR~CT\9]6m2*^{mc廀 A4o=U 7ߝ,[}A}u. dLϟo?ps2tf͚eƟNϐA C0˾י{yܖ9ȝsIW^ݼ+i롌<L[} 7]`o.$\_01$:tijbŊ)ohb P9 $Q9Z2u5?\{aփBJ*8\H Lt_|2>t|T3ׯ;d Hmա da #4MaR eʕCU!a42 ӯ_?KH K?Fxv mnȸ,js=C²$BQ8?~CFFycN2[V:ADe|@:2l3n}WHDo8p`*+mFRJjʗ/o8#$pXՑDGJI3ņ$NPMS:&18@ysi%Z¹>^_G?ky$GJquQ<fs]AI![ "2Y>`brQuPHYge%I#9&| dBDcM{TFL .3C.SsD)S,Ab,$.2 uٸH#sȐ!橧JL9L S7r^y;#1DUqU@"=>!.8B Ar .? +9 stIOFv)tYI2b#}etw͢: !swqG;dd8?L-Q>u]sdehgcI#O6)sO97.tZN`F}2M‰#isR1 Dŏ'xª&ܿ.s/IARI K`& L`0`u%ҹ!YtQx)ct[d&J N#i.Q4T>(|Kki^l$Ǭy6Y';IFB K!sT.B^&-M-s2HǫgϞyAB2:+\<ׯ7k׮+- ֘ c4F@]m?w1\?r%H}W2dS:kW }3Ic @:(0r <1GA$eV cGL_p}?WV~pqAtѪ~ *zUJA0ϓ ɇTgIDA΅d:c4\4(XP> m]lܸ15)JTJNOٻyy .m~&)Dkr)\_Q=|P:F HKR*$*x2cQ\N #ABMD\+; ft˜^! 7Q%iؖ?$Oz%.kbf5( XF5f[|f͚4Hv3\`Θ΃įqbeEBJ8_KzS2%Isԩ9mfaf 0I!n)>ALO>38HYڵSnQ8tp[ܴBM6 Mj +B;(cxQE*B̞b ?DŽv#1{cts2OR uqS&G "9Omذ!r '(6tVXY%/;!>(ÂW,J2e9n,H1DDnĄᲄHA\5C[pA(Bla=lUK b9\uUť%֭['F@-jArmd|FALЁ(}sCqlǀdg*/7Yu i_|5\>SR#v7^\L@AfŠw &0W՟#KB!n`wY&)(yEA\.ז-[% ʕĨ Ri!;6/!B;C#z@["Q wy2qc[:U +ĉ(] &Rm{&T<4؆;ּرn6%nP496^ ,ωS#9)FM[w!֡9:(7A,]$<)J85r!t$<!ʊ,Ƌō~j.c9OW,22 3exK$!EA.+~ uw  H ~A q46VZ%f&( "EQE!%\&( "E&qOQB"/6#0sEwoRG&( "[(_A1hJ_0HɊ;Ch=?pw(A"b2@AA,aP&( LPA@  DAAPP&( """F7 /~B|֦MO{(ɶ+:2Y!cA_@L&+ڵLVXd_wwLL&(2@E se>c>_Pdf/LVXܴiSsp:֭ػwo_ ~篾ʌ9RO%, H㏛իWM5kV8ӧOO/&M2=YvNl">sIa;蠃'l;\mذa|/7V^=sqǙs$S t:~3|u>Wo=4<5u!c%>C#0˖- z~6,^{3C*kԨavi's7d*={9sUxrkxwGeʖ-=\d-48g:sB_0 Ly{4 7Ub42-rƚ Gcb{#SX-Uz37[ϓ6m6:M52m暮X8qD{> t>1bDƛ &[NKp+VHSq w)mL-@:fÆ V]/Ljnݺ%jժÇVI /`חD8E_, qDfo͚_i6tiyjNA)VEnLK֩mQv0P:}{sIs͛DB6n;Rf7̨+qqOO,nw}|׶pq9knrYge3<Ӫn]wռƪU nkWJ2H |6m -i{m;{P?;혁/&/7-^g)<Ĺ}$pp[nt-}Μ9eH͒$c/6n@}h"ӼyeODŽ1+mXpߑ4a#BVfM %w};rMuڗ32}!/=H{:BIǒ)0m؛$5 7#HOM1{w85~Soo'.XG[ |:'ecyLdk$`7>m(Bo0Œf ?HSoմuD(O_&6;spxꩧLϞ=Ӧn:uXuᣏ>3? t:t*ґ wʕ+2o)%?%e{1?%nj7*(w! `w$"}AE $cQCA}X솂[|^E !~)6BRsfBFl`Imu#gZxDBz8`^hr@ Q^J ;_.næ_̀K IsV$:@k}wtSN9.:!JЩkΪcƌQ1XBgҶ NҥK{',KŋJHm6P'O/tg^tnt\P`0I;3 9#4A׃P:&)KF,IaI֡M$\%BK F+ }?r&;&K-;6nsBJDYҥK+lݻ~.C}2qHbp1Eu˺ʕ3-[Dd/:.|!7'Q#%+9ׯo:vh˾\p.'nF;2 VG}th(c6W]uM(?c=l΍P Tj;\aV `89HWVZ7'!$,|Jv Ԯ_-rJ#d[bFJ2&")D{i !Qe\Qumݶ'-OA)ehRjVQJp=5zz)" < x,3ϤOY ::Dy|кܲ'لsNa[q~,K.{u?>u%&MX50}ŴOܗ%+0f"8?J % ?ϸ,Qx|fDORkouiM"dʏ+V/1Wn4 P:hTF\PhAx,]&|4'[ffL!6CT\\|y 1^-DQ%d1cmӹN:$;[~أ)%=zHݏDSd$,oGթZMw}m| =m.;$Pݽ%na$cE$/2>btdwI|~ڐh 6Ȣ+QCMC`fjUrK6O'%X0,9Oh I0>} ň\b NAss=g;:W/L!_}Di,}Q"4ЎN' *jPk{W2]tM3Ly͚5QWXfӈ}2s#{H@B$w&.Z_čw\LmB]jca{ot}~A. f(L\ / tI6.)er ~jsڀ%Qcy>;P2k2O1zhۉgXH:%(m0vnGmSJ"u# }' >᥍Ϩ($Z5?lIbܽkYF(IX'RGyxF1?? Gf1ÿ5- ]}`l]!\eċd+̅49.,EƬPE8 qDv# u@A^ψ!'I$g"Qm BIF^G^xr }Qbq|vjl2 aL`}{2ĢT>?x&GcłfTY? 6& $!k+L923x:|0 _er.7la#*|*$`aEqZ`Adӱ Pc:Af/pMA9Xpz߾}mMP &lpJ8wޱX1,(BͭנA;dwaU|7K/5UTI}w/l XF(IX#&L8Ȗ#d9;˧8ʼnJ8Ō||-%jX6i|*^0k>` aQ|/0f*n&n$$DLS!(je)P2Ĝp PsO)QPumov[+/Q{ScxAilG:'/T7}geoyJ=V`qX uj`Pqc:1{ۅ(bMj(eqs)CCF0$e-؄՛l](͟ξBȢJp CNEԾ l+ q*~$>8>DLJ4t@b0ܯCP{k4 WXApf}2.9yX?1/`UJdflz2bO 2򣧯o޸f 2 x$$IL)pÆ lePO =V StauN.Wm)YweR ]q덟i9~ HMȐsQ˄e/ǁeobI Ja>(|hH|_^S*Cqm)^/߅&@$q^${/lb@ADA BB  l]8c!w "Θ [XBc"0` [q({ "yiO3Ƿ;ތnLڼu3*e<@<7];sY+^h ["VF]LGKF43OQ-=X;w[XE@A`u7hg.[gޢq,[y-3;oz ŋdaʼn L&( "2  d"  ( `gGyĬ]ݻ/L޽/\TRŌ?>5mҤIfܹymٲm;۷Yx6Ke2L&VL0xs 6mܸlҥi3}Μ9͚5[ocv~MDzaƍKM۴i+LӖ=_l|Ij#G4y_Jd2`ʎ?xsڵkpg;}\}թy]v%5~o .k~իWYO>1'tBI0H@!Lwߔ)S̟gp¬kt6W^1˗EP&d2Gqs͚5;gwL81}ƌV[n]ez!u[uqС;C8v9묳?ofΜ-AG?cdɒԼSO=~M03%\b"2L&8جYTLif?1~aT8ͽk>;$K/Zj˺sO/֭[o6ѣSx ^{VKS˗YL{Onvq12\an~t9%-(d2`'׷]Go?s衇ϗ_~%m$ݰ@Ho?cUW]e6uT;QGe֬Yc]&Lȳ/M4I}8 nVre;4"|w.zꅪx swMXtAwd2L0|*y80ȴDnݺ%~p`߼{id7y<t'qƒ8Вo,x[v旂y/[֬ZAO)L&n)#2u-VZكܰN)TňDYDsY_OFmeܻ˖-$}il jprY\9(Xֽ7C^kiOd20~<C )+lUV.AP eUX=G8_Q B8&vd #l?|軤EEr)棏>d23~<$ny]Z%l̘1vj L*n@q-Zd/QY믿N$0XB=@$4hԾsP^g5M~ߙgie>lJ̨o\'s]RD|'z=iӦ׼y:~0#(4h =! {3ŹvL&K.1nd b)A!QFv0SЪUf;KHWX]?N_ïO>#Hutm۶Mye˖B|^$lnU\MDGGeJ=ZTS-vQ|!z=FN;픖/]tEv:M2YaؼyR/$fD^L&f(ngQQF^PnQ.`\`;~_;RJ@N ˣ:6|pUlىc?2aÆf"Őb`Qq`'nk;HN馛RQO?t{Õ9o7|c1g}ּ[=\j:32L&Ld(!QO4}^+]!tN f.*L07Bq-8cG3E4c$Ԙ3(s% BCk\6,cas/<tV5*V&FuB  ڟ'a5j԰8*>I? F?vs!F\'nh]D Qe_VjhH+qGyd>aFɁVSV4̍Ouٳg4%Q!L&hu2)8@\K |vVNH8~+V>|i|%%TN?@wq$?/\h%sgLv36wv?k93 2!q<4|(88p:"N|GKAT*Jx1fC۴iS[^)h9VǎSh?cnݺ瞹xIɟD_TL&5:$eS!tHLc_H[ jȑ#m駟@`QWJ0NJَ'ջyVH-G?~@5 Ԗ.̆0Lqvvb\(Hb#sF#+zF_6k l%L&pO9Qmʨ@r?n sUPe "6e[@.Q6(P4LN0C,D[`Usm n5S#\-G @EMkʕ&LD7ے̺sܡCeL& YvXlP8#u A{iC5h'豽kݺx _*\ "1q `CaEbct@w{t)6<+ʊ=?5(_P xNRUA&fmteZfk DCE'6@ ) #Cc9YA@P2Ģ x N *X"pDM;,/DeۘmGAIpAAb#ݺuK""cHK ;\-`qkg$t\y啩3~7#@̓NuYn$7tԤ=zL&(,p=7 U'K6sY/rPp?O{،sI |K~E#20n[{ؐpO>-+S\9˛O)º gˊQ BS-B-L&(,зl 37w{{Eʊ\0 d믿,De"ܖ W/IQQ'e2LPP&lҥv^G6xʹ w/8uT}AL&d2L&((d2LPP&(d2@ꉉd2LPP&(d2LP&d2@L\ro7jll0)SL6-v#Fی?|͡|r&)Sؚizr"  k /t%5m̙vիW7s{9S^=3j(Yf>Ԯ]; L\r3<3uZnmQZK/4?J!,;|~#aJ*( "% T6֭[gz)s7?дh"RIBC¦cI;=A.6oTg4{GL't>c?ABc=|_6򗿤IJ/Z(tB/[l}s=\(zj>E8P.`(P~!r `ix9Rj1}{joDJ*ѣ׿6YfbŊY0o *"Egqy'nƍWzW_}5tރ>h~mvy=z pA\};/_ܒkFXsMkpߢ8r,ϟo=y!;]G*T`OkW\a h,^{~廝ŋXUJ5ǕLr:/0t55k嚐?|i0?j;={̛8qӟd̙o:ADE 4(yvK+E,(0X[nvz-)/lկ_鼐5j԰NysZj d/P ws9'twy}~e,L>ޭ^x:ud$9Em]{j y_n;t`/RrYET~ &F%> Dzwj.bH|㏭$TSN5~U|M{82oȑwަe˖ u YBMTm۪(œy1ױD~0aÆPE.wm..&ɣ}vO9Q[%NooK`Q29̃:*+al L5HQ (U2 48O瞄 >(36}<\7an[?bH!{_;v{'1o<& `#9*2 q ⅆaÏNb< `# !H!Yɓ'o֬Y8RGjY6H'ô R aI Q 7|c~6'*cZN:t9ꨣL;J"AFx1e9l[qx1PQ\?A%yd d0n.jժ<0ѩRe8Ŏt\rI{貏'}n6,k?tw]wYrNtX?S Q(Lm$}Gmy睗 aÆCBprQ!4;xg[oeyvӱӧutA0g=_dx8TI@d1l^ mHBЧObA,i#Ó_toȒrbKߠ\EsM|?#٤GLQ9Ψ\`p;JBm|6)EI}̾U]iW/`$ @D+VD@sDd#ҸɘαrbTŠp'3f oҤm/8f0%[ `B[^:r!KuXbIѨD.r`wDQ9aJ9^\/0;1:~;BMO|qIF*xAF $:eznPJUV2t)uq/۹q@^A0l5jvid9@.!QTp ZS.k'S۸wvMRsaG #SJ"1=x.7 Gb#$"K.JAdGy)!:H\Ҟ{%HNDk@0bСCxbP.(MSq^Ժq@x. s Q (uP ɚ(^a:A=J!w$ ܚ)є \( 2lÙ9q ݟObU&#aڇo/tQF)qhl`m &2ȏod#o\ w:-F'{ñA*\<Ј#.VZvH7cܷ(Ceq%;3lAuaYj P]>ؒ2T $G&& ?;8J~g1yk\Ĺ} & #\\}Ν;6j>|U0M`.5L2iO!(LgTb z(=P{U AЍ.#)WC)VR)kΰh`wuWK!k(Qw$a3@VNBn[>.qT! Sdy? F(ZxG_y pӉWnڴi ʶ1+% 1| ] ٸ UNwY<`N}Y2<]X/j_ NCYEO--ltMVG{9|0:v (,йRs%+"N J*!(ddǵGEbiZ Bn> 6Ct) L@AADAAP&A@  DEA@@  _H]1PٓO>i&˗_r޽HVL&dۊmwiG}41Etᄡ$UVfi(uRX[z:K&(d2Vp嗩!U\ْ: m00`7ڤhO͛7ޑDe2L&,d{WS VjUSZ ܴiS$mtd2L&XpڵJ*vڱUV믿by^fU! 4ja&wd2L&)S6gΜH_λ:hs!2@GٻlN:iSStw;YuEe2LV2#qa{gr?*J/^1bK}8hpYd* oÆ_Lݺo~ch1L0 ۸q-US&dEƑ *8;֧&O"Bq¬w`R[03fňQrɊdQd$(A@d$J$D\-o3;;,xzTΝ͜4Gϛ7ϼ.Zȩݻ40 a ?vQ@ιYszֵi,&u\$K,6mZٹsN0!hD:zuUvX-Q閑)S-9:ys, "G SR(^$n& >Ў;hw^}5J4ib򫯾 H.Lq$#B]'QF֟={V4KrK,8Bƌy u4h NDaÆbUŊc9N G6l0<)uݺucbۛ{9RR&,5ۊf(*UTYO$P7sLӴvZ3mSȫk=v^-r嗒&U&V{@s>Ϙ1[B+֭g9 ֵ^kKjByģO;wyݼys0v/C˗/7T*U  sGH_;PVVOb`_"~4ɓDAxJ @(X*e,f z3RH@*} i9]v ٭H">̙3uOD,R)yJ0)5mTƍ;={vsNGY #tLϏ\悙k G e y ) ʕ ?`{SҿI.d _|L[ B/~QU~4cct䧾}eq4{l>͞ ᅬbM41L4Y>n抨L42''̀~b~$dP@sݿ$2 Rti$X 1M*nNcE79m G;S}Ȋ~Q<0.we_u uٳ.wng.J b>K$-Ȝ~uQz))VXd&LI4{slLMgf⋒7nl^IWo DD_׬Y RVb"qD"È'02bMG+&D';)~>{zo,Q\LŲmېXzu`r-sL^dcy7#M pCW߾}c̽Xh|X 6y5g)\ (S%LvRq zIiݪU+Yj&JO@*%cMռV?ӪU btsQ5\^nU-~Ww ҉ˆ}.\0fXe#sG:? ]v.K,~XСCfT*JPPR#60}ig`Ҋ9^|̓>B#|L#,2JRH6k q_{L=OA?Yc}f%RT*JPRT*@JPRT*@JPRT*@JPRT*@JPRT*({ y{^jZO`rq] jZV+^fZzlݺ5r&{|pү_?M6-ZV I_])"*T۷~JJ/^g7|y(}+V<` jZV+O/ZHw4zwM7?o_@@ZVC(W\r- M:5A:wdϞ]hTRwɌ3?0x~(=4iDN>t_ l2e|>ygy>}ag/^e˖-7ٶyfߑ#۵pWjpBN|yf9x`y1ywRJfJ$B_~#.H`M>b8zI,Yȑ#Ge׮]Ν;cm 6oQVj ;CFkɓ'}(r.X 7o^ҥKmz)ɖ-ݻ7=k, z?~\ }ZV HԩME#_Ҷm[RJ5j8*H^J-\TLڵ凇H 1QW_}Uʗ/ / vuѣ @˜9t|8p`,X@I'uB@,?Kq=rG߹ѣGe\[\kZV0bFb"h7&FW]uɓ'0H#o3fL^s5aݻS شIv9W9O$G #k̙3壏>2˕+'iҤ dɒUV_S.hiV&8i$t111RZ53QǎHx/'L ;v{駥o߾}ݺuk׮_3ɜ9sJٲe#2ט)tͩS4j@… Gmתq&*CQZ^(]}a `| nUvyQK29gliݿ_N)G۶CAF,zg7w{?t]]ԩSG90 h='Ns0( Zn-K. |ܹZ @h%LivϞ=}rDrJs[0 f@aÆfpUt:+ogZ0Ag%VDY,QR'"C_ +2lܶm` ~+Sr!lɓeӦMdg֬Y?;K)3AիW7Mns`2]t}n@DͰ P~a3PZL="h!-ҧOo s.Fivソ -Z,I϶|W{inf4?}ʳmrb0}Mj0HNVHk׮5SŒ?4FCD.IҥKK"|rTv<1>|{ 7o^`^>&, 6i4sP ߱M6RId{jm]D;v 63] eYsfY_Y?nPI#}"ާQ 6 ؎ 6 0g&ߖ-[#jhdMD ȱ a2~~cr_J p0ȜL~2] `Ν<`u@NVT)H_U޽29sQF{ 6*ȔGv׀!1WF 3Ǡw;~~[6׬Y33a"N>*~"D(Wj@`67ثI_h4+MdK| 'j z" {ZV+*ͼmUjZPL͓RPVj@JPVj@JPVj@JPVj@ZV *@T*JOJP?JR)*U*JRTT)T*JRTT*JPPx1t\ضMr.䢵k]dz{U*JRL.'T,'Os)I*|qQh}ҰaXϟ?'JR)*#y&?ZB.`8lrܹrСC; \E#Gs=r6mg}.*JRTT]2_?5;|XdJ9_&ٙ9+QBϘ!'37,?#*?I'&{ /H9B RdI)PdȐ!:ܳgO=U*JPPLt.GfM?/;ꫲߥK˗:ȬsrVA5w\)XvK8p/_>)Tܹ3ξ6l`(aJ̾֯_/YcѣtYO>UtzD@RT)8<~|۳ o@6k&+,7mƺ8ϝ;gv\Qeҥ=Q[nEOp႔*UJcݻTM&ӝ ?߿lwQWUR)S ^8~\׮-˳e 9rȰ:ud {B2JѾ+VH׮]cbbf͚}^zDAVZU .,iV!"hݺu:ujnݺرcwXvQT *ˮUdSxّ'loDӼz%ٽ{%9=  {;LөS'%T#"/^l/ &T*J0Y ˖ '*$5 Cʎd~4kaCY˱"mI) [fL:U bO?T.#G4,X`j}"@KoPR7%J0J:QANe,+v?@̙ 9w! ƍ$`"\?n{~@F-i9T VvNp>}̀J6(a[PM;'GWr6[6Zx]7o Ғ%c-d.3f&;FiR001t2e4*UBԸqcsQ?o41%QjJ9kJ*>$=/uUj >-IO6KʋVT)FUG!<3ҵIف@ ,iȏCT" tϣv́M~r޽ ~gƍv9VZ R%s6Z&otiވ!gjߣ(Ͽ?CPm]wYϸeqfo;ʗ **[Vb@<cܡix7]t^|2N'XR%DժU3fAF|f=uʕ+5TD`ͯ ~L@U@`$<>*$k5ÇwNJȝٶMN=v@f;2gyŪ i͛7oX{$s)R4Ch42*UBܹ!ui0WM*UПAʗGU UW2+S&ݣ㙿iʎދ@;3/(kWw>_)W~WSL1Mq42R QCꫥbŊz2$,[L d3JJVTJ9/e;Hߞ=tiq*QsիcmNSѣ]wɪ[oɓ'_9^yꪫ'4}U*JU S~Mi: <֊ :.\(|w)']Xh) ART *x8:A *JR>*@JR%zf?; 8cY *@JR.'$d O &*?@JRTxmR~#{dL@FcHTT)T*Ju> XRT*?2I-"@U@yVj?@e1GfW *@ZVU jZV+* ={VPVj@jZVTT)&*c"gn './)3쒙v[߰ŀݬ f;d¬2nfg[9d;,Xtʕ+ȿٳŋ#ܦMWj@ wˬ121oӷYemҴm)T4mT.yʜ%凥1`^:>={HT>Kjժk9)qXB ٻwo'O*>,W]u92q߾}Z9j@@`2tn+mekʊu?9>? W+&xPK;$&&|>pϟ_ow`u$I.߿?ҥK%C e˖KŊ|q\hQs6ԩt.?uG}4Pj@@`<3vȨe2z67J1?Jׯ6]7beɿ[}* oy/\y@/IԱ޽[yon9sfyg%K,Rlـ;w,EwGd}2GWd@bkҥe̙=QԩS˱cLe[X@M_hn*Uo# 2 4by}상#UZ@? h+͚5!niڴi2}t_d=7j@`K%d}2{d¼5}4m_=]4hLX.KVcdC#;/qΙ3GڶmvZVyߥK;wI[Qmۖd@Hd[l{lOd5:>ӷQ+K 6k n:pndرݻw,G;v0ѴSU 7LYO&,#~#87{:T(_C*l,5>n/oV@ިXRJRi2{NY:=zY0YD5jdnyL[#FHpꫯFK*廜H>8͑#@`VZQ%gΜ&ĥ370v/C˗/Oj@@`<ǟdƊ2iOW!G/?"JjVnVRbm)Y=n}yɲ~qٺ{BY}Ҹqc3 M@@5p |`twe `eK&MСQЭ[_ohf9i۰a@&{njot"Ε9~F?n(67$h֬Y&BiV+-~pLZ|@,9(L$N?R7LJ]˕^.TVT#; L^CgId-2y^8=r`y;ٲe i~?~'X( vmڴ1lzj3!hچ9k֬S۰F.@"qeV&Le˖iک * 퓯'w(7h#>DZt)i*U?h,oU% [|*"Iu2i.\iFdGx1>q̙7zhӧiIk:ui;m3i_X`1cF3/ϠAL_Ao8Q!CĉeΝZY\/$,YiV+c3g [sH'Uj|, k}|RT%)SVWޮoV}R.}?ws13!{~@5j$i n@{Z>|_.7oB2sv"jƄi4j@`u;NȘ~GȸIse妃a[QҲ]wxRakiҴ^C<#{=NK̾Ȯ=IgϞm*]kZ:t0Dffb~&p"w#GL0@3ݏ{0!lhŐjB-_',8Gן~:rO̴pO?5@EW41 ý/ 6_?=c 6} Z~g"MvҺvځkԂMvMyiک * m?; MZɐoÍ3f gd.g?'ShTF2}ꈢW QCc=g7  d{~f̘!wy3Ϙihx1iYt&~-eL'hک *d kvژn>c"#'/ƭ:KN_H %G^næw}gx)%D JV^3c=f&7hO>hE!Cx'lu{o3Mӕ+W6Lj%VU CƁջN˪dӲ|q 4vL]M4mAC0{YNɏ:qK?Q4R$vG2AtO#H#} jZR؛cNo_u@f.'1Du-ҾQG9m]yP~Xy@>$ ێkaVj@*ZV *ZV *ZV *ZV *ZV *URT*?E *@=T*JRTT*JPPRT*JPRT*@@Թs".DeW}SFe_gϞL2ɘ1c"yo6o,meȐ!o5VT*J0-Zƍ&^z>;JTd…}\qv?S ,(z3<#rӧOe˖_/ǏzaT*@@` Xn2ɷI3s jSO=g SNaѿo]7ntCܹs}! <~x/moo9tPi%K0`@e ETT*@@`QLw. (7E/Ӧ-2[7Q+R/.*TB I֬Y,Ok֬Y`?GJ*6gΜfے%KY9zUWɍ7(K,ulD1-Κ5K;XsɰaF&kx8qݒ7o^iӦšRK.MU Q_Cҧ5˜Yƿw 2edx,ңfM4`pp۶mrAK͛c:|pL#M袅0ҤI# 4͞:uʼ 0w;v쐫:4i$&rn>W%*U]NnR6Κ%(jߢ0x)WNV-^,_xCZ%hƼkeݺuQ?O?T2d`&(O43Xy_,'XJ3PϼiȑRNXˀK+ R8`^i"r;}t_D 7**|Lw7SyUT)FYNM+ƍ?wS#A9eJѢix#Z426~_@hP|MH/q#:ujnݺرcwXٳGNJFRk F\Pm4H<̘:Uv [C>͝[Ԫ% _Z:0bvi&h\rB -!H>h H5t2] =zdq#cAؽ -_,]D-^|Q#9Ү~1YO/;9s6R)2P"ZԈyأim޼yȾXvɨQ D_?bMҪ);ƈ#b'O41h˖-p*UU Qʖi'^~Y'e%<"g^ɐ.]dȑ2ѩi Q)Tl 裢e^>7H9rGc׽[ k6YjUuT]w/nڴh2SbUb"^]Є ̹R"PgRr@?>*-ʕ_-cFg˞eڋ/֖-s^9ֽPofL-1OwD[,tB!ƍgF3 ߡVϞ=< iw޾{痊+F|I*e>~ sH~**2&`ҦMۤgrց͛ˎfdS*2e{ɐڵ-gD%23:7R1} #-ͶRO_׮]>faD(POycbbȓ?B_v`ZԮ]̼cJRxAFf SLxC;5 [omYɁP]馛~Ç79sf`5\'. [xj}7&N(F{D>ifq~h ܹYFNRT)<{V>P…e\ W~3JNdׇܹ5B5h3g!^,)K_g*_~YWh +4ibc%"0 pf8"O>-ҥ{19\L*UEETZ5bkϬYr&JND։U ђsAu}JJoifU2j1~g;?:^'bpg̘1/*"RGEl@ } W08#j{f_v68OW^ 40}յ XJx& }(8EԹ>ŋ˘1cDcLʒEV nL6mRmAmll":th⹻\kEDي:FϏdbtbHv~A/&nb-[faLUT0!VT)&B\)j֔o26ϗC/ rȹ1_8po߾8cm.]v|D{K#mL??:x\bvD.';UЂ PT *KO@y…n]ӾL6-p!u!{fZog&3#gHBd‰MpJݼ.[ Xxą~Vo1ͥü{*JR%݃@f=#uJPRTuJRT *@JRU *JR]6~^+U*J`(@yVj?RTjZ0"@ZV՗9ZRT)jZ}Ov"hMAjZ S)jZ}`BRL:.۷g݇dZ8jsΉJPVU jZV+*jZVTT)jZVj:VT8TT*Jx)Rj^V[PVjJPVj@JPVj@JPVj@JPVj@JPVj@JPVj@?֭1cH۶mB RHu4'"ҥoVU*@ L( J)d 'N#GȡC䧟~R'IsҞ*R$.]@^|(Q/ E>}|'|"K69r|2ÇKRLW@\#U%6nm>}':xy*E LEEbɒ%f{ ,hE}[p…b޼yXjU)_?0`~ܹ˕+g*rkh/}TI#q<(']"ϫQP"pΜ9b;`pvqsIS-ٳM$@|O*Uy|d:|2@aġ槻" #G=y`k:cRGGDI(˸FRB01J8d3XMRcyӆC6#Do^ uƌrOAe D:wdL-[B%\m#뷎N{<"hak4К>}y9 Ii SE=1\0'u w !/diӦW<]ɣh ɈQ'`W*3?qiӦ<iҤ+RX q̍W͚53^=Z6mjۈT>bMBSi'J1שM{zZ}V|Wd*U6+VeS<&F%6auca6#y0]FSwLޗ@.p[!E]5 ~qۡa#`|69=y@ڑ'>`/0?iҤ[^[nm*p%}m ]0@yI^soػ``Ko`y̓ Iɣh prqdox|9:<;vM , ^{m,߾e7|IXƺPb_|ќ^L_#[l!+~*T_;G_}U椭3Ζ`*m>L@u΍`ƍt 8W\RBc>X3gN]޼y;q >˟x ꪫG:ʂK  ]v51'w@ݠAu&jҽK浇J%ٿSisQ6նtqs"&רXkKϞ=eq !ؼJ?}ki3,Mv*~@e:B`hH7 K҂m >8v3HkҊ''y.jT6/'NhK:ؾUh~|D3k T:>^v -9 w9.,.7/IkҜyI;%] cƌ1Sp])#*W^yDbh|\.SLޫ.7tSX@nF ,,@~ _}eb ,O<1cFygLoeΩx (֤9iOIn> Њ됼qwnJ*X曁sO3  ~JB='9iOp\Iخ]{~8e?d5؅cGr;>o^mCG_K ~6O%yBS)(7 Ryވ / jR;7ko\xsiZJw\jku忂WDE[5m`|@IZΟF?L2S /JEyCZ"/ȓH0X>;@ }|Hww WVosSߣGh;:I~uI2e®eZ8֞~8V>D.2U)y<PmEE}ѳ-|%K(jL=n~y>ȓpsi7/O|ihM ^%pc.u0_8r;CB@]yIhժɣh uaV^7]y6*Kd:o9sf@m~"ܘǷ(W_su@ΫP#@Cl4N:ҢE8x 3x+/"-y)`@@/$:\wYng"Ŋ3Mt6ݒ'{1伥&\__PH.הW]R*E !(aǛ:7Oرc%Mטu7ۛe-u})vӄx[{͝_e qh 1~|@ | .f^ f ȰPhMӂ?cHkҕ'/y.~g%-`ޛrҦo}0PR9Ph=r;kB6R pQf]%䗗G۶mMEI"⾻xϖrJV/ {eq^oS'&`6? iEnOS˵6t@4P޸2%13 ml2f*#F].]:ӊ] ͻse6:iMyAD O`yս̯ ˴E+/2+v5}"ʛqxч |…DwD)Ћn"USIھw f+Q*`"9Rf7.J,XY R.8>}"?! mmJ}̶o;َ< pkm1Q4=,m&ISʛO `h?%((tɋ`iK۴ g9yawFv:x)9uyI0QHu^'M'GՑ=yӤ wm.}r]y-YN .Ikwڳ-y)G~B nqz`nͤZ Ҡf/'>R3h|=ynvv\\Clw^`H`k6= GR*E u/4PrQ f[|.PC3}(@5qDHRwuA*Nk.@wD6Ei)*X(DQ̱[۞ z8N;3׶!DҘʟjYI[/4' utZZ*H]N(Y,m&H+[(UgGڈ,2} ]@/Ҽ#896MH^b<6v=8pܕVSIFݜףoY>-R&;@WV5X1{$K7Mzb1Pg.(e}I)r>mtmBYGؽ =vHZ{)G;i!o&Xrߪ=դiefu'n`r҉ߵi=SJ*&`F]ҝz < VDo֋G@U@'/MRII!YfB޻ dz>iki#T+?jξ_~ҼQP4/XmmKJ m@=z-@zm v@`pT6=>{g9iN{#O@)C,YLoH3vlj6*G^YZnϣ%yŹmB\QY77G-,8mZSw>uSsSLs0MO0S֔/.}r.O]sF9?6v H7vG@U@:{ i5_asA~S`ܗQ"Kμ .o.2o=W3i;͈Է55`൭I*bQPۦ`嘹3QDQsh#fgI7gw o~n~r|vЉHc$\uGE+1KT?l°#H;ޓ_Wҍ8(簵=_ۛH7 l8h%OȠ;ym^pdDѢKḚ?ܸ 5}݃@Yy幬lO4u76?ܟ17wn37@._6{ہNw. ^#P^eȓH0X> }>5K9wO?5亵i5{؝M~%Co^.\Xʕ+glҙ֢`_>ڛX̻I]R*E STa+.&wMTZ4VxʾYhwߪf` ,Y^ߓ@}bw*H'(w,megd'FJ~J&_Mafw\2w쀌SmQGȽ܎#M-4ITիW~"sߴ.õM[ D6S*6w%B?ϝs.'H)2v ؼ$O5@Exk$gt򪓟}9 ժXϽIƜ^0A$s ~29PHS!2cr~û|&Ho@(֭k4r)Df9˹Q&Ik܂yAD ;EnYSNYɝ?n6433hļ~f;̻?9p* J~ G@U@ vR۬y Ի;J* eOLʹHضAM?kL7k|l"oT^ qT :~ý> 3Bl>?0H `niG&Fӽt$\dFkhp%eN[~Hel[?)Y"8>;4 fiGlY rN5mһN˱ev{5{9i:ܝ  #Lɣh 0tOs gܯgHk*Am_<>SV!{"u_w9-M RyW H4Frޖe$*mY`b I,mZZbp8ǤI/mC3OnX˝gra/u|Xy78vQfѝ_I  |oB%O!sVD|=\ 9j{ҩOWp3KUc|KSR$] mm^H`[e|6;Jncmem!h-} ?߳hQx=r'q*R$;ui&y^Β5խ]ӌ"{LK hȐMj |svFo#s|ֶM@{jmp Xkk;{m-З vd3;J/=uy.R9[3UCh) fۿd?s4;Q#H?n["[ qi8%Mrv:%yu2(ؠA!~`{BS9{dYyR~ y9OFR%W&OJSPJ_DިQDXH4@)€)"/LS$xT5Dngl>G8eR|@LF`چ 4) ȽMS78!O"p+UԷg.B/Tc'4rb!F/.jG~qMUB| G@U@èlGnqsodSv9srC 6RMSW怛Sb öwMk&2iڳύm*XXwP§b@ }nhw9fqh8&Ct'F@< )T|_^荆I USi[lh6eoݱ?H;қ}]dX&E^ G@:Gq6a[g˖U/?![^+SW+ o,*o-)oݸ|Rpoi)97\~ۻ#3 v\<%BmG6sΑOvVzp}y)F^/%憞L&6w/ 6'mx(g˖Mz!3} fȐ\WG?'E>*R$/> T\^yi<5wn2e4M[_hu 3/4G \T v{*v@ۉf:6wp< /ȓpךp&wob{T`* hPI>ӓCH^rKҜ'H{~I䧝 9XF;\\0M['t5O =yͫ7zSNLbeII>ZlLl7b ]wD9'E>*R$tCʼnp^h`wLLE@sn81Grh.$I/>'ϋW"4\l= ޥ_޼$H{ %Ž,&vV.d݌h#ɓH0|T'|TTHdN 44hh -4'{45U,(zبgo@"=y@^'DNaƉ&_{g+E233ܪV&mSnJ)2LIB̬233I~kx6^޾KGɛ=^_ZCHq}S8ą6-hP8 JG!C8C&s5ڀMr V0}iGeϷ%i;ڀMǴbMoX iEm-\B{/ `Qꑥ;M@cgJG;EL ˂ S~# >W\mmA@AAD&qg~I"H=x(L,н#rB`D8X&hmR;EU:1~,#"" =Kp#F[\诒fm䚸#YjmY7ɳP [dCXoJ.m:tP&ۦvsm 0V08uZ2aKlngI)xۊ Xع(ґmsDzi%E! o56mkqEB{AbQ,/Òsclhv@Olg>q 1fnCR@cgJG@r4.0|pGs%rdI`m^iKPB=·ȓڪm)k&!>P28Nۨ1CՎݎ"*IQDzi3fxr NV̀Hۃh[o_hlgD}5j#(ڪC܇\T#\X2yQ(]I[RB k#Fwo .Eю"*Iw4@) C™_@q) 4ׯЃ0`wܸqNAIǐ.e]J]XInX -&T"7&{Ҳ)P!jljEU:V*e{/ V=%flƃNA>@ {eEeRϰ;I>rH [i2#vvThh.:<ꓭ0BΩ{ڀ% 1%:#Y Qo.ǹ_}!/v@{ )@u@5uNjmG@&6ؖQ XЛ@,+F7׈%lek!T(}DuRΩ{ 迿B9PԽkV;v^;t<ADUDAAPPEPADUTDAAPEEPADUTDA@ANA DUTz |> "     (   A*UAog߈@1cAA   m]qꩧg^{v?;ovWuN(~.yG{ofokű[/=\~ԟyg}]1z/zM;B_Zt믿.Zy7{7W_}Uy睕x饗J+}^7y/A:SO] >a~bf(vin3͕W^8䓛>]=C{kj0 $LRl&ޖ9餓kw +Ua|͓F.."׎gy8p`駟v91ĩ\{${}ᇋ#8Xn\."Ř1cƻ⋬>31l=c-RK-Us9mwuW}ky:bxꩧ{]] qL3M+4}v7]}ե`L'>ٝ}ًW]p UW]U|YL'tX%бriuÎ1ˇ w}w1lذbm6l fmF} q;{as%21MX+#x(RSL1Eq饗f_s'/Zkbvh`9tr-]}Jw} V[{G}1!;vl^.i#yD?QG4(L3TY~'].dM|5o(A}'>;Ê'x˱#<2ߦnBE˯oKR 2K.>CeY3>$o/]tQ7y9?vT_P@e\A3{v9:Cfpb+)3u *ʀO n-Uۯ_NK1r."E cS/*DR˔Ib[ehR6ڨ{]˽B S !e.`:G݀uCvmbܸqz-Gmz\0`#@g[o#^]/02P<+}36qZgu2YA[\q8'T9oGk\jϷk4HU8/Ń>EIgٽK8w ?xK*"m5y9m.k >'c;l5D|KDgסQ{`i飏>*5pN9g qqRj<*[J߿K|ks=~}?<߸V\qhrkN6 :K[[SⱺBlYfRb !6(;OS}?|'6%nj2#Zqxv$><]|&os][S%Q#9W^yeixXqA5b-owM9]!5ܦ\p\{yr.{j gh% eUWn!X@^2 Jc _n;\<[LUCXj E&LcsBBɀy睛+S&J]Mrڅ=ܿ!K's Ս^xaV,WL=wJj*+*" ]]Z^\rOAm ƻsgŒ}K$ XE ꚾ=S pB B]qwf / m 7^2#-D6}oh-bj*uZ1SJ|hwTZnx-S^RȠ[9sVGƿs<>c !e)kUo2sG٪:%%VE1J;cý)xe!ܐ<D a(c`oH-T=s܄׃dqOn=έ:ƘɆqck?3(̂Yg}ݓ0p^*#I"&XBع6d/!uR& gz?8dB!뭷wNY#\פ0r9 Ai佅(F' +0jA U@b,ba,=_ IQebU{9i]P1I*;P U>0.isFjN0SfPbB(T8f*mY%6|砠Q;Sr_u n~@,Y \3y-Uz,30/$1+Ô4`~sԦ39 =bY2G\ {`g+yme7&c,dmWgX| ꝓnZ ƽ2UpxA Azݼ!zVSb 5D2wLJQ AȅJ@ZEЦJe.e< +Ҋ߸/ b-\ >,d HAop ܦF %1yVkGWCe \]h;`]FL0Hqee!%<1%$3)0WnN! W2Ծ (# ${Äon:ErP-ĕknjX,̂al[)#pu#z7~j/_6l+#$gy ' Fnf,Ƴ ~ӌ2'FúUMٙsN!1Sy]vZ1|è{#TLLI'T*#LȧL : Ml\){FG1# }{@ wT0 H;vjA-20Tgas$SD1&`w unܫ BOlh/cJS˹bU[r/bω3j2RV0жF.[wZ,,+Wyκ+  o>ĒaP37tS6u+9E,p ڎ\~FxW% 2]m[Ü$ wT:cg&YdĪwTV&mz掍CLc{, sSO yPs\Ŏ& $-jzmú;08eQ.!>& t7ˎ4($FȨ!p} J.%\@J}a a10} s)) ~BX~C %4Uq~u吭Xig)[Tc퇩e{zZܛy'&. W<~ &CfcA챌 =M <=4 DG8C` o,PnfWTTHOSH9!Qߘ^ ݱs ]m Êhb~ȖyzT$)B}=܌1jʗPsb+(@bT%1Dܜ|"O!7'[Je:I@Ss̽Oʔxb A v5ps|?>A.RJĒB4GJ==q &_~!m 9-2 G]c%4LK_MZ@Ɔ<r<7D7(ԍ }í!U)AU@ (7Pp DrRWx[>$)Q$- ,z3 *D+  l,p K Y,3ƛEBݍX$ !rCԚ0 }/6}~f!%xnU)E/e2%i;vS2D%QUO_DaT0ޗg)TaT6> LOdW32umE\[br)$Bo!1UHCŬ #=[xt# U&zUĮl KQxJݱd "DAA/;PAAOPAa"#"  K@_DUTTTTTTTDUTTTTTTTTDUTTTTTTTTDUTTTTTTTTDUTTTTTTTT:  FbIENDB`scim-master/docs/manual/zh_CN/figures/scim-setup-frontend-x11.png000066400000000000000000001472101415264260100252050ustar00rootroot00000000000000PNG  IHDR=%ӾOIDATxUƱ ;SL0P@BE?E@DDQ 8y\ N9;;3櫯jcXq t>MAjMk~vsh?^Jha  ۨ>'uPK6r^{+W. Bw|\4}\:prPKl2gwfco9=soTL}jKAh2Y?#?c{y+ǻ>̭~߿b5`Ŷf%gm\K|{/mzt{nQsKb>cGw_yxee\^sAZ>:q'P]AoӦMn4d=\o\[}7I $1 >Iwå&=Q駟[nuq[q]ݺ[v2bfӶv޾ԧv>Wimc}FqAtUe1}.铢+^Ϳ{),Ҧ ѡ?jG7hJ/տP2p.mv>}1u#OMw u_ѣݮw+[#]= ~K-c^ejWAh?C򴓶}$/r/0qMwn} o!|w{q3A;V=W:};ݱ?O\?m{YAZ6:u'P >+O;igHbc`eftុq{q믾p󎻻xUQ`wxpy9ض6ڌZeXF]_긱=~|﷏'`sx/uwO9w/eF>;ǹ~@pc듞qo=xE#O8pn]ݺ{b̒Je[[?/Jcm~rJͻw;s&ŹȻ>w_'}97t t'^sN.mWAhU0C򴓶}R323 ^zeч~ǟҽ7aӏ?zuo߾n.vv:m).^X<Ŗ' >fi\ӎw9YanG=p=ȳu.}${ǽC׾xӹOYAh0C򴓶}/9_a6O<ywWaÆO?ꩧz/߿;wsv9ڋ ϳOZXy/<isN*cw?=!'ݐy~qF?{ Źgr; ۸\A#P >+O;iۗH,702]8%'njq={6t3׾&-:vm;vt;oױS7N·bm%[_jY<VKZn-wvku6]܆[:GT%X%T r!YU&xzN_['bϗN,7iW B˃Y4m>i~ڎq.sI<]Ot[q8$xCϡ{Vj}}mv!nm#g=NʵYn,WJ{_tG;0/|~c'^Lv%AZ@b023n\{,߼?2W"Gz{ 1W΍}7wKMXd훊82CkT6*Gso?ؗq͖r1tحvﱴڿ~w8[}-Nan͟;/ioJs*Asj?ܗqF]qPK00* R|A//0q(ՂKkݞ;# @AASE`ef;LA6w\~n-t&L(,/݌3~{N;yM6~>C7|p駟f&} "CO?p}?p[궬{}~믿=6[~nfp|}ٛ8qbYc{wkn.:w?7P;u?7NFA%^zUW]յo>~P:Sl2z5l%( `mnuVXay-(o0C; T6guV'ϐ{'۷oa#p@G/BIwm9yK̋ " Jw^w-0hى'tU!1n+]{sV_-6@H,&O\Xv5ה܇{,kcĈEB5'_I!gҤI^~oþ;1dMm#! `E A-oK#l +\|]wy5Ro\|&^*?]m݊.8Fĕkw$x=HA:GC_|e~SOfi&;n9dĖ~, " F9;v믿XLG+EQ?pr7t` Dy[o宻ۗ"E|}AK0ՑkL`^BD?:YdRy'5W   Y>[guK/FcBE W;)6pC,x}ߔ; )EQqA;CUW]U : IEÅV[!i ,.bO;]n݊9sADf{`!}>[1#vw1Pn^Yl~!zkf9޽{{*!d/r TSMUÆ Qo)m'ʼjN>Aykq|~6{Ej@(#| `h\Ku*%īӫuYvn} /7b\¨?nX_L[Oe 2L&ki%q~, n1 b~ffQJ^ -ؼ `WGIfа.!?i0 ) K ޽{aِ!C|Vs" Bt6ǀoA3I|el?@lW^yF^} />[o7Df~+ 7P }C6["XKPA }u8~=Cyo E☘4i$L34B(F/R "kj]{n=oG;%\k1Iָ袋ʴKrnmJAlp=1PhKL1gTWsZnM7un4b>p*8lWwm۶u^uw Ah*Owa7ze\_V0 `^b G0H"]5CJnR{ gY:V?ȋ@AE@8ϴ`pD.hH?$]vE S|W3k5XTpi)KZ`/,LE3j,R8 6 JB -^r:1" "M* X&XB;\(۔ %s_21ztOKsgU>l_:V`ZA<'sw}=ܖ&jWl˞z)Qj,|) ((A@@  d"  ( L&( "2  DEAAP&(( "2@@AA LPAD[ݍ7*@AAl)rףGY6mڸ#G-K?஺*&gyF L?μ݉'|͢oKg}Vz)׳gO.*?}矯ֈÇ~*m;'Ƚ߀*/O?}嗩'LPQ^{n6cəg޼kWh}pȐ!nwv[t-n-[nn7vm 4]׮]mN=T׹sgr˹ 7зCK&X_\%?dYr8=GR=1x/__I:=ܓ{gэ=h=SN9M?o'|u>W^i|[oS}{ݔSNx\-nС=5kq{맛n:wG$zp3Ʋ9Q{9}Ye[e 5PP~G} x8m6~Ӗ[n]̷ryL( P%I!^~ӧؠme ]OFuX@뮻n@0p77:R \z)J~`d|ͣB ej3p;vC0Pfi&\Lsi9{lm^V\qEꫯF Z0}7H&߉\kSy /6tP1WC=+ɶ?Ƅ*Jر.$ͼq?ܫɗR0B O֯ ~L$駟} F.l^8Ø?s8h{I0駟_~k%=aaεɓv<ݴm6Ji.Jb I$A qoj6=#,ؖRC;uq^>;25j>㦰%P^Xb: 1`,HX2yWfJl_o̓wr\xk P<هo}[u7tB ;N˔ĵ 9Mb㥀q'y˗lc^zk_~L > s?|5\ -XTa@.Ь(g q'37U:}ݷ$ v#[mߖO: jƃ؟x؇RȢHpŶ!qLۯ0{E* 9*K Emygm;Y!a.`r\t(6( ^Dۦt~ܸqꫯBNj/g;dWrֵ\Ṯ} 0B0|@nQpy-(H7RK-ob.j3,nb l=A!*g fYU ,jr9o ce  ,]^pׯ v Yԫ k2xPjyAguV$FTL&~kHlf2S%0$mݶ'_C2NtYNH 0щR{sl-qI' 5C;> J4+;+~'Az˱pc}1"i.-{:>qb/N#yYfIt' oI~IG߅^_Í%k=2 bT(vb#܋.hC\)#a>#YbB{/gP&lS^x c@De=HLYZ<4Lwdvr%/TL2C/5[jqAY +NdꪅϨ$Ĕ-[BPw^''.L-4hP5ٹ2>|hAx4w26>CiɌU3uUv;竭=-$b1c>sTR>8^} Zx0Vr$]xAʁmf ľZKr ȸfSd#kE{ps*R>ZgR+ 5(ucƌJ 5KJ:.0ۘ׎Ka_ycDaP" WuZ|9dIIGhM@$5-&V@o7ִ9Iz2Ad,IEڭĕQuđٹ67`aGieXBd~RQ`j@Q6UcqJ zȠ< l 3~ĚOvsxoĮXijЃjB N1–aF@ަB[}0RN$?` \ ,<ܾVD 3 Cʹ^!Akʮx@%$HZ B0*rb7QpU$?Ep92J{߀xQcd"rA db HAvTʄk^$$2hA 1FZ\o dlGwj,OօQbu2@^9<_IL"yʬ .rld{ 9#V5I\RL] E2B(ɄL_Fpr,*)_QËjH~kq-< 1U5CD.Vևq}<qXZ-<πLh!HeΖ";(ƨcR1b(#] sRq7۔* Ri ev,7$#$eU^fL1A'#n>bH_d&Te%ZxroA 7'7㔔!W08s^xJj.`^*ռͫC-;Vh"ܠ,e-[U jYJBXldbydIr C"m,?ߟ{Ń~;Th$5ƦeÐ 2}JVXZ%,Tl `xe5dPDEJQ}AFyAM5\)DeLH^c?d&<3P+-4kx A$6T -~>e L`y2y8IΨ\K\B*juk~xSK%wM7E@(ĖW>DM_ `fd޴P¹~aEp"Z$߶K k'|µF!va`{ʯ ąGLj4rMh/qx!oiZ\dfe@0RJwjAPPxp33`"&38I!!(#Q_J<XbO} ^#Rn RuarIR埼C*!ЉDAL]#o!9+\$ MYdXC# Ċ-0$]IsyEIDe o)Ƚ2ˤl8n7$46L5A0jp6woBe-|Qz@zB p>)|F}"b2n42S6&T\RXubd5rG3²Lu@]!! )r1zaT_N *)}B9!V܊KZq7~XbO47_!1vX$19پ ik鸓c{&RaA) N+uN$@q ^O21X@PaL!E+9Un;zBMRDؼ!PgŒaT^Be5``;qC]oɾB Yac$ H, 59($D.UjmXY\".,+>K2)>+"ys&Jl ed gB~PcS d,ޣ <{,+5:-LƘ0$Y>kQDe"AAP&( ""2@AA LPADEe"  ( L&( "2  d  ?De-d2L&k"MAA5,(AA o_~ObR"  Tk6ȵkέnr;w.SO[n96mYg<{'/ׯj?v[h DAA?w ,2dHa٤Iܲ.[|w>}>O7t_vmEonرbf"  裏v[lEGu7t+R|7f9 ׿2@AAl*{6$pfk>IZH|M;?SLPAD}GB!k/ `!>'k{ `~|Bȱ+F&( "Ms=u}6dۻ{"xeYgK(AFW_}ՓO?hoO8bW_}uw '5sgqe}3qu]z ">^ #Fw߉5ch(K/4WW]u  XcٳG $sWv3kpذa\3cLHDo }6Ayꩧ$;=E'Ok/# V>C_;(,0aB*?4L^|h{?78f7sN]~>{ 6;uIa۶m7~{ץK7SvɃ~8]⪫k:z "U6f` _[o{o,Y wK/_|q WeY/[x}ܡy@y.X<  (RMs={饗ܗ_~m{f(ij>*􁶞& ` Wu@8gVXh/nΊ?3d##/|!i$RADe"U&ݻww=np{챇/$/TKM8A~N+"((;# d5$[o>1s{^#v#D$dΝ;O;CIp̎;>KAAP&%1b$2fQXb Ofm6 T)(6 H(,&dz"  (@Ye^3d.sNQLޒK.鳿c.`2)*2V^fr3d6PAjRėIfRGr *d2!S@Y 1t?ߗlYiR@|:$<@DRJbm|;S Bqʚ dFj@TngCbI ԅ$Vg@Q I"ilG] H{}HAN4 4nrWzUu($v**mDLos)3LH6  d L!{2 43|ar7SO=U"NADe"$g@ĶfrZ\pAQ{{s@  (5<#oKA-'~~7fƐ믿+$w}EKw_w'$ d AQ( 2dWsw Syws1k۶ 0g0uvaԙ?ʡ[ngуIAjM  ؄s=siv׺~fXp[#GY-BÕICk'   `=o:~G7\sYcƍ@|2cY~Ww'~hFUrYg՟9j~b-V @AAlH|0gj=#¿;04|C,f4bJ/g{69䐢} p,㏋7OZu]]|žIǎ?I'$( "KqQ6ld{뭷,nvs>hE駟r/zdMmK#F(w1GEy饗9w=PO6)cL@<}fC&DA@APPX`ON @bZK.eھ}{??na\( RN=:7dd Q!cFVivܹ/yBή{믿&5('#)@j%'svg#Ō r Q^}CPAD.>{uv'2$V0 8?}dEL3 Pv[Q <|hr@3V[jG.#Ie}~~χ`#u㼮zqsMA&D!(YQ*Ǝ r1O#فlV#=(At(pKki3p'[m*_H{*! BirxM@_SL,/i(BG18lN;mvO;4 =|2J!/lW/! Ur -OhI'% -F$x=} 3q / Ϊ W%%!d(?u1}k2I F*!Fzŝ @x 2Xp?u K/]_pve'T>~,d2cFn2۹\|!?>͋ hEyrA(j"@ iB rؤ+!}Ie]/#brb?3&JV\qE{ḒRh(mfيp&b~4NLQd?Σ}f=2ˑ]@AhõX{o#b C 9I|OB X׬nUVqlİ@`, J@@TQ;?u=>}7sr ](xg$ٳ>[Mj'Yiƹ<ňcLf+9@~c@Af'\1!Y342(^Ra_#T bج 8沵,VS`FpBlY|'z]z1Ō4B-%j81駟UdRF}AdIb_L4l>Y"(d M)ƘAJ{!0 4u6"TfY,,4ٲTXϬ"Q-g]PPʈ3ys)CCF0+v'Y2C -4.> u̬qN@5YTȕVZɷy!l'*6xc裏܆j2\ŲK7|cǎl\!x!I[w7rE,REP&k ȸ@\ġ,ejI }ofK䯽i3E vG eqVXPTvڹ/8uwo\NjsRa e]Vr; 9;sp%CP&?ϮE\"7w ȳa7HMc>7@L: vjJ0 2ЩS'$ Y |Z'"$Kqy晽+\U:臄cʟ}ϦL2u,%7گ䜡)d?޿L"Bjӆ¾7%R.(ޖ\@PvڅBևuY͎2g1:M+/}dw`ɱ}O>BEe""{Qྀ&ccy\~Q6cq~;^i4vd0H40]jspt#SYXwoiDrMr.w_} 7w ZkUrиF3h_ּ _JAëKkcN}O>DESAf<ĩoHneUW]h=IH)t%CPobajnqG@jY:0A~˩p!>%kqw\}fM e$@_{e6zh{5A7((k7x3@ K.9-.&N2ӽ{w_ܜُrKwI0C=L.gJI0,\Sr&.N4ܿZS\q]jMI@d"k 9&62J}53FE$q%X#FJcE}ZUVhe;p~O$) s]_tEe$iYd3k;gqFE]+Pdzs&A#~ʑ+%03+_ ш!C꒜n4Tb3K%-ԡ@|%mE뇑#Gz{-t1'GCcqLM }oQP&(X(]y ݵ$Y0uҍrIJy6BU.㖁}b,#¦y 7lq.IWy/VX5v$44$csʙq󝮸 &p3n 7 7-Ru r8QPBl'fY"ْp_ sN^s5}l!ߩk׮;:묳ڮ׿=6 }+ Mjr$ 5fQ@={zR5;j(7Y#S 2T,N6$Ap͇{!_$,A]~5P4:t'Y[ lp,i }FEe"" St뭷@D%mn^A ɳ_lp%P4m*:\xȪAgզ)'6&L^x躹˟$ J`8Eg0MӿZ!UQ=9i&f g_">#dqwX(LL]λa!C@pAcr$"2@TPzEVR5bиpE+!q13I, XAⲒmL&p5 6SIS%4dSgf9uCD8 i fcO?tOHBy! So'4`9w㚦R)cg?yY@/!Fdop,9>o@ј>*KfVVcf2 u;f8vI'cٱl:@$у8b*%mBh$ J^kZ$Pu(^e)⮄H`S/pQGչpBHFB [ᚗ0 E h^&~ *q$KV#Ʉܽ+u>{S\$ "eȽ\HQ޹' bq ɱCHc%G} >-ްByc9KqBn!VȍƓ H%4"aM9#pm"@rAl]%y?0ASN9dQB;BMA +Gcecq}%m@(Ԕy8i&20$5Y5|~ Af5+52|QmC}䒨c“F=H!7iRnZwVc8ÙH%!$F ݿ\ߏ8<۰oBHt˚fߓO>(ܒ,$FV0#v(_Ų4w;ȟ3Fc%RZL2"ٍ[$[bA4x؃A-$Pe KƇ˃`@j-qPThVHy#$Yϥfj_l ܒq]MfשI% .(}GA9.,8=z>v"R!-&yD  H a^奁. )9ה]Y@~0 1q\\4w;1VIyG@ũ$\PbPJpVF]73+G #o@2l?D[F tBCc= T:4(N0ĉ:ŝaFؐ4E,G%MEQAC(&OqAX6pP 8W@Hγ`S6T\/?.ky9!_>S^ih>A }b}lu09_#yedY,QwSA*~%+¸a42,1|P'-hObj vqA.]PDe2l4ľE@>7ت2BLJaM)@XyQPDe2 ,0\>bgk#~?}O>Z#w\d8KAPb0YʪC \_Q;Kp\B) &'oGU@L0~3#}r2H q#̓^r%^ WIJl/JN ;9D $=I01L{*M;0$ L&(T' +y$n_Qv92.*!S?Y@,CPGbHbg CB ]~k$5:_߉MlϏEY S9E?*w(K#7YMD@ADB _\q2އR1s d$?H_s%EQ%47JML!@)R;rDu *6~@Wj jq! B#<A(j c*djAPPL%p8k~r[$$K i%'77@ R 7nWȩM-`h*&#06  4odVqPp 4XKBk07P9>M=lmlf`>ɴ% @'Bdؚۘˏl0#4g!Gn%RprB@!" BCsFSnfFX@% |p4>3;Yn_B* n]HT9W(*0nEyw(qi:͘ɞ%0CJ˩(Lf.( Vs!^L:Pi>r„ >6U@U6i)$2@Q)ɶ6 &LD=@`5 <4J9 p0/1m\!686}/VI ΄DQlٶieT F]‡jhu)ls+'r?Y`Q%N?^VX;.r^A@V+Ҙ>_!,kD-2_%h$ bخ])昐m㥵G) ޠAȝ}?AA!_~eovmXeUK/Sv}w/f:~rKkGu6{>۷o jV{W\6m-"(( }?l1>Ԫ #Gr?ߊN&MhuYE`yΝ\s…q)sԽ{wn6+l;dȐ(YC=UW]>3@AA?sxg@j~gLзV~= Be siu]O,|饗!\ov1S/h9 'H;õm6~hdx)O.(>n 6hw Tߕ#ByTso<0U rc۵kyO>Y3t -P39MVO>|ԨQcǎu}ng.rA`%%߼ \в7,B |UQ6? Hۧ~'}OZ% մy-r5>b]}U#&k׮c\qn*Zvǻ.@.TcROe2YU~dG1}/ Y{=݄,`K0#v*@ MHi0-/mɓڠ\\r!a'|rs1=CJ~ouҥ(qSNwuƾXEAP&koSo@M$^*`$wyggJL DLxKmƓ2>s1E*&^ `R2@L0?P Yw}׫ Xs'FIlEdj5O>޽;{tL3WL)[nU'd[cZ}>.hVZɻن/$لXB d"A}^H.WyHVc%X䝹#9VCc@H)ry@J`]LLj#efɻhN9唾T :wd;nu׍n<EBݘS}~aH[R349OdNwf,~W}]cz 4>7l\!H[$fyQG:=IHRmӊTۡ|9L{'tR9ZCX֔kvanrM7{euAI#|)뮻 =s5k8<~뭷Fwq>an1kq/'Y!ʌ7$% =+ρ VѾB4Jd?ޏ<1=j/>"N@ [54u/TqQ9y,֕"I͈dH!0V?,~W%m$=˘A13M=jA.P8=U,Rǵ1x`/:묞dq=.OZ_>ZS,bWEDnjd)s=~8^:fG~՘*E qFE)@kqfNMo6 }ݳ>DAB}z5I񕇉 ش̥`4I,\Y4Ԙ_> %Q!(օ44ո/: j~uE)iplV~zN~@M$N5tn>;=VJAK{KԺ$ҳ6e(zE9GO?[uU Q()_yh nn%oܸq5W%EJȍs%xԘ1cti-r"] tbs52XF? `l$G!;%#DdEqW^ye!f!+KRѷo:d2gq|]vW򸆸_xd'drT)=\O<)nD%>S7l[GHdfcШ~'xVYeW3ۯ$=? Xxj@r}'j7y)? `<9Cߐi %/=.17'F[d`\fe (BQ.L]E?%-E{:ouk^A}Ǜ0ax33TC „w/~ ,nE*Y(1Fm-{3JRc~7sAf.>fq&X[؀zKcR1&7>rҙX+d`|m>%1\NLl{\(M 9NZ/A1Tj@Bp K(7W9/gHe}5uZmH_=tA FF}PBC%9-ޝCby.ꙴӱA*Kݨxu޽۱s[ˇī-JMH.!$ U9%4$D-kJĉlpy۶mHdm7w30'pBF8CP.xܾ\;1x!,R~ޕe!Cx<kl4qy*GqȒ=vg4 ˻@*.a vLji-<{*"_- }ýT]yK} ,rD#u:6$" 6!]pq~crl@_}6AR)d8B0&XRALH} E9kSǥ%yƜ@cid,j65 6Cb /2d *@Y:'10n5Xև#&dЅd]ix7Y /1<ۿ0_;*yW+ 8!KJ `R 1lrL`*R^~[l1C~XC_&x2?5$@Xcr/>8qJCWqӶTk(E<EMFj(FbF"OhdҘ`0S[̸&)]d&.Kb0Hۿ,D /C2fj>1bcZ%ijyӿ4hI+@Y1Y IXw 'ԩ:(e }V> lp,+3$QP&Ƈ d#ø8a,@e2dM%lnlw|d,2h!\=uB M*z_DrNB/Z1dsnn@< 匁k Y%$(j&Vً֙KmJ_-@ SO8] X В mڬrI\0ƳnS>F^j@^R!Y FcڬTFEe"9n|\<miوiX+%i PU\:7^pA6eȳ%e(#$/BPq6 `렔5uZ$d| e 19vG@`w$1_`Vh-`@HA F;찃w@pkT6+ a0/} cВQ5P#윓ؒYPH`N($d5eO#HI\prmPƧ!`_ nCЈ/Jy"K=#9%^qSVjw$\4E?xcA`G@Y%&<䍄TfQj+pQ@vW4OLr SgI F.!VTQ8@2cQQHRJ<̂[*TY!R`v2@~S\IwS,@Ճ.#P+*wh\ށĊݗ#yWmh3 X}`R)e7/Jz_tI:}:@MsgUCcrl@((xCȊd#Q-a, AAmI+ Zl[H*7ǰei` 0,nAyQ)LEs2@*}L\ar1q20 Ɣi #½ç!JL1 aM J p4K)UJ$kBU.R%)P,f9/YBS8.B\Eڝ/мHi(e yVƒbD> *Px1c>D3E2qmXͿp$ V6zfps $6CTHb2Pm sˉ--c!ƑIU,d=zAY#j%5TpG^fI`NasaҸm٘$%*du} FEW9(#,˂zFH$ ~ܫi HfY&'B ^.B;Q8yj|4LܑL{Ժ zβC{OPD3d& *T>LC\jE!Y8:k@#L۲{G [+id\*+KI 娶O~55#2Yc\fĢSSj@<< "#c]a>شt>Dx7%pӧۏ)h!p{6)ʚ1me(4H%䋘P64 3>2((lPDe'Bbv6 }O>DE@LJa!,<#^5wl螭(>7b A6_N=T+BH3~O3%@@;HHI !>7b _o[ ɓL>}d8"لV J L: I.LIK5~$A p&K^Qk R:@1%(BMChƏiR^PRfM*UԹ2๤%cP }-lF 0S!K9u2O&.I`e2gLP"dp490 e `(o(pՒҏ}^2ͯN / 7;k)sϒ@-gP4H "$ 9q ((M 2,U{<0  Ld$ "D%Ã,{m `lmNzqdvQЗBF yA@.]Q Qwyg?դ'&b@ sQG[nŋ]2 d>A\5B{9CG刁AuM0y c Iɉ#3kLPAhګW/?4"SF68v|Ç(OD%yY*goƨ|M0$ uɍȅ"RXr%U#e" B냹~; +Ǧ>ѷؔ5Wˑ,y晋@{"hJ`1giڷoI}=>S&( H obiLBkopJvԩơܱ?AB YǗ)k. ~aw DRU@AAh $0I?m۶QG O]3׻o򩧞'{7|d^zMRe"  1 H_^4LQH9SC%fcǎu't C#726TF֓j-kZl@AAhRgD,^s!nfN;w gec,N34_~) `@B2}-Qǐ\R6ĐGߠA&lSI ARi*!UPPADBB!cnB?F( I!(.GDo믿#A@ 3b0T:jݘ1I괅g1}Q=ےJ;H_ZmA  VLR/*t Aʹd52A1$HW ]2@AA!K ɓgfXfk<(oΠ J"Q$#"(Q *F #s5sF׫zz_yٙ8lk $[پ[V PPPEJ$ gY-`UFR'F_|ETX 󦙳ה)T(jѲ %KX>$ABD?Ì:>쳖*,~׿* kwa;SSN9żՂzf~3D>ꫫx嗕)Ԣ {QuNԍ:>JbwyK+?̊$Sx̻D}O}] ` i]w/K~iꫛ?<]UL{?ʔvmgn+dT0Т19zw\^]BxN;dϑg5״}PYfV[_V-[sfaI }iӦv!Wlԩ}v,k׮Y`Av7d``dšUUԁP'FWIxۺ\7A/5ϭtڛWVG^^c_%hsb.~_BUX, `ĈZ=8VL ,4h`ڌ hѢqGSqV0'x檫ǷpBlͬA%I=!e07,x- }GtI>3;찃;vl1_r%՞ 0uC%3*_F0 rVG]Zriq/[ m۶-hBw" R40ia}Gf>F%j|@_yKJQɽuNԍ:Y?4-09usޝ~czmE`{gy .#/"ߓgHp3Od=a7os E]TɞoCcu饗f+dz-,B k >ZNLޘ{4iRԏ` 1\҉vN<ٶGək]w >Lh;ďr@ ]:*!j R8㖐m$M.q^O Buy1cFQo| Z$oH!]=QDݨ*KQ Zo^'Ei@27\Wͺnh <:re@%7bEރ0i]R}\7v%]IW{a@-}{ڵEghsV fm; {; YԟԢ&9{B6}]m >LVB@y¢EJM."ԟ5Õ)[n]%1__m8$Nqo  t1!A܋{ro@]u,j~"h!m}MOg3A!ް]?Q*, f bb|EDz衖kÀ$1Vhr"CZSOYs!.tpd҄L80o$ē3<31$ cRT@Z LJi 30_ܛI"f[n>ӢEL.]l[9fP=L;ڨQ ks!#"L,D' ._L@L˃]iN0IRk;ZW\bҁ˘Y,n/=&)Ȝ8Hi?ƣo@ {@+` ۭ u4'>{ſ~/i'=VH d #Z|=o"@ό G6fk! ,|+_'l@Ek 1\x6L t9B,g9+g3xYg9!p3!pHiCpȠo1G ~,bh}Iv% -A:)-Tx'iDb2k \I[$D !.Im7l7TYc\_R0~k] B׭[7Υ@ hEH'pذaBq i!1#@LJM; {|B=O*K_M s [Sm>no'j~rr]ۼ$R$:8%$) @nA Jv(Z)̨5 +tKn<4n$B8FJ묳NzVC!Lu[+хP_e6qIɦDC! wT{B9?irĔ$[+$0QON,N.HBH 6/ J), … L3Ϯ<dʜB ,n]u\e ~x'_~)[*{Mv]Wvg/!{؝?`T}Nz-tJ KtB#%N8V`bʕ2P`D+rm>.mFo_!V1;"yZ 62 8 F:E܂3};@WSFi*/B{jXha.E]lf`ed DR$,E+ [ p/ɽ}HWI\vCe9rZ?1Ǻ>yӯ\[P $Q)&B9B%" !h 7#9f᪘H Ls4Ȯ,B.ɇw]~+ ;lMBRJ0 "L`K%w> 9w^ f!YĄ "($]nm! `TIS|@ۼ7nA;,>N5 ڦP<$(qQHm[ p/ @FWIkN/~G?h[k?4-K>oh!hRˤ;(,,g%TZP]Ҁ9*Ml>Ee]lUZKW@\B%%.ʹib#c(0F2S wMd#IJ@bweW40vq fSHa 6Av%0WZ~&[X4nܸR0I$!+[p @?``Ɓ>@B \o_UP;p  2n2Vܓ{SRU_4lGۿt]v%6waH}l)NE͖7ip2 p'jlBjeS")ܽN!߲P Dg ˛~ މȑ\ I%I(mxђ0 @|\/&]Q~X ~vqw7.at0ܡIEP;!%@>oE!wgRU: 88lf[( YTT28DbFIdB@&\|d,y!F.ƍUI QZK36+Z AXH9L<'%Zt"| 8qXw1L]HC͏I43-LUo۔a۷mCs.9}R&E b`!@lIeA{FHv`G7*dk{H~n &S:m!7`qsKB7]4|H= U3?oC4Y\8Q,1F4i$@NX| ;iWq4o-ᰰl9Pvv7dWP aJ;Qy>nQ `M9ofO= ӯn%F]Ѿ`Uj!tDrb=,*n@!By&Ig#&n ѯAIO5VcOI0=̐MH P@E4J3 h},$8fXHe#dgA3RUUW@YD([ƕ1-S\~?7ڕR;W,i`|8V5ԁ|@7 uT'GoҀ0I1@:8%/kVn&xVՐV!\lбY tP0pN0~Kh$Ӥ`Պ@ڞK|p~{\DܓF|ҀRlP˪[DmQ5jMմ|@,XKp AY d,7RٖQG% % ;>7ہŤZBN嗗w)ug(H BPzR$fP=()|$`d[l1:P1P0_PE˪MٍFm:@4ԅ:Q7PP B -Jp da c]l O.ԉQG% %JJhQ~"9Pw"R'F**T(ԢE `A3lɕ`cW /|A @E% %JJhQ~G^P +W5).s> 2v`*1kRP@&7B|~lI>74p+$?.9b~IE|%Z*YPТEK~Ea&9BZ!@s3'rvmaG'|2U % BPTG6l+ _@/$13;3~ C[e*ԢPP(uʔ)v;-#ܻG6T%bP@BP(* 1c6LBܛ:PDB[v*ԢPP(J@A0J*u.)jv%Z* B fPE BP(JjQP( @%Z* BP R" BP( %ZVzE-ZhXjY BP(MJ(T( B @-J BPE@BP(jR,P( "JTkE-Zh|Q B?jQP( @%Z* BP% BP(ԢE BP(JhQP( @-Z* BP% BP(ԢP ઍ7x,^̜9ӌ1[QD=2@i7wP(jѢPĢEU3 % @e)Z-\b7|ckEA hƌJ)M ?l?S"ڜG%*Ҕ@-%K[駟?|7_}OG}d>+wy,]߶{=[Y|rcʔ);V]\=2pe ED ׿e'6E~oV?cQ $w}7?0C__@!K,1+IW^yѸKW2,\M';Y ~w P c)R S9j)Idoz|g$l2K/dW_5/ym#8~Hׯ_?S*fd~ڴi$EH?f2yi)y2N㏶푁$WrQ $?%_%&52/h_6g)'>Cil)b dq 7(fd3 AV&hw@H@XПEh'*ǕCJ$|ꩧD瞳c.db}!O?mI2@O<%qInjcn+fdpذaVV&ܗ~Y0i)NwAxU9j)I裏ډ $:UZa`CG$ѣGg ydd;M*1bxCDsL LC=4~8C|I%E$"K#!CcZuS5ZS2f0NW 9*Royb%%1LD dG{moB橃bCI9H-Ϙڹ,be"B>Y ߤIM!Dҟ Ke2 YNӥ^f=ۘfv752lVZf50Z90gf?ޚrM7;ΦH[?NAŜ o\O2A d&7D.c5mr-, 6tS;TVCWPKI@q )&d==yrDչuKOnOĴNLL>.P!'=}#3Vbr0ZC!]O{iQI$J, P__X mi{d,IRx#` OBC.Q7\R8{;1> L,"K&ldGrGXi~A[7|z,3eKN8N0ڵ5묳NVHa2>Cݫf͚gϞ@ꫯn]JT+H% dGrRonbqy~2IK1(5[.D$vSo&k|ޡ;y/ rT$ \``tDZ8~%h]~Y|vT)c'ܝmiVgk'i'`7xQv@ih'ictZ"٦l`V$t%. :5㷢5JQ~.!08mN#0$!'pB_|qu]2/0 y=\W>ɥ>;+j9N}P}CCȚUqUGW[#"ld2L A$FF&7XLvܛw߲c{l~|Mf޼sMu] ` ̹瞛9VF ~iѢ}}b_Ϥɦ!ch߾}O[ڡ=cOӶ3N40߾`X|%}gL@9μAwٌ1fm2:udڵkdn4i^?޸qck镕#scAUQ $gu80]yIye$>vʆk[sAUoz:FM2ꪫ*&: ?+{h L ߡar bEG绸B81>SoG1X A]N֙hkڊG\$%5;ץ1Y]p?bv>D3hW w|$ !zhNG9K#K_N\r_?,ikڜY"q v7\xMBDSF[&=jb|3Ok{rf6J_ʆnh/A1e6Ƚ|^\:t hmlq&cLzLB 7g&d!YG蚬!ws31p>y=us mN#LYfe%~? t>YҒ|$%hB_~,C01X"K!~"(Y"LhTQ ^rEf͚' 1zv/[t,)3g}Xzɦnfu2kkIF0Joa2m`6BI[Dޟ mOe˖A?EL!- mMs-,IZ%Ǥɠ hᙉ &tUma7yh]$zgxbKZtlvH;SJ$d{*&*Peb"]p< <9sL۶mFw4jQ3AAtcL Ŋ>7n-@iCdeL;0  !>s_@"T0xBؐ@&I g%ֆ&\HN]-K!ǑC|qm~!YQxK+KdcƌVF&hy!2ynzo]Mdٱc40< Z3O1[nٰf˰ɆfJL!Q*΁?-tWe*~9+8p ^ {9X6d,IZ%(GйP@亣e?a۷5XL䢋.*1R𬸺d猓#f]_rT$ !(j[oN\ՙ!q767|ݻ[cl-AYu]}ն 9`5!֮]&S=g5 BLLKx.Qp_G]3/g#L!B y:S?ښvE&I gAHh ~\u k }E!>) .!-##5YiIwL̺>dɳL!YB8fΜieoȄ" 7I7ުY~I]2}g}[a& `nkpѢn]SkͦjY:y+. G}mW9F xDc1ʨk\իgq>nq "YcܛN[=B$-#2wœ{,du \\-o@/iWY\wtAfԨQЦM{>}q4iڵki]w-j)I*_4&LtϷ~Ϟ=vvZF  wh{?j YU3I>t6D^ntJ~BȤ1G])B \1C >Ln7m{C&I $\@چ(Y i3iz?j=mJ[rM -AYD-MrYgZYJ:צ NH+KdB?(M:!g:|ڵލ}Z!ݻ,0*'okn٢a]Ŷ5ַH8>a#\nֲQ,v Ͷq44>y>3&eHׯojYqMwoq/1_O[mϹ$-#4 ^|8F)Ou?Y?A;ȍ!;Γ\CqI%Gkv@3 bQ $}dHc@lߵOvv84ڶ%5Y hzd@r(ַdS@t5:t>N)8,+3:ʰ3u: _`{d!>hic&R+ṄDq' $)dҭ{&P#ZQmYV2V$ W4hDն!VLz!uΜ:7Y27<*}:q#͍5 Mkk6Z3}f]v0[74ikp筭)XϼMSG4Jh{ kIO{ L2N L|=FH4.>qy(9J)$ad聖A '57(su瘻~ogb)5a Ñ#GZ0Q$;@dQr$ m^7KŒ@-%IO/^2ICX!;9vBj˺ ܽ5Gc-f9TEg}kW^z%i>dB-/ @̇+/N|\HD@ &߳CH d6Hz3q6ȯϭ?ik9$%)q$$pH: =s'%QȐ%pȉ8?zCV"K!xB"K"(,∶/ǷS<:|YP&WpPMXs0&]Zliܢ٩fVDC4FgCkL? ]p>J{_֭& ш~! 17i`fjCcEN]-);h팃+ꗿ6iI6"u` 1!7+.d()s{:,ufUgԙ@&FdڍvmC?йON' $)QY'KN<4|gDoȽ2AaH$mȋn qcp7y_BeVR'&( x!%;dM٢'[׮m-2\Pee k[hvk~ .J!jl [A qu5[nm% rxK9Bjc<%>q@&i `mB?!vpS̘ MoCsgڿmoM#sm.>h}Y 6̂lkQQI]PKI@RT`be;vک 9dkXK8ؒ{ + tc* L>& J[&{:Oud8wL|6L rRP!2!s!\{\"hS! $%*| %wˤB$mL@mxvGKWHSz#ynG:H $D&DQ юN=83bWQ# RiSA?{y0zآ9'aɑ;(EI1PKI@t Ijۮk/;8(9@QN:;($;eQVijFf`C&tV+pN 1&d X'y&v``)cbb:ԏ{v dQ@WK|'WBўv AR@P?IM"&6!;I;"m$p 8P1@"K;IK]D'#K8mw+KdDB)27 #D .кgLJ&;[o}dFؤfۛ{fjelը=(I۪Ur_hXlK"waE/Dc `CsEN<|RB%Qr~CzyWKNծ1Ȟ?hvBCYh`e#!<#7$#HO @ Anip":J+A% i@&I f3WHAH!@ c??>V![ҶwBis⮋,ԉw3wq'D;)m%2a2brDF&\ā:_YbY /jش&dQfʹiS.mfLu$H۹9y|f@ƟC"w8goܺ>`1zA鞇6 '<+2IK( օjϻ|%}D6 &.i?y۪s>LHOi{^1Ŏ|(8&E͞{io?vy@-%IپGRdX2׺m{j, XrB1PKI@VL}8rcݫ[w>h%ϙi' +pDn«lG֣5u~5Ԩ:.MQ6uwO܁,IRȠ*@\,}қ6 ϤŽ Z4M2;G[GH7b2p<[}!KنY  !|@e 1(!߾};sfҴf{t2 ç K{iJ 4@ j|t$9il<ÄM9$ ү7AkB %i۳CJ>,ڹ$.SHl7C6l#Jۛm֦oA~&M~/9P 9*Rh% Lt{d[-vmWrkٲ5mhnFдT\@$MMZ^BtE˕4 dL@^pdɝ| I 4uH| L вG=۞<?4yA9m h{d_$ǏϤܡ`Zvjdm]mf]]dI1_pr %i($0ؘ'c!}]rCJ$tŋN84s93`M5!\#_ceO0IR(ɭ~^Ey0ߐ=˗%r푁ȄDHdq> xL^f2VQތ(NdgdQ $$ҀH@! d?cjDD(m 2A[;'ĴfI+q(H,\@&i ʱ `ePKIΝ;ۉ 1C֐@&I V0{ʲ$"C)d+DQ@@P#G%*Җ@-%I;ud'.|jyy?"A҇S2@$)tW!"5;+MzErigҡ O7@JMLb.'oġpA27 $-T9j)IVH1a QP\Ҁ1d, I %M2DrM̑D,&yVd*IpEݺu2]6Ϸ k3F#p"BI&,%z2U+G%ZJmG@Ң(mܹ&FW/!5>I/ Hrn&doH^=zIE~A[K3BlY UJZr,m9*R\GJi8p%I$`r$D$ڲ?ȒIBv(1CɁFYII @$ڝC}?=z6j,@ciQ $h4T/0{l;$ ,[ml__?0<9qDK2 |@|15„/+% /%=zXS0)W 9*RqA=E"aH8$@1)hl"Yfvܳ>jtФ32-l. Dˢ!`E~y7ٓHV"r\5PK@@"{|6o\'"cw7}5fͲ $}ɃNA~hhlG#4 ht Ed(;zymM1c]JiʱPKI@19£}`I (,hkڜG")ii!5=U`駟=JO[$KZ LW ƒi{dKU9j)i(l |19F$g.dB#R*9m }AKߐ6%\}XXzrT BP(tPE BP(JjQP( @-Z* BP% BP(ԢE BP(+ T( !>J B"EK1 υvPBP(* BP(* BP(* BP(* BP(JjTBP( ʝ}#H+ BP?% BP(J* Eb mBŭj/_BYG+|%S租~:v"袋.&ߜxKu^z~w7'wa>wry]O??7Oԧk|7Iv1ǘO>7xÌ1¼UyVw6ly衇t\O=T|{v 7CN9ms<33fL:<}wL.]2 <\o{#LoYx1cw}onC=4wn{c-XԪU+1{Yos=WE@\ 뮻3Hꫯn?pٮ]ti&R/W_}e^}ൢZk#ni(bɵ= !|wW$ '$|ǸRǽ/Ҷߜ9s*|ǻO?=Ǝk\n"mɂB]wu榛nұ\0Iu֦e˖'1Ç/'xUaճx'DGm{=c PzI $ ̙3ɓt=z0miѢ]7.KH4<=f͚VuF_|1s6}Yd: {:wJh@ITݻB_|'@6oqzlP3*ZOO@Zwodv @_zgt[`H3M{ݽޛz_iӦe#߱lܸq]9r}, %e`ce-d:F_xCvR5ܙ1q21u 2$1j׮mYgTFmdcC_׮]c?#G(0BDv]wU3+39о}ىνV[mer]|\|CC?H>1E\#{wM߾}3 Kb^{rUcQ&Ba7fͲ ٳ{lvǎ>肍{kFb_YH-^m۶*P(L5j0w ɠӽ[`Ԁu2kՂA, *]d܅uv5#/Q~rh4n /,w]v9TNC2o~յ,`BV?qƍ @L8xV^zif0WXt(i4`ڈN#+̐O &$M߸Asq;qdr?d c(&%&z-d>hϨ+ZSHO\$ԩS"ͶK ;@!'j<Pf jּy2H-7~pz)JC C["ڜ붫As==!7΁8y^>'1N: @3d# ">GcܫX&} Bjܝ-,"{y]92;7pc]vɼBЇ]X|B_pÆ L(J2xL" AAMFhpe%!K`"`RbZYbWY设Y/Y* H Kwe -ua;wnNYge.k;MǎYaBٳ3F7pm& |N;4;@pyO>!/ciy$RW#C_r5.0AD"d'rn$5ǁh4̘\7wYFU|bFSopQGY"t>F1*gX^eƪɵ `n 0@}-"׆s .2N?HbBQj\ ?A!}FȬe#mƖ[ni#C^ ~: LMqbΉ$IZVILQ ԛ:h2UX ¤'n*gm뭷@ 󪫮.oI D,i}y?!X,Xta-,%&m4MLvpꫯX} h{|'!)Ld2s qqbС}VלIG,[5LhxD(|\J4ߠ Eyc"ucKyꗏqcUDS/TJqC -1c4./mڴ|!k7 MP +(<*A3̘c !`gK;͇U(`TrBq_;7B#Bܶ5jTWL|/ DzRݸ/{!Br!m H.6Ŭ"Ʉ0r̕7d/D](!r_Ha=,.;h:@s1.%&PJWq2R7lyfTs 尿HpLU{@̄s%t$m{-f`|fQ" OhOh -!yqQR(Eg}hǢms}s 긛 *PJBkY3P!A!_+/nJ0qM,BxN@.08 h%*7Μ/͐v" F6դ0~sLW(X^eƪlPhy*Co؄yWqt-F}6.jw9~hC~ E)jpiID&pl&L:Ln-IPl0Z-ߟsLVƕ$@=( w2!<<-%F`ҤIf @H{kr fP̼LPIh C`mf#eC&?;U CݪMݢn"C| $ ȩm-❑!w)PV+>~IFZDD-fJڃg *3Ve#?ڀA*KEcJ`$>̤r#xO=| 8ijA:Pn_(uWP&$B~iqa~ Z 12ڔb@cm蓁L d}g!YhƘKPr*>) mfIR@mY=@y0u)+'CV/4!L22ɹW~i&u?6F40)R#q~n9<M`g p Ih0qdK44~"j}w4UfFK,K%\N29-$ȢFH!c?<n E) bF%*&d- *DIY* 0w~r\>{BY ;g o;"̼.i8|1Fi!MD~IDArxF@ r Ef zHğN4(,fD"MB詿?ڏ:;Lb1dID5]C@U !?XKU=UfJB .Z(od(8 GI{UȈG(4/9Zvfl|׳?kfQbgv9IZk@R2n b'%*Qt@C5qJw'|&*7mڴ ĂT`54G[aR{4dP&?+[׬ S]].K|oX93 fF`?Bd dB2|!M 11bߙ-+U&Hs EGm; }rr&Ĉmh NG `!}܂QC(C~G0ItHǻC2h ڝAExNhA+렝KjU#(ׇb{i*wT[1#-$ <u y Zhd1{yV[D4X\xV4-n(@!YUvXXYL:EOS[ e@ aPf3`.h 2sM&c1Z2-Q\k.Ѡ0ɠ@@t%;QмL!6q- WΤj!41Y=2uiM .LD,"8C)\D#ZB>On8Ls"9LNT}ߨ=y6ڜdZ|D3TřgmGzRဤBHe)W@μwwH *B w"$L^J?9D)F> c@= UNY5/pR?Rw-WÀ2M (s"A:m'!&Bi Ȥn-#2-4C|:A8!f|13AC h̸ף"+G\+.GBHh|uG;;g1hmEhB Ht3ڄ10[CNv|DQ#a/J?v|T<Ȍ7%i-<@KېBQ]_dPLD](I'$TX'uDgΗ1WTfbEf!4;.2ڱU!qd+C qe@@cLgI&Sv)Wj}.qF-QIX_! BP(␿jP( B(SP( B?% BP($ZhѢE-ZVP-ZhѢE -ZhѢE%ZhѢE-ZjѢE-ZhQE-ZhѢBP( b a}IENDB`scim-master/docs/manual/zh_CN/figures/scim-setup-panel-gtk.png000066400000000000000000002026671415264260100246510ustar00rootroot00000000000000PNG  IHDR0/~IDATx Lk̗keHJ%R$"d. ( ErU xѕy]g^g:{|~]ߵo=ZZkg1MV( \rPsaplgP'k6BP(]^ BQ tӌy&h& B\ϳ-1;BQ8MMk/]^\%iizkFLz3gLz[ַ|_cnY_eW B(^>fs䷴|x郌3 79AWd.F3LKG\rJӵ`SiU]bBe Qs-/Ӕ:&$i{}ivsGM!9Qoo~mƟ[br.WP( (-X̘l zuN/w}g>3駟G>f٦MnZ: W@ɵ|O[NR}Urzgj_S:6 cw4<.mo5m 춧W;qf?RP(mGYVkkVXgeS.2>7iV\i\E!yS&`=<5gy`\xf̿/3}tӮCW3Q{Py!QRvu)M9qI˺Q`q9M?^NS?u/~z3zNlOSBP('@5>i̷E'xmkK-[fO3͂9/`}7櫯2&M2gd8 |eHBB/3i4='6045`isfqo﫮sc]=gqWܹ~j²T* qYZժϔZ~>0'qj+?m> |w̛oc=<01̊+y"8~xӪMGsPPyHܶqds?ERfɧ~IϪ,Ɲ[59s ݮ6 [^Ϫ3WdYIUBP($P|HW.DT.`ef<^惌ƭ/~h}3g̳sO><3mymKAGeZr|[Si?* lKM>sZeKS~̤cgUV0$rO9gm~U3^s.}$Ͱ|vO[OY4sqr BQܨwm@!^u|d/=_ab|4i@H;,󂹽:nY6Yk1M[3x֪~ 'K{92>Ӕ[VϽDIE.Q;i]'=1/j_<x#c}٘>6WKrScU( E]>+rO[I9x_aj|4=Y|~̧|jfټlLK7%C5MNoc=RS ^ݞ9֯Tf\W{ }Ώn^?QhNspF{W>4.{tt+bлް{\7όyx1[j .?ݻF7o_zw~? T@9%m\%IϑqxϹļǯl^y便fck76=afq3Q:/7"s+=ϗ\I{?I͵ϼt[f7޳-c]E K7yny1+,WP( BVw\ʉ:>mC:uGN_|gf /?|bh|ӏ?Z`߾}M05u1Ͻʄ>r^h?WD1MIuf=6gFywdZ_˰'L3ƽ>0~Hy]cBP(*7@!`u|/=_aZ\xqf̋/.28q1bkÇ[/0`9MS[Z]`uaB兀s9'\t%t\Oc.rQS4o?y3fEf}oYLz0Id|m;ҿԘg|9iٺM[lR( Ee]>+rOKl02[3{j|> sɦs.O2j`׭{W]EzL˖gzZ0-hBٜm1ےms"t/iOn~_.99$Ìk5r YW_gvN (PEBDŽNyIe&|/N=o<޶u fa_: w^Qb's.7* A _as k_X7HL䨞Z 0oc{73rgf+O5s#^ǹVjzweSB/9qxg^nB8u Fb niå3l. cW mYlFEu֑hܸW|FC楗^lԕ:SwA;#BPTZثW/Ӽys駟nIA9蠃̭ޚنcǎvo.Q&;3kqg㣥R8'a?d}gc />tPӲe qE`ݺú>k,TX ,Zdը13裏v4iҤ6e˖e3vTR7uԝ{HP(r-`TvW03#;8uTf͚M#d &|]% mhmm . 60֯_Bg6lΔA ԕ:SwA;#BPhU2g dyksyIG8 ծ]|WJ !@h|VzdMSO=uk_>I~G(ߩ\=hgP( % f?2$G`Y@?:F `aڒEe4g5O;wyb'M~wAt0w;wwԍdJ;BP(*%$3_H&Fx`L{@0mڴfh%I1זd H"!䌼+{ԫWs=YH^7m41'ߩ۔* B >Lp`2AE hn|/ϛXpWX8P@DoA6̌5*k;;{aziX?޼y|.eCwꆆQKݕ* RYգO>Q^볒+TUZO8xv'Va .w)8C5n9nWKAᄎ\jϟo.b-,˶]N:e6c y 1) po Q5 BP!h`UQj1>cKX@w3 a̙Y&_|GC&`EߧO@BP(TQY@L~\|y bGg>}Q((iӦPP(JUTV߾#F;#ōi u-'Hҋ/@BP(TQY>Q %<@BP(TQ)%9rdP{HP(JU$wyywm?bJnR_=hgP( %*J$.ɪP VP( %**yI&V|,ǒ "H]3u3R( @%) <`<󫯾j$*RWLݹ BPE `J*(qPI"BT+u܃vF BP0%?yle˖?Bu܃vF BP0%\ty뭷,ŸBUԙs|BP( EO|UVUo- 1( C_.NG?`ns 'M  BMWaL˖-M֭KN3ժU3u)E777 ?|MӦM#Ss)Xp ,l֬[51O>] @BP(VHz qw|w^ &0Ϝ93H'sW_~E@BP(@VZ$ 9 ny|GS~Jr ?l̩jGH֯_ۻwoe`J8:IJqa) Bj];y@Xm]Fd{5{챇/̍7ޘ95Yf0 IǼ+o߾ -UV6Pk~fv3mڴ)q}LBP(* 8%+#o ; Z~o̯j Eh7oK `˗/7իW7O>dqԋaÆ A|Q\km8z:c'2ڑ) BuțoA_0kv?~}ː!CW\aj׮m9餓2}fʾ1D6xc4n#_$ۘxDi\wms\R;0CG 6r-ډ) ba˕!Br%ov13f̰|gvof<~gөS'ӣG{\v /` $`ʕʾ*0-A#Q?)4 Yy?o]. BQ1!!"h$㣏>]:ʚLL.Ȝs9ʼSwWuQZN}KP(E|N4 P @2#(\]p6 s9KP(EG͇⋙BħgzQFeW_FZD%@?`ER!|Tvj^uӾ}{mznkGP( pMiA (&ª! ?C~f7UT1w}/%k }ӽ{wӢE `K/7pC L4;m$jǦP($dl&9 c]o~YB'{e2Z>}A(G}4KRXP^nA `zU8ν馛svqǬ45+ r"iP3,`.BĐ̝;6r֬YV#qoHOyJT)LJEfرcoȺA;ھ<ЮRp1T>XQM3gNӧrJ$ytaݺuoa\~BBPT^3o&*J˃%hK8>WZM81X>k7sZYNP( %*Jˁu#B>sf7x#zAο>ئ&r iL.]̘1cTP( %*J˓![{+VdYިQ#_] GqiҤI5Rq~j+3b BPE `Y@oz<\;v4{>}z?Ц."b )ܖjղ. @D~) B ЋdIW 'l{ ;|x,?@_HJMڵS( @%yhsZ[n\s5O?6md=̾ HQx뭷S( %,V(@h: BPPPP( %JJ BPPPP( % @BPBT4Vx* *J BQy@_~c~0@B BP( >X]p $gH?hw}PPP(B%?_,H *@8\s͉})% BPB"&`ȟ5]0[|xM5kfZ'\4߬κfw3[t]ZϛW{X#:ܽjvfU2uԼQA2(ASP(#oj ds9^ |l6f.l~_w|?䌛.G|_go?Ƭs; m*%gJSu.\Xi;uVKMйsg/}_m֭k}Y/4{Ω|/+3(YE"+VX" e;ެ\R .GeȒۏjgj~~>se2:}U!1(1SD9sagy&sx sϥڷo&ߟ}˗/RSV-qsߖzz>,[LP2F3o>ܶ1?ӶϮ_~e@dw盡Cs禺]we>RM_m"@Ȝj%{5̳.wa9>tc>l$sR)̋s1y9ۺukӵkZ޶m,4m~K.m63Z N=Χ3p/QeS/zγf2|,U6{oYRxn棏>h5kf>`Y_~=~};Gqg}ɓP&bڵ3M4emSO͔SJ=ɒ%YߙM:5'zHL0 ˻&p#9J1xN!*c LriK.\c.L:Sy@-y ~W8szַ-w9laf=./_!6@/l%TGL{1KB`p@hi|}{ 3?0+ w}9c3M7Ԝ|%LZ~]}3Tic=b)܇f20EO9sm)a*B1ӧOƏNȸIy3)mDM>7h78H\ |k/6۬qlsϧ?p m;۪իgUfύŵ_Y\7viXB{,BkYJy@߻k&`X+\_:?`q=fgo^~߬f:+1+" afɀ1eʔ y{3Q:|!҅^=ЩCӘ[1{cB# .ʑƍ#G$sQIo%Q@AfQ֭[#;&ӧgmc⋃c*M Bqkl{h|Pi7#F(Q e9sX!m]I FH s9c,2mXj@V7xc&p r *9+LaKG$/Bj8:-:\f2(AL$r^>9e(O_5bHCCղTڇhs-|0xx 'OXdog' ϛo%]tN;<>'Pנ3 _"%LҢz% Jƨ_|18w}nc4A'!sv5`!!4D/>p5=ݢ $sm4u"!DA03$OܩKik(*&CT ^,޵'|˅ bWF { AmcByƌ6^0ͺ9WH$R}G~(؂IFY4Є6&S\,\ѿǴm qlCy>CFW&` @|Ņ>%,mM}79!c" )]^/NS>{7ӆ6)%hE@!@ i:C$]w j=̹."%)(r%tTguDVS7~HQ``իg&RVbTpJ;A01Q)%M4U]uU_r/ qdM,qHK.:rBKoժUV%-r?.)}!hU :3-6ɳ]_Ҷ1IoR6 g$91,\ȱhAzɠ7 ǘjlksx] ̾gc)X nۥؾ_8g*YC%iMI  5qhš}\fG}4uqkz߿V@O`W{tE> 417(5<19Dt=Ba;u)d֊Hh+m0UL40pAH0^{UbXQ  d( }B0z3m͛"'n[С5;JB( "ƒ } =Ay;JQ}D% %6AJۣCEKVС1iD 3Q{%|(&$ Z΍6ƄR=p믿~%|ѣGAs.}Ϲk\mIz{3fYhU& A*rsӴ v睧7 )`d KLnE5Ԯ];gxQd0׸G#6<"!ȸe $c*D彦$ yHڌ'G8NZɣǍg;rCfPDHP#BC¹QAwE iӦ5s%iNND[ e ;J 9cEzv>y +|ի93"G;R&_igu4Æ Ly @B6I6Hk)J[B:XoAӗ~ a@\l*B彦s̓GG;[MOD{A裏Jfcl!92 AKzcvaU(^)2P3`&MFhi\УkKlEa@mK>KM>3+d8$OR(5}If;Qe!d%Cl &M^{m$ K'4jŴNC!Ƣ@^Rʚ7BH J#DГ| x(ſYv "!rD7DƠ`2;3HʄF@rƑ?ʇE%JrX onP .y{{fFq"Fvh 1Y;IΒmIKKg|h'vτB /XDH--kc]1F-pH$@[ٗSVR*OD.TBQ`&`L"|\@2\0HDlB 93cPaܹ.^a6 :<:K:q#EHhEe&C h q*e@+"271` (0ߎ /KUCMh7M{$@] m!I{M=n DsIc Hn D 3ˤ(Z$eAѶ\>&v헵zyn^N`ZDȳ2Y(ric/PV c^i` cxl@MP QCbH'Xtn'M&Ruz-LԕH> D@p x뭷άhV":fUYN/e{ N@!e nh093Z>k%ԩSEq$(L\v0a„e}³f1Ph*HЂD;NF v"UG[3[of#@ 9ƌcHҴȵqVi.@51踵!t] N(0XZ댊zZ@L, TD` #/w|2Ik|)v|KEa;8w5V">>.y5&YQXh!g=tP$~:Bq !z0C/6nLZ Uh&2m"@~sA$0ďd%**J BQ&`$OM@ \ҖPEE BP( 6Y $'Z@*TQQP("!h?P (T( EDeMAsH Ycf)ASeL2hBf,H{! 1) \!i* "$4PXJ!3jUfeFX*{l>BIR&[=fWY%<L#f뮻&PP(Ѭg}O?7l0[uJ}ټ4,RMO!w:ulyYH i'8f, yR c;9\&[gNe!VW^F)T( B %(b K0}Bb{vYG}~W6s".].14bkm[䑹e @M_k>(BX.qv!;9YK BP(JW;d}G +چXPבGiƎe2U˭CfRf͠9Nk̙cNBRX;WȲ2 Byf=zfI&f_|>}=oPM BP(]!CdmCٔESZM6lczaf͚:˗/>{,0 Ǐo'&X!\FelҴk.:n8d[Aړ,ZȒf ?h7xcs]wY_G4C=5* Bp]vFqfܹX;-C5{.@%&A%?"B1=_(4>"h;9Z;XdIA4ݻwnر}>L=AЮ"<ף>\tEP( @JZ@θi;*͟+RǤ̾Dqa:n0liC{`j4PHmFve̾9s4&l(T( B `5q.~Y-@"tׯo͜O9/l`ڮu],J Bh!>}iH#c^xpbz>KC|Aj6 Z_?U@]nj 4m_\9$h5!gqm@0ӥK{O0C@N;d#jKԗO^of7OY'VmL > w Beqmry o2N_ I6C[kAzhdH:v2v[lO:st[BTcR lƉ4 ,u%)T.P^{m_uU( !i?!h%0g2[r\ /51a2$ &߾2r~^"/K1;"qZ>iɼ!!B׏vN/B܃Z3/Tz@"Ͻen%nCC%RV2@c;ncM_d&Q" O=TG3spǗUQ|wqYᅨN;Ͷ\lHOT>oBAM~3a `{DAyv ;L*շ|# 9::2vG@?@'\H?m6x}>@p>C/4L$m@C8'ZGɓ' oڶm<:5AS((tI6 p q(!NH(|!aDv+L!4:e@ թSHm3XL~:+ ]u&ՉN'BZϖ9܎=0FK3(ʳB&,mR@\*a]$0G!߱2H$mG^|eFn?'nKi _ v:130 #A rH,:w͚ࢄ>}D֏ҁ?I- MI#D((YB1$'0߇瘶sA{Dj s6tiܘd)a#F \} %yȌCzU”v4LbT/"7 &K{ڸQRT|g;%$[Dy'ABe)dv7le>36O2b lRRQ/8_(}nQ~B<)?2s_N|ӯ5|syA!P?pı@^^19')" ={LE4f‹nIQ3}o@LiD@? udCBڿPPvm,AA Xmc=ffΜ:>/䏀tL͞O&ߵYfLU|Tw#gm#9-\0y`veqmF=؆i%<0F68YaVw}\()E<馛n4=ܬeu?2]>vE'!(m F ԇ4Z543PŋSʅUbeVQ?vyհFxb#8<T"h7M @Ȗ|h"X"eA.o馌V M3Y7`0s :_|(!1E[BbOFP}j4HHLD_B ѡm#< 01n_+0n󘍋?S``1 Rimp&eRrП} p Lw;NQw4JN!I. Qn <Er-ma]4@t^= 16-\ C\RʹY4L  8qbή"p8_Ũo${QpP ė_Ig?\:QҿP >VB#;SR7) `^И8A7fo:(L#`4)B%0&M.H~Ӵ3U?O>#3|̠&dt t2mzsmI(7o^mזAfᗊ#]bE@yS4+zH힗A Qm%2 HK!L;7KC.ZonڐeBI&yMU]gb? IW K^&L8IL5eSFBb3 -<(E'@1<%8تUNP (Ҝ$'.odZJCr3m]֠$FE1)$mM 9sYc(&'i)WI 8RG;UHK& 4Md;n͵'5NCr] B.և?AH&g;.L |'ye1ҺE];mb? ߇J_HC03Wʄ "iLnjZX l. ݐi5qK"Fth&!~CvXSmyȿOa ǏϘp)2ɠV2Cf]ʼn]D$.uƏ %'z+GySmH(E4eC XDDkZF`F*U2ĉgEH@IIj4fgPBAK˻$ "6E+I"P[C|-&n){TD*WzKԁߴ#~f͚%m.G%*J#|v:O:$! -mtlIpthzt ^ [ܑ>Bc6!($~!c zcOM'S%hh6#t<8P^M.iGQwr;UD¦ iӦ i(ٓ>I JUъZd( tD5& b확Bm-ø\ `JUFt^ HKx$SH:NbtV 4LZ#0@Hꚥ}<_(-B8sk1"& Rr%@hR.D6nVʫiE!vW\qEdACkφ ĉˤuӠpF&bq0ʕ2ЕB">hAo, h, 'R/!| Lnp{5JP0"M)ra HF4рJ%Mz("V ÝqT9H|JGj$?7ڮi9D^Gc'\,pЮp Hۙirt6"CI1ĞP^"#G%ȟ& e{hqDG^ЄʪZ@mT3CT>Q LH71/C fiN\I'fPw 蜘 vΔD|| ^_VUҶ|}܄Ϡsy{Rhm1y3O ~#VQT\&he&ѳ{,.8GPNFڅ*<0n[K$>-Kew"t [T}1SZW ib H=ts/Ok!>}PS.W~q(TQc:3@L4݇@%2;4*?!VC:>H3WfɐhYj52,0PqA$4t t $&OJ;>R/*X(v6:4i#lsa94i@HS(:v{W0Ih4$M.qqnD6̺Ҏq\۶mS#^s (wr@%`yLnN}G;d w] ].JD>\7׺pnJUF!/P(Dhٸ\`$KUBQIJ+Z_AҎb-P@BP((T( B `y 8OeV}>rCK2[bfA)p%-J* BQ F(~:"2vTF H?~8k,-BN+V2 ҕFb\2}׈4"|!/V1@r})T( B `F{o`"' 'יlmDH_ hD6⨏MEK($!&!@.?ֺdS2*"X{QP( #I"B8V[mURQ6i0%%*fesε)Bsܹ9#lOB}A3(h$a/""2;$s}֭sI:* B KROZ>8}#!+<BƌcڵkgTbE"-y$º"W^yeAIĉDbG@(Ie Ia`onH@BP(<d-BLBX \NKͰ@H+gɘ ^zY=4h$$Otꫯ%\YĿ6$Mϣ$MDMVvR .b QP( @+Iybv}Bm@ ;u?.FًoQ >lOZln] BP(J6 >vh S;vTAФV4m6?W,s9<4lcULb%k{ķo֬YYPZAk)! K ׷J BPXt PK LD~wv}VA iU !k̯h&Պ,M4NF2D5IZ BP(J b% 7R8vX c=Um lJb!9bN녿 D_hQ 0!H` %H$UwH)`wTP( %EG!D'+kHe7 R@ ؉EAByЮp:uu]M53ڼzz5$(r-i&񓜈J* B `@4rRYR9Jм[ S2$%K,1;M:;MǣutgQ"~j@Gdrt̞=[ `%!DQ zz+}5O{l>g} EiiT%? Uom[J "Y-K"qBHr߮pĉ}ͮr X|`=&q$*Y !t~+QqY۷ZZtj2y1h4h`CkM@biA;#=O:*?ؼyT@O{cPyhѯT&(;ͱ-pgۉlNiCE9 ۨ,D~ݝ0aBdY믿fHS?'-%AeՍFEDOzg#llܪU+[./ >A~ B?v!# L`+\B{y+yB^!љFQa9D< 4hb-,3vۭ" t'pe2:g<z:H9OX ^|nkc$|R=tb1qEQNq+;N-[C^r$7nlO6Mۖ$uy48!A+ b>kt!++W4UV|δ0IˉpEG!eEs4: |ꩧbO " ^Q21e񼮃 W-"K8B+y6ZΙ=&!<(Hj(vf< Gyd^|+ I,Tesć'q`HTPc!r3>q׶uB%44cy!-"//m4s @[(<@84"&ЊHc\br#A/{g}lǦ0~ǙBtDCmA ~CHZY5t S~~9~0]!)?޾}09s u7E}ǨQ,d0qDS+AߍT@|(/II-yo11$+8L&㎡^v[ n;w9sfNB^xdtY| O<;hmIz5_3 ([۪TFPZ5iY/W4|2[p֭B^Tyш.rhŪ"I"> iP*4&Y"E:5̡j.?44w-ʿ SJZgkh (gG:DO>ݶ]+9>JttkZ⋔Y=͌Dfbzfc@mÉi"k'%8/\ '>Żne :oyWgڧq)vd}#&2QB+쿣; 5vH{ .JćI FXږhKCPGJEH5>nRhivhѶIh9:%ِTAB:2nCpN;SEf`|颂"+ ("G+Cin+N @d6HCD#44\nNK׮]mw"_ۖO>ܶ( ٬;?`.uS1,ѹс3ƬVB:6L02嘸RrN3 , 6})9Ӓ0 \TC9BFg).,?{^3m?9|u7`n$vr&"J$ ꉆ}ho7}V+ );0qO7H9_Ҕ$LC%|@& iL `)LhŒʓ`iO;*ۖ@Kw_m)TQ>~@$#vj .D@hٲc=] ;Cga9IF]yfȐ!6rAF C+$豊˴lqgg`"3993&R|!e=1c&ON28xbv++ 8E&ISҐwm ާ4 !QѴֶ| ^{Uiږ@%h xȑ~qx $~B P0?/[4zh'rm4$tR/Ww I _*A1Is(O&4%M|yN")M5|&?KY)G)pRD4%--FQ|v֨۩oD;}I c$Xm+׾m)TQѪ/"DrK4E2&P4aQ ~?Dإq.g7ZB:mf͚Y/_j72>B/A6t.uPQ\H$t֬ qBkړgϤN >M Z%RmIi M:u*v KE Jz&tJ,mWH NV\0[m)TQi{-Dh<Hl纘;,y"-拨/7n]74XN-~ggtpD+ A ̶}|\RgLb{§ /%+ڸєv1xƥK3DkRF g=g"@,1S?MW? ,GJ n;݌Bl~zyp#[9^RΝS?rۊ#L2}~-%*J M)(U];iiSrܠA%ať馛2+HG{=d'K5qse[TF|gJr<|j ]gkLJ8jGLhC~T=*e :ujg <#I!e@G&E,(>c,v{;dG;DCCd(_Z `-Y_<{R0´@lNʀϬƴ2-b1cFYsjQV k: VndqMqc?! 2ar:Y !}#6- `& !H@^CTj/fsB"YH pá= V@k[eUx1VکQ'ϮS8V =$Imrp.s #ܶAJyr]\.B15e P3"(e u,SB-ԶԦ|kRm!tWѨȀwƷzkT[5eU7jZL(6hRX2߮|~嗜' =U @BP(*"3n:hRy V 8f6p POtd'˅gy%J B￷p4?߲faĢDBuG|G.A8*GpHk/Cű=D!\D`HX0% BP(,:8es}6$M@_C!\DB8 E!"D_)$!>o(y5aVP( r"eHvLA;Em' "իWb;DW&h4x.Tv BPXզ6+6 >|5#DY@w)1V6]HիgmcUB8kD* Bh%e4@~HPvjլ#ϒzeg1 bdH6wwk ꛟ* Bh lY)W >eS{r%e|fo5uЍ.&ȃeE9s,o&DpuֱjLhCL>ꨣǀ޽{`@4J BP-D4>||b%@^tE,AYRH]ب$qh>+"k?K/M@BP(F@%X5UKcŤY0 ˸I+AH݋/hsr<_ؑމ'7`gDAv]W% BP(,j(=Wp$dNj֭kSk=\cr-uVl`͛g?;ou4iR8{ܙ|B[kpQufmlѼyTDw^<ܒT᪫ڶeĉf# ~#G.H]E?SM &Uʋ:7>Y$W4{!O-"i ;;*vjveK.b;@ҶVXaVjS/&]w]^>*( 25k,sוr!T|Ur}b3|,I&e~vRvQ}"Qωxsߐs(Myt5퐌>GmI-%%f?D2mVfv*:yA<_2J⇇^vnlwˑg-JP(I)[8Z &dK- cxh5 ) `ɱ!ڸ itstqLj0ldA^c0e6ä(09UD\L#i;gHoooUrа, O>ɭILlGnYeeRVAmPe!i ]A) c6hU?e0i d,uYIHnӧ0uR:vȵJmJ B:^J^TҒ%K|ΝkF[/D=T( i7X6KQdֶmc*+t׍N#<˴ 5ޥw>vKЉ[n2A4y.JPj~ѣy衇3wBHT&.;sp`?D/7 ੧j1>D{f|WΠw!q~&y5Lf} N] OyD+E?M7cq2 ~mC=4YMPG>78zY<;m&1~v'޶ 4|+o=3X ˁ``kSL 馛M. iey SD_~%LW-mlj6J3 L i#|~FC<LgK3 2i*d2)`M@IgzdF B!vķ͈=Ok`YՋ TS#}PT4zKUH+\}!V&8q @I'd d0q") ۷Ϻ'|g҉"[G<_Z k\ cږ@%HFftN s(L#KvN2FaJIlb-elvi'K`;0G%(ё3xDv5Ł21Ȍ]LÆ F) w~Bqq@4yCcڰaC{}C!o֧/ώw$nݺuA}-&AXsv w۩ <&^vn{>6B_F \5qL۶34ڶ( Ȁ Ypa*tb"1QArZ>vfrc8 GbEG:&m' >y49W^yeƔձc2 wJ8ޛ,6;p`蒜$P, 䖁2@LN *H;NUsZjJG&YBaQF WI{G|yn`5`*bІ|N( Mۮ!oLIDYVږ@%Q$lsH4d$K:6fҁp䚖eD¡H9k׶ IMeb߿8d %" iNh|_(Hk&5ļGj߄s}!98_TҼp} fHZ4}֐g A%u/ DŵWeH"IIb;{֡C2箻jKh)sL| s)mI..~s?5#;ɳ\q ڤOH[m+WXlmK J@ݔd6,?`.E g ւ;yoT|\@@NH?r~>,@|I@"!@e LA '+>9v̱l_C)'Vhq(2\p @(=k Ef 8`J%TɹX$6mZSC 2cS?&pa~sڦh14hߒ ڒ .LhZ> (rȿfŠ.g&K|eB:'Qږ@%yr! I&:!W3Ev4~T) >5Q)0렉r]ĝC:0𜤎l.\<`@' {V{ ' 4}݃Q}7{ƍy.]$`#c<*ǽ怢 &@EňPP" H4!"EP1g31簮9uwzzoxf7S}NwuUu5'@3Q* 8"@q]rO1.< ߈|\ \0u-21N0sW&9C.  mSHS_uR|e&$խV5)d֬YLOcKg :TF8mV}J蛀BȽѐШs@F$Nb~񗊢ӦCLz0'B^}מoT㛟[B:yL:\nLZ̔-a]DKZ]z4@f@B[=\Ľ$| *V1QK7H2&]i@ -B?| `YR42;M&e4뮻n:Rh{ɇIu+/ַI0 4$;_kIĎKp12Bu,4t~ >_kb@ ~:!6knUT֨Hӊ5;1|tw-]VAS(Q\!;iY1#=f%´0#PƎ!-'1&D X '׋ix&іTnP@JK-zs;WK2U=iHp] Ȼc4Y? pm-äV^ouKP`ѐZ@ $vT܁0O5XBk0uCCPB@%,Z47l0&1$:c1u{׾'Al}_ F|w #;maLJ7+&~l>Lw~V-qA0'cu+/ַI02?( O=2AX0%'u*h:Tbc%X)ÓΉuAn'aΥm,ZYBp4!:CW'P)GE;YתkP؝t@IКtLvz#b6 |YߥP,JN863_Ж {キ7 ͥtg\lw@g !\6 m?;4 -iI- BX5)FLK D092ebZ"׺ yXs=.Ǵn(4 "-\ MX`bO,Z&H- }ii26j~RDlsjpsA2s|]\. AKtf̠%p Y+L4ɾ7h\_bD+a d t?pMMYtAӁ&8h!B)X 4ЬO"T`χ ""Yϖ;tl4}@#2hl P+U8'Iu.mlC|\&n-90dIhRomLJ@SRJ1^FI&sP kJq}Ը!>qth1Ac\V 3@aCi4mVLIZԝXhbb$ H2g%u R?iҷh<< /E _H4f|Yc򹫄k CE - n f\?b g3%"SYHΕh&H?4)Aq[*89S0ՖkG֍1I6 iJRh2&DBz1\T XpXHb Թ hs nt|.J8@iRTQQQQQQZZ4!~A~§uM 'Ժ* As5)( O֡$!Wh;-?Z ",'io TTQQQQQQ% ?R cRPCa1jKТ5-RE üK0p&b?: o$V$p2E?ŢebRYƚUTTTTT$͖оvD &fi}!k"$aaj"UTTTTTԊ0 C.x k&O %|$($c8ijҤI&Mj'HPJơ_' P(C\f5K]pAH," SuH+BPȄQ L:՚ov3كLLڵeY VDФq@_^#5j(ϲ8A  EYfJ\ I,?#ZFwJa ****** yfb!u1;pK[p(@kb~m) &@@+5XхK01O<#7k,ӣG3qDF P)ZBk@@Z@@@:}IoYfe q4Bh71)`֭moo)hJffwѤXC(y. GBKmX'r-}/0DP}؂UTTTTTKD+K/9\ HV`?>sɚd_L8@Fyv=aIPEEEEEE,>|۷7;S%m[Pb- ,k7iB`71@:vX1޽{*e]f}Uq9(EEdMUT6_yy[w"&j(*jȲzkpߌ3nN *r1yi׶<{]0ǩ… 3ݗ J`:+1a͛[sg@@M ]J+Y"ϰa NSL)J0<vСC3KӦMm2}-Lrg}fvjO^V`뭷ClH|^yk~衇 `N𩧞3{u-ZIr}iR41c=r &6m2^yĈ梋.8\r5kthҎe;x9L-Z0 0W^y'0ʾ7xÌ?ެּG22ԡgSE :u~ 6tSs竫rZܧ[nF=|mǮj7[ª:Y 0(4@.hX@@Meq jϞ=-@-rM:!{W؟şbk=VJfl'7 ,L^ҵxfGuZgKi Qڴic5Z7T[TTM~4@Fa& FY"f֭[o9s$І:ctph'xv&$] ;NuTgkCxP0EbEiTuS0g3o__?sn5 zkX裏, fYNٻ2rm63qv<ρV2A,yN4ŀQQ)j:YMԩSmM@{iׇn5:!J!M"1yX1ۗKNs4 ֟+Z:ٽi$E [deجdc~P**%d7k hi~S/]m@bI^** "6ДA$Zmݖ龜?(̵cǎ/))0 X:!>wy3'O' ڽ &$8hs}PQE_@@&:PJ]@ow_{J۞~\.f e@pРAv%YeUVbt~b.]$OL*:cR,=@t &U=̹lrQGiqΜ9:hpnƍɇv]#ch-jpVQ+ME.!+hʷ~{s''}** Qa ."zꪶ,&Y}MgzZFGyzŴwJѴ$`2AB͙j|s+tX-kpI1w%_zo7'tR%BMI0kj4!] D q/Yސė>0cWN eX5m`#+UL_,N閎!N/}hY-GHuԐI9` /,ϝ,/  q.VI&Y 3 wLX܇if[񎀫6*;1+x_~yq ؎6߮"'ƴx** A"h/yLIX7q\Dg hs Ν;GGCEX3(&]@:OX-[lܸqv!Z|ߤ ?&˳r3U360qQϟx ;K-L_}mT/UTԫW/[q.6㏶`QFU쁣0͝wy3ό^IY]>b| aƟ7o^aP_ߝk)AUȳi#RPaSQQLM Zu4hIYK&iN6?y`ut<)֬JyTQQQP۷dcF/f_IlVVBB[,ʬҤ)!+w!^u3#|!@;\p" )*(($fr΂jK1;?\/ '|Y pcqe@ -ûd~uZ=Ğ:cdLd.@Hh(mD$~bu}X;pv q~"n 1&qĢS ?Ӱa7\i[o] XLݘ|hOnFiôt޽,Z a,L vqG M믿~% K}M6)꺬*f#YgecRZ?q5Xî6`] LAh;X.6|O?t.+ d9]"/pNhq Օ:qٲtTzO M9-j.v2eb{ {=`HIZɇbyR;g_/={ GR}tUX(RX*nǾ&Ot?> 7zX M @`il֬..tl-k\|׶Tg{9\?[,ZO? 2ĺ_µO:* h:t`#=uYBWy0 Noabq|K7wm ĮKڲtFf6qD qĢ=C:Ii'hA)՘1cAY8Kz|cmfz]$YСyv ,Pk1᷇:Lš.& %oJy54tTl ?2Mڽv`Ů3M]s56v歷Zg}v]B; DC3`Z-Zb[ u؀1o|I:$ 'Tc"Diڴi`ms j."<蠃Ty08gM7 9v>utWadQ1\M,fHCg XX"LRZ^i0FRN#Mc΄): _ l-3|TYk;t]YnOS+ZkY*$$/u&/qHzE36'M̫ZnrT[neEN^|5X\s\^K]g]t%"_hy{=㣏>j?3̜9s* Zb*6o^ 2k̙3H)̯gwm7nlhe{.]mƕ/zIH< فPA!q$ p￟6([=+ j0|tĴ;@zhZje'B{GZ4 #V]I8 .Qo ڎI+CHLSD:ɣ5qI8~_ kΊ2=u3 D@PP{|ӊ_X8(C y^{YSJ=wϕiPG5-28 _&"^!N;IIuvmc=V})XgmUlF3G#^ѲfqzhW\q@48{]+Y&O\ӦM&8d逸~Vmtb;찃䗉c;3DG2 kκn!_,x{I4i^+=@4쮆(r}tBL:uroLl㻤~P|SLuķNjV{/!LriC9P5) ~#Q@hwQqG C'wZyy.o$R5 cYBB|lsP`̔O!ܹs+@_u5qƍeC N &hѱ}zcpڳgOVJ'@|!lGi,s;/uo}\$vt\ؤ1P آ5o340)s;yGӊi)|PG~7!4H:OLb#$?b(;Y_& }+V֭[W,#݁`^w99{l;A@ Ǐh54r$xcBE&9F6;I^WQFUj74Ig}I˳3@M E #XL0y0kHܙL`u2ucdId:ip1C%%`hc2LLIFVZ,c=6ꢕc/z.JX˻u떩Ab18wZi"fpFgv>׿sn2Vx7HгrP 1sW&p͘1 7 A36)Ԍ?ˬI6#]LP`Hǜ4o޼B$@F%D FϘ6el2  qgM< 0Z08Ysq G:h-$tthi~#`<3dbZ h E{@Ektخ没`MY&p|wh 5d@} 7Yi@  !Ghcsxos!_H3XB+bz+\Gޟ2e6>u:i3@M E hI@A5 $"ݧiy(LC6h$eFU3 |d9+Z?FP4lǷ, d:+J:b 5K.dY^@u @.J˜i8kh90cJ7Њ$%"T0% >^)`MYMԧJ=!eEI L>.MC@ !+SڨQ#ɦm"_~?Z@hI\lY9qwgg_S1U66i9z׷3@M E |i&_KLnqRa17qJ9|&LP2h, p|4*AҨnjH3+ϑ{n'+G>% rMV:jh X.΂Dµ~h8_Li~mtV1p/&s$6hDvcǎ>S>pEoJ Ay_雺Vc:>`I'<Pi_4>0Ⱥ* @.{'y ɒ-+? Rf[g8T&'KQV_֓$ߵ7UuN$T'= F?\^ ~1pB\Irg @cL"bBر$`59#30bĈe""W@ю`e X_*hȀ4'|"DHkm֡]M4t,˄_>]Yv tdzhEġ%s/vB:0:K rCZAԮ0mv}I5fWiewq m6 }ßP |{!4k|uMb.S8I1"V'€h W>zkVw ?uȅ?L h \qiLP`Xj{AcH`y01tBTbU(~hȀHC57Ew$h-h4Dt`ژ +k9iAc9V", R \`V\~Ai~ >\*kL>5Ԥ iўͤ'yDꙘrg &HkbC!=19ŭgm.-JJq[Xb@h=@M e**((jҤIY@MUTΪ(jR ?&@@@@M ڙ(hTԤuSP&@@@@M *** ** UTTUT5iRTQNFPEEP&3Ϙ>ywu:ty'J|ysw>FO?5=\c_x眇z(o9oI=ӧ7|3{r]SO}#^s'>g׿e_|ߙ&r?vtfWZ<wy7Puw.7+V%R?wJr >`Zk$`'iNj hѢJ <$> z?`c5"J+Xĉ nC̙c^zJ?>hBfvw+zhri?xv!{6YPPS=@y?\tCԁ<_|}jJ(4oj7ģ>ښ|-Vsqr ynJ~Z樣{= SM:(K'd~tz.Zv:UW]5M[Yd뭷67tSmh;_,lp K,aFUżkvX:{[roc֬Yo|C5i2eJ*Q\!<a~ ׯ{ z):!6kԨgyw1cexޕ + nАВuI<AQYml/B[ U:2t̴î fРAh]w;@zhZje;:s89Ȋq.N)36F㯸 ;C iF>&K>fo\tYdUV t]hӧO%$hb2y睫hK]9蠃vx_tE1۷`,Z'q}̫ES M"È#6n؂_ŀgzh v\{F lJ=fps9 g@@M hpNKB2Em1#t*YBno_0纎 L<@ hGd0Zp7n\%(cse򌎿|a^k_~J3 3x`RvD8H4Lzw@*N;ƝCG=^7+>|ϸup `W _߳zRH~xiYbfm6)4[58<!&X:$m_=M|w^蠘"5 $ hn|}?/>fm wWsPu8e¤PX$ !HiĜ<@Dk{ǥ9pg:`՟8{+B!̋@u9~ wLCNÚ0ɥiy@FƱjCm.3eh''XnS0" *191M޸t`^%P`4{-oX߳z4`ӹ'ݮK!X@ˆ?aB#@f4F@ w%ˡÔ硣_r S)hYY{`>C5h}@6RA\AdVҙ2D~hbKq (o@ /9 Vf&QCRY4ZRq~};.JzhfI tiatdwl?/ aڌl:ϒzZ122 &q`"09C\ Ȋ+ ಬ=!m]߳:}] M ".шFR w3V+~;q( !Ftx yUWYω?+:K:[:4Bg̙v 4mA|Y}>d!kJ*6%SHﵦ=+*jgXjAN8~7ĶX&B6h:sK*T֙>t27dBEc Œ]F1t">`y?HΝ;[@ M ] FC{X 3Zbj|M9X^@u?qZ)4wXb ~Tn*jRTQQiuSP&@@@@M *** ** UTTUT5iRTQNFPEEP&@@@@MUTΪ(jҤuVEEP&@@@M oVPEEPEEEP&@LTTUTn*jRO;q3g4׿*mw_l⋢sϙqٲ{\PysE]_EPEEEP`T뮻։/L:|վQGe~{駟ofٕkv;*}9{}/oJ:~*x 'e]~홮gLG6ov ** ˪jwn ]wn< :4z _ϟ\o? fȑ/i׮]t?Gy$ >lmgu#8"3SO-Nv%B`}/?(%GyIS_577ddM65<@13ȼ+fW6#FtlsO zf i7n?7-[,h$|MYyয়~`9xO?ؿ̟iNP: T櫯m1Ooօ<3fԩEb>O&׹馛*mC{h, n&fw kffJ"w" ~5UM@0h+*jT? ㎠G§, +`zԈ"L(U&NXR* /<\?n&O[Ckb6?? 8{ay 3fn6so춅 -bh^Yg>4ͣyVZsU(Pl9@82 +򌶐v(jR^xs'Z r$瘉-23V1gyf"8ƤI&EHC>q̽[W^QF$ p1s2=;HyŮyA8 OFK}1W@A CO2 O>oXY3(jT(-=S}[lLI1) 硝S@A4<`;<]h5O6<装)ڻ[j_-ҾkV|;AUQl~kopHwYO]\H5)/t ^wߝ)ӧ0`3-]֭+& 77n4'1f&y֬Y3%4xe$ܭ[73d´9\j2;iѢE4T/<0q4 `C&]ѶR{=ۦLxb8gywQԤE] zOV0`aԨQv`,!xK J6n_s:w\>@ V >k1k, =f y˳-Xrwy3K/31Uc~ ݓsL#vm@jl.qAco!bm+8uR'$ X1X\QP`vipK3nG!UW{6_ Lh۶m' H#/ZL 6!@)[o53jC4+†A#(~fn׮]]wq$ ̪ULֆ4_ 5Nj*~?|hTˏ6W|Dǟ-oج +#|*&Mug͚ N矷&3gmr-g'4h юDI>hŀXeZ;&Y0#?[̠AA.l\̼Iy?&;7 m b8:aev6lSe;yFQn`HwE.Ȋ4mf3(Uib/4 yEޑ'E,PԤ/@Ke,Nfs,TƮ)SdBffY 4iRA+VΔ‡.-a "̾u0S7 ;[4jx4y@@AZ Ptg rk YMȟؤ#|Q!_H{^Wi h 'b%yEޑ |5i P]R"=fR&hc{k\|vnHc@eWL!XRM,+RssAӘ0aBA{'PRBᄏôK0ҡ·/2ߙI1Iw'TҦnj}rqw }d ;A۪4 @EJNZ0O%4w ` G䕄~!.IS@Vs3,77we.0N?:/; 6}1B׬ŪngLe2hR>/k jpt(f`y߬{a;Y_3V}TwNBlجt:j\)q!nc'fYXb]wu @Fk{U{QК&Y(qol߅:_lX*ڞ.]XLhV`dz`R<" 㫚է9ͯz{~[hl{gTOZS!CM_* KG20Ӷ8A xݕ%mMM' O@D'o#wIS@*&O&[Ĵk C+VI0og{ 6ց@(%&/GKP9e@` ( Tس> 3E#I]xC `GGܝƔ|I&)IhY'|?-[0MOȕ!4I[s;˪4h+۵kW,6jXwqwAogm }a Bd9ṓ{&0}>k7;gyISrb&85}_;& qM7|R]Lf =G%2 J@Hh,* qhFw" ̄L "ke 0!; Mxc{|"d VuSɵx^Eڿ&2 ʁfp;'+=ԉI±2bEMΏ ,:u_)39F-llf_$Aҽyn F'&M ** l I.e"4k:҆yWMڱH*Gmg `EF?.|\]7+ =?$1q` h8mO~3)H!\$5iRTQQ,dph/9}PFŬJ#j=[UiXLv)6CH(yò5<%ۘ,A8|?~6mXY֘ ofM<@߿6ZнEڶmk߉Jbúy ϦI` _Gbq9Ţ}JhUcgUY-(qaI6P<xRBc6lv1R& cd7|s{~6ml^!qb6u 7@' q~5kfro7`;E><Zje~U0xyl'O|$C@MUTk:?^z:hV G{91C냦W=Ϫ41-^`0BPm[|rl^s Rk膁!5iRTQQ$T^̲e92:j!IuUAUiЮĽ#N"f\RU y$w&M ** u1,!]C(} ~h>PyE̢El ,I`L'N4}5ݺuKҩTw6k11;X&M ** eeDbҼ,T<"32y[oe|Mkf^}U+o_,6>\pA%8q馛kWs2p˄2)矣n~W۱F~'?Z??eQ,i9o9*j*K8^,@ Vm^2=+Ygyhs9 u) lovV"61W(˻5%Y_{Ϛ$?3 *>0Ϛz<6)&pW_}oV&M0_`~ɅXzۿt^j_{@yX?QPSY?ny'FN 4* V_@~G*s>9\uU u 毸 뮻J hwj1>K9}G;j9֏rTTCَ c=f\H&}E?l2,x qYGm fWc0}Yc=lY/h{aT; 1hh?qϫX,{K2;Uafa({$i ϨQ "ey0_0Os=me-;j/F9`fٶSc$4\{v1]wY͢t&ѭMMF})KyOP usܸqJ I!c13Y(&$ŧkh#{@ʄ:eWL9VbHHbmu4)G@Me \r,#} df5;qg[M;/wi+:8n'(P*]蚮p8=yn|ݼ,( sDZCʇ<Ѻ_`gM1/.ycV0'u;fv126 omfR eTj81J}KgJfѹq(,S^76}41 4hYlŬKB,fr@My`Y]Lywaٸec(‚\ϥkϴ2ﲓ2A )S^yͥ^Z?gΜ KBJ:thp},3ΰZ0*"KX!o+Οf sIR;apoZ94zC>6(ڮo5mtV:C۔%y~sl@!B~+Z,BC;p?ǽ+I @yGdӧ.7\y eƶuօmݻw3|[>#l}f%ҫ[uU9*j*K<餓lg BGwj&M[NrRY5wej g3pO7]tQhBА T6PɳB狈TXL ? 6ξ <7#h, 2k,{>")Id@@MXo%1]]Z3f?͢O;{W_hP}&$+zhNnG)Kp_?kY9y/eI;vkp6dMyrKGn7rg +I(!_RFDX {1\nRĮ]Z %ڳ=z6tjiCZj<')ʂ2 Y1 b(zHٸΠWE^6C|Ɲ kߺ[|xMvL^lv9*j*K<,qhp<:-mdn+[;~F9jZ;lT!FZUWoeMthmlv:cLzt^13M,k20 >4>\!Qx x=n򜼧 x.$+Κ5 tȡ:܏g:]kH -i:@"|+Уκ]2t ?_w2%e eTj yt^䩯tM㆚]T1x}g1eZla\zI2KYYlŢ'41 Y0d `P1 iӦM%6;uSĄRސ9( $/1k0h@.91nhƏ_7sh]$.k b$,fX9bYgu*#:\,記*vs&pVSN1lh۪'jf5Y (Q~`?($tT6:b J>vAk22&hC>@A#o3ӐCh<lנL_c9&X\'-EpAzZr .v!t8ZDŽr}?ơDD ǎ[ Z3f2*5]`\aèN~[佩͢[1{ݕ-̙G5Z4jYa YYr%3 @$0)ˆ=<@sGTپnk~b-h ( $/1 @uTb1R&guV%!-w%͟31RDYQj5%ҁlDžZk۾YpiRvN;dۧ-.b[yc5!6m:S@n7!:b:4qPuAA&f^wJ@3"}gk򕼧 .eO>䂄0f>q_U J@s=ir-,ŴK'GG&f]_beɻN8fΜi˨H 7I޷_s5GG(G{2 \;`Ks[o]dM^v%[4Yu%J&VYniWC=lc @{ Dcbvmu\y}-[V ;o6M]'s,(+G'07I-du/7Œ_Wl.n>^fȑd߿mG#yҴiS۾6hZ-G@Me | T~17ovk+QϮmu,a>":M za{[!j:Is57܇&(0ًٍJ)/!/8vM ^$1Ci,qnsep6R &<Ćv_{ˉ< 7Z2F-e/ye;e!yRfsm_I_%eB?QMun5Zfhʼc-W~͍;;0ݶ|!CW̺6-ZլަY}fEF>:p|F\ٷKZv ͶOv04>?v(7<}PCv}Y$V(ZjJy# 8j5%^ΐ FmϾw~i-;Zphvs 5QYD@zAf-V0H)Bt5:T>J)8`{07.:_0zBG]ݒh2.7o/C\ &_Z9 H `\V9*j*KA݇:pieB}߉XM[cM  f+w/mWinkq$1hb Ɯ^ 337ZDDCHm#&E{ y\[@{[XO ׇ$+,T3yhx?{ LtS^'kʕ|1N3 .e)D c"0_d )R K4VӦ e)rJQ!c*kvK; d-72hg6d ? &+ "<5\ӆ[ːp^{5;wlep=C%%B956W(+G'`&';ڌ7͞ʟOK-eli(O;mԱY.P=S) q٬{GyMD6/#P:PM= vXB%NA:} cք 6LlǍEBv˹(5y.@YP&y0Vwi|9C;uGAL@0zآ9̳aI*G*/&f9*j*KdI4HP.=چv׽##ȣꌊJ±'bwc}vPlܴml }ѸvYF | Mewb{4 g#ecLjN2 j!D[NrRF[ﰉ;6$ mIhۄ$䑈M@ -e-KʄQ78uĊt0]{dB`fͷlw |fV7;&[lQ%K]ɇ{֋zyNʃo 3#\?P)y8P&y0V8{D;bΡfAs|$4 .`WrHv=܂N+,T3`Um@Ǡ@hGr v=(#YM'8vʳ=Ǝȶ=?xľCCh wDHtFE9'@]7 B\{zzhT@e1yʒg8v"uMoY8&v=/y$bK.eoF066?lBnǡL)R >W.8ԅϿ|˯YbEv_EqE]o,XpZ+& ԋL@^3Y 4/: k ,DNP1,4365>Mye8q%3W*KdRȨ,_:ߓ?2;Vp_~IDn7Yn lozT_7t@7bk6l@k L)~vGd18Ng9a[I^}{RDvCLc{%YrFG5\1˓>8bWOBx0Vcar}Zΰ.,v3nDіa^#0aׯ3fw--G@$lcCbLiGy2Ŗ']4 y_ߡc'p}CnčixycggL0Z@\&YZ"$<Ƶm+$klxѰkH!$/dr6!K)twY0Bg>^ QF3 FF4\)YB)\3<\)T"Kd826>}zCqߡ=csr:mmn.۸?ҍ:ҭݹ}#6T DJPd yEШa> f_d47$}@]ʑ|0.?hӈӎ.X@[!LLr?Wh$`$ >ܓc;xҥf4hPC_׎n5 ?, XrBkQP. +&>I 1<ԯ<ѓٳN8"7o~ 6›FN_>ihR&csǴgڤl^XJށ Q`gbz@#}!Lϵ'$y@?ڦa!m%T hw K}kIo5@R&-U Eۄ(sQ}}cŹf2p\{[C @&CF&8bѴF ܕ.s1 7 uaݸr<Н<&LA>Fj<h CґqO)}Tw9D3V8sm[!!zl=Zĥ{ cCf ۈ<cǎ>} vՏj1֐J]@rxA&!i`re׿ W_s-[7+^zxyz^۱`730% F&` SqD;'U[J/cr=Sd,I^ȋ*ar'#+ߖ$aT:$&^жGk"ǰ?hjA9} {d_$SNmHxe "+eګ>A:v]ǭɺov+.WcRB`~C&E `9 nĴڐ@&y `@~ ߯"]sϤCAod9W2]NLġ刃e2o @$IQ(9ַEU>~LXFDDZ4`.G Y! HC^FI< !ԉ9Ve$ByXo\d:x`/mj &0"AH -%6YR,9֯EUmHC푆("Jz;uR75"@Lh,/8aɹlU yxNlgA$uHꂾ q3!dT)E XrTKH#" ƍD<LXoY2I%3|<9W&j@r1I1i`hLá zI;dw8lƢ["*uI44i9s ,[mm__lgD}6m'h|`U >Msa—CBܕ4iXS0)J9%l-PS$3yZ@ dRϞ=]NVDs4L<,J[iKh x|,@!O3Me3R:ՇHH9-D*g=42uFf̘Bly'VVd;=^rhxCC(}>,)SAKNpcǎ$+ѣݚk NN;F8qwy^!LQFR~|]GuT:[nkP~ o!8~}ʞ]q8:zG^-Ү[n~<ΰ;hzz@ =裏Wuy+ADO?ݭ*>pfrZoF#/Ç709wϤOয়~"ɖLo0d6-h`C~ hD[oXz7[<@~סCFdsh1㮶jIg!VX7S'vڹ~ٴX Ҥw7#GGN;uwYxn!jJ?M4o!qyg/ވ[xy睗:Ǐw^ziE̙3ﵜ;v,T03mЈSu:w\3fxMgFgb^L'YcnD=ӏ>hAxAJ:xmMXϞ=MyIZ) `?ܛ119Hi<蠃>es9N;Cn殾o4>Ğq4=첋Cy%&c8SV =}FcdymRmBvԧ̍<FC@L nq|T@ 8qbx7 /c׳J+5<sTQc|t8qL't_୻^XnPUx|IE;C0cM_ae9n8>CbU mk19'|KARt8}_vVEOJKE/{`ER0Sg%@v޽4Ki#Gd'„a'zF3 L!ìOZHBX^M|ZY\pM|]]\V LJ@ hUѐ-Ι={vT5GJixZz -qid,#_ƲiHB;B-8+ 0\4eO1^HO>VLhWyɍ9WD$TE^m@&/,va> #l/Z +bhHSkh3D-\`l `J[ LZ9"12~7|}NO>᷻K$ z Gܰ]r%8Dk@5m/A=} "@*"O,8T9R_?s+IoV`^$?^J;'m~^ ~9JDq|҄+>Ck@{k W8̧".;Yg8MI}7~s̩.HFט7$ph3\;0L3 h-Nj:tb 5|q5$ s{g%˯r>9kdR o^X /+&?!#:aN,difwlRׂY 8,T?w}'YLAD0RR/H 8[:)'6e)LQZ 4 ZN@k@جq췹0Y5d/m4=-[QkWKECrx&MMq 1@ҷ)-.C A>ȟ!_]\*8j5-@˪?A=bHb31G5%`VR T-ph*!YG/L˄n=ԍvj2bbU_)$kZb@Զh (fBô'E` J0 OEc4r,;Tb#nr|ma6a!Ҝ-ҲH.8 ׉DW$mA0QD09!۔ ҉lfƁh=ƀBM$ ע>EƢfaMLb#Y]1) @k$Yph)d}K@C߾} K]]Rf-* >y9v s|3(!5"9n풚J4a_`ߖ7.;LF4KMn8$A]g/f% `fO=Y~<fnNGeǜ=2CJjd1DT!/~"7ɛ =N KRt h ݎ=mV5&Dk҆TcKY~@kׅ9rߕfp ?) y4.mHXljԭFW )a$Ĭ0xHô5\D裁˳x4oBvgf˻XCy=y"ϵ Bļda$X* fRumH%,3Њɱx2Ev {iX8LcTW Lha, n{ ̊4f=kKR(BMh)J4ME6|]4yfŤ΢,"Y@u ik"8fq3OR=$ϻ[ Ur6X[n\\ h fERˆf4)rqafw++ZyȻjT@Kjb}ٴ;zU f<iCq3={+k?9FZȥ-l,pL1~k#s䔤NȐ/͝;QVhʔ)MU '--G$ (ocQ]GJ03H_4oiH/cD;xAE8$㊤W@KAN_W9vHIc9FVB/!rX2B! ೞ7̰E[)r_@SܡC@ }|O}J*m;y"!|ܙoLdL?D c36YD!5Ahf|  B?@AAAALJ=@AA߃D}BLIENDB`scim-master/docs/manual/zh_CN/figures/scim-setup-splash.png000066400000000000000000001173521415264260100242550ustar00rootroot00000000000000PNG  IHDR0/IDATxUڇ+޻kׂ tE]QtQDAAADXJ,Vti97;3&~L9Lvgo%Wz^! ^M;κ.#D.WնB!D [|l%WUkҝW?jaR2s MBXgA=G{ޛGwd-kz]g3b13}mqIk,!Egm9?M6p$ֈVPd.xAk_֫tWMߚ]'MoV+ɘoq8~a2S!Dڛ;&k|܃'57>ey`λ60Am`mlwT5~*Su+w[Gso wc*)%~f7k̻}uIv[XyaBQkV@UXbiS{){S|rV03滁MNߚCG!_h-Zdzmv9%e 3A文mK~oq? ~mT/>HIOcxIfg7XgL!E%nzkt JJThdYdx&M2=t|y(mavݲeŋM׮]u4g]V\V4-A.q\cF=o3&'K^[GS}j~hn~㔼7`ټF.0fo{}Z3>neRqBmP5~Rg"=TF}z+ m8e3qӣ㷦k}>ҥKmx!عsgS53AaQRZ斻u޿gTdr|U6+. wo믙~<#%v`eINߥtW!DѦTAJgSWY}qknzP1뇇o_o6s5k eB^3n͜wemsUMxh bYQrw\ /Ac6AǙ+$q{ڸ̿CX/SrS_1d^9<_ W!DѦ-oXU#'l8{A}qR5?j7h~8̼Y+~L^0U1֛}c4<պ:glL^Ke^ZmS.C}jnmղ~eWye5m{ov]иB!v,*_} )Gm0bej4~={.\|ٶ7wQ33&fXزeKSZҷ7?mi>wy*ܶuI5fо^#=wt,h :t?(;6GOsg>恶'V6m1-ߛ`? i2k1;M:4y={|ۿdr,qG3>/y}qnkmT>}пM7Qfڨ6oq:UVQFl6mj*T\R掭7gLxgeQ-.ƨm⾞Tϛqgz~|xz{`}缼oY;L6慏'nwkL4, !ءpG3Nq?=_܏UEO'"曱 5G5/Xh-]jf b֮Yc527T)QnSV&h,q¶s^8܇v滛_~n~Wmۚ6m[nmþиqcs+V3WUT /:+1\錟/v|霓L1 6nxO3tqĘ)1_5sۼ}=#LB8U#'lT{q;r7?Sn]wmꪫK_gʔ)kZK2eL6eW3%ozT lXj}2rq oqOQycNwdWmO%?kCMǚfZ~gL!39 3BP=>+q¶:~Kw=_6_1]bEWU ⫡)Q?!+0]_꘲!ŸǕysxz ߚ^~_Am=w",fnKui2_!D q4;~>aǑ-j;܇k ^37Δv< u6Uza뾯oQS8ж߾_}j;znZvxa?m0~1߼r3t^1nPyhw*>g_܇+}3&j>߾/;vABQVLo 7?;O]g+K>J_o;#螓 }r~\_0B tpx@^τBO/aǡ@! FOL'>7w4c! AIp>ZcZ7!BQt~B!B!BP!B}[>w7|s !ٻϦ-e\|!.O&dg36!D։+B!GPH !BP!B!B!$B!$B!$B!$zr1BѦtS#Ce]6cMM٧B!(dEfffM977϶[1}~Yl~8atݶiiIۍLڮh}<|ʊ׺[ڍKگ}$*%B  OXdzy\(3h2+ ۱|ڂ^~U~7nbno?>p֦̤eXeܯdB!`6G<޹/ "ްq`z&oĒ2}}-A&(BHJ.^hz.*((BHDoO66s7/es c5UH`*ToB!X}}7[tblIyS M5=~ZdGL]i#((BHt{ 2쎗'G`6 o5هlB!cH۷;r*r7mbCJ6^8έg$µfਥ6 -((BHXyŭ t˾j(i GIJ !fVO,L{ Zh_]R_@bUk:BFx|L[ TcUZ B!$s%\b <֬d+q#+wv`s'mfԴ"^c7zaO Ήεn65_k8|[tATpB!`Z_٨XDB!@B!$B!($B!($B!($B!($B @ @!(BHJ @!B0yG,&(BH$%B @B!(B!LP!;ܸqٳٴiTB!Dvmfym޼+Vt1iV^m>sWQFII !!}YSzuSfvo=իw}MŊme˖>#R`B!`*`*qGaSLH.Z(XB!$ RR{4(p?lvm7?n!֭[[q9iҤװaÆVL(Q|WIDB!#Hqi|g\ߚ> 0zcƌ ܞty2 @!B00Fч $B@B!$eB!LP!I !2 @ϴi6rOwGmөS';Sޯ/4q:tiҤ;w_ä ^Lٲem_ @LP$moNzjr(ҥ}=<31'^{exBq-ZdE!gĈYuqyg-[ھ~=9|:\}?0յ^kgz饗2&0^2}*ru͓$EBHp83mΠmƎkgqDo>yd{cyM-… # %Hӧ3v.`Nri)yrTR 'x8p`䶜S=sͼybyڻᄏ׿SaTzu{\4ϯjɒ%+2'|b's=@v!+?܄ {5OP&qmY6x]O:$s[!XZ={ڛGK*Uʊ>ƣ0H^zvc{kؕ/_\}նq}^b.]j~i{8&BGuC1]tQt(bo&9kݓO>۵kg|{/|l"&8 ]'Dvy0-5?15k&VHdEnpwNXpqiժU7Bxs7(8R'H~KO?49ϟo>l뮻<_|7̊k1eʔ q T8C&]f"c-6mZcBqyy JN>nrECDN0!c\(/x: }>=?Zt$EY[7}2BE8~۱Mo7ްc=fd̉NoA2r^~e3s̔) 's;iӦ媫#X]:#L9Vɒ% 'xg&1<cP~[o%Θ1#C<+VUVK{wg8$Uu|TSNQ3lذ_;>ӠAH d[U @Fm|y?=D۔)ScֹjիA-HH>jΝ;۱}7nlEcG&rD"-[Bk^l~`)KS#"HU*GVUg'%],߇u~.Nˊ﹐$cSryvsO0|p+Ң 7()DI.g+* `%4cQsx-),PDr^ŜrBRAM5{y :A FP!믿</SW*n<|guQ7 Q1D(  _C {M;[z:}Dž TG @LG((a>7~8rBQ$a7t(VdҺ0y!{:'(Nuo:UӨT 7ܐ8FxC )#K;U-buz=\Fc[UsR$ @.]ڎJ%}| !y9FyEuR0Eڵk$6nݺ\/WXG)jNgGwTAe}x„@*7m`TKAum:D/q#Lǡh02ݏch *t H. $]ɤ 6z7cVA(N^~poLVݘqF _&@q3~wƅ {ڻ/nذ!nd"z8I'Y!6ˣz./ fWhc 7: )[ËЎWO!o 9;N6b9+lM'iw8@dBo>1wͺA+ә'>AP15^.-Ƒ  3a2^>B0#'>/e˖ٿRY&IrpƯPg, G>LPE?hn"@a7L@nZ(W"{ BgTr?FF ógſyDc6'kf{[@D WP!# x\fzEa&vpF7hKSgcHe97/QoDѣOU.l=W~Dř&MxQum̺qQ 8gg>~5@͛7KI7JDM5iҤD2@)M<*F^!~iK 2f&W@9a"{@/n);x|ЄRfl4F@KXQÉ.]|Qv }OGHn} (O@$.p.T2 @ 7 θfܘCCNaNMgUGp}by$/~\O8R"-D'L!nT!(!\f fJ*Un[!9?33fDO( ŦO&iU4~F^D'-$bWƍ.b U/(nys⦆.\> qfKăT'uŠH:+HKOuN]%fm x $?;?̄Vps38Sk j:ǚ8 EFNT!wyz9tBEU.׼{{p-xO2 믿#A'4T=HR Dur e"oڰ< ܠy+N'̍)$yO-Hi J@tr]?R3G-wyn}yݙ|h:Le&ԏ g:pH%]*p{. =5YaLd߸ B0_e7!rQϯs\RLP"!S=aTy!YĉklӠ8HÎ-nW &_08vW@j%؉6۲s5zh0+33;T4;ORTAxlmB^:yt*s3yϩ`&r%$sQI=3UYPσ>2qiqvuޢ@sgK4ר:Tz93ts!U'їT}q'4iժUl)Dǹ y IڔE8ij @ @B\m٠ABM}ξ޾QZ$Ecn:4'zծސ!]vb6Mg0Idg"]>78~H1_rE ʕK拦9 U ӌډ@D'}?tXc0/n[Tw /LP  ECe.5lo֋x@C欳βs"~t쨠{E8HG:ǻ.}+]B̩hLI,N8wޡSvmR(N.dy٨w#8G!]%e2 צ"SY !?ywWAM]`XXՊF&t z<=)8 ziw6lsS2dxMdyPcbfTk:yЅ%QЅcY9!lTϺA0 ENDVca'xN{kӌIqa @έ$w\baE4\ޖ.n%K5*qxaˡ"070oaj9ԃ1ygLshZuTEX?$W1  m; 8τ(g볉 L(vi0/ &ڦM;mȼs56@n&l8q.엟]LPp;fԨQs WnWW\qAGy77-F-u??iRyRcwK_CD"BӁ j͘tr {l3! @WE/@z*W] s. Gm㪲y$w /IzyK vEɟL"\'2 @ B Q/ڈA7(^\ɲ CaStY~P!D } >xjD /xV6mP׈bdrז.96׍Z(UȔ"/]%e2 ^o`F}ޞNQ՟E| 5TJB#6o c?CbŊXۻeٺu댏?4=Yzu7&梌2M}ypݳ>k'Pg:$&ԘA)1vR C1Ix_ԫWԭ[7OƸA镼|rs7&gByߗ\r6eʔI^3-ZB!$$D[E3YW_}e7i=ڵk";뮦m۶6$map˖-ic gW^1}~+6뮻L L͚5MryZj3gJ !/Nj ?܊n__|ywBW]uyg̺u~%JQFf_ODt5m8k֬<9, dL~I'%3T93l>c=fzmС  !x=f͚%-ÓF?S駟ZOlz!ӯ_X3{l7tX_-Zt OBNp!ʗ/x\zuSNlٲ<B!1cW/"Z!Ca7}T޼ݴl<#y (Œ1{oSOܖ|D.ܮ]*89vwyyv1r@ }ʕ+͞{i{>}~{]8^zyGU"BH_"PcGa89O؁jV'zy C똸FؗX 祗^2{챇_ݺu dgy]vs)t(^+Y!BqSoaF; "qcѣ:ؕB!$s/gm9F SA"qH,G5u~LƍC#*)lذafA>ސ0<3ےѣ~Itq8OA1I63Z9B!6^z%Ds:Hc\ğ[o3 4y+y--j8Aa6mXw__acī1y~ &뮳oބf 2qL|)LB!$t!]']<7n y~v9R u̬ eߪ%?βb}^>w+4?c6Л),z9)S^MP!؁ }|IB^e4ymi^.]@l/'Dmׂ+B!Dɂ ^] @!BP&(B @B!$eB!I Q|~Ǡ#@!C7eۙ l=N_LH;w'L&(v`SV<’:GgqVDe`׿xL}Ms-]OfGm8n&wDHdLEfƴ5Yg}6^hckTn={z-w=I=><ﶄYGY̆eofbBK6W\qEN;+ᄆDA3>ږ $EMɔ刨3<3c ׬Cf]wy /$fIr}]cIH[o޵~-k׶52 #0/zq#fX/C*fum49w1.cw}| ڎK2(6ELviI"o^/DDV~O|-g[Pe*U$Sp0:3ym .F.5H,qo Zwg[k֬>իW' W'AP3jԨIJ7_x+,_<^{eiӦ"%7o,( }>D+d@{i$aAx[ @Ad ?2zmRrwG[W-WnTn~歷 =^y{q} ǔ*\J'‹)֭[kWGzf̢񋖶uM@O6ͳʕ+'!H}yB,M/+y%1T0.~ dqaLMFȄ[^#G-EPP+d߿\5Dk_Y07\uk}\!GUx¿n D)bï{?܆)@dZDUZhG6ZDl.^GB Il!\qo7.8=uٖ _g.kc|wWE]d^z%3uUp3akQ,tUWySY)# fÆG~ŵM6I!\r5k4QO1y 0(}Iϯjo%05췠@rPXV5~aӧ.(DA{7P\6ryÄ][5aÏ?WXo>*|! w ?p>בoOC qbv2S (#1O. @⌅V B0F<wa[ e _/g e> qb4U. iB@^Z㢂(rFC\^"?QPBar(vچk@oϿ;b ~A %KuA{ [7D8pW覂s~')%?R/yt}?BHz1?kC(+WڋWqB$ zN!B琿Za_'@ *"A[EoHZPC.r j*x*mi ;찔t?Fљt^:DA[Hǥx|Yʱ[$Vg"z]l @!rg~8ғ4S1g xGPKnkRQ,4Bar)f@1ce[:%8c6Uڂ>q"8:Z d"z!B$)]92ºW^e{=~_Twn`g\ uΖ/_n@:BWr$i @ķ(  B/C5nTD!ө5hT^ DE;\4Z7Ps!V;yv#~rT(HSXǑ0*x18B y?Ӂkžs̑!@ "")pD!~-1R5GXF$G= x @GPP܌yg O -[B1x]θ#yӁw!$l\Q1ª]mXĜlS6io^#ZّB%,D1"Q@]'tRs< Cr#ϯUVVѼED*s9X0B!^xذaVeںu?onӯ_?Ӽy:'Ǐ|y3Ʈj,Ybfͬ@u֧O>aaĤ_x/G(p/&n @!B0vI'~=|u/9#+–/\0wyǔ)S&}7)=&]LB!z9si%aG8ه~5H.ߪT =ӦB i HXJ !Vb o.xl2+֮]*r–Ϟ=;i >#l#rܹvs="LճgOSr‘.u]g?,(BHطoŋOj&̖SNvyr(~ۮ{O<=bFP!۽lذ V^݊7x.mݬy{vJYfMhѢl֤ڻO*EIyF*2E B!`kxCx℀ұn̙iy V\G_~*up~6cGk<{\sM_ƍ͜9saaO=T3k, @!Bm{^ ѐ9X Z%6'$BOm~ZbFRkِ_|a ! @¬~8iҤB˗ ^z6dqsZy֣Gs1bI&v<@<ۻI !)߻k;8ӭ[7}ݓ­T}6\%J~q @M X!5j˖-mu0E`S9kȔr޶0^H ^a94sx   (B%isRox9Ѝ?suf5jdCʟybj=XIhOg1.0 @!B0n}?laӦM3;sb=bpʔ)c}ǦE>KH?=3edʕ+$B t3N]E/չ7gᄏ Q׿5jmr v woB!601UB3f$KP73Ϙ-^8QT ;[P&(BHfٜW8ydӥK[ "i'gv.qKcD" {C2 @!B0,9g϶SN1JJ)|7P 8p}F 3y晉2 @!B0o6oQ%Ǐ ` @!B @d2 @!BP&((BH$%B @B!$eB!I !2 @!BPP&(BHJ$B @ @B!(I !Eʖ,Ybuf6n( u$B :u?_"PP!,j6b3q<ˇ f?@ߛ7x#p*ի%%B J*믿ԬY36t}?g}\vep Xb뮓B!$SNxfΜ9vY2elW&֤I^{+Wdzg6+V4#GLlb 8axȐ!]v޻}|)ׂȑ,vqqeE$=}N̩]yo[Ba_~eFcmذ(Qt%=LʕngOnA椓N252˗/R̡͓lxƑ뛗M^7V= t?B $?~;wnMzLڵxرc5^֭͂ Lflog iӦ7,XxT\ Lq~ed)=M'%$U §gE6~6q_{6 y/.FW^I.D_L ɇwqƦN:M˿Dh'IqD070/87x{1(*0S[T`_GAS~C38םLv$Wmtt8L?c:?۽k ?S}zWo˖-I0cqf…)OL P:T L=; ]:mUx+0btL ,m]WfQb $Tp6mɒ%R*lyeۏW`AsEw[sAaG4D~iRחMN"3Y?s՞+Wii?@/^r[<5[p~C|݅so 6\m)3ΆȏΤA9[ΑGo܂B²[fzΥu8 ՅkPX9a vHJ—C`AFJICf[¼-A>X*sM!WP?Vۖ͸չx/QfKfdӋ*(P檇_Cg;0sƝ$?TPǜnۡ\m5I.rQ~EHuOeH-A g8+yӖ'蹲&ٞqvUX11{-H4s_&ryŹ/:t]vwmfo߾}͕W^Y(Vm)W{}E=zQ?`LVB&L0GyH0 ]G}k\D@!o< dV8GuT1c$I&%6D1WQ+`2Y+x @.b\\D֭=[{U^^^z)jf TJ Gp Pܺ0A a;wL_@|x:tyի8G/S˭yX]ڽSysO:&!렂D9!eJzo )IwAԀb g;g? D 7; /.\rk$1d[W1L. aLq$ϱg*Y-3ƠxgC9$psEW*FI sr(u[o0.(G7x`^|l#ۦMPigK;>|xzI9`!:u_~>H%0Yzc{c @ @P @gsS=64e{g52uOٴiSYn K.5ķwyL_)Hkĵs/,m,'re HV/َُ@7Wq-@"?>݊Ͽ,9:Q`权W^y_BD,4r?6 ZaE*&ڬ)nv~>T3fȝ2TZ@T*}inbuر1" ʛ&OL_jGGHSWKTrYHEZ>Yld޸qce~F&}Q.M. kp[eO}@ t_qm/ ؏@l"&+蓠:ǡ[Pkyoz] R)ՌJM)H":CE41g >hcpܸqW^qDl_i=7% MY̜E"{:zK~it (! Өv%7:FǶhѢ ,۷46~ j+x:F۱ 2VP,q4clA+kPB9&`^?F $s9Ƒ u]6J J#@ Me%I2xs 88Ye}:7L5vygKs>Ŕ3@s"Y6q.pL*7 _(Z%&ѼyڲsKE>qSDJڕZGH[ xފ0 Ưo/ӁibWD)Ls` x@$Md0Ҭ%+1]ƈJ֣_L DjSOȽ{;^S} r!&lz&H_Zo(/d[U0 J8#}OG;9a@~TlPgM޽{cu bTImɒ%Mt2{lΔ;F*Z6Mt*k#Wȃ_ޏУ9?F=@ֻ4cm6 #o}ݷ$Z,>̩X 2VY#")1H_.c4h8T@pKYISO=վC>&N:Y?1*"6onf` )]1"iO'yIט@FȯZ2$ǘ777pCф[tA&~s>ֱ$r7+*DY֧O%on&t&De,ͭq^W,@טNB#F4 Æ ,I$4+`&NߵLZ3W"MތY 809`L[x )r?$MZ }Kwll@LUEۣGtX Ρ(DJq#k493"R>\ҤG+Ȝ'@RΛP$6g&L܄YYI8ov[~ y2 (<矔Ml@L`hV tJR *ajƵSYcW `/X e[ )S)ۼ7>@5x e%I(k+Mt၏v/~Ⱦà"@L(I@Y5k :"zI޵~(sof9sn2~@L&$NiϟCD̀!@ @u~O=TEK@L( ʶ "f,`I-3Oқ)cGyfpX2P:@o]bE8q4IXμ .7τ e2$(%V*?闙 Ѭ 6D?AYvl~E_( e2$Y&k ˺} ͹c`#b=ۥsJ@L(I$I@L(I$I@L(I$I@L(I$I@p3$I$e2L&y $IJ(J$IP(J$IP&J$IP&J$IP&J$IP&J$IP&J$IP&]}; Xvm;wn4iTC=>磌ʬ?$Id@)S{ %I(JZ|饗Ÿ?!j(Ҝ-֬Y#j7- j?x 56Ҝo$PV?1<׿uo^x.W /~ӟT~$4_TZqMcŊc k+ҜOQKrw׿eTo }ͅ?~(%?.UW6P}/|[߲OpH-xo4[oU0J`_ľ!/V_y\ 0">]@EsO~o? eu TVw}B{9k|  o~c0o~3|k_ -s~siʕVVjO͉'v@|-"W~:(%~_6@_W-DF42履~ /8̘1X0` ӦM3j ]9~ƃ@p+?n~/XEEgi.bsXQE_}9l/~ѠqE.\0̙3}N0`ٳW@K>;yh/}d1i|t`eIS-||"ID< ,h2 9`0Oxj G95vF=-|/}_/X~{1Z,|8J՗7 x 9'ASOmO<O=`0La̚5+,Z|Tm$H>׌5J>C|B9=!? ? eu y@ҘL` PDpMۆ7Zs7'?I^ | d+JeD[(,JI̽%t䚁_`+WuYzl1O"^xDH.%7.]j>6'̲ )k*QZڈ´e$i'"pcGGDiQG!f(%nذ 1O*gWzj#vE֯_o~{O}S3,J4]|q be3zJpqN>q |DQa!(qZ”~q9Ȩ[cc7!_=da} |B[|p2b,Iee\g.]ѣa z {ԩS𶷽--oi"ʐ~eZhn^-juEVp|ýGeJaӦo>Tx;,;Ck 5͠AO&=&Z\c%+~ҪT_;GJO>g`Q?~?WdZs幛nNAqaܹ&|@v=l\6rHn̘1ν?ׯ#]ާO&H~,R~8Bp-jrù TͰLsܵvv$;e{p]wmM @fK\;!+kG( MdYXYW/7H7 K҂m\ 5&H{|1IQ\TˇzȎK:x_R5ZsY4B>#]SQMz*]N 8ė8p/IkҜw_ŋ[KV~2|IΪ=PĤO5kGx8唓Î;X(!]zߡ2r4o}27 2ʳѣG8Y/sO#zHkҜT EXQ yF>7硔\qxofLwe˖YwtPw}QGe^k? eu _~ A3.*:ӎL` '?qE>$Ѓڬ3̷>Ú|SDmlr*c7He 8 ف#> pG#d*lO:8'4'ׅOॗ^(*,_rJ5sAK >G]zE{/R_fmCG_y}>%> >6~l|7pJE' &kx^C/~K_hO.е[װvۄm߱o{k.FD0/H"մ倒={6F?gS ;+JEyCZRcɠ޿BHw =*@Nk<77x}'M|;̙3 W<2HHti{{t$rI@^OEE(TȀ{EϘ#\wuaСј4"֩yPDB1%VpL%*t1D*%>/vZ02z1y2&(s|Bߜk q(uCus6|1IQ+u%dKC.3u"8E ^y"m⾟rơ9DP"ԗ(ǚ5kG@W^܃;n0eaR=y #N?aVx' Qk/-a Ͷ@ Jui:,ee=N?pn|6x-5/"'`;@+DgALuʔ)TK7o1侥_R?g)?ҬKJ _jG. 0>hau*o W>aӦMںqYN;-(^{%-`>MC/?}5cf@/"K1i5r]^jO_z.7%Kcڵj 6ID}w /= F7w'/<0аi&`{=:!ԭog >s,]}HʛX,^yh-&X,@waÆ}Cufr>nr F87y&I{ _J0Ϗ#Wg,7q|4#F2m @k߁mK_zI'ϟ_HC LP|V{"~eY&sko?OHt~'N$}Ҝ-bS5#7(0>ٍLH~`@H.dwLOgy3˯J3f=ᓢ!ϗ[lB8^y߿IEړU'0D ]|Ӷr|;+B\/ߓ*%>a?QHyO@OnKOώ~5zt=7Oxh!aָx|և3g4s>} ]%ֳkmnavۛOfoMD׈l\LC#H4)yu]m^t9gt}6[N˸9?i=J0Ϗ!9蝴ͦzI/NV\֧}{/)r~lbCrϺ/(Ϗv&if8jG.z Td0 c&&M'`k.k"DH2]w5t~'SzS0E˓H|Gex7=`zN?1$HS@M_!—)4H!*z|jE^ lAkvx 7l\>]g m.,) 9xpĭnYs ;kг~{XST/޴2~s?pmk$Dp:)wı `r*]~ӣkh ex90= h^$SpV y~8CަOe5 åg/ _zv#_c?NӚwͳ&`F]YN>(â#eùV~|4I% $Hgݥ\nݻ Ӛzy'CZIȞo6T^{yCJ7=J Ͷ@Hh'@T5l޵@uSqx4(>?_|,'g;|RipezM-_}s8'@`(F|: c8ovl_xWR>j/9}Žms|`>620ሴ{w3'oktRz5Tswõ>j4?h렽BABC,BE#FoiM1S9%xk׮^]qx9rƗqI8/R#\@]˲X?|-_yiāo_"G^ΈnOiOKYNě{&!e. _9? HڇqV~頞Bi6lDPǟ {>CG1(2ceƙ'w/6i6"N] RyLRuoM4!r<("׌QyP=ztc?][ֵ\~nYr}>$>i̾)4HGeW)_d乓1F5Yr A>;bwƯqQ8P/xH`[ǽW×!+SpޣsɓU t]נAoÃ=0~/ .+?D?߈wݦ[>Yb}3#]PC> IQrrG&^$|R)&d9ؕ7_.FafW_m$zGqS6e>DS_M81̞=lҙ֢1"^o*}ߏJ&_Maͺ.)Q0xD>4uh(2UOeu8i;,*O["O;|Ji;Q2t^==X/ 0< vy^wv0[0D">,R~7(eA&PV+'6fN:۞;2{.*5 mW<#`}[rEw [*T^4oHqx!^F |P H7z*x˳ t`Ȼv&t[/'ݲ@jt1ECK}'9WacmSD \O9y,O;it91tO˵2)/sl/1HؗH7,p8cu|pSȃw6~ ' uP:e-un*vwf݃>>Kҁhzq_^s}",Qq;c432s3U a,p'`9 w̬;֕ םf͛Fj;'-#S~ʷqnAD."*GKZQ(Kd403g_dS ?b==X'k^g]bOdaϘwUh*e*n ݣ@X H  sDs$dv%y_ :WB4H+˗\CcJˉwe>-#}}$muyܛJ_˹&|ߛx[{BqY'TFTHF /^|ҟ_OxΦݘPh,ưjJ> yxp5uXڣU],/C)+Q$:]'%ZMyD)~oaT)ۗ90?i>ix]Wn~L M3% ym[*]\>;oX+Nk?pN7bX·EGˈ2jG.~c d d -:"{2ȈCl]f0uu'3iNC:tBBDH`_ 6Or/c?$>JӷfE7,\\c| \?9<: G5p8.>) .g|74+*~_/^νiǩ|Ris$._ >e W|R)'Xw2}Eo}>mI&5_4EKP!Z5{IӞ댏EÎhKJ3gN8ìkin~y}OBf㗽`Km١J hÆ2 Wޔ TST:@一5'MӘ8 hK2CIQrv1UC/ :t޺! UWX8}H8X4oh?'5@γ᳟}"\w5ᴳCF C'&Y<>L;uRdRأw&H4@⊔Aa&-͇{y/2x&f{ʩ=yXI>. Ai$) (4x|R)#7mdm6`s! qO0ؗ_kF8ķ!F/חq5P_ ><@P-Do֏y@aTRT`ޑfQcݸ *]*y'̶'p۰.HcOIsNv;XQ>e41;ӴJٛJ(2+1*|*f:hSq|qb-"_3O>|O ˾/S譆H USiqR(߽&Y#m|7b_o2X^zkK ' 2 tWqppH+Ç;6W- GN520}pdžϚjbc,"MSro,ȫYQD9Hzێ|SҨv4a3~efLp_!O*Jvob@O.,=e!y3k{҆׈2y^{eӷ?_~,@Y] r(%14P: .f|Ё6x@k"p0]"|dq5xT^"훕VqJl͈'`%~Z@&thޠak@wh'E0>.s؟F%tT=}_tq 4E |R)ʏ[ߌ#8***(~hA7k_H_+0?|Y{_2"Sm}_}wrf.:0(#T c}Q(K9rU\tO >}G_ij)F"~gdzIgC7 ȃwt6ⷜ0fɀ~c'X~y}D  #PQ @$Ǥ9J'y*F{$;|Bw|96W``D18Hm.Ʉ}bs=˔2i׏@Y] 4>h( L6yq;I>& ɹlUyO\#cp+ӟ2pfC`R*@(%2בuA ċOHIky-K* C Ls> h+Uۨ\PD<¡ z"ݙvȣOt5jH5Ԁ^{EtSRDJ$0<}|0T%ŸoMIϘ҉> !? ? eu sk)SK/&V<Q}F寎#":-dEP<3GjyLܾpB{ _(5z7<'SH-+Қ4'( Y@ _Gy"`^yk~ϼhx zKQ Rˋ&I{|М+?֯@/|Q4A05s4ayo$I$Im $I$Im $I$Im rP&d2LP&d2L(d2L&d2L&2L&d2L&d2P$I$Ij;AY!IENDB`scim-master/docs/scim-config-agent.1000066400000000000000000000021511415264260100176060ustar00rootroot00000000000000.\" It was generated by help2man 1.37.1. and editted. .TH scim-config-agent "1" "June 2010" "scim: 1.4.9" "scim manuals" .SH NAME scim-config-agent \- configuration manager for scim .SH SYNOPSIS .B scim-config-agent \fI
  • The Index of the Documents
  • * */ #ifndef SCIMBRIDGEAGENT_H_ #define SCIMBRIDGEAGENT_H_ #include "scim-bridge.h" /** * The public interface of the agent. */ class ScimBridgeAgent { public: /** * Allocate an agent. * * @return A new agent. */ static ScimBridgeAgent *alloc (); /** * Destructor. */ virtual ~ScimBridgeAgent () {} /** * Set if it exits automatically when there is no client at all. * * @param enabled Give it true if you want to disable this feature. */ virtual void set_noexit_enabled (bool enabled) = 0; /** * Set if the process daemonize itself when launch () is called. * * @param enabled Give it true if you want to disable this feature. */ virtual void set_standalone_enabled (bool enabled) = 0; /** * Launch the main loop of the agent. * This funtion blocks until it quits. */ virtual retval_t launch () = 0; protected: /** * Constructor. */ ScimBridgeAgent () {} }; #endif /*SCIMBRIDGEAGENT_H_*/ scim-master/extras/immodules/agent/utils/000077500000000000000000000000001415264260100210455ustar00rootroot00000000000000scim-master/extras/immodules/agent/utils/scim-bridge-agent-panel-client.cpp000066400000000000000000000622001415264260100274030ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #define Uses_SCIM_CONFIG_PATH #include #ifndef SCIM_PANEL_PROGRAM #define SCIM_PANEL_PROGRAM (SCIM_LIBEXECDIR "/scim-panel-gtk") #endif #include "scim-bridge-agent-panel-client.h" #include "scim-bridge-output.h" using std::vector; using namespace scim; typedef Signal1 ScimBridgeAgentPanelClientSignalVoid; typedef Signal2 ScimBridgeAgentPanelClientSignalInt; typedef Signal2 ScimBridgeAgentPanelClientSignalString; typedef Signal2 ScimBridgeAgentPanelClientSignalWideString; typedef Signal4 ScimBridgeAgentPanelClientSignalStringStringTransaction; typedef Signal2 ScimBridgeAgentPanelClientSignalKeyEvent; class ScimBridgeAgentPanelClientImpl: public ScimBridgeAgentPanelClient { public: ScimBridgeAgentPanelClientImpl (const String &config_name, const ScimBridgeDisplay *display); ~ScimBridgeAgentPanelClientImpl (); int open_connection (); void close_connection (); int get_connection_number () const; bool is_connected () const; bool has_pending_event () const; retval_t filter_event (); retval_t prepare (scim_bridge_imcontext_id_t imcontext_id); retval_t send (); void turn_on (); void turn_off (); void update_screen (); void show_help (const String &help); void show_factory_menu (const vector &menu); void focus_in (const scim::String &uuid); void focus_out (); void update_factory_info (const PanelFactoryInfo &info); void update_spot_location (int x, int y); void show_preedit_string (); void show_aux_string (); void show_lookup_table (); void hide_preedit_string (); void hide_aux_string (); void hide_lookup_table (); void update_preedit_string (const WideString &str, const AttributeList &attrs); void update_preedit_caret (int cursor_position); void update_aux_string (const WideString &str, const AttributeList &attrs); void update_lookup_table (const LookupTable &table); void register_properties (const PropertyList &properties); void update_property (const Property &property); void start_helper (const String &helper_uuid); void stop_helper (const String &helper_uuid); void send_helper_event (const String &helper_uuid, const Transaction &trans); void register_input_context (const String &uuid); void remove_input_context (); Connection signal_connect_reload_config (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_exit (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_update_lookup_table_page_size (ScimBridgeAgentPanelClientSlotInt *slot); Connection signal_connect_lookup_table_page_up (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_lookup_table_page_down (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_trigger_property (ScimBridgeAgentPanelClientSlotString *slot); Connection signal_connect_process_helper_event (ScimBridgeAgentPanelClientSlotStringStringTransaction *slot); Connection signal_connect_move_preedit_caret (ScimBridgeAgentPanelClientSlotInt *slot); Connection signal_connect_select_candidate (ScimBridgeAgentPanelClientSlotInt *slot); Connection signal_connect_process_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot); Connection signal_connect_commit_string (ScimBridgeAgentPanelClientSlotWideString *slot); Connection signal_connect_forward_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot); Connection signal_connect_request_help (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_request_factory_menu (ScimBridgeAgentPanelClientSlotVoid *slot); Connection signal_connect_change_factory (ScimBridgeAgentPanelClientSlotString *slot); private: String config_name; ScimBridgeDisplay *display; SocketClient socket_client; int socket_timeout; uint32_t socket_magic_key; Transaction sending_transaction; scim_bridge_imcontext_id_t prepared_imcontext_id; ScimBridgeAgentPanelClientSignalVoid signal_reload_config; ScimBridgeAgentPanelClientSignalVoid signal_exit; ScimBridgeAgentPanelClientSignalInt signal_update_lookup_table_page_size; ScimBridgeAgentPanelClientSignalVoid signal_lookup_table_page_up; ScimBridgeAgentPanelClientSignalVoid signal_lookup_table_page_down; ScimBridgeAgentPanelClientSignalString signal_trigger_property; ScimBridgeAgentPanelClientSignalStringStringTransaction signal_process_helper_event; ScimBridgeAgentPanelClientSignalInt signal_move_preedit_caret; ScimBridgeAgentPanelClientSignalInt signal_select_candidate; ScimBridgeAgentPanelClientSignalKeyEvent signal_process_key_event; ScimBridgeAgentPanelClientSignalWideString signal_commit_string; ScimBridgeAgentPanelClientSignalKeyEvent signal_forward_key_event; ScimBridgeAgentPanelClientSignalVoid signal_request_help; ScimBridgeAgentPanelClientSignalVoid signal_request_factory_menu; ScimBridgeAgentPanelClientSignalString signal_change_factory; retval_t launch_panel (); }; /* Implementations */ ScimBridgeAgentPanelClient *ScimBridgeAgentPanelClient::alloc (const String &config_name, const ScimBridgeDisplay *display) { return new ScimBridgeAgentPanelClientImpl (config_name, display); } ScimBridgeAgentPanelClient::ScimBridgeAgentPanelClient () { } ScimBridgeAgentPanelClient::~ScimBridgeAgentPanelClient () { } ScimBridgeAgentPanelClientImpl::ScimBridgeAgentPanelClientImpl (const String &new_config_name, const ScimBridgeDisplay *new_display): config_name (new_config_name), display (NULL), socket_timeout (scim_get_default_socket_timeout ()), socket_magic_key (0), prepared_imcontext_id (-1) { display = scim_bridge_alloc_display (); scim_bridge_copy_display (display, new_display); } ScimBridgeAgentPanelClientImpl::~ScimBridgeAgentPanelClientImpl () { if (socket_client.is_connected ()) close_connection (); scim_bridge_free_display (display); } retval_t ScimBridgeAgentPanelClientImpl::launch_panel () { scim_bridge_pdebugln (7, "launch_panel ()"); String panel_program = scim_global_config_read (SCIM_GLOBAL_CONFIG_DEFAULT_PANEL_PROGRAM, String (SCIM_PANEL_PROGRAM)); if (panel_program [0] != SCIM_PATH_DELIM) panel_program = String (SCIM_LIBEXECDIR) + String (SCIM_PATH_DELIM_STRING) + panel_program; struct stat stat_buf; if (lstat (panel_program.c_str (), &stat_buf) || !S_ISREG (stat_buf.st_mode) || access (panel_program.c_str (), X_OK)) { panel_program = String (SCIM_PANEL_PROGRAM); } scim_bridge_pdebugln (5, "Launch \"%s\"", panel_program.c_str ()); if (display != NULL) { const pid_t retval = fork (); if (retval == 0) { if (daemon (0, 0) == 0) { char *display_name_cstr = strdup (scim_bridge_display_get_name (display)); char *conf_name_cstr = strdup (config_name.c_str ()); char *panel_program_cstr = strdup (panel_program.c_str ()); char *my_argv[] = {panel_program_cstr, const_cast("--no-stay"), const_cast("--display"), display_name_cstr, const_cast("-c"), conf_name_cstr, const_cast("-d"), 0}; if (execv (panel_program_cstr, my_argv)) abort (); } else { scim_bridge_perrorln ("Failed to forking for a panel process: %s", errno == 0 ? "Unknown reason":strerror (errno)); abort (); } return RETVAL_FAILED; } else if (retval > 0) { waitpid (retval, NULL, 0); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("Failed to launch a panel: %s", errno == 0 ? "Unknown reason":strerror (errno)); return RETVAL_FAILED; } } else { scim_bridge_println ("No display for the panel"); return RETVAL_FAILED; } } int ScimBridgeAgentPanelClientImpl::open_connection () { if (socket_client.is_connected ()) close_connection (); SocketAddress address (scim_get_default_panel_socket_address (scim_bridge_display_get_name (display))); if (!socket_client.connect (address)) { launch_panel (); usleep (100000); } // Try to establish the connection six times. for (int i = 0; i < 6; ++i) { if (!socket_client.connect (address)) { usleep (100000); } else { if (scim_socket_open_connection (socket_magic_key, String ("FrontEnd"), String ("Panel"), socket_client, socket_timeout)) { return socket_client.get_id (); } } socket_client.close (); } return -1; } void ScimBridgeAgentPanelClientImpl::close_connection () { socket_client.close (); socket_magic_key = 0; prepared_imcontext_id = -1; } int ScimBridgeAgentPanelClientImpl::get_connection_number () const { return socket_client.get_id (); } bool ScimBridgeAgentPanelClientImpl::is_connected () const { return socket_client.is_connected (); } bool ScimBridgeAgentPanelClientImpl::has_pending_event () const { return socket_client.is_connected () && socket_client.wait_for_data (0) > 0; } retval_t ScimBridgeAgentPanelClientImpl::filter_event () { Transaction receiving_transaction; if (!socket_client.is_connected () || !receiving_transaction.read_from_socket (socket_client, socket_timeout)) return RETVAL_FAILED; int command; if (!receiving_transaction.get_command (command) || command != SCIM_TRANS_CMD_REPLY) return RETVAL_SUCCEEDED; // No IMContext ID is available; this is a global command. if (receiving_transaction.get_data_type () == SCIM_TRANS_DATA_COMMAND) { while (receiving_transaction.get_command (command)) { switch (command) { case SCIM_TRANS_CMD_RELOAD_CONFIG: signal_reload_config (-1); break; case SCIM_TRANS_CMD_EXIT: signal_exit (-1); break; default: break; } } } else { // Check if there is a command for the specific IMContext. uint32_t imcontext_id; if (!receiving_transaction.get_data (imcontext_id)) return RETVAL_SUCCEEDED; while (receiving_transaction.get_command (command)) { switch (command) { case SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE: { uint32_t size; if (receiving_transaction.get_data (size)) signal_update_lookup_table_page_size (imcontext_id, (int) size); } break; case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP: { signal_lookup_table_page_up (imcontext_id); } break; case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN: { signal_lookup_table_page_down (imcontext_id); } break; case SCIM_TRANS_CMD_TRIGGER_PROPERTY: { String property; if (receiving_transaction.get_data (property)) signal_trigger_property (imcontext_id, property); } break; case SCIM_TRANS_CMD_PROCESS_HELPER_EVENT: { String target_uuid; String helper_uuid; Transaction trans; if (receiving_transaction.get_data (target_uuid) && receiving_transaction.get_data (helper_uuid) && receiving_transaction.get_data (trans)) signal_process_helper_event (imcontext_id, target_uuid, helper_uuid, trans); } break; case SCIM_TRANS_CMD_MOVE_PREEDIT_CARET: { uint32_t cursor_pos; if (receiving_transaction.get_data (cursor_pos)) signal_move_preedit_caret (imcontext_id, cursor_pos); } break; case SCIM_TRANS_CMD_SELECT_CANDIDATE: { uint32_t item; if (receiving_transaction.get_data (item)) signal_select_candidate (imcontext_id, item); } break; case SCIM_TRANS_CMD_PROCESS_KEY_EVENT: { KeyEvent key_event; if (receiving_transaction.get_data (key_event)) signal_process_key_event (imcontext_id, key_event); } break; case SCIM_TRANS_CMD_FORWARD_KEY_EVENT: { KeyEvent key_event; if (receiving_transaction.get_data (key_event)) signal_forward_key_event (imcontext_id, key_event); } break; case SCIM_TRANS_CMD_COMMIT_STRING: { WideString wstr; if (receiving_transaction.get_data (wstr)) signal_commit_string (imcontext_id, wstr); } break; case SCIM_TRANS_CMD_PANEL_REQUEST_HELP: { signal_request_help (imcontext_id); } break; case SCIM_TRANS_CMD_PANEL_REQUEST_FACTORY_MENU: { signal_request_factory_menu (imcontext_id); } break; case SCIM_TRANS_CMD_PANEL_CHANGE_FACTORY: { String factory_uuid; if (receiving_transaction.get_data (factory_uuid)) signal_change_factory (imcontext_id, factory_uuid); } break; default: break; } } } return RETVAL_SUCCEEDED; } retval_t ScimBridgeAgentPanelClientImpl::prepare (scim_bridge_imcontext_id_t imcontext_id) { if (!socket_client.is_connected ()) { if (open_connection ()) return RETVAL_FAILED; } if (prepared_imcontext_id == -1) { sending_transaction.clear (); sending_transaction.put_command (SCIM_TRANS_CMD_REQUEST); sending_transaction.put_data (socket_magic_key); sending_transaction.put_data ((uint32_t) imcontext_id); int command; uint32_t data; sending_transaction.get_command (command); sending_transaction.get_data (data); sending_transaction.get_data (data); prepared_imcontext_id = imcontext_id; return RETVAL_SUCCEEDED; } else { scim_bridge_pdebugln (8, "The panel client is already prepared!"); return RETVAL_FAILED; } } retval_t ScimBridgeAgentPanelClientImpl::send () { if (!socket_client.is_connected ()) return RETVAL_SUCCEEDED; if (prepared_imcontext_id == -1) return RETVAL_SUCCEEDED; prepared_imcontext_id = -1; if (sending_transaction.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) { return sending_transaction.write_to_socket (socket_client, 0x4d494353); } else { return RETVAL_SUCCEEDED; } } void ScimBridgeAgentPanelClientImpl::turn_on () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_TURN_ON); } void ScimBridgeAgentPanelClientImpl::turn_off () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_TURN_OFF); } void ScimBridgeAgentPanelClientImpl::update_screen () { if (prepared_imcontext_id != -1 && display != NULL) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_SCREEN); sending_transaction.put_data ((uint32_t) scim_bridge_display_get_screen_number (display)); } } void ScimBridgeAgentPanelClientImpl::show_help (const String &help) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_SHOW_HELP); sending_transaction.put_data (help); } } void ScimBridgeAgentPanelClientImpl::show_factory_menu (const vector &menu) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_SHOW_FACTORY_MENU); for (size_t i = 0; i < menu.size (); ++i) { sending_transaction.put_data (menu[i].uuid); sending_transaction.put_data (menu[i].name); sending_transaction.put_data (menu[i].lang); sending_transaction.put_data (menu[i].icon); } } } void ScimBridgeAgentPanelClientImpl::focus_in (const String &uuid) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_FOCUS_IN); sending_transaction.put_data (uuid); } } void ScimBridgeAgentPanelClientImpl::focus_out () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_FOCUS_OUT); } void ScimBridgeAgentPanelClientImpl::update_factory_info (const PanelFactoryInfo &info) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_UPDATE_FACTORY_INFO); sending_transaction.put_data (info.uuid); sending_transaction.put_data (info.name); sending_transaction.put_data (info.lang); sending_transaction.put_data (info.icon); } } void ScimBridgeAgentPanelClientImpl::update_spot_location (int x, int y) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_SPOT_LOCATION); sending_transaction.put_data ((uint32_t) x); sending_transaction.put_data ((uint32_t) y); } } void ScimBridgeAgentPanelClientImpl::show_preedit_string () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_PREEDIT_STRING); } void ScimBridgeAgentPanelClientImpl::show_aux_string () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_AUX_STRING); } void ScimBridgeAgentPanelClientImpl::show_lookup_table () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_LOOKUP_TABLE); } void ScimBridgeAgentPanelClientImpl::hide_preedit_string () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_PREEDIT_STRING); } void ScimBridgeAgentPanelClientImpl::hide_aux_string () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_AUX_STRING); } void ScimBridgeAgentPanelClientImpl::hide_lookup_table () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_LOOKUP_TABLE); } void ScimBridgeAgentPanelClientImpl::update_preedit_string (const WideString &str, const AttributeList &attrs) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_STRING); sending_transaction.put_data (utf8_wcstombs (str)); sending_transaction.put_data (attrs); } } void ScimBridgeAgentPanelClientImpl::update_preedit_caret (int caret) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_CARET); sending_transaction.put_data ((uint32_t) caret); } } void ScimBridgeAgentPanelClientImpl::update_aux_string (const WideString &str, const AttributeList &attrs) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_AUX_STRING); sending_transaction.put_data (utf8_wcstombs (str)); sending_transaction.put_data (attrs); } } void ScimBridgeAgentPanelClientImpl::update_lookup_table (const LookupTable &table) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE); sending_transaction.put_data (table); } } void ScimBridgeAgentPanelClientImpl::register_properties (const PropertyList &properties) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_REGISTER_PROPERTIES); sending_transaction.put_data (properties); } } void ScimBridgeAgentPanelClientImpl::update_property (const Property &property) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PROPERTY); sending_transaction.put_data (property); } } void ScimBridgeAgentPanelClientImpl::start_helper (const String &helper_uuid) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_START_HELPER); sending_transaction.put_data (helper_uuid); } } void ScimBridgeAgentPanelClientImpl::stop_helper (const String &helper_uuid) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_STOP_HELPER); sending_transaction.put_data (helper_uuid); } } void ScimBridgeAgentPanelClientImpl::send_helper_event (const String &helper_uuid, const Transaction &trans) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_SEND_HELPER_EVENT); sending_transaction.put_data (helper_uuid); sending_transaction.put_data (trans); } } void ScimBridgeAgentPanelClientImpl::register_input_context (const String &uuid) { if (prepared_imcontext_id != -1) { sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_REGISTER_INPUT_CONTEXT); sending_transaction.put_data (uuid); } } void ScimBridgeAgentPanelClientImpl::remove_input_context () { if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_REMOVE_INPUT_CONTEXT); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_reload_config (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_reload_config.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_exit (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_exit.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_update_lookup_table_page_size (ScimBridgeAgentPanelClientSlotInt *slot) { return signal_update_lookup_table_page_size.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_lookup_table_page_up (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_lookup_table_page_up.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_lookup_table_page_down (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_lookup_table_page_down.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_trigger_property (ScimBridgeAgentPanelClientSlotString *slot) { return signal_trigger_property.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_process_helper_event (ScimBridgeAgentPanelClientSlotStringStringTransaction *slot) { return signal_process_helper_event.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_move_preedit_caret (ScimBridgeAgentPanelClientSlotInt *slot) { return signal_move_preedit_caret.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_select_candidate (ScimBridgeAgentPanelClientSlotInt *slot) { return signal_select_candidate.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_process_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot) { return signal_process_key_event.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_commit_string (ScimBridgeAgentPanelClientSlotWideString *slot) { return signal_commit_string.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_forward_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot) { return signal_forward_key_event.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_request_help (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_request_help.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_request_factory_menu (ScimBridgeAgentPanelClientSlotVoid *slot) { return signal_request_factory_menu.connect (slot); } Connection ScimBridgeAgentPanelClientImpl::signal_connect_change_factory (ScimBridgeAgentPanelClientSlotString *slot) { return signal_change_factory.connect (slot); } scim-master/extras/immodules/agent/utils/scim-bridge-agent-panel-client.h000066400000000000000000000314031415264260100270510ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header of the panel clients for SCIMBridge. */ #ifndef SCIMBRIDGEAGENTPANELCLIENT_H #define SCIMBRIDGEAGENTPANELCLIENT_H #define Uses_SCIM_EVENT #define Uses_SCIM_PANEL_CLIENT #define Uses_SCIM_SIGNAL #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_SCIM_TRANS_COMMANDS #include #include "scim-bridge.h" #include "scim-bridge-display.h" #include "scim-bridge-imcontext.h" typedef scim::Slot1 ScimBridgeAgentPanelClientSlotVoid; typedef scim::Slot2 ScimBridgeAgentPanelClientSlotInt; typedef scim::Slot2 ScimBridgeAgentPanelClientSlotString; typedef scim::Slot2 ScimBridgeAgentPanelClientSlotWideString; typedef scim::Slot4 ScimBridgeAgentPanelClientSlotStringStringTransaction; typedef scim::Slot2 ScimBridgeAgentPanelClientSlotKeyEvent; /** * The class of panel clients. */ class ScimBridgeAgentPanelClient { public: /** * Alloc an panel client. * * @param config_name The name of the configuration. * @param display The display. * @return The new panel client. */ static ScimBridgeAgentPanelClient *alloc (const scim::String &config_name, const ScimBridgeDisplay *display); /** * Destructor. */ virtual ~ScimBridgeAgentPanelClient (); /** * Open a connection with the panel. */ virtual int open_connection () = 0; /** * Close a connection with the panel. */ virtual void close_connection () = 0; /** * Get the connection number with the panel. * * @return The connection number with the panel. */ virtual int get_connection_number () const = 0; /** * See if the connection with the panel is active. * * @return true if the connection is active. */ virtual bool is_connected () const = 0; /** * See if there is pending events. * * @return true if there is pending events. */ virtual bool has_pending_event () const = 0; /** * Filter events from the panel. * * @return RETVAL_FAILED if errors have occurred. */ virtual retval_t filter_event () = 0; /** * Prepare the panel to do some actions. * * @param imcontext_id. * @return RETVAL_FAILED if errors have occurred. */ virtual retval_t prepare (scim_bridge_imcontext_id_t imcontext_id) = 0; /** * Send stored commands to the panel. * * @return RETVAL_FAILED if errors have occurred. */ virtual retval_t send () = 0; /** * Turn on the IME on the panel. */ virtual void turn_on () = 0; /** * Turn off the IME on the panel. */ virtual void turn_off () = 0; /** * Update specific screen of the panel. */ virtual void update_screen () = 0; /** * Show the help text. * * @param help_text The text to show. */ virtual void show_help (const scim::String &help_text) = 0; /** * Show the factory menu. * * @param menu The menu items. */ virtual void show_factory_menu (const std::vector &menu) = 0; /** * Focus in the specific IME. * * @param uuid The uuid of the IME. */ virtual void focus_in (const scim::String &uuid) = 0; /** * Focus out the current IME. */ virtual void focus_out () = 0; /** * Update the status information of the IME on the panel. * * @param info The infomation of the IME. */ virtual void update_factory_info (const scim::PanelFactoryInfo &info) = 0; /** * Update the cursor location. * * @param x The X location of the cursor. * @param y The Y location of the cursor. */ virtual void update_spot_location (int x, int y) = 0; /** * Show the floating preedit string. */ virtual void show_preedit_string () = 0; /** * Show the aux string. */ virtual void show_aux_string () = 0; /** * Show the lookup table. */ virtual void show_lookup_table () = 0; /** * Hide the floating preedit string. */ virtual void hide_preedit_string () = 0; /** * Hide the aux string. */ virtual void hide_aux_string () = 0; /** * Hide the lookup table. */ virtual void hide_lookup_table () = 0; /** * Update the string in the flaoting preedit. * * @param str The string to show. * @param attrs The attributes of the string. */ virtual void update_preedit_string (const scim::WideString &str, const scim::AttributeList &attrs) = 0; /** * Update the cursor position in the flaoting preedit. * * @param cursor_position The cursor position. */ virtual void update_preedit_caret (int cursor_position) = 0; /** * Update the aux string. * * @param str The string to show. * @param attrs The attributes of the string. */ virtual void update_aux_string (const scim::WideString &str, const scim::AttributeList &attrs) = 0; /** * Update the lookup table. * * @param table The lookup table. */ virtual void update_lookup_table (const scim::LookupTable &table) = 0; /** * Register properties into the panel. * * @param properties The properties. */ virtual void register_properties (const scim::PropertyList &properties) = 0; /** * Update property. * * @param property The property. */ virtual void update_property (const scim::Property &property) = 0; /** * Launch a helper process. * * @param helper_uuid The uuid of the helper. */ virtual void start_helper (const scim::String &helper_uuid) = 0; /** * Shutdown a helper process. * * @param helper_uuid The uuid of the helper. */ virtual void stop_helper (const scim::String &helper_uuid) = 0; /** * Send a message to a helper. * * @param helper_uuid The uuid of the helper. * @param trans The transaction with the helper process. */ virtual void send_helper_event (const scim::String &helper_uuid, const scim::Transaction &trans) = 0; /** * Register a input context (IMContext). * * @param uuid The uuid of the IME. */ virtual void register_input_context (const scim::String &uuid) = 0; /** * Deregister the current input context (IMContext). */ virtual void remove_input_context () = 0; /** * Connect the signal of reload_config. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_reload_config (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of exit. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_exit (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of update_lookup_table_page_size. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_update_lookup_table_page_size (ScimBridgeAgentPanelClientSlotInt *slot) = 0; /** * Connect the signal of lookup_table_page_up. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_lookup_table_page_up (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of lookup_table_page_down. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_lookup_table_page_down (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of trigger_property. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_trigger_property (ScimBridgeAgentPanelClientSlotString *slot) = 0; /** * Connect the signal of process_helper_event. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_process_helper_event (ScimBridgeAgentPanelClientSlotStringStringTransaction *slot) = 0; /** * Connect the signal of move_preedit_caret. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_move_preedit_caret (ScimBridgeAgentPanelClientSlotInt *slot) = 0; /** * Connect the signal of select_candidate. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_select_candidate (ScimBridgeAgentPanelClientSlotInt *slot) = 0; /** * Connect the signal of process_key_event. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_process_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot) = 0; /** * Connect the signal of commit_string. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_commit_string (ScimBridgeAgentPanelClientSlotWideString *slot) = 0; /** * Connect the signal of forward_key_event. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_forward_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot) = 0; /** * Connect the signal of request_help. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_request_help (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of request_factory_menu. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_request_factory_menu (ScimBridgeAgentPanelClientSlotVoid *slot) = 0; /** * Connect the signal of change_factory. * * @param slot The slot to connect the signal. * @return The new connection. */ virtual scim::Connection signal_connect_change_factory (ScimBridgeAgentPanelClientSlotString *slot) = 0; protected: ScimBridgeAgentPanelClient (); }; #endif /*SCIMBRIDGEAGENTPANELCLIENT_H*/ scim-master/extras/immodules/bootstrap000077500000000000000000000016471415264260100205620ustar00rootroot00000000000000#! /bin/sh # bootstrap -- Use this script to create generated files from the CVS dist # Copyright (C) 2000 Gary V. Vaughan # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## @start 1 #! /bin/sh set -x aclocal autoheader libtoolize -c --automake automake --add-missing --copy --include-deps autoconf ## @end 1 scim-master/extras/immodules/client-clutter/000077500000000000000000000000001415264260100215455ustar00rootroot00000000000000scim-master/extras/immodules/client-clutter/Makefile.am000066400000000000000000000035571415264260100236130ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## Copyright (C) 2009, Intel Corporation. ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_CLUTTER_IMMODULE AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/extras/immodules/common \ -I$(top_srcdir)/extras/immodules/client-common noinst_HEADERS = scim-bridge-client-clutter.h scim-bridge-client-imcontext-clutter.h scim-bridge-client-key-event-utility-clutter.h moduledir = @CLUTTER_IM_MODULEDIR@ module_LTLIBRARIES = im-scim.la im_scim_la_SOURCES = im-scim-bridge-clutter.c \ scim-bridge-client-clutter.c \ scim-bridge-client-imcontext-clutter.c \ scim-bridge-client-key-event-utility-clutter.c im_scim_la_CXXFLAGS=@CLUTTER_CFLAGS@ @CLUTTERIMCONTEXT_CFLAGS@ im_scim_la_CFLAGS =@CLUTTER_CFLAGS@ @CLUTTERIMCONTEXT_CFLAGS@ im_scim_la_LDFLAGS = -rpath $(moduledir) \ -avoid-version -no-undefined \ -module \ @CLUTTER_LIBS@ @CLUTTERIMCONTEXT_LIBS@ im_scim_la_LIBADD = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \ $(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la endif MAINTAINERCLEANFILES = Makefile.in scim-master/extras/immodules/client-clutter/im-scim-bridge-clutter.c000066400000000000000000000045471415264260100261730ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include "scim-bridge.h" #include "scim-bridge-client.h" #include "scim-bridge-client-clutter.h" #include "scim-bridge-client-imcontext-clutter.h" static const ClutterIMContextInfo scim_bridge_info = { /* ID */ "scim", /* Human readable name */ "SCIM Input Method", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "clutter") */ "", /* Languages for which this module is the default */ "" }; static const ClutterIMContextInfo *info_list[] = { &scim_bridge_info }; /* Public functions */ void im_module_init (GTypeModule *type_module); void im_module_exit (void); void im_module_list (const ClutterIMContextInfo ***contexts, int *context_count); ClutterIMContext *im_module_create (const gchar *context_id); /* Implementations */ void im_module_init (GTypeModule *type_module) { scim_bridge_client_imcontext_register_type (type_module); scim_bridge_client_clutter_initialize (); static boolean first_time = TRUE; if (first_time) atexit (scim_bridge_client_clutter_finalize); first_time = FALSE; } void im_module_exit () { scim_bridge_client_clutter_finalize (); } void im_module_list (const ClutterIMContextInfo ***contexts, int *context_count) { *contexts = info_list; *context_count = G_N_ELEMENTS (info_list); } ClutterIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "scim") == 0) { return scim_bridge_client_imcontext_new (); } else { return NULL; } } scim-master/extras/immodules/client-clutter/scim-bridge-client-clutter.c000066400000000000000000000065321415264260100270400ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include "scim-bridge-client.h" #include "scim-bridge-client-clutter.h" #include "scim-bridge-client-imcontext-clutter.h" #include "scim-bridge-client-protected.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-output.h" /* Private Variables */ static GIOChannel *messenger_iochannel = NULL; static guint messenger_event_source = -1; static boolean initialized = FALSE; /* Private Functions */ static gboolean handle_message (GIOChannel *source, GIOCondition condition, gpointer data) { const int socket_fd = scim_bridge_client_get_messenger_fd (); fd_set read_set; FD_ZERO (&read_set); FD_SET (socket_fd, &read_set); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; if (select (socket_fd + 1, &read_set, NULL, NULL, &timeout) > 0) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException occurred at handle_message ()"); return FALSE; } } return TRUE; } /* Public Functions */ void scim_bridge_client_clutter_initialize () { scim_bridge_pdebugln (5, "scim_bridge_client_clutter_initialize ()"); if (initialized) { return; } else { initialized = TRUE; } if (scim_bridge_client_initialize ()) { scim_bridge_perrorln ("Failed to initialize scim-bridge..."); } else { scim_bridge_client_open_messenger (); } scim_bridge_client_imcontext_static_initialize (); } void scim_bridge_client_clutter_finalize () { scim_bridge_pdebugln (5, "scim_bridge_client_clutter_finalize ()"); if (!initialized) { return; } else { initialized = FALSE; } scim_bridge_client_finalize (); scim_bridge_client_imcontext_static_finalize (); } void scim_bridge_client_messenger_opened () { if (messenger_iochannel == NULL) { messenger_iochannel = g_io_channel_unix_new (scim_bridge_client_get_messenger_fd ()); messenger_event_source = g_io_add_watch (messenger_iochannel, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, &handle_message, NULL); } scim_bridge_client_imcontext_connection_opened (); } void scim_bridge_client_messenger_closed () { if (messenger_iochannel != NULL) { g_io_channel_unref (messenger_iochannel); messenger_iochannel = NULL; g_source_remove (messenger_event_source); messenger_event_source = -1; } scim_bridge_client_imcontext_connection_closed (); } scim-master/extras/immodules/client-clutter/scim-bridge-client-clutter.h000066400000000000000000000027431415264260100270450ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Raymond liu * @brief This header describes about the clutter client for scim-bridge. */ #ifndef SCIMBRIDGECLIENTCLUTTER_H_ #define SCIMBRIDGECLIENTCLUTTER_H_ #include "scim-bridge.h" #include "scim-bridge-key-event.h" #include "scim-bridge-imcontext.h" #ifdef __cplusplus extern "C" { #endif /** * Initialize clutter client for SCIMBridge. */ void scim_bridge_client_clutter_initialize (); /** * Finalize clutter client for SCIMBridge. */ void scim_bridge_client_clutter_finalize (); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGECLIENTCLUTTER_H_*/ scim-master/extras/immodules/client-clutter/scim-bridge-client-imcontext-clutter.c000066400000000000000000000736341415264260100310570ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include #include #include "scim-bridge-attribute.h" #include "scim-bridge-client.h" #include "scim-bridge-client-imcontext-clutter.h" #include "scim-bridge-client-key-event-utility-clutter.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-messenger.h" #include "scim-bridge-output.h" #include "scim-bridge-string.h" /* Typedef */ struct _ScimBridgeClientIMContext { ClutterIMContext parent; scim_bridge_imcontext_id_t id; char *preedit_string; size_t preedit_string_capacity; PangoAttrList *preedit_attributes; unsigned int preedit_cursor_position; boolean preedit_cursor_flicking; boolean preedit_shown; boolean preedit_started; char *commit_string; size_t commit_string_capacity; boolean enabled; ClutterStage *client_stage; int cursor_x; int cursor_y; int window_x; int window_y; }; static GType class_type = 0; static GObjectClass *root_klass = NULL; static ScimBridgeClientIMContext *focused_imcontext = NULL; static ClutterActor *focused_actor = NULL; static ClutterIMContext *fallback_imcontext = NULL; static gulong fallback_commit_handler; static gulong fallback_preedit_changed_handler; /* Class functions */ static void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data); static void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *context, ScimBridgeClientIMContextClass *klass); static void scim_bridge_client_imcontext_finalize (GObject *object); static gboolean scim_bridge_client_imcontext_filter_key_event (ClutterIMContext *context, ClutterKeyEvent *event); static void scim_bridge_client_imcontext_reset (ClutterIMContext *context); static void scim_bridge_client_imcontext_show (ClutterIMContext *context); static void scim_bridge_client_imcontext_hide (ClutterIMContext *context); static void scim_bridge_client_imcontext_get_preedit_string (ClutterIMContext *context, gchar **str, PangoAttrList **attrs, gint *cursor_pos); static void scim_bridge_client_imcontext_set_preedit_enabled (ClutterIMContext *context, gboolean enabled); static void scim_bridge_client_imcontext_focus_in (ClutterIMContext *context); static void scim_bridge_client_imcontext_focus_out (ClutterIMContext *context); static void scim_bridge_client_imcontext_set_cursor_location (ClutterIMContext *context, ClutterIMRectangle *area); /* Helper functions */ static void fallback_commit (ClutterIMContext *context, const char *str, gpointer data) { scim_bridge_pdebugln (4, "fallback_commit ()"); if (focused_imcontext != NULL && !focused_imcontext->enabled && str != NULL) { g_signal_emit_by_name (focused_imcontext, "commit", str); } } static void fallback_preedit_changed (ClutterIMContext *context, gpointer data) { scim_bridge_pdebugln (4, "fallback_preedit_changed ()"); if (focused_imcontext != NULL && !focused_imcontext->enabled && context != NULL) { gchar* preedit_string = NULL; gint preedit_cursor_position = 0; PangoAttrList *preedit_attributes = NULL; clutter_im_context_get_preedit_string (context, &preedit_string, &preedit_attributes, &preedit_cursor_position); if (preedit_string != NULL) { free (focused_imcontext->preedit_string); focused_imcontext->preedit_string = preedit_string; focused_imcontext->preedit_string_capacity = strlen (preedit_string); focused_imcontext->preedit_shown = TRUE; } else { focused_imcontext->preedit_string[0] = '\0'; focused_imcontext->preedit_shown = FALSE; } focused_imcontext->preedit_cursor_position = preedit_cursor_position; if (focused_imcontext->preedit_attributes != NULL) pango_attr_list_unref (focused_imcontext->preedit_attributes); focused_imcontext->preedit_attributes = preedit_attributes; g_signal_emit_by_name (focused_imcontext, "preedit-changed"); } } static retval_t filter_key_event (ScimBridgeClientIMContext *imcontext, ClutterKeyEvent *event, boolean *consumed) { scim_bridge_pdebugln (5, "filter_key_event ()"); if (focused_imcontext != imcontext) scim_bridge_client_imcontext_focus_in (CLUTTER_IM_CONTEXT (imcontext)); /* if the source is null, then it's the event we forward out, and we do not handle it again */ if (clutter_event_get_source ((ClutterEvent*) event) == NULL) return RETVAL_SUCCEEDED; focused_actor = clutter_event_get_source ((ClutterEvent*) event); if (scim_bridge_client_is_messenger_opened ()) { ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event (); scim_bridge_key_event_clutter_to_bridge (bridge_key_event, imcontext->client_stage, event); *consumed = FALSE; const retval_t retval_error = scim_bridge_client_handle_key_event (imcontext, bridge_key_event, consumed); scim_bridge_free_key_event (bridge_key_event); if (retval_error) { scim_bridge_perrorln ("An IOException at filter_key_event ()"); } else { return RETVAL_SUCCEEDED; } } return RETVAL_FAILED; } static retval_t set_cursor_location (ScimBridgeClientIMContext *imcontext, int window_x, int window_y, int cursor_x, int cursor_y) { scim_bridge_pdebugln (5, "set_cursor_location ()"); if (imcontext->window_x == window_x && imcontext->window_y == window_y && imcontext->cursor_x == cursor_x && imcontext->cursor_y == cursor_y) { return RETVAL_SUCCEEDED; } else { imcontext->cursor_x = cursor_x; imcontext->cursor_y = cursor_y; imcontext->window_x = window_x; imcontext->window_y = window_y; scim_bridge_pdebugln (3, "The cursor location is changed: x = %d + %d\ty = %d + %d", imcontext->window_x, imcontext->cursor_x, imcontext->window_y, imcontext->cursor_y); if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_cursor_location (imcontext, imcontext->window_x + imcontext->cursor_x, imcontext->window_y + imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException occurred at set_cursor_location ()"); return RETVAL_FAILED; } else { return RETVAL_SUCCEEDED; } } } return RETVAL_FAILED; } static boolean is_precise_cursor_enabled () { static boolean first_time = TRUE; static boolean precise_cursor_enabled = FALSE; if (first_time) { char *env_precise_cursor_enabled = getenv ("SCIM_BRIDGE_PRECISE_CURSOR_ENABLED"); if (env_precise_cursor_enabled != NULL) scim_bridge_string_to_boolean (&precise_cursor_enabled, env_precise_cursor_enabled); first_time = FALSE; } return precise_cursor_enabled; } /* Bindings */ void scim_bridge_client_imcontext_set_id (ScimBridgeClientIMContext *imcontext, scim_bridge_imcontext_id_t new_id) { imcontext->id = new_id; } scim_bridge_imcontext_id_t scim_bridge_client_imcontext_get_id (const ScimBridgeClientIMContext *imcontext) { return imcontext->id; } void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *preedit_string) { if (imcontext->preedit_string != NULL && preedit_string != NULL && !strcmp (imcontext->preedit_string, preedit_string)) return; size_t preedit_string_length; if (preedit_string != NULL) { preedit_string_length = strlen (preedit_string); } else { preedit_string_length = 0; } if (imcontext->preedit_string_capacity <= preedit_string_length) { imcontext->preedit_string_capacity = preedit_string_length; free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char) * (imcontext->preedit_string_capacity + 1)); } if (preedit_string_length > 0) { strcpy (imcontext->preedit_string, preedit_string); } else { imcontext->preedit_string[0] = '\0'; } } void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean preedit_shown) { imcontext->preedit_shown = preedit_shown; if (!preedit_shown) { free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_attributes != NULL) { pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; } } } void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position) { imcontext->preedit_cursor_position = cursor_position; } void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, ScimBridgeAttribute** const preedit_attributes, int attribute_count) { } void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext) { if (imcontext->preedit_shown && !imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-start"); imcontext->preedit_started = TRUE; } if (is_precise_cursor_enabled ()) { const size_t old_cursor_position = imcontext->preedit_cursor_position; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_string != NULL) imcontext->preedit_cursor_position = g_utf8_strlen (imcontext->preedit_string, -1); imcontext->preedit_cursor_flicking = TRUE; g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); imcontext->preedit_cursor_position = old_cursor_position; imcontext->preedit_cursor_flicking = FALSE; } g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); if (!imcontext->preedit_shown && imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-end"); imcontext->preedit_started = FALSE; } } void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *commit_string) { size_t commit_string_length; if (commit_string != NULL) { commit_string_length = strlen (commit_string); } else { commit_string_length = 0; } if (imcontext->commit_string_capacity <= commit_string_length) { imcontext->commit_string_capacity = commit_string_length; free (imcontext->commit_string); imcontext->commit_string = malloc (sizeof (char) * (imcontext->commit_string_capacity + 1)); } if (commit_string_length > 0) { strcpy (imcontext->commit_string, commit_string); } else { imcontext->commit_string[0] = '\0'; } } void scim_bridge_client_imcontext_commit (ScimBridgeClientIMContext *imcontext) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "commit", imcontext->commit_string); } void scim_bridge_client_imcontext_beep (ScimBridgeClientIMContext *imcontext) { } boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position) { char *str; int cur_pos_in_utf8; if (clutter_im_context_get_surrounding (CLUTTER_IM_CONTEXT (imcontext), &str, &cur_pos_in_utf8)) { const size_t fetch_wstr_length = g_utf8_strlen (str, -1); const size_t after_wstr_length = g_utf8_strlen (str + cur_pos_in_utf8, -1); const size_t before_wstr_length = fetch_wstr_length - after_wstr_length; size_t before_copy_wstr_length; size_t after_copy_wstr_length; if (after_wstr_length > after_max) { after_copy_wstr_length = after_max; } else { after_copy_wstr_length = after_wstr_length; } if (before_wstr_length > before_max) { before_copy_wstr_length = before_max; } else { before_copy_wstr_length = before_wstr_length; } const size_t begin_wstr_index = before_wstr_length - before_copy_wstr_length; const size_t end_wstr_index = fetch_wstr_length - (after_wstr_length - after_copy_wstr_length); char* begin_str_ptr = g_utf8_offset_to_pointer (str, begin_wstr_index); char* end_str_ptr = g_utf8_offset_to_pointer (str, end_wstr_index); size_t str_length = end_str_ptr - begin_str_ptr; *string = malloc (sizeof (char) * (str_length + 1)); strncpy (*string, begin_str_ptr, str_length); (*string)[str_length] = '\0'; *cursor_position = before_copy_wstr_length; g_free (str); return TRUE; } else { *string = NULL; return FALSE; } } boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length) { boolean retval = clutter_im_context_delete_surrounding (CLUTTER_IM_CONTEXT (imcontext), offset, length); return retval; } boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string) { clutter_im_context_set_surrounding (CLUTTER_IM_CONTEXT (imcontext), string, -1, cursor_position); return TRUE; } void scim_bridge_client_imcontext_forward_key_event (ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event) { ClutterKeyEvent clutter_event; scim_bridge_key_event_bridge_to_clutter (&clutter_event, imcontext->client_stage, key_event); if (imcontext == focused_imcontext && focused_actor != NULL) { const char *signal_name = NULL; if (scim_bridge_key_event_is_pressed (key_event)) { signal_name = "key-press-event"; } else { signal_name = "key-release-event"; } gboolean consumed = FALSE; g_signal_emit_by_name (focused_actor, signal_name, &clutter_event, &consumed); } else { //gdk_event_put ((GdkEvent*) &clutter_event); } } void scim_bridge_client_imcontext_imengine_status_changed (ScimBridgeClientIMContext *imcontext, boolean enabled) { if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } else { clutter_im_context_reset (CLUTTER_IM_CONTEXT (fallback_imcontext)); } } imcontext->enabled = enabled; } /* Class Implementations */ void scim_bridge_client_imcontext_static_initialize () { focused_imcontext = NULL; fallback_imcontext = clutter_im_context_simple_new (); fallback_commit_handler = g_signal_connect (G_OBJECT (fallback_imcontext), "commit", G_CALLBACK (fallback_commit), NULL); fallback_preedit_changed_handler = g_signal_connect (G_OBJECT (fallback_imcontext), "preedit_changed", G_CALLBACK (fallback_preedit_changed), NULL); } void scim_bridge_client_imcontext_static_finalize () { g_signal_handlers_disconnect_by_func (fallback_imcontext, &fallback_commit_handler, NULL); g_object_unref (fallback_imcontext); fallback_imcontext = NULL; focused_imcontext = NULL; } void scim_bridge_client_imcontext_connection_opened () { } void scim_bridge_client_imcontext_connection_closed () { if (focused_imcontext != NULL) scim_bridge_client_imcontext_set_preedit_shown (focused_imcontext, FALSE); } void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data) { root_klass = (GObjectClass *) g_type_class_peek_parent (klass); ClutterIMContextClass *clutter_im_klass = CLUTTER_IM_CONTEXT_CLASS (klass); clutter_im_klass->filter_keypress = scim_bridge_client_imcontext_filter_key_event; clutter_im_klass->reset = scim_bridge_client_imcontext_reset; clutter_im_klass->show = scim_bridge_client_imcontext_show; clutter_im_klass->hide = scim_bridge_client_imcontext_hide; clutter_im_klass->get_preedit_string = scim_bridge_client_imcontext_get_preedit_string; clutter_im_klass->focus_in = scim_bridge_client_imcontext_focus_in; clutter_im_klass->focus_out = scim_bridge_client_imcontext_focus_out; clutter_im_klass->set_cursor_location = scim_bridge_client_imcontext_set_cursor_location; clutter_im_klass->set_use_preedit = scim_bridge_client_imcontext_set_preedit_enabled; GObjectClass *gobject_klass = G_OBJECT_CLASS (klass); gobject_klass->finalize = scim_bridge_client_imcontext_finalize; } GType scim_bridge_client_imcontext_get_type () { return class_type; } void scim_bridge_client_imcontext_register_type (GTypeModule *type_module) { scim_bridge_pdebugln (2, "scim_bridge_client_imcontext_register_type ()"); static const GTypeInfo klass_info = { sizeof (ScimBridgeClientIMContextClass), /* no base class initializer */ NULL, /* no base class finalizer */ NULL, /* class initializer */ (GClassInitFunc) scim_bridge_client_imcontext_class_initialize, /* no class finalizer */ NULL, /* no class data */ NULL, sizeof (ScimBridgeClientIMContext), 0, /* object initizlier */ (GInstanceInitFunc) scim_bridge_client_imcontext_initialize, }; if (!class_type) class_type = g_type_module_register_type (type_module, CLUTTER_TYPE_IM_CONTEXT, "ScimBridgeClientIMContext", &klass_info, 0); } ClutterIMContext *scim_bridge_client_imcontext_new () { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_new ()"); ScimBridgeClientIMContext *ic = SCIM_BRIDGE_CLIENT_IMCONTEXT (g_object_new (CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT, NULL)); return CLUTTER_IM_CONTEXT (ic); } void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *imcontext, ScimBridgeClientIMContextClass *klass) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_initialize ()"); imcontext->preedit_shown = FALSE; imcontext->preedit_started = FALSE; imcontext->preedit_cursor_position = 0; imcontext->preedit_cursor_flicking = FALSE; imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_attributes = NULL; imcontext->commit_string = malloc (sizeof (char)); imcontext->commit_string[0] = '\0'; imcontext->commit_string_capacity = 0; imcontext->enabled = FALSE; imcontext->client_stage = NULL; imcontext->id = -1; if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_register_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to register the IMContext"); } else { scim_bridge_pdebugln (1, "IMContext registered: id = %d", imcontext->id); } } void scim_bridge_client_imcontext_finalize (GObject *object) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_finalize ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (object); if (imcontext == focused_imcontext) scim_bridge_client_imcontext_focus_out (CLUTTER_IM_CONTEXT (imcontext)); if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_deregister_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to deregister an IMContext"); } else { scim_bridge_pdebugln (3, "IMContext deregistered: id = %d", imcontext->id); } if (imcontext->client_stage) g_object_unref (imcontext->client_stage); free (imcontext->preedit_string); free (imcontext->commit_string); if (imcontext->preedit_attributes != NULL) pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; root_klass->finalize (object); } /* Class functions */ gboolean scim_bridge_client_imcontext_filter_key_event (ClutterIMContext *context, ClutterKeyEvent *event) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_filter_key_event ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (scim_bridge_client_is_messenger_opened () && imcontext != NULL ) { if (context->actor != NULL) { ClutterActor *stage = clutter_actor_get_stage (context->actor); Window current_window, root, parent, *childs; unsigned int nchild; XWindowAttributes winattr; Display *xdpy; gfloat new_window_x_float; gfloat new_window_y_float; int new_window_x; int new_window_y; clutter_actor_get_transformed_position ( context->actor, &new_window_x_float, &new_window_y_float); new_window_x = (int)new_window_x_float; new_window_y = (int)new_window_y_float; xdpy = clutter_x11_get_default_display (); current_window = clutter_x11_get_stage_window(CLUTTER_STAGE(stage)); while(1) { XGetWindowAttributes (xdpy, current_window, &winattr); new_window_x += winattr.x; new_window_y += winattr.y; XQueryTree(xdpy, current_window, &root, &parent, &childs, &nchild); current_window = parent; if (root == parent) break; } if (imcontext->window_x != new_window_x || imcontext->window_y != new_window_y) { imcontext->window_x = new_window_x; imcontext->window_y = new_window_y; scim_bridge_pdebugln (1, "The cursor location is changed: x = %d + %d\ty = %d + %d", imcontext->window_x, imcontext->cursor_x, imcontext->window_y, imcontext->cursor_y); if (set_cursor_location (imcontext, new_window_x, new_window_y, imcontext->cursor_x, imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_filter_key_event ()"); return clutter_im_context_filter_keypress (fallback_imcontext, event); } } } boolean consumed = FALSE; if (filter_key_event (imcontext, event, &consumed)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_filter_key_event ()"); } else if (consumed) { return TRUE; } } if (imcontext == NULL || !imcontext->enabled) { return clutter_im_context_filter_keypress (fallback_imcontext, event); } return FALSE; } void scim_bridge_client_imcontext_reset (ClutterIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_reset ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != focused_imcontext) return; if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_reset_imcontext (imcontext)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_reset ()"); } } } void scim_bridge_client_imcontext_show(ClutterIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_show ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (scim_bridge_client_is_messenger_opened () && imcontext != NULL && !imcontext->enabled) { scim_bridge_client_imcontext_focus_in (context); if (scim_bridge_client_set_imcontext_enabled (imcontext, TRUE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_show ()"); } } } void scim_bridge_client_imcontext_hide(ClutterIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_hide ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (scim_bridge_client_is_messenger_opened () && imcontext != NULL && imcontext->enabled) { if (scim_bridge_client_set_imcontext_enabled (imcontext, FALSE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_hide ()"); } } scim_bridge_client_imcontext_focus_out (context); } void scim_bridge_client_imcontext_get_preedit_string (ClutterIMContext *context, gchar **str, PangoAttrList **pango_attrs, gint *cursor_pos) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_get_preedit_string ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (scim_bridge_client_is_messenger_opened () && imcontext != NULL && imcontext->preedit_shown) { const size_t preedit_string_length = strlen (imcontext->preedit_string); const size_t preedit_wstring_length = g_utf8_strlen (imcontext->preedit_string, -1); if (str) { if (preedit_string_length > 0) { *str = g_strdup (imcontext->preedit_string); } else { *str = g_strdup (""); } } if (cursor_pos) { if (imcontext->preedit_cursor_position > preedit_wstring_length) { *cursor_pos = preedit_wstring_length; } else { *cursor_pos = imcontext->preedit_cursor_position; } } if (pango_attrs) { *pango_attrs = imcontext->preedit_attributes; pango_attr_list_ref (imcontext->preedit_attributes); } } else { if (str) *str = g_strdup (""); if (cursor_pos) *cursor_pos = 0; if (pango_attrs) *pango_attrs = pango_attr_list_new (); } } void scim_bridge_client_imcontext_focus_in (ClutterIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_in ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (focused_imcontext != NULL && focused_imcontext != imcontext) scim_bridge_client_imcontext_focus_out (CLUTTER_IM_CONTEXT (focused_imcontext)); focused_imcontext = imcontext; if (!scim_bridge_client_is_messenger_opened () && scim_bridge_client_is_reconnection_enabled ()) { scim_bridge_pdebugln (7, "Trying to open the connection again..."); scim_bridge_client_open_messenger (); } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, TRUE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_in ()"); } } } void scim_bridge_client_imcontext_focus_out (ClutterIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_out ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); focused_actor = NULL; focused_imcontext = imcontext; if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } else { clutter_im_context_reset (CLUTTER_IM_CONTEXT (fallback_imcontext)); } } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, FALSE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_out ()"); } } focused_imcontext = NULL; } void scim_bridge_client_imcontext_set_client_stage (ClutterIMContext *context, ClutterStage *new_stage) { scim_bridge_pdebugln (7, "scim_bridge_client_imcontext_set_client_stage ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != NULL) { if (imcontext->client_stage != NULL) g_object_unref (imcontext->client_stage); imcontext->client_stage = new_stage; if (new_stage != NULL) { g_object_ref (new_stage); } } } void scim_bridge_client_imcontext_set_cursor_location (ClutterIMContext *context, ClutterIMRectangle *area) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_set_cursor_location ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext->preedit_cursor_flicking) return; if (imcontext != NULL && context->actor != NULL) { const int new_cursor_x = area->x + area->width; const int new_cursor_y = area->y + area->height + 8; if (set_cursor_location (imcontext, imcontext->window_x, imcontext->window_y, new_cursor_x, new_cursor_y)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()"); } } } void scim_bridge_client_imcontext_set_preedit_enabled (ClutterIMContext *context, gboolean enabled) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_set_preedit_enabled ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != NULL) { if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_preedit_mode (imcontext, enabled ? PREEDIT_EMBEDDED:PREEDIT_ANY)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_preedit_enabled ()"); } } } } scim-master/extras/immodules/client-clutter/scim-bridge-client-imcontext-clutter.h000066400000000000000000000061441415264260100310540ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Raymond liu * @brief This is the header for clutter imcontext of scim-bridge. */ #ifndef SCIMBRIDGECLIENTIMCONTEXTCLUTTER_H_ #define SCIMBRIDGECLIENTIMCONTEXTCLUTTER_H_ #include #include #include #include "scim-bridge.h" #include "scim-bridge-client-imcontext.h" #define CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT (scim_bridge_client_imcontext_get_type ()) #define SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContext)) #define SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT(class) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT)) #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT)) #define SCIM_BRIDGE_CLIENT_IMCONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) struct _ScimBridgeClientIMContextClass { ClutterIMContextClass parent_class; }; /** * IMContext class for clutter client. */ typedef struct _ScimBridgeClientIMContextClass ScimBridgeClientIMContextClass; /** * Initialize IMContext class itself. */ void scim_bridge_client_imcontext_static_initialize (); /** * Finalize IMContext class itself. */ void scim_bridge_client_imcontext_static_finalize (); /** * The connection with the agent is opened. */ void scim_bridge_client_imcontext_connection_opened (); /** * The connection with the agent is closed. */ void scim_bridge_client_imcontext_connection_closed (); /** * Allocate an IMContext. * * @return new IMContext. */ ClutterIMContext *scim_bridge_client_imcontext_new (); /** * Get the type value of IMContexts. * * @return The type value of IMContexts. */ GType scim_bridge_client_imcontext_get_type (); /** * Register the type value for IMContexts. * * @param type_module The type module. */ void scim_bridge_client_imcontext_register_type (GTypeModule *type_module); #endif /*SCIMBRIDGECLIENTIMCONTEXTCLUTTER_H_*/ scim-master/extras/immodules/client-clutter/scim-bridge-client-key-event-utility-clutter.c000066400000000000000000000076141415264260100324500ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include "scim-bridge-client-key-event-utility-clutter.h" #include "scim-bridge-key-event.h" /* Implementations */ void scim_bridge_key_event_bridge_to_clutter (ClutterKeyEvent *clutter_key_event, ClutterStage *client_stage, const ScimBridgeKeyEvent *key_event) { clutter_key_event->flags = 0; clutter_key_event->source = NULL; clutter_key_event->hardware_keycode = 0; /* not needed */ clutter_key_event->unicode_value = 0; clutter_key_event->modifier_state = 0; clutter_key_event->device = NULL; /* not needed */ if (scim_bridge_key_event_is_shift_down (key_event)) clutter_key_event->modifier_state |= CLUTTER_SHIFT_MASK; if (scim_bridge_key_event_is_caps_lock_down (key_event)) clutter_key_event->modifier_state |= CLUTTER_LOCK_MASK; if (scim_bridge_key_event_is_control_down (key_event)) clutter_key_event->modifier_state |= CLUTTER_CONTROL_MASK; if (scim_bridge_key_event_is_alt_down (key_event)) clutter_key_event->modifier_state |= CLUTTER_MOD1_MASK; /*if (scim_bridge_key_event_is_num_lock_down (key_event)) clutter_key_event->modifier_state |= CLUTTER_MOD2_MASK;*/ if (scim_bridge_key_event_is_pressed (key_event)) { clutter_key_event->type = CLUTTER_KEY_PRESS; } else { clutter_key_event->type = CLUTTER_KEY_RELEASE; clutter_key_event->modifier_state |= CLUTTER_RELEASE_MASK; } clutter_key_event->stage = client_stage; struct timeval current_time; gettimeofday (¤t_time, NULL); clutter_key_event->time = current_time.tv_sec * 1000 + current_time.tv_usec / 1000; clutter_key_event->keyval = scim_bridge_key_event_get_code (key_event); } void scim_bridge_key_event_clutter_to_bridge (ScimBridgeKeyEvent *bridge_key_event, ClutterStage *stage, const ClutterKeyEvent *key_event) { // Use Key Symbole provided by clutter. scim_bridge_key_event_set_code (bridge_key_event, (scim_bridge_key_code_t) key_event->keyval); scim_bridge_key_event_clear_modifiers (bridge_key_event); if (key_event->modifier_state & CLUTTER_SHIFT_MASK || key_event->keyval == CLUTTER_Shift_L || key_event->keyval == CLUTTER_Shift_R) scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); if (key_event->modifier_state & CLUTTER_LOCK_MASK || key_event->keyval == CLUTTER_Caps_Lock) scim_bridge_key_event_set_caps_lock_down (bridge_key_event, TRUE); if (key_event->modifier_state & CLUTTER_CONTROL_MASK || key_event->keyval == CLUTTER_Control_L || key_event->keyval == CLUTTER_Control_R) scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); if (key_event->modifier_state & CLUTTER_MOD1_MASK || key_event->keyval == CLUTTER_Alt_L || key_event->keyval == CLUTTER_Alt_R) scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); /*if (key_event->modifier_state & CLUTTER_MOD2_MASK) scim_bridge_key_event_set_num_lock_down (bridge_key_event, TRUE);*/ if (key_event->type != CLUTTER_KEY_RELEASE) { scim_bridge_key_event_set_pressed (bridge_key_event, TRUE); } else { scim_bridge_key_event_set_pressed (bridge_key_event, FALSE); } } scim-master/extras/immodules/client-clutter/scim-bridge-client-key-event-utility-clutter.h000066400000000000000000000037661415264260100324610ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * Copyright (C) 2009, Intel Corporation. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Raymond liu * @brief This is the header of the functions to translate key events between scim-bridge and clutter. */ #ifndef SCIMBRIDGECLIENTKEYEVENTUTILITYCLUTTER_H_ #define SCIMBRIDGECLIENTKEYEVENTUTILITYCLUTTER_H_ #include #include "scim-bridge.h" #include "scim-bridge-key-event.h" /** * Translate a key event from scim-bridge into clutter. * * @param clutter_key_event A key event of clutter. * @param client_stage The clutter stage for the key event. * @param key_event The key event from scim-bridge. */ void scim_bridge_key_event_bridge_to_clutter (ClutterKeyEvent *clutter_key_event, ClutterStage *client_stage, const ScimBridgeKeyEvent *key_event); /** * Translate a key event from clutter into scim-bridge. * * @param bridge_key_event A key event of scim-bridge. * @param client_stage The clutter stage for the key event. * @param key_event The key event from clutter. */ void scim_bridge_key_event_clutter_to_bridge (ScimBridgeKeyEvent *bridge_key_event, ClutterStage *client_stage, const ClutterKeyEvent *key_event); #endif /*SCIMBRIDGECLIENTKEYEVENTUTILITYCLUTTER_H_*/ scim-master/extras/immodules/client-common/000077500000000000000000000000001415264260100213535ustar00rootroot00000000000000scim-master/extras/immodules/client-common/Makefile.am000066400000000000000000000041761415264260100234170ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_IMMODULE AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/data \ -I$(top_srcdir)/utils \ -I$(top_srcdir)/extras/panel \ -I$(top_srcdir)/extras/immodules/common \ -I$(top_srcdir)/extras/immodules/client-common \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" \ -DSCIM_KEYBOARD_ICON_FILE=\"@SCIM_ICONDIR@/keyboard.png\" noinst_HEADERS = scim-bridge-client.h scim-bridge-client-protected.h scim-bridge-client-imcontext.h noinst_LTLIBRARIES = libscimbridgeclientcommon.la libscimbridgeclientcommon_la_SOURCES = scim-bridge-client.c \ scim-bridge-client-output.c \ scim-bridge-client-debug.c #libscimbridgeclientcommon_la_CFLAGS = @SCIM_CFLAGS@ #libscimbridgeclientcommon_la_CXXFLAGS = @SCIM_CFLAGS@ #libscimbridgeclientcommon_la_LDFLAGS = @SCIM_LIBS@ endif MAINTAINERCLEANFILES = Makefile.in scim-master/extras/immodules/client-common/scim-bridge-client-debug.c000066400000000000000000000027641415264260100262550ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include "scim-bridge-debug.h" #include "scim-bridge-string.h" /* Static variables */ static scim_bridge_debug_level_t debug_level = -1; /* Private function */ static void static_initialize () { int debug_level_int; char *debug_level_str = getenv ("SCIM_BRIDGE_DEBUG_LEVEL"); if (debug_level_str == NULL || scim_bridge_string_to_int (&debug_level_int, debug_level_str)) { debug_level = 0; } else { debug_level = debug_level_int; if (debug_level > 10) debug_level = 10; } } /* Implementations */ scim_bridge_debug_level_t scim_bridge_debug_get_level () { if (debug_level < 0) static_initialize (); return debug_level; } scim-master/extras/immodules/client-common/scim-bridge-client-imcontext.h000066400000000000000000000146061415264260100272040ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the common header of IMContext over the all clients. */ #ifndef SCIMBRIDGECLIENTIMCONTEXT_H_ #define SCIMBRIDGECLIENTIMCONTEXT_H_ #include "scim-bridge.h" #include "scim-bridge-attribute.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-key-event.h" /** * The struct of IMContext. */ typedef struct _ScimBridgeClientIMContext ScimBridgeClientIMContext; #ifdef __cplusplus extern "C" { #endif /** * Set the id of an IMContext. * * @param imcontext The IMContext. * @param new_id The new id. */ void scim_bridge_client_imcontext_set_id (ScimBridgeClientIMContext *imcontext, scim_bridge_imcontext_id_t new_id); /** * Get the id of an IMContext. * This function should return -1 if it's not been registered to the agent. * * @param imcontext The IMContext. * @return The id of the IMContext. */ scim_bridge_imcontext_id_t scim_bridge_client_imcontext_get_id (const ScimBridgeClientIMContext *imcontext); /** * Set the preedit string of an IMContext. * * @param imcontext The IMContext. * @param preedit_string The preedit string encoded in UTF8. */ void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *preedit_string); /** * Set the visibility of the preedit of an IMContext. * * @param imcontext The IMContext. * @param preedit_shown The visibility of the preedit. */ void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean preedit_shown); /** * Set the cursor position (= caret index) in the preedit of an IMContext. * * @param imcontext The IMContext. * @param cursor_position The cursor position. */ void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position); /** * Set the attributes (= appearance) of the preedit string. * * @param imcontext The IMContext. * @param preedit_attributes The array of the attributes. * @param attribute_count The number of attributes. */ void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, ScimBridgeAttribute** const preedit_attributes, int attribute_count); /** * Update the preedit of an IMContext. * * @param imcontext The IMContext. */ void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext); /** * Set the commit string of an IMContext. * * @param imcontext The IMContext. * @param commit_string The commit string encoded in UTF8. */ void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *commit_string); /** * Commit a string. * * @param imcontext The IMContext. */ void scim_bridge_client_imcontext_commit (ScimBridgeClientIMContext *imcontext); /** * Make a beep sound. * * @param imcontext The IMContext. */ void scim_bridge_client_imcontext_beep (ScimBridgeClientIMContext *imcontext); /** * Add an dummy event into the GUI event queue. * * @param imcontext The IMContext. * @param key_event The dummy key event. */ void scim_bridge_client_imcontext_forward_key_event (ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event); /** * Get the surrounding text of an IMContext. * * @param imcontext The IMContext. * @param before_max The maximum number of characters (in wchar) to fetch before the cursor (= caret). * @param after_max The maximum number of characters (in wchar) to fetch after the cursor (= caret). * @param string The pointer for the gotten string. * @param cursor_position The cursor position in the gotten string (in wchar). * @return It returns TRUE if succeeded to get it, otherwise it returns FALSE. */ boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position); /** * Delete the surrounding text of an IMContext. * The string reffered as "the surrounding text" here is the string gotten by get_surrounding_text () previously. * * @param imcontext The IMContext. * @param offset The begining offset (in wchar) of the part of the surrounding string to remove. * @param length The length (in wchar) of the part of the surrounding string to remove. */ boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length); /** * Replace the surrounding text of an IMContext. * The string reffered as "the surrounding text" here is the string gotten by get_surrounding_text () previously. * * @param imcontext The IMContext. * @param cursor_position The cursor position (in wchar) in the new surrounding string. * @param string The new surrounding text encoded in UTF8. */ boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string); /** * Notify the status of the IMEngine has been changed. * * @param imcontext The IMContext. * @param enabled The new status. */ void scim_bridge_client_imcontext_imengine_status_changed (ScimBridgeClientIMContext *imcontext, boolean enabled); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGECLIENTIMCONTEXT_H_*/ scim-master/extras/immodules/client-common/scim-bridge-client-output.c000066400000000000000000000053111415264260100265160ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include "scim-bridge-debug.h" #include "scim-bridge-output.h" /* Implementations */ void scim_bridge_println (const char *string,...) { va_list ap; const size_t str_length = strlen (string); char *format = malloc (sizeof (char) * (str_length + 2)); strcpy (format, string); format[str_length] = '\n'; format[str_length + 1] = '\0'; va_start (ap, string); vfprintf (stdout, format, ap); va_end (ap); free (format); } void scim_bridge_perrorln (const char *string,...) { va_list ap; const size_t str_length = strlen (string); char *format = malloc (sizeof (char) * (str_length + 2)); strcpy (format, string); format[str_length] = '\n'; format[str_length + 1] = '\0'; va_start (ap, string); vfprintf (stderr, format, ap); va_end (ap); free (format); } void scim_bridge_pdebugln (scim_bridge_debug_level_t level, const char *string,...) { if ((10 - level) <= scim_bridge_debug_get_level ()) { va_list ap; va_start (ap, string); const size_t str_length = strlen (string); char *format = malloc (sizeof (char) * (str_length + 2)); strcpy (format, string); format[str_length] = '\n'; format[str_length + 1] = '\0'; vfprintf (stdout, format, ap); va_end (ap); free (format); } } void scim_bridge_print (const char *string,...) { va_list ap; va_start (ap, string); vfprintf (stdout, string, ap); va_end (ap); } void scim_bridge_perror (const char *string,...) { va_list ap; va_start (ap, string); vfprintf (stderr, string, ap); va_end (ap); } void scim_bridge_pdebug (scim_bridge_debug_level_t level, const char *string,...) { if ((10 - level) <= scim_bridge_debug_get_level ()) { va_list ap; va_start (ap, string); vfprintf (stdout, string, ap); va_end (ap); } } scim-master/extras/immodules/client-common/scim-bridge-client-protected.h000066400000000000000000000025641415264260100271630ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header for the protected interfaces of the clients. */ #ifndef SCIMBRIDGECLIENTPROTECTED_H_ #define SCIMBRIDGECLIENTPROTECTED_H_ #ifdef __cplusplus extern "C" { #endif /** * The connection is established with the agent. */ void scim_bridge_client_messenger_opened (); /** * The connection with the agent is closed. */ void scim_bridge_client_messenger_closed (); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGECLIENTPROTECTED_H_*/ scim-master/extras/immodules/client-common/scim-bridge-client.c000066400000000000000000002334101415264260100251630ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include #include #include #include "scim-bridge-client.h" #include "scim-bridge-client-imcontext.h" #include "scim-bridge-client-protected.h" #include "scim-bridge-message-constant.h" #include "scim-bridge-messenger.h" #include "scim-bridge-output.h" #include "scim-bridge-path.h" #include "scim-bridge-string.h" /* Private data type */ typedef struct _IMContextListElement { struct _IMContextListElement *prev; struct _IMContextListElement *next; ScimBridgeClientIMContext *imcontext; } IMContextListElement; typedef struct _IMContextList { IMContextListElement *first; IMContextListElement *last; ScimBridgeClientIMContext *found_imcontext; size_t size; } IMContextList; typedef enum _scim_bridge_response_status { RESPONSE_PENDING, RESPONSE_SUCCEEDED, RESPONSE_FAILED, RESPONSE_DONE, } scim_bridge_response_status; typedef struct _ScimBridgeResponse { scim_bridge_response_status status; const char *header; boolean consumed; scim_bridge_imcontext_id_t imcontext_id; } ScimBridgeResponse; /* Private variables */ static ScimBridgeResponse pending_response; static ScimBridgeMessenger *messenger = NULL; static IMContextList imcontext_list; static boolean initialized = FALSE; /* Helper Functions */ static boolean check_scim_binary () { scim_bridge_pdebugln (1, "Checking SCIM binary..."); FILE *pout = popen ("scim -h", "r"); if (pout != NULL) { pclose (pout); return TRUE; } else { scim_bridge_perrorln("Error (%d): %s", errno, strerror (errno)); return FALSE; } } static retval_t launch_agent () { scim_bridge_pdebugln (1, "Invoking the agent..."); FILE *pout = popen (scim_bridge_path_get_agent (), "r"); if (pout != NULL) { pclose (pout); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("Failed to invoking the agent: %s", strerror (errno)); return RETVAL_FAILED; } } /* Message Handlers */ static retval_t received_message_unknown (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); scim_bridge_perror ("Unknown message: %s", header); int i; for (i = 0; i < scim_bridge_message_get_argument_count (message); ++i) { scim_bridge_perror (" %s", scim_bridge_message_get_argument (message, i)); } scim_bridge_perrorln (""); // Just ignore it. return RETVAL_SUCCEEDED; } static retval_t received_message_imengine_status_changed (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *enabled_str = scim_bridge_message_get_argument (message, 1); scim_bridge_imcontext_id_t ic_id; boolean enabled; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_boolean (&enabled, enabled_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s)", header, ic_id_str, enabled_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_imengine_status_changed (imcontext, enabled); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_preedit_mode_changed (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_imcontext_registered (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { const char *ic_id_str = scim_bridge_message_get_argument (message, 0); int ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s)", header, ic_id_str); pending_response.status = RESPONSE_FAILED; } else { if (ic_id < 0) { pending_response.status = RESPONSE_FAILED; } else { pending_response.imcontext_id = ic_id; pending_response.status = RESPONSE_SUCCEEDED; } } } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_imcontext_deregistered (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_imcontext_reseted (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_imcontext_enabled (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_imcontext_disabled (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_key_event_handled (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { const char *consumed_str = scim_bridge_message_get_argument (message, 0); boolean consumed; if (scim_bridge_string_to_boolean (&consumed, consumed_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s)", header, consumed_str); pending_response.status = RESPONSE_FAILED; } else { pending_response.consumed = consumed; pending_response.status = RESPONSE_SUCCEEDED; } } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_focus_changed (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); if (pending_response.status == RESPONSE_PENDING && strcmp (pending_response.header, header) == 0) { pending_response.status = RESPONSE_SUCCEEDED; } else { scim_bridge_perrorln ("The message is received in a wrong context: %s", header); } return RETVAL_SUCCEEDED; } static retval_t received_message_cursor_location_changed (const ScimBridgeMessage *message) { return RETVAL_SUCCEEDED; } static retval_t received_message_set_commit_string (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *string = scim_bridge_message_get_argument (message, 1); scim_bridge_imcontext_id_t ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s)", header, ic_id_str, string); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_set_commit_string (imcontext, string ? string:""); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_commit_string (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); scim_bridge_imcontext_id_t ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s)", header, ic_id_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_commit (imcontext); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_STRING_COMMITED, 0); scim_bridge_messenger_push_message (messenger, responsive_message); scim_bridge_free_message (responsive_message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at received_message_commit_string ()"); return RETVAL_FAILED; } } return RETVAL_SUCCEEDED; } static retval_t received_message_set_preedit_shown (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *shown_str = scim_bridge_message_get_argument (message, 1); scim_bridge_imcontext_id_t ic_id; boolean shown; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_boolean (&shown, shown_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s)", header, ic_id_str, shown_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, shown); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_set_preedit_string (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *preedit_string = scim_bridge_message_get_argument (message, 1); scim_bridge_imcontext_id_t ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s)", header, ic_id_str, preedit_string); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_set_preedit_string (imcontext, preedit_string ? preedit_string : ""); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_set_preedit_attributes (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); scim_bridge_imcontext_id_t ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_message_get_argument_count (message) % 4 != 1) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s,...)", header, ic_id_str); } else { const size_t attribute_count = (scim_bridge_message_get_argument_count (message) - 1) / 4; ScimBridgeAttribute **attributes = alloca (sizeof (ScimBridgeAttribute*) * attribute_count); int i; for (i = 0; i < attribute_count; ++i) { attributes[i] = scim_bridge_alloc_attribute (); ScimBridgeAttribute *attribute = attributes[i]; const char *attribute_begin_str = scim_bridge_message_get_argument (message, i * 4 + 1); const char *attribute_end_str = scim_bridge_message_get_argument (message, i * 4 + 2); const char *attribute_type_str = scim_bridge_message_get_argument (message, i * 4 + 3); const char *attribute_value_str = scim_bridge_message_get_argument (message, i * 4 + 4); unsigned int attribute_begin; unsigned int attribute_end; if (scim_bridge_string_to_uint (&attribute_begin, attribute_begin_str) || scim_bridge_string_to_uint (&attribute_end, attribute_end_str)) { scim_bridge_perrorln ("Invalid range for an attribute: begin = \"%s\", end = \"%s\"", attribute_begin_str, attribute_end_str); scim_bridge_attribute_set_begin (attribute, 0); scim_bridge_attribute_set_end (attribute, 0); scim_bridge_attribute_set_type (attribute, ATTRIBUTE_NONE); scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_NONE); continue; } scim_bridge_attribute_set_begin (attribute, attribute_begin); scim_bridge_attribute_set_end (attribute, attribute_end); if (strcmp (attribute_type_str, SCIM_BRIDGE_MESSAGE_NONE) == 0) { scim_bridge_attribute_set_type (attribute, ATTRIBUTE_NONE); } else if (strcmp (attribute_type_str, SCIM_BRIDGE_MESSAGE_DECORATE) == 0) { scim_bridge_attribute_set_type (attribute, ATTRIBUTE_DECORATE); if (strcmp (attribute_value_str, SCIM_BRIDGE_MESSAGE_HIGHLIGHT) == 0) { scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT); } else if (strcmp (attribute_value_str, SCIM_BRIDGE_MESSAGE_UNDERLINE) == 0) { scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_UNDERLINE); } else if (strcmp (attribute_value_str, SCIM_BRIDGE_MESSAGE_REVERSE) == 0) { scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE); } else { scim_bridge_perrorln ("Unknown decoration for the attribute: %s", attribute_value_str); scim_bridge_attribute_set_type (attribute, ATTRIBUTE_NONE); scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_NONE); } } else if (strcmp (attribute_type_str, SCIM_BRIDGE_MESSAGE_FOREGROUND) == 0 || strcmp (attribute_type_str, SCIM_BRIDGE_MESSAGE_BACKGROUND) == 0) { if (strcmp (attribute_type_str, SCIM_BRIDGE_MESSAGE_FOREGROUND) == 0) { scim_bridge_attribute_set_type (attribute, ATTRIBUTE_FOREGROUND); } else { scim_bridge_attribute_set_type (attribute, ATTRIBUTE_BACKGROUND); } unsigned int color_val = 0x1000000; if (strncmp (attribute_value_str, SCIM_BRIDGE_MESSAGE_COLOR, strlen (SCIM_BRIDGE_MESSAGE_COLOR)) == 0) { const char *color_str = attribute_value_str + strlen (SCIM_BRIDGE_MESSAGE_COLOR); const size_t color_str_length = strlen (color_str); if (color_str_length == 6) { color_val = 0; int j; for (j = 0; j < 6; ++j) { color_val <<= 4; switch (color_str[j]) { case '0': color_val += 0; break; case '1': color_val += 1; break; case '2': color_val += 2; break; case '3': color_val += 3; break; case '4': color_val += 4; break; case '5': color_val += 5; break; case '6': color_val += 6; break; case '7': color_val += 7; break; case '8': color_val += 8; break; case '9': color_val += 9; break; case 'a': case 'A': color_val += 10; break; case 'b': case 'B': color_val += 11; break; case 'c': case 'C': color_val += 12; break; case 'd': case 'D': color_val += 13; break; case 'e': case 'E': color_val += 14; break; case 'f': case 'F': color_val += 15; break; default: color_val = 0x1000000; break; } } } } if (color_val > 0xFFFFFF) { scim_bridge_perrorln ("An invalid string for a color: %s", attribute_value_str); scim_bridge_attribute_set_type (attribute, ATTRIBUTE_NONE); scim_bridge_attribute_set_value (attribute, SCIM_BRIDGE_ATTRIBUTE_DECORATE_NONE); } else { const unsigned int red = (color_val & 0xFF0000) >> 16; const unsigned int green = (color_val & 0x00FF00) >> 8; const unsigned int blue = (color_val & 0x0000FF) >> 0; scim_bridge_attribute_set_color (attribute, red, green, blue); } } } ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_set_preedit_attributes (imcontext, attributes, attribute_count); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } int j; for (j = 0; j < attribute_count; ++j) { scim_bridge_free_attribute (attributes[j]); } } return RETVAL_SUCCEEDED; } static retval_t received_message_set_preedit_cursor_position (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *cursor_position_str = scim_bridge_message_get_argument (message, 1); scim_bridge_imcontext_id_t ic_id; unsigned int cursor_position; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_uint (&cursor_position, cursor_position_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s)", header, ic_id_str, cursor_position_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_set_preedit_cursor_position (imcontext, cursor_position); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_update_preedit (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); int ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s)", header, ic_id_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_update_preedit (imcontext); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_PREEDIT_UPDATED, 0); scim_bridge_messenger_push_message (messenger, responsive_message); scim_bridge_free_message (responsive_message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at received_message_update_preedit ()"); return RETVAL_FAILED; } } return RETVAL_SUCCEEDED; } static retval_t received_message_beep (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); int ic_id; if (scim_bridge_string_to_int (&ic_id, ic_id_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s)", header, ic_id_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { scim_bridge_client_imcontext_beep (imcontext); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_forward_key_event (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *key_code_str = scim_bridge_message_get_argument (message, 1); const char *key_pressed_str = scim_bridge_message_get_argument (message, 2); const int modifier_count = scim_bridge_message_get_argument_count (message) - 3; boolean shift_down = FALSE; boolean control_down = FALSE; boolean alt_down = FALSE; boolean meta_down = FALSE; boolean super_down = FALSE; boolean hyper_down = FALSE; boolean caps_lock_down = FALSE; boolean num_lock_down = FALSE; boolean unknown_down = FALSE; boolean kana_ro = FALSE; int i; for (i = 0; i < modifier_count; ++i) { const char *modifier_str = scim_bridge_message_get_argument (message, i + 3); if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_SHIFT) == 0) { shift_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_CONTROL) == 0) { control_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_ALT) == 0) { alt_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_META) == 0) { meta_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_SUPER) == 0) { super_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_HYPER) == 0) { hyper_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_CAPS_LOCK) == 0) { caps_lock_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_NUM_LOCK) == 0) { num_lock_down = TRUE; } else if (strcmp (modifier_str, SCIM_BRIDGE_MESSAGE_KANA_RO) == 0) { kana_ro = TRUE; } else { scim_bridge_perrorln ("Unknown modifier: %s", modifier_str); unknown_down = TRUE; } } scim_bridge_imcontext_id_t ic_id; unsigned int key_code; boolean key_pressed; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_uint (&key_code, key_code_str) || scim_bridge_string_to_boolean (&key_pressed, key_pressed_str)) { scim_bridge_perror ("Invalid arguments for the message: %s (%s, %s, %s", header, ic_id_str, key_code_str, key_pressed_str); boolean first_modifier = TRUE; if (shift_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_SHIFT); } if (control_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_CONTROL); } if (alt_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_ALT); } if (meta_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_META); } if (super_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_SUPER); } if (hyper_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_HYPER); } if (caps_lock_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_CAPS_LOCK); } if (num_lock_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_NUM_LOCK); } if (kana_ro) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_KANA_RO); } if (unknown_down) { if (first_modifier) { scim_bridge_perror (", "); first_modifier = FALSE; } else { scim_bridge_perror (" + "); } scim_bridge_perror ("%s", SCIM_BRIDGE_MESSAGE_UNKNOWN); } scim_bridge_perrorln (")"); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { ScimBridgeKeyEvent *key_event = scim_bridge_alloc_key_event (); scim_bridge_key_event_set_code (key_event, key_code); scim_bridge_key_event_set_pressed (key_event, key_pressed); scim_bridge_key_event_set_shift_down (key_event, shift_down); scim_bridge_key_event_set_control_down (key_event, control_down); scim_bridge_key_event_set_alt_down (key_event, alt_down); scim_bridge_key_event_set_meta_down (key_event, meta_down); scim_bridge_key_event_set_super_down (key_event, super_down); scim_bridge_key_event_set_hyper_down (key_event, hyper_down); scim_bridge_key_event_set_caps_lock_down (key_event, caps_lock_down); scim_bridge_key_event_set_num_lock_down (key_event, num_lock_down); scim_bridge_key_event_set_quirk_enabled (key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO, kana_ro); scim_bridge_client_imcontext_forward_key_event (imcontext, key_event); scim_bridge_free_key_event (key_event); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } return RETVAL_SUCCEEDED; } static retval_t received_message_get_surrounding_text (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *before_max_str = scim_bridge_message_get_argument (message, 1); const char *after_max_str = scim_bridge_message_get_argument (message, 2); int ic_id; unsigned int before_max; unsigned int after_max; char *string; int cursor_position; boolean succeeded = FALSE; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_uint (&before_max, before_max_str) || scim_bridge_string_to_uint (&after_max, after_max_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s, %s)", header, ic_id_str, before_max_str, after_max_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { succeeded = scim_bridge_client_imcontext_get_surrounding_text (imcontext, before_max, after_max, &string, &cursor_position); if (succeeded) { scim_bridge_pdebugln (5, "surrounding text = '%s', cursor_position = %d", string, cursor_position); } else { scim_bridge_pdebugln (5, "surrounding text = N/A"); } } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *responsive_message; if (succeeded) { responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_GOTTEN, 3); scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_TRUE); char *cursor_position_str = alloca (sizeof (char) * (cursor_position / 10 + 2)); scim_bridge_string_from_uint (&cursor_position_str, cursor_position); scim_bridge_message_set_argument (responsive_message, 1, cursor_position_str); scim_bridge_message_set_argument (responsive_message, 2, string); } else { responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_GOTTEN, 2); scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_FALSE); } scim_bridge_messenger_push_message (messenger, responsive_message); scim_bridge_free_message (responsive_message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at received_message_get_surrounding_text ()"); return RETVAL_FAILED; } } return RETVAL_SUCCEEDED; } static retval_t received_message_delete_surrounding_text (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *offset_str = scim_bridge_message_get_argument (message, 1); const char *length_str = scim_bridge_message_get_argument (message, 2); int ic_id; int offset; unsigned int length; boolean succeeded = FALSE; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_int (&offset, offset_str) || scim_bridge_string_to_uint (&length, length_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s, %s)", header, ic_id_str, offset_str, length_str); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { succeeded = scim_bridge_client_imcontext_delete_surrounding_text (imcontext, offset, length); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_DELETED, 1); if (succeeded) { scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_TRUE); } else { scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_FALSE); } scim_bridge_messenger_push_message (messenger, responsive_message); scim_bridge_free_message (responsive_message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at received_message_delete_surrounding_text ()"); return RETVAL_FAILED; } } return RETVAL_SUCCEEDED; } static retval_t received_message_replace_surrounding_text (const ScimBridgeMessage *message) { const char *header = scim_bridge_message_get_header (message); const char *ic_id_str = scim_bridge_message_get_argument (message, 0); const char *cursor_position_str = scim_bridge_message_get_argument (message, 1); const char *string = scim_bridge_message_get_argument (message, 2); int ic_id; int cursor_position; boolean succeeded = FALSE; if (scim_bridge_string_to_int (&ic_id, ic_id_str) || scim_bridge_string_to_int (&cursor_position, cursor_position_str)) { scim_bridge_perrorln ("Invalid arguments for the message: %s (%s, %s, %s)", header, ic_id_str, cursor_position, string); } else { ScimBridgeClientIMContext *imcontext = scim_bridge_client_find_imcontext (ic_id); if (imcontext != NULL) { succeeded = scim_bridge_client_imcontext_replace_surrounding_text (imcontext, cursor_position, string); } else { scim_bridge_perrorln ("No such imcontext: id = %d", ic_id); } } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *responsive_message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_REPLACED, 1); if (succeeded) { scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_TRUE); } else { scim_bridge_message_set_argument (responsive_message, 0, SCIM_BRIDGE_MESSAGE_FALSE); } scim_bridge_messenger_push_message (messenger, responsive_message); scim_bridge_free_message (responsive_message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at received_message_replace_surrounding_text ()"); return RETVAL_FAILED; } } return RETVAL_SUCCEEDED; } /* Public functions */ retval_t scim_bridge_client_initialize () { scim_bridge_pdebugln (5, "scim_bridge_client_initialize ()"); if (initialized) return RETVAL_SUCCEEDED; initialized = TRUE; messenger = NULL; imcontext_list.first = NULL; imcontext_list.last = NULL; imcontext_list.found_imcontext = NULL; imcontext_list.size = 0; return RETVAL_SUCCEEDED; } retval_t scim_bridge_client_finalize () { scim_bridge_pdebugln (5, "scim_bridge_client_finalize ()"); if (!initialized) return RETVAL_SUCCEEDED; if (messenger != NULL) scim_bridge_client_close_messenger (); messenger = NULL; IMContextListElement *i = imcontext_list.first; while (i != NULL) { IMContextListElement *j = i; i = i->next; free (j); } imcontext_list.first = NULL; imcontext_list.last = NULL; imcontext_list.found_imcontext = NULL; imcontext_list.size = 0; initialized = FALSE; return RETVAL_SUCCEEDED; } boolean scim_bridge_client_is_initialized () { return initialized; } retval_t scim_bridge_client_open_messenger () { scim_bridge_pdebugln (8, "scim_bridge_client_open_messenger ()"); if (!initialized) { scim_bridge_perrorln ("The client has not been initialized"); return RETVAL_FAILED; } if (messenger != NULL) { scim_bridge_perrorln ("The messenger has already been opend"); return RETVAL_SUCCEEDED; } if (check_scim_binary () != TRUE) { scim_bridge_perrorln ("There is no SCIM binary"); return RETVAL_FAILED; } int i; for (i = 0; i < 10; ++i) { int socket_fd = socket (PF_UNIX, SOCK_STREAM, 0); if (socket_fd < 0) { scim_bridge_perrorln ("Failed to create the message socket: %s", strerror (errno)); return RETVAL_FAILED; } struct sockaddr_un socket_addr; memset (&socket_addr, 0, sizeof (struct sockaddr_un)); socket_addr.sun_family = AF_UNIX; strcpy (socket_addr.sun_path, scim_bridge_path_get_socket ()); if (connect (socket_fd, (struct sockaddr*)&socket_addr, SUN_LEN(&socket_addr))) { if (i == 5 && launch_agent ()) { scim_bridge_perrorln ("Cannot launch the agent"); return RETVAL_FAILED; } else { scim_bridge_pdebugln (8, "Failed to connect the message socket: %s", strerror (errno)); close (socket_fd); usleep (5000); } } else { messenger = scim_bridge_alloc_messenger (socket_fd); pending_response.consumed = TRUE; pending_response.header = NULL; pending_response.imcontext_id = -1; pending_response.status = RESPONSE_DONE; IMContextListElement *first = imcontext_list.first; IMContextListElement *last = imcontext_list.last; size_t size = imcontext_list.size = imcontext_list.size; imcontext_list.first = NULL; imcontext_list.last = NULL; imcontext_list.size = 0; imcontext_list.found_imcontext = NULL; while (first != NULL) { if (scim_bridge_client_register_imcontext (first->imcontext)) { scim_bridge_perrorln ("Cannot register the IMContexts..."); first->prev = imcontext_list.last; if (imcontext_list.last != NULL) { imcontext_list.last->next = first; imcontext_list.last = last; } else { imcontext_list.first = first; imcontext_list.last = last; } imcontext_list.size += size; IMContextListElement *i; for (i = imcontext_list.first; i != NULL; i = i->next) { scim_bridge_client_imcontext_set_id (i->imcontext, -1); } return RETVAL_FAILED; } else { IMContextListElement *i = first; first = first->next; free (i); --size; } } scim_bridge_client_messenger_opened (); return RETVAL_SUCCEEDED; } } scim_bridge_perrorln ("Failed to establish the connection: %s", strerror (errno)); return RETVAL_FAILED; } retval_t scim_bridge_client_close_messenger () { scim_bridge_pdebugln (8, "scim_bridge_client_close_messenger ()"); if (messenger == NULL) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_SUCCEEDED; } scim_bridge_free_messenger (messenger); messenger = NULL; pending_response.consumed = FALSE; pending_response.imcontext_id = -1; pending_response.status = RESPONSE_DONE; IMContextListElement *i; for (i = imcontext_list.first; i != NULL; i = i->next) { scim_bridge_client_imcontext_set_id (i->imcontext, -1); } scim_bridge_client_messenger_closed (); return RETVAL_SUCCEEDED; } boolean scim_bridge_client_is_messenger_opened () { scim_bridge_pdebugln (3, "scim_bridge_client_is_messenger_opened ()"); return messenger != NULL; } int scim_bridge_client_get_messenger_fd () { if (messenger == NULL) { return -1; } else { return scim_bridge_messenger_get_socket_fd (messenger); } } boolean scim_bridge_client_is_reconnection_enabled () { static boolean first_time = TRUE; static boolean reconnection_enabled = TRUE; if (first_time) { char *env_reconnection_enabled = getenv ("SCIM_BRIDGE_RECONNECTION_ENABLED"); if (env_reconnection_enabled != NULL) scim_bridge_string_to_boolean (&reconnection_enabled, env_reconnection_enabled); first_time = FALSE; } return reconnection_enabled; } ScimBridgeClientIMContext *scim_bridge_client_find_imcontext (scim_bridge_imcontext_id_t id) { if (id < 0) return NULL; if (imcontext_list.found_imcontext != NULL && scim_bridge_client_imcontext_get_id (imcontext_list.found_imcontext) == id) { return imcontext_list.found_imcontext; } IMContextListElement *i; for (i = imcontext_list.first; i != NULL; i = i->next) { const scim_bridge_imcontext_id_t current_id = scim_bridge_client_imcontext_get_id (i->imcontext); if (current_id > id) { return NULL; } else if (current_id == id) { imcontext_list.found_imcontext = i->imcontext; return imcontext_list.found_imcontext; } } return NULL; } retval_t scim_bridge_client_read_and_dispatch () { scim_bridge_pdebugln (2, "scim_bridge_client_read_and_dispatch"); if (!initialized) { scim_bridge_perrorln ("The client library is not initialized at scim_bridge_client_read_and_dispatch ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *message; while (scim_bridge_messenger_poll_message (messenger, &message)) { if (scim_bridge_messenger_receive_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to receive messages at scim_bridge_client_read_and_dispatch ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } while (message != NULL) { const char *message_header = scim_bridge_message_get_header (message); scim_bridge_pdebug (5, "A message has been received: %s", message_header); int i; for (i = 0; i < scim_bridge_message_get_argument_count (message); ++i) { scim_bridge_pdebug (5, " %s", scim_bridge_message_get_argument (message, i)); } scim_bridge_pdebugln (5, ""); retval_t retval = RETVAL_SUCCEEDED; if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_IMENGINE_STATUS_CHANGED) == 0) { retval = received_message_imengine_status_changed (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_PREEDIT_MODE_CHANGED) == 0) { retval = received_message_preedit_mode_changed (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_SET_COMMIT_STRING) == 0) { retval = received_message_set_commit_string (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_COMMIT_STRING) == 0) { retval = received_message_commit_string (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_SET_PREEDIT_SHOWN) == 0) { retval = received_message_set_preedit_shown (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_SET_PREEDIT_STRING) == 0) { retval = received_message_set_preedit_string (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_SET_PREEDIT_CURSOR_POSITION) == 0) { retval = received_message_set_preedit_cursor_position (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_SET_PREEDIT_ATTRIBUTES) == 0) { retval = received_message_set_preedit_attributes (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_UPDATE_PREEDIT) == 0) { retval = received_message_update_preedit (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_KEY_EVENT_HANDLED) == 0) { retval = received_message_key_event_handled (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_IMCONTEXT_REGISTERED) == 0) { retval = received_message_imcontext_registered (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_IMCONTEXT_DEREGISTERED) == 0) { retval = received_message_imcontext_deregistered (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_IMCONTEXT_RESETED) == 0) { retval = received_message_imcontext_reseted (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_ENABLED) == 0) { retval = received_message_imcontext_enabled (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_DISABLED) == 0) { retval = received_message_imcontext_disabled (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_FORWARD_KEY_EVENT) == 0) { retval = received_message_forward_key_event (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_BEEP) == 0) { retval = received_message_beep (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_CURSOR_LOCATION_CHANGED) == 0) { retval = received_message_cursor_location_changed (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_FOCUS_CHANGED) == 0) { retval = received_message_focus_changed (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_GET_SURROUNDING_TEXT) == 0) { retval = received_message_get_surrounding_text (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_DELETE_SURROUNDING_TEXT) == 0) { retval = received_message_delete_surrounding_text (message); } else if (strcmp (message_header, SCIM_BRIDGE_MESSAGE_REPLACE_SURROUNDING_TEXT) == 0) { retval = received_message_replace_surrounding_text (message); } else { retval = received_message_unknown (message); } scim_bridge_free_message (message); if (retval) { scim_bridge_client_close_messenger (); return RETVAL_FAILED; } else if (scim_bridge_messenger_poll_message (messenger, &message)) { scim_bridge_pdebugln (2, "read and dispatch, done"); break; } } return RETVAL_SUCCEEDED; } /* Called from GUI through IMContext */ retval_t scim_bridge_client_register_imcontext (ScimBridgeClientIMContext *imcontext) { scim_bridge_pdebugln (5, "scim_bridge_client_register_imcontext"); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_register_imcontext ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } if (scim_bridge_client_imcontext_get_id (imcontext) != -1) { scim_bridge_perrorln ("The imcontext has already been registered"); return RETVAL_FAILED; } scim_bridge_pdebugln (5, "Sending 'register_imcontext' message"); ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_REGISTER_IMCONTEXT, 0); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_register_imcontext ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } pending_response.header = SCIM_BRIDGE_MESSAGE_IMCONTEXT_REGISTERED; pending_response.imcontext_id = -1; pending_response.status = RESPONSE_PENDING; while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_register_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_FAILED) { scim_bridge_perrorln ("Failed to allocate an imcontext at scim_bridge_client_register_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } else { scim_bridge_pdebugln (6, "registered: id = %d", pending_response.imcontext_id); scim_bridge_client_imcontext_set_id (imcontext, pending_response.imcontext_id); if (imcontext_list.size == 0 || scim_bridge_client_imcontext_get_id (imcontext_list.last->imcontext) < pending_response.imcontext_id) { IMContextListElement *new_element = malloc (sizeof (IMContextListElement)); new_element->imcontext = imcontext; new_element->prev = imcontext_list.last; new_element->next = NULL; if (imcontext_list.last != NULL) { imcontext_list.last->next = new_element; } else { imcontext_list.first = new_element; } imcontext_list.last = new_element; if (imcontext_list.first == NULL) imcontext_list.first = new_element; ++imcontext_list.size; } else { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); IMContextListElement *i; for (i = imcontext_list.first; i != NULL; i = i->next) { const scim_bridge_imcontext_id_t current_id = scim_bridge_client_imcontext_get_id (i->imcontext); if (current_id > id) { IMContextListElement *new_element = malloc (sizeof (IMContextListElement)); new_element->imcontext = imcontext; new_element->prev = i->prev; new_element->next = i; if (i->prev != NULL) { i->prev->next = new_element; } else { imcontext_list.first = new_element; } i->prev = new_element; ++imcontext_list.size; break; } } } pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } } retval_t scim_bridge_client_deregister_imcontext (ScimBridgeClientIMContext *imcontext) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); scim_bridge_pdebugln (5, "scim_bridge_client_deregister_imcontext: ic = %d", id); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_deregister_imcontext ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } if (imcontext == imcontext_list.found_imcontext) imcontext_list.found_imcontext = NULL; IMContextListElement *i; for (i = imcontext_list.first; i != NULL; i = i->next) { if (scim_bridge_client_imcontext_get_id (i->imcontext) == id) { IMContextListElement *prev = i->prev; IMContextListElement *next = i->next; if (prev != NULL) { prev->next = next; } else { imcontext_list.first = next; } if (next != NULL) { next->prev = prev; } else { imcontext_list.last = prev; } free (i); --imcontext_list.size; scim_bridge_client_imcontext_set_id (imcontext, -1); break; } else if (scim_bridge_client_imcontext_get_id (i->imcontext) > id || i->next == NULL) { scim_bridge_perrorln ("The imcontext has not been registered yet"); return RETVAL_FAILED; } } scim_bridge_pdebugln (5, "Sending 'deregister_imcontext' message: ic_id = %d", id); ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_DEREGISTER_IMCONTEXT, 1); char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); free (ic_id_str); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_deregister_imcontext ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } pending_response.header = SCIM_BRIDGE_MESSAGE_IMCONTEXT_DEREGISTERED; pending_response.status = RESPONSE_PENDING; while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_deregister_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_FAILED) { scim_bridge_perrorln ("Failed to free imcontext at scim_bridge_client_deregister_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } else { scim_bridge_pdebugln (6, "deregistered: id = %d", id); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } } retval_t scim_bridge_client_reset_imcontext (const ScimBridgeClientIMContext *imcontext) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); scim_bridge_pdebugln (5, "scim_bridge_client_reset_imcontext: ic = %d", id); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_reset_imcontext ()"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } scim_bridge_pdebugln (5, "Sending 'reset_imcontext' message: ic_id = %d", id); ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_RESET_IMCONTEXT, 1); char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); free (ic_id_str); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_reset_imcontext ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } pending_response.header = SCIM_BRIDGE_MESSAGE_IMCONTEXT_RESETED; pending_response.status = RESPONSE_PENDING; while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_reset_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_SUCCEEDED) { scim_bridge_pdebugln (6, "reset: id = %d", id); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An unknown error occurred at scim_bridge_client_reset_imcontext ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } retval_t scim_bridge_client_set_imcontext_enabled (const ScimBridgeClientIMContext * imcontext, boolean enabled) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); ScimBridgeMessage *message; scim_bridge_pdebugln (5, "scim_bridge_client_set_imcontext_enabled: ic = %d", id); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_set_imcontext_enabled ()"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } scim_bridge_pdebugln (5, "Sending 'enable_imcontext' message: ic_id = %d", id); if (enabled) { message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_ENABLE_IMCONTEXT, 1); } else { message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_DISABLE_IMCONTEXT, 1); } char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); free (ic_id_str); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_set_imcontext_enabled ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } if (enabled) { pending_response.header = SCIM_BRIDGE_MESSAGE_ENABLED; } else { pending_response.header = SCIM_BRIDGE_MESSAGE_DISABLED; } pending_response.status = RESPONSE_PENDING; while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_set_imcontext_enabled ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_SUCCEEDED) { scim_bridge_pdebugln (6, "set_imcontext_enabled returned: id = %d", id); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An unknown error occurred at scim_bridge_client_set_imcontext_enabled ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } retval_t scim_bridge_client_handle_key_event (const ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event, boolean *consumed) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); scim_bridge_pdebugln (5, "scim_bridge_client_handle_key_event: ic = %d", id); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_reset_imcontext ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } const scim_bridge_key_code_t key_code = scim_bridge_key_event_get_code (key_event); const boolean key_pressed = scim_bridge_key_event_is_pressed (key_event); scim_bridge_pdebug (5, "scim_bridge_client_key_event_occurred: ic = %d, key_code = %u, pressed = %s", id, key_code, key_pressed ? "true":"false"); int modifier_count = 0; if (scim_bridge_key_event_is_shift_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_SHIFT); } if (scim_bridge_key_event_is_control_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_CONTROL); } if (scim_bridge_key_event_is_alt_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_ALT); } if (scim_bridge_key_event_is_meta_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_META); } if (scim_bridge_key_event_is_super_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_SUPER); } if (scim_bridge_key_event_is_hyper_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_HYPER); } if (scim_bridge_key_event_is_caps_lock_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_CAPS_LOCK); } if (scim_bridge_key_event_is_num_lock_down (key_event)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_NUM_LOCK); } if (scim_bridge_key_event_is_quirk_enabled (key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO)) { if (modifier_count == 0) { scim_bridge_pdebug (5, ", modifier = "); } else { scim_bridge_pdebug (5, " + "); } ++modifier_count; scim_bridge_pdebug (5, "%s", SCIM_BRIDGE_MESSAGE_KANA_RO); } scim_bridge_pdebugln (5, ""); scim_bridge_pdebugln (5, "Sending 'handle_key_event' message: ic_id = %d", id); ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_HANDLE_KEY_EVENT, modifier_count + 3); char *imcontext_id_str; scim_bridge_string_from_int (&imcontext_id_str, id); scim_bridge_message_set_argument (message, 0,imcontext_id_str); char *key_code_str; scim_bridge_string_from_uint (&key_code_str, scim_bridge_key_event_get_code (key_event)); scim_bridge_message_set_argument (message, 1, key_code_str); char *key_pressed_str; scim_bridge_string_from_boolean (&key_pressed_str, scim_bridge_key_event_is_pressed (key_event)); scim_bridge_message_set_argument (message, 2, key_pressed_str); free (imcontext_id_str); free (key_code_str); free (key_pressed_str); size_t arg_index = 3; if (scim_bridge_key_event_is_shift_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_SHIFT); ++arg_index; } if (scim_bridge_key_event_is_control_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_CONTROL); ++arg_index; } if (scim_bridge_key_event_is_alt_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_ALT); ++arg_index; } if (scim_bridge_key_event_is_meta_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_META); ++arg_index; } if (scim_bridge_key_event_is_super_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_SUPER); ++arg_index; } if (scim_bridge_key_event_is_hyper_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_HYPER); ++arg_index; } if (scim_bridge_key_event_is_caps_lock_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_CAPS_LOCK); ++arg_index; } if (scim_bridge_key_event_is_num_lock_down (key_event)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_NUM_LOCK); ++arg_index; } if (scim_bridge_key_event_is_quirk_enabled (key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO)) { scim_bridge_message_set_argument (message, arg_index, SCIM_BRIDGE_MESSAGE_KANA_RO); ++arg_index; } pending_response.header = SCIM_BRIDGE_MESSAGE_KEY_EVENT_HANDLED; pending_response.consumed = FALSE; pending_response.status = RESPONSE_PENDING; scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_handle_key_event ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_handle_key_event ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_SUCCEEDED) { scim_bridge_pdebugln (3, "The key event was %s", pending_response.consumed ? "consumed":"ignored"); *consumed = pending_response.consumed; pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An unknown error occurred at scim_bridge_client_handle_key_event ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } retval_t scim_bridge_client_change_focus (const ScimBridgeClientIMContext *imcontext, boolean focus_in) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); scim_bridge_pdebugln (5, "scim_bridge_client_change_focus: ic = %d, focus_in = %s", id, focus_in ? "true":"false"); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_change_focus ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } scim_bridge_pdebugln (5, "Sending 'change_focus' message: ic_id = %d, focus_in = %s", id, focus_in ? "true":"false"); ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_CHANGE_FOCUS, 2); char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); char *focus_in_str; scim_bridge_string_from_boolean (&focus_in_str, focus_in); scim_bridge_message_set_argument (message, 1, focus_in_str); free (ic_id_str); free (focus_in_str); pending_response.header = SCIM_BRIDGE_MESSAGE_FOCUS_CHANGED; pending_response.consumed = FALSE; pending_response.status = RESPONSE_PENDING; scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_change_focus ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_change_focus ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_SUCCEEDED) { scim_bridge_pdebugln (6, "The focus changed: id = %d", id); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An unknown error occurred at scim_bridge_client_change_focus ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } retval_t scim_bridge_client_set_cursor_location (const ScimBridgeClientIMContext *imcontext, int x, int y) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); scim_bridge_pdebugln (5, "scim_bridge_client_set_cursor_location: ic = %d, x = %d, y = %d", id, x, y); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_cursor_set_location ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SET_CURSOR_LOCATION, 3); char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); char *x_str; scim_bridge_string_from_int (&x_str, x); scim_bridge_message_set_argument (message, 1, x_str); char *y_str; scim_bridge_string_from_int (&y_str, y); scim_bridge_message_set_argument (message, 2, y_str); free (ic_id_str); free (x_str); free (y_str); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_set_cursor_location ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } scim_bridge_pdebugln (6, "the cursor location changed: id = %d", id); return RETVAL_SUCCEEDED; } retval_t scim_bridge_client_set_preedit_mode (const ScimBridgeClientIMContext *imcontext, scim_bridge_preedit_mode_t mode) { const scim_bridge_imcontext_id_t id = scim_bridge_client_imcontext_get_id (imcontext); const char *mode_str; switch (mode) { case PREEDIT_FLOATING: mode_str = SCIM_BRIDGE_MESSAGE_FLOATING; break; case PREEDIT_HANGING: mode_str = SCIM_BRIDGE_MESSAGE_HANGING; break; case PREEDIT_EMBEDDED: mode_str = SCIM_BRIDGE_MESSAGE_EMBEDDED; break; case PREEDIT_ANY: mode_str = SCIM_BRIDGE_MESSAGE_ANY; break; default: scim_bridge_perrorln ("An unknown value is given as a preedit mode."); return RETVAL_FAILED; } scim_bridge_pdebugln (5, "scim_bridge_client_set_preedit_mode: ic = %d, mode = %s", id, mode_str); if (!initialized) { scim_bridge_perrorln ("ScimBridge is not initialized at scim_bridge_client_set_preedit_mode ()"); return RETVAL_FAILED; } if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is closed"); return RETVAL_FAILED; } if (pending_response.status != RESPONSE_DONE) { scim_bridge_perrorln ("Another command is pending..."); return RETVAL_FAILED; } ScimBridgeMessage *message = scim_bridge_alloc_message (SCIM_BRIDGE_MESSAGE_SET_PREEDIT_MODE, 2); char *ic_id_str; scim_bridge_string_from_uint (&ic_id_str, id); scim_bridge_message_set_argument (message, 0, ic_id_str); scim_bridge_message_set_argument (message, 1, mode_str); free (ic_id_str); scim_bridge_messenger_push_message (messenger, message); scim_bridge_free_message (message); while (scim_bridge_messenger_get_sending_buffer_size (messenger) > 0) { if (scim_bridge_messenger_send_message (messenger, NULL)) { scim_bridge_perrorln ("Failed to send a message at scim_bridge_client_set_preedit_mode ()"); scim_bridge_client_close_messenger (); return RETVAL_FAILED; } } pending_response.header = SCIM_BRIDGE_MESSAGE_PREEDIT_MODE_CHANGED; pending_response.status = RESPONSE_PENDING; while (pending_response.status == RESPONSE_PENDING) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException at scim_bridge_client_set_preedit_mode ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } } if (pending_response.status == RESPONSE_FAILED) { scim_bridge_perrorln ("Failed to change the preedit mode at scim_bridge_client_set_preedit_mode ()"); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_FAILED; } else { scim_bridge_pdebugln (6, "The preedit mode changed: id = %d", id); pending_response.header = NULL; pending_response.status = RESPONSE_DONE; return RETVAL_SUCCEEDED; } } scim-master/extras/immodules/client-common/scim-bridge-client.h000066400000000000000000000137771415264260100252040ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #ifndef SCIMBRIDGECLIENT_H_ #define SCIMBRIDGECLIENT_H_ #include "scim-bridge.h" #include "scim-bridge-key-event.h" #include "scim-bridge-client-imcontext.h" #ifdef __cplusplus extern "C" { #endif /** * Initialize the client. * * @return RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_client_initialize (); /** * Finalize the client. * * @return RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_client_finalize (); /** * Check if the client is initialized. * * @return TRUE if it's iniitalized, otherwise it returns FALSE. */ boolean scim_bridge_client_is_initialized (); /** * Open the connection with the agent. * * @return RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_client_open_messenger (); /** * Close the connection with the agent. * * @return RETVAIL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_client_close_messenger (); /** * Check if the connection is active. * * @return TRUE if it's active, otherwise it returns FALSE. */ boolean scim_bridge_client_is_messenger_opened (); /** * Get the mesenger socket file discriptor of the client. * * @return The socket file descriptor of the client. */ int scim_bridge_client_get_messenger_fd (); /** * See if the reconnection feature is enabled. * The client try to establish a new connection after the connection breaks if this feature is enabled. * * @return TRUE if this feature is enabled. */ boolean scim_bridge_client_is_reconnection_enabled (); /** * Read a message from the socket, and dispatch it. * If no message is available, it returns immediately. * * @return RETVAL_SUCCEEDED if no error has occurred, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_client_read_and_dispatch (); /** * Register an imcontext into the agent. * * @param imcontext The pointer to initialize as an imcontext. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_register_imcontext (ScimBridgeClientIMContext *imcontext); /** * Deregister an imcontext from the agent. * * @param imcontext The imcontext to deregister. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_deregister_imcontext (ScimBridgeClientIMContext *imcontext); /** * Find the IMContext which has given id. * * @param id The IMContext. (This function returns NULL if -1 is given here) * @return The IMContext if it's been found out, otherwise it returns NULL. */ ScimBridgeClientIMContext *scim_bridge_client_find_imcontext (scim_bridge_imcontext_id_t id); /** * Reset an imcontext. * * @param imcontext The imcontext. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_reset_imcontext (const ScimBridgeClientIMContext *imcontext); /** * Enable/Disalbe an imcontext. * * @param imcontext The imcontext. * @param enabled Give it TRUE to enable imcontext , False to disable imcontext * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_set_imcontext_enabled (const ScimBridgeClientIMContext *imcontext, boolean enabled); /** * Change the focusing status of an imcontext. * * @param imcontext The imcontext. * @param focus_in Give it TRUE if it gains the focus, otherwise give it FALSE. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_change_focus (const ScimBridgeClientIMContext *imcontext, boolean focus_in); /** * Handle a key event. * * @param imcontext The imcontext. * @param key_event The key event. * @paam consumed The pointer for the flag, which is set TRUE if you should not handle this event in the client. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_handle_key_event (const ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event, boolean *consumed); /** * Notify the change of cursor location in the display. * * @param imcontext The imcontext. * @param x The x location of the cursor. * @param y The y location of the cursor. * @return RETVAIL_SUCCEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_client_set_cursor_location (const ScimBridgeClientIMContext *imcontext, int x, int y); /** * Set the way to show the preedit. * * @param imcontext The imcontext. * @param mode The way to show the preedit. */ retval_t scim_bridge_client_set_preedit_mode (const ScimBridgeClientIMContext *imcontext, scim_bridge_preedit_mode_t mode); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGECLIENT_H_*/ scim-master/extras/immodules/client-gtk/000077500000000000000000000000001415264260100206505ustar00rootroot00000000000000scim-master/extras/immodules/client-gtk/gtk2/000077500000000000000000000000001415264260100215175ustar00rootroot00000000000000scim-master/extras/immodules/client-gtk/gtk2/Makefile.am000066400000000000000000000034151415264260100235560ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_GTK2_IMMODULE AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/extras/immodules/common \ -I$(top_srcdir)/extras/immodules/client-common noinst_HEADERS = ../scim-bridge-client-gtk.h \ ../scim-bridge-client-imcontext-gtk.h \ ../scim-bridge-client-key-event-utility-gtk.h moduledir = @GTK2_IM_MODULEDIR@ module_LTLIBRARIES = im-scim.la im_scim_la_SOURCES = ../im-scim-bridge-gtk.c \ ../scim-bridge-client-gtk.c \ ../scim-bridge-client-imcontext-gtk.c \ ../scim-bridge-client-key-event-utility-gtk.c im_scim_la_CXXFLAGS=@GTK2_CFLAGS@ im_scim_la_CFLAGS =@GTK2_CFLAGS@ im_scim_la_LDFLAGS = -rpath $(moduledir) \ -avoid-version -no-undefined \ -module im_scim_la_LIBADD = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \ $(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la \ @X_LIBS@ \ @GTK2_LIBS@ endif MAINTAINERCLEANFILES = Makefile.in scim-master/extras/immodules/client-gtk/gtk3/000077500000000000000000000000001415264260100215205ustar00rootroot00000000000000scim-master/extras/immodules/client-gtk/gtk3/Makefile.am000066400000000000000000000034131415264260100235550ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_GTK3_IMMODULE AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/extras/immodules/common \ -I$(top_srcdir)/extras/immodules/client-common noinst_HEADERS = ../scim-bridge-client-gtk.h \ ../scim-bridge-client-imcontext-gtk.h \ ../scim-bridge-client-key-event-utility-gtk.h moduledir = @GTK3_IM_MODULEDIR@ module_LTLIBRARIES = im-scim.la im_scim_la_SOURCES = ../im-scim-bridge-gtk.c \ ../scim-bridge-client-gtk.c \ ../scim-bridge-client-imcontext-gtk.c \ ../scim-bridge-client-key-event-utility-gtk.c im_scim_la_CXXFLAGS=@GTK3_CFLAGS@ im_scim_la_CFLAGS =@GTK3_CFLAGS@ im_scim_la_LDFLAGS = -rpath $(moduledir) \ -avoid-version -no-undefined \ -module im_scim_la_LIBADD = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \ $(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la \ @X_LIBS@ \ @GTK3_LIBS@ endif MAINTAINERCLEANFILES = Makefile.in scim-master/extras/immodules/client-gtk/gtk4/000077500000000000000000000000001415264260100215215ustar00rootroot00000000000000scim-master/extras/immodules/client-gtk/gtk4/Makefile.am000066400000000000000000000034211415264260100235550ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_GTK4_IMMODULE AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/extras/immodules/common \ -I$(top_srcdir)/extras/immodules/client-common noinst_HEADERS = ../scim-bridge-client-gtk.h \ ../scim-bridge-client-imcontext-gtk.h \ ../scim-bridge-client-key-event-utility-gtk.h moduledir = @GTK4_IM_MODULEDIR@ module_LTLIBRARIES = libim-scim.la libim_scim_la_SOURCES = im-scim-bridge-gtk.c \ ../scim-bridge-client-gtk.c \ scim-bridge-client-imcontext-gtk.c \ scim-bridge-client-key-event-utility-gtk.c libim_scim_la_CXXFLAGS=@GTK4_CFLAGS@ libim_scim_la_CFLAGS =@GTK4_CFLAGS@ libim_scim_la_LDFLAGS = -rpath $(moduledir) \ -avoid-version -no-undefined \ -module libim_scim_la_LIBADD = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \ $(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la \ @GTK4_LIBS@ \ @X_LIBS@ endif MAINTAINERCLEANFILES = Makefile.in scim-master/extras/immodules/client-gtk/gtk4/im-scim-bridge-gtk.c000066400000000000000000000033131415264260100252400ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include "scim-bridge.h" #include "scim-bridge-client.h" #include "../scim-bridge-client-gtk.h" #include "scim-bridge-client-imcontext-gtk.h" /* Implementations */ void g_io_im_scim_load (GIOModule *io_module) { static boolean initialized = FALSE; if (initialized) { return; } scim_bridge_client_imcontext_register_type (io_module); GIOExtension *ext = g_io_extension_point_implement ( GTK_IM_MODULE_EXTENSION_POINT_NAME, GTK_TYPE_SCIM_CLIENT_IMCONTEXT, "scim", 100); scim_bridge_client_gtk_initialize (); atexit (scim_bridge_client_gtk_finalize); g_type_module_use(G_TYPE_MODULE(io_module)); initialized = TRUE; } void g_io_im_scim_unload (GIOModule *io_module) { g_type_module_unuse(G_TYPE_MODULE(io_module)); scim_bridge_client_gtk_finalize (); } scim-master/extras/immodules/client-gtk/gtk4/scim-bridge-client-imcontext-gtk.c000066400000000000000000001111661415264260100301270ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #ifdef GDK_WINDOWING_X11 #include #include #endif #include "scim-bridge-attribute.h" #include "scim-bridge-client.h" #include "scim-bridge-client-imcontext-gtk.h" #include "scim-bridge-client-key-event-utility-gtk.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-messenger.h" #include "scim-bridge-output.h" #include "scim-bridge-string.h" /* Typedef */ struct _ScimBridgeClientIMContext { GtkIMContext parent; GtkIMContext *slave; boolean slave_preedit; scim_bridge_imcontext_id_t id; char *preedit_string; size_t preedit_string_capacity; PangoAttrList *preedit_attributes; unsigned int preedit_cursor_position; boolean preedit_cursor_flicking; boolean preedit_shown; boolean preedit_started; char *commit_string; size_t commit_string_capacity; boolean enabled; GtkWidget *client_widget; int cursor_x; int cursor_y; int window_x; int window_y; }; typedef struct { guint16 red; guint16 green; guint16 blue; } Color; /* Private variables */ static Color preedit_normal_background; static Color preedit_normal_foreground; static Color preedit_active_background; static Color preedit_active_foreground; static GType class_type = 0; static GObjectClass *root_klass = NULL; static ScimBridgeClientIMContext *focused_imcontext = NULL; static GtkWidget *focused_widget = NULL; /* Class functions */ static void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data); static void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *context, ScimBridgeClientIMContextClass *klass); static void scim_bridge_client_imcontext_finalize (GObject *object); static gboolean scim_bridge_client_imcontext_filter_key_event (GtkIMContext *context, GdkEvent *event); static void scim_bridge_client_imcontext_reset (GtkIMContext *context); static void scim_bridge_client_imcontext_get_preedit_string (GtkIMContext *context, gchar **str, PangoAttrList **attrs, gint *cursor_pos); static void scim_bridge_client_imcontext_set_preedit_enabled (GtkIMContext *context, gboolean enabled); static void scim_bridge_client_imcontext_set_client_widget (GtkIMContext *context, GtkWidget *window); static void scim_bridge_client_imcontext_focus_in (GtkIMContext *context); static void scim_bridge_client_imcontext_focus_out (GtkIMContext *context); static void scim_bridge_client_imcontext_set_cursor_location (GtkIMContext *context, GdkRectangle *area); /* slave callbacks */ static void gtk_im_slave_commit_cb (GtkIMContext *context, const char *str, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_changed_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_start_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_end_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static retval_t filter_key_event (ScimBridgeClientIMContext *imcontext, GdkEvent *event, boolean *consumed) { scim_bridge_pdebugln (5, "filter_key_event ()"); if (focused_imcontext != imcontext) scim_bridge_client_imcontext_focus_in (GTK_IM_CONTEXT (imcontext)); //focused_widget = gtk_get_event_widget (event); focused_widget = imcontext->client_widget; if (scim_bridge_client_is_messenger_opened ()) { ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event (); scim_bridge_key_event_gdk_to_bridge (bridge_key_event, imcontext->client_widget, event); *consumed = FALSE; const retval_t retval_error = scim_bridge_client_handle_key_event (imcontext, bridge_key_event, consumed); scim_bridge_free_key_event (bridge_key_event); if (retval_error) { scim_bridge_perrorln ("An IOException at filter_key_event ()"); } else { return RETVAL_SUCCEEDED; } } return RETVAL_FAILED; } static retval_t set_cursor_location (ScimBridgeClientIMContext *imcontext, int window_x, int window_y, int cursor_x, int cursor_y) { scim_bridge_pdebugln (5, "set_cursor_location ()"); if (imcontext->window_x == window_x && imcontext->window_y == window_y && imcontext->cursor_x == cursor_x && imcontext->cursor_y == cursor_y) { return RETVAL_SUCCEEDED; } else { imcontext->cursor_x = cursor_x; imcontext->cursor_y = cursor_y; imcontext->window_x = window_x; imcontext->window_y = window_y; scim_bridge_pdebugln (3, "The cursor location is changed: x = %d + %d\ty = %d + %d", imcontext->window_x, imcontext->cursor_x, imcontext->window_y, imcontext->cursor_y); if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_cursor_location (imcontext, imcontext->window_x + imcontext->cursor_x, imcontext->window_y + imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException occurred at set_cursor_location ()"); return RETVAL_FAILED; } else { return RETVAL_SUCCEEDED; } } } return RETVAL_FAILED; } static void widget_get_origin(GtkWidget *widget, int *x, int *y) { double widget_x, widget_y; GtkRoot *root = gtk_widget_get_root(widget); gtk_widget_translate_coordinates(widget, GTK_WIDGET(root), 0, 0, &widget_x, &widget_y); GdkSurface *surface = gtk_native_get_surface (GTK_NATIVE(root)); Window wiget_win = gdk_x11_surface_get_xid (surface); XWindowAttributes attr; Display *display = gdk_x11_display_get_xdisplay (gdk_surface_get_display (surface)); XGetWindowAttributes(display, wiget_win, &attr); Window child_win = None; XTranslateCoordinates(display, wiget_win, attr.root, widget_x, widget_y, x, y, &child_win); } static gboolean key_snooper (GtkWidget *widget, GdkEvent *event, gpointer data) { scim_bridge_pdebugln (7, "key_snooper ()"); GdkEventType type = gdk_event_get_event_type(event); if (focused_imcontext && scim_bridge_client_is_messenger_opened () && (type == GDK_KEY_PRESS || type == GDK_KEY_RELEASE)) { //&& //!(event->send_event & SEND_EVENT_MASK)) { if (focused_imcontext->client_widget) { // TODO get cliet_wiget's origin int new_widget_x = 0; int new_widget_y = 0; widget_get_origin (focused_imcontext->client_widget, &new_widget_x, &new_widget_y); if (focused_imcontext->window_x != new_widget_x || focused_imcontext->window_y != new_widget_y) { scim_bridge_pdebugln (1, "The cursor location is changed: x = %d + %d\ty = %d + %d", new_widget_x, focused_imcontext->cursor_x, new_widget_y, focused_imcontext->cursor_y); if (set_cursor_location (focused_imcontext, new_widget_x, new_widget_y, focused_imcontext->cursor_x, focused_imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException at key_snooper ()"); return FALSE; } } } boolean consumed = FALSE; if (filter_key_event (focused_imcontext, event, &consumed)) { scim_bridge_perrorln ("An IOException at key_snooper ()"); return FALSE; } else { if (consumed) { g_signal_emit_by_name (focused_imcontext, "preedit-changed"); return TRUE; } } } return FALSE; } static boolean is_precise_cursor_enabled () { static boolean first_time = TRUE; static boolean precise_cursor_enabled = FALSE; if (first_time) { char *env_precise_cursor_enabled = getenv ("SCIM_BRIDGE_PRECISE_CURSOR_ENABLED"); if (env_precise_cursor_enabled != NULL) scim_bridge_string_to_boolean (&precise_cursor_enabled, env_precise_cursor_enabled); first_time = FALSE; } return precise_cursor_enabled; } /* Bindings */ void scim_bridge_client_imcontext_set_id (ScimBridgeClientIMContext *imcontext, scim_bridge_imcontext_id_t new_id) { imcontext->id = new_id; } scim_bridge_imcontext_id_t scim_bridge_client_imcontext_get_id (const ScimBridgeClientIMContext *imcontext) { return imcontext->id; } void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *preedit_string) { if (imcontext->preedit_string != NULL && preedit_string != NULL && !strcmp (imcontext->preedit_string, preedit_string)) return; size_t preedit_string_length; if (preedit_string != NULL) { preedit_string_length = strlen (preedit_string); } else { preedit_string_length = 0; } if (imcontext->preedit_string_capacity <= preedit_string_length) { imcontext->preedit_string_capacity = preedit_string_length; free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char) * (imcontext->preedit_string_capacity + 1)); } if (preedit_string_length > 0) { strcpy (imcontext->preedit_string, preedit_string); } else { imcontext->preedit_string[0] = '\0'; } } void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean preedit_shown) { imcontext->preedit_shown = preedit_shown; if (!preedit_shown) { free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_attributes != NULL) { pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; } } } void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position) { imcontext->preedit_cursor_position = cursor_position; } void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, ScimBridgeAttribute** const preedit_attributes, int attribute_count) { if (imcontext->preedit_attributes != NULL) pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = pango_attr_list_new (); int preedit_string_length = 0; int preedit_wstring_length = 0; if (imcontext->preedit_string != NULL) { preedit_string_length = strlen (imcontext->preedit_string); preedit_wstring_length = g_utf8_strlen (imcontext->preedit_string, -1); } boolean *has_attribute = alloca (sizeof (boolean) * preedit_string_length); int i; for (i = 0; i < preedit_string_length; ++i) { has_attribute[i] = FALSE; } for (i = 0; i < attribute_count; ++i) { const ScimBridgeAttribute *attr = preedit_attributes[i]; const int begin_pos = scim_bridge_attribute_get_begin (attr); const int end_pos = scim_bridge_attribute_get_end (attr); if (begin_pos <= end_pos && 0 <= begin_pos && end_pos <= preedit_wstring_length) { const int start_index = g_utf8_offset_to_pointer (imcontext->preedit_string, begin_pos) - imcontext->preedit_string; const int end_index = g_utf8_offset_to_pointer (imcontext->preedit_string, end_pos) - imcontext->preedit_string; const scim_bridge_attribute_type_t attr_type = scim_bridge_attribute_get_type (attr); const scim_bridge_attribute_value_t attr_value = scim_bridge_attribute_get_value (attr); boolean valid_attribute = FALSE; if (attr_type == ATTRIBUTE_DECORATE) { if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_UNDERLINE) { valid_attribute = TRUE; PangoAttribute *pango_attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } else if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE) { valid_attribute = TRUE; PangoAttribute *pango_attr0 = pango_attr_foreground_new (preedit_normal_background.red, preedit_normal_background.green, preedit_normal_background.blue); pango_attr0->start_index = start_index; pango_attr0->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr0); PangoAttribute *pango_attr1 = pango_attr_background_new (preedit_normal_foreground.red, preedit_normal_foreground.green, preedit_normal_foreground.blue); pango_attr1->start_index = start_index; pango_attr1->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr1); } else if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT) { valid_attribute = TRUE; PangoAttribute *pango_attr0 = pango_attr_foreground_new (preedit_active_foreground.red, preedit_active_foreground.green, preedit_active_foreground.blue); pango_attr0->start_index = start_index; pango_attr0->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr0); PangoAttribute *pango_attr1 = pango_attr_background_new (preedit_active_background.red, preedit_active_background.green, preedit_active_background.blue); pango_attr1->start_index = start_index; pango_attr1->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr1); } else { scim_bridge_perrorln ("Unknown preedit decoration!"); } } else if (attr_type == ATTRIBUTE_FOREGROUND) { valid_attribute = TRUE; const unsigned int red = scim_bridge_attribute_get_red (attr) * 256; const unsigned int green = scim_bridge_attribute_get_green (attr) * 256; const unsigned int blue = scim_bridge_attribute_get_blue (attr) * 256; PangoAttribute *pango_attr = pango_attr_foreground_new (red, green, blue); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } else if (attr_type == ATTRIBUTE_BACKGROUND) { valid_attribute = TRUE; const unsigned int red = scim_bridge_attribute_get_red (attr) * 256; const unsigned int green = scim_bridge_attribute_get_green (attr) * 256; const unsigned int blue = scim_bridge_attribute_get_blue (attr) * 256; PangoAttribute *pango_attr = pango_attr_background_new (red, green, blue); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } if (valid_attribute) { int j; for (j = start_index; j < end_index; ++j) { has_attribute[j] = TRUE; } } } } // Add underlines for the all characters without attributes. for (i = 0; i < preedit_string_length; ++i) { if (has_attribute[i] == FALSE) { PangoAttribute *pango_attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); pango_attr->start_index = i; for (; i < preedit_string_length && has_attribute[i] == FALSE; ++i); pango_attr->end_index = i; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } } } void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext) { if (imcontext->preedit_shown && !imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-start"); imcontext->preedit_started = TRUE; } if (is_precise_cursor_enabled ()) { const size_t old_cursor_position = imcontext->preedit_cursor_position; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_string != NULL) imcontext->preedit_cursor_position = g_utf8_strlen (imcontext->preedit_string, -1); imcontext->preedit_cursor_flicking = TRUE; g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); imcontext->preedit_cursor_position = old_cursor_position; imcontext->preedit_cursor_flicking = FALSE; } g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); if (!imcontext->preedit_shown && imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-end"); imcontext->preedit_started = FALSE; } } void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *commit_string) { size_t commit_string_length; if (commit_string != NULL) { commit_string_length = strlen (commit_string); } else { commit_string_length = 0; } if (imcontext->commit_string_capacity <= commit_string_length) { imcontext->commit_string_capacity = commit_string_length; free (imcontext->commit_string); imcontext->commit_string = malloc (sizeof (char) * (imcontext->commit_string_capacity + 1)); } if (commit_string_length > 0) { strcpy (imcontext->commit_string, commit_string); } else { imcontext->commit_string[0] = '\0'; } } void scim_bridge_client_imcontext_commit (ScimBridgeClientIMContext *imcontext) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "commit", imcontext->commit_string); } void scim_bridge_client_imcontext_beep (ScimBridgeClientIMContext *imcontext) { gtk_widget_error_bell(imcontext->client_widget); } boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position) { char *str; int cur_pos_in_utf8, an_pos_in_utf8; if (gtk_im_context_get_surrounding_with_selection (GTK_IM_CONTEXT (imcontext), &str, &cur_pos_in_utf8, &an_pos_in_utf8)) { const size_t fetch_wstr_length = g_utf8_strlen (str, -1); const size_t after_wstr_length = g_utf8_strlen (str + cur_pos_in_utf8, an_pos_in_utf8); const size_t before_wstr_length = fetch_wstr_length - after_wstr_length; size_t before_copy_wstr_length; size_t after_copy_wstr_length; if (after_wstr_length > after_max) { after_copy_wstr_length = after_max; } else { after_copy_wstr_length = after_wstr_length; } if (before_wstr_length > before_max) { before_copy_wstr_length = before_max; } else { before_copy_wstr_length = before_wstr_length; } const size_t begin_wstr_index = before_wstr_length - before_copy_wstr_length; const size_t end_wstr_index = fetch_wstr_length - (after_wstr_length - after_copy_wstr_length); char* begin_str_ptr = g_utf8_offset_to_pointer (str, begin_wstr_index); char* end_str_ptr = g_utf8_offset_to_pointer (str, end_wstr_index); size_t str_length = end_str_ptr - begin_str_ptr; *string = malloc (sizeof (char) * (str_length + 1)); strncpy (*string, begin_str_ptr, str_length); (*string)[str_length] = '\0'; *cursor_position = before_copy_wstr_length; g_free (str); return TRUE; } else { *string = NULL; return FALSE; } } boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length) { boolean retval = gtk_im_context_delete_surrounding (GTK_IM_CONTEXT (imcontext), offset, length); return retval; } boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string) { gtk_im_context_set_surrounding_with_selection (GTK_IM_CONTEXT (imcontext), string, -1, cursor_position, cursor_position); return TRUE; } void scim_bridge_client_imcontext_forward_key_event (ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event) { scim_bridge_pdebugln (7, "scim_bridge_client_imcontext_forward_key_event: NOT IMPLEMENTED YET"); } void scim_bridge_client_imcontext_imengine_status_changed (ScimBridgeClientIMContext *imcontext, boolean enabled) { if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } } imcontext->enabled = enabled; } /* Class Implementations */ void scim_bridge_client_imcontext_static_initialize () { GdkRGBA color; g_warn_if_fail(gdk_rgba_parse (&color, "gray92")); preedit_normal_background = (Color){color.red * 65535, color.green * 65535, color.blue * 65535}; g_warn_if_fail(gdk_rgba_parse (&color, "black")); preedit_normal_foreground = (Color){color.red * 65535, color.green * 65535, color.blue * 65535}; g_warn_if_fail(gdk_rgba_parse (&color, "light blue")); preedit_active_background = (Color){color.red * 65535, color.green * 65535, color.blue * 65535}; g_warn_if_fail(gdk_rgba_parse (&color, "black")); preedit_active_foreground = (Color){color.red * 65535, color.green * 65535, color.blue * 65535}; focused_imcontext = NULL; } void scim_bridge_client_imcontext_static_finalize () { focused_imcontext = NULL; } void scim_bridge_client_imcontext_connection_opened () { } void scim_bridge_client_imcontext_connection_closed () { if (focused_imcontext != NULL) scim_bridge_client_imcontext_set_preedit_shown (focused_imcontext, FALSE); } void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data) { root_klass = (GObjectClass *) g_type_class_peek_parent (klass); GtkIMContextClass *gtk_im_klass = GTK_IM_CONTEXT_CLASS (klass); gtk_im_klass->set_client_widget = scim_bridge_client_imcontext_set_client_widget; gtk_im_klass->filter_keypress = scim_bridge_client_imcontext_filter_key_event; gtk_im_klass->reset = scim_bridge_client_imcontext_reset; gtk_im_klass->get_preedit_string = scim_bridge_client_imcontext_get_preedit_string; gtk_im_klass->focus_in = scim_bridge_client_imcontext_focus_in; gtk_im_klass->focus_out = scim_bridge_client_imcontext_focus_out; gtk_im_klass->set_cursor_location = scim_bridge_client_imcontext_set_cursor_location; gtk_im_klass->set_use_preedit = scim_bridge_client_imcontext_set_preedit_enabled; GObjectClass *gobject_klass = G_OBJECT_CLASS (klass); gobject_klass->finalize = scim_bridge_client_imcontext_finalize; } GType scim_bridge_client_imcontext_get_type () { return class_type; } void scim_bridge_client_imcontext_register_type (GIOModule *io_module) { scim_bridge_pdebugln (2, "scim_bridge_client_imcontext_register_type ()"); static const GTypeInfo klass_info = { sizeof (ScimBridgeClientIMContextClass), /* no base class initializer */ NULL, /* no base class finalizer */ NULL, /* class initializer */ (GClassInitFunc) scim_bridge_client_imcontext_class_initialize, /* no class finalizer */ NULL, /* no class data */ NULL, sizeof (ScimBridgeClientIMContext), 0, /* object initizlier */ (GInstanceInitFunc) scim_bridge_client_imcontext_initialize, 0 }; class_type = g_type_module_register_type (G_TYPE_MODULE(io_module), GTK_TYPE_IM_CONTEXT, "ScimBridgeClientIMContext", &klass_info, 0); } GtkIMContext *scim_bridge_client_imcontext_new () { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_new ()"); ScimBridgeClientIMContext *ic = SCIM_BRIDGE_CLIENT_IMCONTEXT (g_object_new (GTK_TYPE_SCIM_CLIENT_IMCONTEXT, NULL)); return GTK_IM_CONTEXT (ic); } void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *imcontext, ScimBridgeClientIMContextClass *klass) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_initialize ()"); /* slave exists for using gtk+'s table based input method */ imcontext->slave_preedit = FALSE; imcontext->slave = gtk_im_context_simple_new (); g_signal_connect(G_OBJECT(imcontext->slave), "commit", G_CALLBACK(gtk_im_slave_commit_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-changed", G_CALLBACK(gtk_im_slave_preedit_changed_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-start", G_CALLBACK(gtk_im_slave_preedit_start_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-end", G_CALLBACK(gtk_im_slave_preedit_end_cb), imcontext); imcontext->preedit_shown = FALSE; imcontext->preedit_started = FALSE; imcontext->preedit_cursor_position = 0; imcontext->preedit_cursor_flicking = FALSE; imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_attributes = NULL; imcontext->commit_string = malloc (sizeof (char)); imcontext->commit_string[0] = '\0'; imcontext->commit_string_capacity = 0; imcontext->enabled = FALSE; imcontext->client_widget = NULL; imcontext->id = -1; if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_register_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to register the IMContext"); } else { scim_bridge_pdebugln (1, "IMContext registered: id = %d", imcontext->id); } } void scim_bridge_client_imcontext_finalize (GObject *object) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_finalize ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (object); if (imcontext == focused_imcontext) scim_bridge_client_imcontext_focus_out (GTK_IM_CONTEXT (imcontext)); if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_deregister_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to deregister an IMContext"); } else { scim_bridge_pdebugln (3, "IMContext deregistered: id = %d", imcontext->id); } if (imcontext->client_widget) g_object_unref (imcontext->client_widget); free (imcontext->preedit_string); free (imcontext->commit_string); if (imcontext->preedit_attributes != NULL) pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_commit_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_changed_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_start_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_end_cb, (void *)imcontext); g_object_unref(imcontext->slave); root_klass->finalize (object); } /* Class functions */ gboolean scim_bridge_client_imcontext_filter_key_event (GtkIMContext *context, GdkEvent *event) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_filter_key_event ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); boolean ret = FALSE; if (imcontext) { ret = key_snooper(0, event, 0); if (imcontext->slave) { if (!ret) { ret = gtk_im_context_filter_keypress (imcontext->slave, event); } else if (imcontext->slave_preedit) { imcontext->slave_preedit = FALSE; gtk_im_context_reset (imcontext->slave); } } } return ret; } void scim_bridge_client_imcontext_reset (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_reset ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != focused_imcontext) return; if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_reset_imcontext (imcontext)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_reset ()"); } } } void scim_bridge_client_imcontext_get_preedit_string (GtkIMContext *context, gchar **str, PangoAttrList **pango_attrs, gint *cursor_pos) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_get_preedit_string ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext->slave_preedit) { gtk_im_context_get_preedit_string (imcontext->slave, str, pango_attrs, cursor_pos); return; } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL && imcontext->preedit_shown) { const size_t preedit_string_length = strlen (imcontext->preedit_string); const size_t preedit_wstring_length = g_utf8_strlen (imcontext->preedit_string, -1); if (str) { if (preedit_string_length > 0) { *str = g_strdup (imcontext->preedit_string); } else { *str = g_strdup (""); } } if (cursor_pos) { if (imcontext->preedit_cursor_position > preedit_wstring_length) { *cursor_pos = preedit_wstring_length; } else { *cursor_pos = imcontext->preedit_cursor_position; } } if (pango_attrs) { *pango_attrs = imcontext->preedit_attributes; pango_attr_list_ref (imcontext->preedit_attributes); } } else { if (str) *str = g_strdup (""); if (cursor_pos) *cursor_pos = 0; if (pango_attrs) *pango_attrs = pango_attr_list_new (); } } void scim_bridge_client_imcontext_focus_in (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_in ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (focused_imcontext != NULL && focused_imcontext != imcontext) { scim_bridge_client_imcontext_focus_out (GTK_IM_CONTEXT (focused_imcontext)); } focused_imcontext = imcontext; if (!scim_bridge_client_is_messenger_opened () && scim_bridge_client_is_reconnection_enabled ()) { scim_bridge_pdebugln (7, "Trying to open the connection again..."); scim_bridge_client_open_messenger (); } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, TRUE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_in ()"); } } } void scim_bridge_client_imcontext_focus_out (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_out ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); focused_widget = NULL; focused_imcontext = imcontext; if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, FALSE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_out ()"); } } focused_imcontext = NULL; } void scim_bridge_client_imcontext_set_client_widget (GtkIMContext *context, GtkWidget *new_widget) { scim_bridge_pdebugln (7, "scim_bridge_client_imcontext_set_client_widget ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (!imcontext) { return; } if (imcontext->client_widget) { g_object_unref(imcontext->client_widget); } imcontext->client_widget = new_widget; if (!new_widget) { return; } g_object_ref (new_widget); widget_get_origin (imcontext->client_widget, &imcontext->window_x, &imcontext->window_y); } void scim_bridge_client_imcontext_set_cursor_location (GtkIMContext *context, GdkRectangle *area) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_set_cursor_location ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext->preedit_cursor_flicking) return; if (imcontext != NULL && imcontext->client_widget != NULL) { const int new_cursor_x = area->x + area->width; const int new_cursor_y = area->y + area->height + 8; int widget_x, widget_y; widget_get_origin(imcontext->client_widget, &widget_x, &widget_y); if (set_cursor_location (imcontext, widget_x, widget_y, new_cursor_x, new_cursor_y)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()"); } } } void scim_bridge_client_imcontext_set_preedit_enabled (GtkIMContext *context, gboolean enabled) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_set_preedit_enabled ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != NULL) { if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_preedit_mode (imcontext, enabled ? PREEDIT_EMBEDDED:PREEDIT_ANY)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_preedit_enabled ()"); } } } } static void gtk_im_slave_commit_cb ( GtkIMContext *context, const char *str, ScimBridgeClientIMContext *imcontext ) { g_return_if_fail(str); g_signal_emit_by_name(imcontext, "commit", str); } static void gtk_im_slave_preedit_changed_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = TRUE; g_signal_emit_by_name(imcontext, "preedit-changed"); } static void gtk_im_slave_preedit_start_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = TRUE; g_signal_emit_by_name(imcontext, "preedit-start"); } static void gtk_im_slave_preedit_end_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = FALSE; g_signal_emit_by_name(imcontext, "preedit-end"); }scim-master/extras/immodules/client-gtk/gtk4/scim-bridge-client-imcontext-gtk.h000066400000000000000000000067771415264260100301470ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header for gtk imcontext of scim-bridge. */ #ifndef SCIMBRIDGECLIENTIMCONTEXTGTK_H_ #define SCIMBRIDGECLIENTIMCONTEXTGTK_H_ #include #if GTK_CHECK_VERSION(3, 0, 0) #else #include #endif #include #include "scim-bridge.h" #include "scim-bridge-client-imcontext.h" #define GTK_TYPE_SCIM_CLIENT_IMCONTEXT (scim_bridge_client_imcontext_get_type ()) #if GTK_CHECK_VERSION(3, 0, 0) #define SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContext)) #else #define SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContext)) #endif #define SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #if GTK_CHECK_VERSION(3, 0, 0) #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #else #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT(class) (GTK_CHECK_TYPE ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #endif #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #if GTK_CHECK_VERSION(3, 0, 0) #define SCIM_BRIDGE_CLIENT_IMCONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #else #define SCIM_BRIDGE_CLIENT_IMCONTEXT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #endif struct _ScimBridgeClientIMContextClass { GtkIMContextClass parent_class; }; /** * IMContext class for gtk client. */ typedef struct _ScimBridgeClientIMContextClass ScimBridgeClientIMContextClass; /** * Initialize IMContext class itself. */ void scim_bridge_client_imcontext_static_initialize (); /** * Finalize IMContext class itself. */ void scim_bridge_client_imcontext_static_finalize (); /** * The connection with the agent is opened. */ void scim_bridge_client_imcontext_connection_opened (); /** * The connection with the agent is closed. */ void scim_bridge_client_imcontext_connection_closed (); /** * Allocate an IMContext. * * @return new IMContext. */ GtkIMContext *scim_bridge_client_imcontext_new (); /** * Get the type value of IMContexts. * * @return The type value of IMContexts. */ GType scim_bridge_client_imcontext_get_type (); /** * Register the type value for IMContexts. * * @param type_module The type module. */ void scim_bridge_client_imcontext_register_type (GIOModule *io_module); #endif /*SCIMBRIDGECLIENTIMCONTEXTGTK_H_*/ scim-master/extras/immodules/client-gtk/gtk4/scim-bridge-client-key-event-utility-gtk.c000066400000000000000000000123431415264260100315220ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #ifdef GDK_WINDOWING_X11 #include #include #include #include #endif #include "scim-bridge-client-key-event-utility-gtk.h" #include "scim-bridge-key-event.h" /* Implementations */ void scim_bridge_key_event_bridge_to_gdk (GdkEvent *gdk_key_event, GtkWidget *client_widget, const ScimBridgeKeyEvent *key_event) { // gdk_key_event->state = 0; // if (scim_bridge_key_event_is_shift_down (key_event)) gdk_key_event->state |= GDK_SHIFT_MASK; // if (scim_bridge_key_event_is_caps_lock_down (key_event)) gdk_key_event->state |= GDK_LOCK_MASK; // if (scim_bridge_key_event_is_control_down (key_event)) gdk_key_event->state |= GDK_CONTROL_MASK; // if (scim_bridge_key_event_is_alt_down (key_event)) gdk_key_event->state |= GDK_MOD1_MASK; // if (scim_bridge_key_event_is_num_lock_down (key_event)) gdk_key_event->state |= GDK_MOD2_MASK; // // if (scim_bridge_key_event_is_pressed (key_event)) { // gdk_key_event->type = GDK_KEY_PRESS; // } else { // gdk_key_event->type = GDK_KEY_RELEASE; // gdk_key_event->state |= GDK_RELEASE_MASK; // } // // gdk_key_event->widget = client_widget; // // struct timeval current_time; // gettimeofday (¤t_time, NULL); // // gdk_key_event->time = current_time.tv_sec * 1000 + current_time.tv_usec / 1000; // gdk_key_event->keyval = scim_bridge_key_event_get_code (key_event); // gdk_key_event->length = 0; // gdk_key_event->string = 0; // // GdkKeymap *key_map = get_gdk_keymap (gdk_key_event->widget); // // GdkKeymapKey *keys; // gint n_keys; // // if (gdk_keymap_get_entries_for_keyval (key_map, gdk_key_event->keyval, &keys, &n_keys)) { // gdk_key_event->hardware_keycode = keys[0].keycode; // gdk_key_event->group = keys [0].group; // } else { // gdk_key_event->hardware_keycode = 0; // gdk_key_event->group = 0; // } } void scim_bridge_key_event_gdk_to_bridge (ScimBridgeKeyEvent *bridge_key_event, GtkWidget *widget, const GdkEvent *key_event) { // Use Key Symbole provided by gtk. guint keyval = gdk_key_event_get_keyval((GdkEvent *) key_event); GdkModifierType state = gdk_event_get_modifier_state((GdkEvent *) key_event); scim_bridge_key_event_set_code (bridge_key_event, (scim_bridge_key_code_t) keyval); scim_bridge_key_event_clear_modifiers (bridge_key_event); if (state & GDK_SHIFT_MASK || keyval == GDK_KEY_Shift_L || keyval == GDK_KEY_Shift_R) scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); if (state & GDK_LOCK_MASK || keyval == GDK_KEY_Caps_Lock) scim_bridge_key_event_set_caps_lock_down (bridge_key_event, TRUE); if (state & GDK_CONTROL_MASK || keyval == GDK_KEY_Control_L || keyval == GDK_KEY_Control_R) scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); if (state & GDK_ALT_MASK || keyval == GDK_KEY_Alt_L || keyval == GDK_KEY_Alt_R) scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); if (gdk_device_get_num_lock_state(gdk_event_get_device((GdkEvent *) key_event))) scim_bridge_key_event_set_num_lock_down (bridge_key_event, TRUE); if (gdk_event_get_event_type((GdkEvent *) key_event) != GDK_KEY_RELEASE) { scim_bridge_key_event_set_pressed (bridge_key_event, TRUE); } else { scim_bridge_key_event_set_pressed (bridge_key_event, FALSE); } #ifdef GDK_WINDOWING_X11 GdkX11Display *display = NULL; if (widget != NULL) { display = GDK_X11_DISPLAY (gtk_widget_get_display(widget)); } else { display = GDK_X11_DISPLAY (gdk_display_get_default ()); } if (scim_bridge_key_event_get_code (bridge_key_event) == SCIM_BRIDGE_KEY_CODE_backslash) { boolean kana_ro = FALSE; int keysym_size = 0; KeySym *keysyms = XGetKeyboardMapping ( gdk_x11_display_get_xdisplay(display), gdk_key_event_get_keycode((GdkEvent *) key_event), 1, &keysym_size); if (keysyms != NULL) { kana_ro = (keysyms[0] == XK_backslash && keysyms[1] == XK_underscore); XFree (keysyms); } scim_bridge_key_event_set_quirk_enabled (bridge_key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO, kana_ro); } #endif } scim-master/extras/immodules/client-gtk/gtk4/scim-bridge-client-key-event-utility-gtk.h000066400000000000000000000036141415264260100315300ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header of the functions to translate key events between scim-bridge and gtk. */ #ifndef SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_ #define SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_ #include #include "scim-bridge.h" #include "scim-bridge-key-event.h" /** * Translate a key event from scim-bridge into gdk. * * @param gdk_key_event A key event of gdk. * @param client_wiget The gdk window for the key event. * @param key_event The key event from scim-bridge. */ void scim_bridge_key_event_bridge_to_gdk (GdkEvent *gdk_key_event, GtkWidget *client_wiget, const ScimBridgeKeyEvent *key_event); /** * Translate a key event from gdk into scim-bridge. * * @param bridge_key_event A key event of scim-bridge. * @param client_wiget The gdk window for the key event. * @param key_event The key event from gdk. */ void scim_bridge_key_event_gdk_to_bridge (ScimBridgeKeyEvent *bridge_key_event, GtkWidget *client_wiget, const GdkEvent *key_event); #endif /*SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_*/ scim-master/extras/immodules/client-gtk/im-scim-bridge-gtk.c000066400000000000000000000045241415264260100243740ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include "scim-bridge.h" #include "scim-bridge-client.h" #include "scim-bridge-client-gtk.h" #include "scim-bridge-client-imcontext-gtk.h" static const GtkIMContextInfo scim_bridge_info = { /* ID */ "scim", /* Human readable name */ "SCIM Input Method", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "", /* Languages for which this module is the default */ "" }; static const GtkIMContextInfo *info_list[] = { &scim_bridge_info }; /* Public functions */ void im_module_init (GTypeModule *type_module); void im_module_exit (void); void im_module_list (const GtkIMContextInfo ***contexts, int *context_count); GtkIMContext *im_module_create (const gchar *context_id); /* Implementations */ void im_module_init (GTypeModule *type_module) { scim_bridge_client_imcontext_register_type (type_module); scim_bridge_client_gtk_initialize (); static boolean first_time = TRUE; if (first_time) atexit (scim_bridge_client_gtk_finalize); first_time = FALSE; } void im_module_exit () { scim_bridge_client_gtk_finalize (); } void im_module_list (const GtkIMContextInfo ***contexts, int *context_count) { *contexts = info_list; *context_count = G_N_ELEMENTS (info_list); } GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "scim") == 0) { return scim_bridge_client_imcontext_new (); } else { return NULL; } } scim-master/extras/immodules/client-gtk/scim-bridge-client-gtk.c000066400000000000000000000064261415264260100252500ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include "scim-bridge-client.h" #include "scim-bridge-client-gtk.h" #include "scim-bridge-client-imcontext-gtk.h" #include "scim-bridge-client-protected.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-output.h" /* Private Variables */ static GIOChannel *messenger_iochannel = NULL; static guint messenger_event_source = -1; static boolean initialized = FALSE; /* Private Functions */ static gboolean handle_message (GIOChannel *source, GIOCondition condition, gpointer data) { const int socket_fd = scim_bridge_client_get_messenger_fd (); fd_set read_set; FD_ZERO (&read_set); FD_SET (socket_fd, &read_set); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; if (select (socket_fd + 1, &read_set, NULL, NULL, &timeout) > 0) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException occurred at handle_message ()"); return FALSE; } } return TRUE; } /* Public Functions */ void scim_bridge_client_gtk_initialize () { scim_bridge_pdebugln (5, "scim_bridge_client_gtk_initialize ()"); if (initialized) { return; } else { initialized = TRUE; } if (scim_bridge_client_initialize ()) { scim_bridge_perrorln ("Failed to initialize scim-bridge..."); } else { scim_bridge_client_open_messenger (); } scim_bridge_client_imcontext_static_initialize (); } void scim_bridge_client_gtk_finalize () { scim_bridge_pdebugln (5, "scim_bridge_client_gtk_finalize ()"); if (!initialized) { return; } else { initialized = FALSE; } scim_bridge_client_finalize (); scim_bridge_client_imcontext_static_finalize (); } void scim_bridge_client_messenger_opened () { if (messenger_iochannel == NULL) { messenger_iochannel = g_io_channel_unix_new (scim_bridge_client_get_messenger_fd ()); messenger_event_source = g_io_add_watch (messenger_iochannel, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, &handle_message, NULL); } scim_bridge_client_imcontext_connection_opened (); } void scim_bridge_client_messenger_closed () { if (messenger_iochannel != NULL) { g_io_channel_unref (messenger_iochannel); messenger_iochannel = NULL; g_source_remove (messenger_event_source); messenger_event_source = -1; } scim_bridge_client_imcontext_connection_closed (); } scim-master/extras/immodules/client-gtk/scim-bridge-client-gtk.h000066400000000000000000000026531415264260100252530ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about the gtk client for scim-bridge. */ #ifndef SCIMBRIDGECLIENTGTK_H_ #define SCIMBRIDGECLIENTGTK_H_ #include "scim-bridge.h" #include "scim-bridge-key-event.h" #include "scim-bridge-imcontext.h" #ifdef __cplusplus extern "C" { #endif /** * Initialize gtk client for SCIMBridge. */ void scim_bridge_client_gtk_initialize (); /** * Finalize gtk client for SCIMBridge. */ void scim_bridge_client_gtk_finalize (); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGECLIENTGTK_H_*/ scim-master/extras/immodules/client-gtk/scim-bridge-client-imcontext-gtk.c000066400000000000000000001112411415264260100272500ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #if GTK_CHECK_VERSION(3, 0, 0) #include #else #include #endif #if GTK_CHECK_VERSION(3, 0, 0) #else #include #endif #include "scim-bridge-attribute.h" #include "scim-bridge-client.h" #include "scim-bridge-client-imcontext-gtk.h" #include "scim-bridge-client-key-event-utility-gtk.h" #include "scim-bridge-imcontext.h" #include "scim-bridge-messenger.h" #include "scim-bridge-output.h" #include "scim-bridge-string.h" #define SEND_EVENT_MASK 0x02 /* Typedef */ struct _ScimBridgeClientIMContext { GtkIMContext parent; GtkIMContext *slave; boolean slave_preedit; scim_bridge_imcontext_id_t id; char *preedit_string; size_t preedit_string_capacity; PangoAttrList *preedit_attributes; unsigned int preedit_cursor_position; boolean preedit_cursor_flicking; boolean preedit_shown; boolean preedit_started; char *commit_string; size_t commit_string_capacity; boolean enabled; GdkWindow *client_window; int cursor_x; int cursor_y; int window_x; int window_y; }; /* Private variables */ static GdkColor preedit_normal_background; static GdkColor preedit_normal_foreground; static GdkColor preedit_active_background; static GdkColor preedit_active_foreground; static GType class_type = 0; static GObjectClass *root_klass = NULL; static ScimBridgeClientIMContext *focused_imcontext = NULL; static GtkWidget *focused_widget = NULL; static guint key_snooper_id = 0; static boolean key_snooper_used = FALSE; /* Class functions */ static void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data); static void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *context, ScimBridgeClientIMContextClass *klass); static void scim_bridge_client_imcontext_finalize (GObject *object); static gboolean scim_bridge_client_imcontext_filter_key_event (GtkIMContext *context, GdkEventKey *event); static void scim_bridge_client_imcontext_reset (GtkIMContext *context); static void scim_bridge_client_imcontext_get_preedit_string (GtkIMContext *context, gchar **str, PangoAttrList **attrs, gint *cursor_pos); static void scim_bridge_client_imcontext_set_preedit_enabled (GtkIMContext *context, gboolean enabled); static void scim_bridge_client_imcontext_set_client_window (GtkIMContext *context, GdkWindow *window); static void scim_bridge_client_imcontext_focus_in (GtkIMContext *context); static void scim_bridge_client_imcontext_focus_out (GtkIMContext *context); static void scim_bridge_client_imcontext_set_cursor_location (GtkIMContext *context, GdkRectangle *area); /* slave callbacks */ static void gtk_im_slave_commit_cb (GtkIMContext *context, const char *str, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_changed_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_start_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static void gtk_im_slave_preedit_end_cb (GtkIMContext *context, ScimBridgeClientIMContext *imcontext); static retval_t filter_key_event (ScimBridgeClientIMContext *imcontext, GdkEventKey *event, boolean *consumed) { scim_bridge_pdebugln (5, "filter_key_event ()"); if (focused_imcontext != imcontext) scim_bridge_client_imcontext_focus_in (GTK_IM_CONTEXT (imcontext)); focused_widget = gtk_get_event_widget ((GdkEvent*) event); if (scim_bridge_client_is_messenger_opened ()) { ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event (); scim_bridge_key_event_gdk_to_bridge (bridge_key_event, imcontext->client_window, event); *consumed = FALSE; const retval_t retval_error = scim_bridge_client_handle_key_event (imcontext, bridge_key_event, consumed); scim_bridge_free_key_event (bridge_key_event); if (retval_error) { scim_bridge_perrorln ("An IOException at filter_key_event ()"); } else { return RETVAL_SUCCEEDED; } } return RETVAL_FAILED; } static retval_t set_cursor_location (ScimBridgeClientIMContext *imcontext, int window_x, int window_y, int cursor_x, int cursor_y) { scim_bridge_pdebugln (5, "set_cursor_location ()"); if (imcontext->window_x == window_x && imcontext->window_y == window_y && imcontext->cursor_x == cursor_x && imcontext->cursor_y == cursor_y) { return RETVAL_SUCCEEDED; } else { imcontext->cursor_x = cursor_x; imcontext->cursor_y = cursor_y; imcontext->window_x = window_x; imcontext->window_y = window_y; scim_bridge_pdebugln (3, "The cursor location is changed: x = %d + %d\ty = %d + %d", imcontext->window_x, imcontext->cursor_x, imcontext->window_y, imcontext->cursor_y); if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_cursor_location (imcontext, imcontext->window_x + imcontext->cursor_x, imcontext->window_y + imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException occurred at set_cursor_location ()"); return RETVAL_FAILED; } else { return RETVAL_SUCCEEDED; } } } return RETVAL_FAILED; } static gboolean key_snooper (GtkWidget *widget, GdkEventKey *event, gpointer data) { scim_bridge_pdebugln (7, "key_snooper ()"); if (focused_imcontext && scim_bridge_client_is_messenger_opened () && (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE) && !(event->send_event & SEND_EVENT_MASK)) { if (focused_imcontext->client_window) { int new_window_x; int new_window_y; gdk_window_get_origin (focused_imcontext->client_window, &new_window_x, &new_window_y); if (focused_imcontext->window_x != new_window_x || focused_imcontext->window_y != new_window_y) { scim_bridge_pdebugln (1, "The cursor location is changed: x = %d + %d\ty = %d + %d", new_window_x, focused_imcontext->cursor_x, new_window_y, focused_imcontext->cursor_y); if (set_cursor_location (focused_imcontext, new_window_x, new_window_y, focused_imcontext->cursor_x, focused_imcontext->cursor_y)) { scim_bridge_perrorln ("An IOException at key_snooper ()"); return FALSE; } } } boolean consumed = FALSE; if (filter_key_event (focused_imcontext, event, &consumed)) { scim_bridge_perrorln ("An IOException at key_snooper ()"); return FALSE; } else { if (consumed) { g_signal_emit_by_name (focused_imcontext, "preedit-changed"); return TRUE; } } } return FALSE; } static boolean is_key_snooper_enabled () { static boolean first_time = TRUE; static boolean key_snooper_enabled = FALSE; if (first_time) { char *env_key_snooper_enabled = getenv ("SCIM_BRIDGE_KEY_SNOOPER_ENABLED"); if (env_key_snooper_enabled != NULL) scim_bridge_string_to_boolean (&key_snooper_enabled, env_key_snooper_enabled); first_time = FALSE; } return key_snooper_enabled; } static boolean is_precise_cursor_enabled () { static boolean first_time = TRUE; static boolean precise_cursor_enabled = FALSE; if (first_time) { char *env_precise_cursor_enabled = getenv ("SCIM_BRIDGE_PRECISE_CURSOR_ENABLED"); if (env_precise_cursor_enabled != NULL) scim_bridge_string_to_boolean (&precise_cursor_enabled, env_precise_cursor_enabled); first_time = FALSE; } return precise_cursor_enabled; } /* Bindings */ void scim_bridge_client_imcontext_set_id (ScimBridgeClientIMContext *imcontext, scim_bridge_imcontext_id_t new_id) { imcontext->id = new_id; } scim_bridge_imcontext_id_t scim_bridge_client_imcontext_get_id (const ScimBridgeClientIMContext *imcontext) { return imcontext->id; } void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *preedit_string) { if (imcontext->preedit_string != NULL && preedit_string != NULL && !strcmp (imcontext->preedit_string, preedit_string)) return; size_t preedit_string_length; if (preedit_string != NULL) { preedit_string_length = strlen (preedit_string); } else { preedit_string_length = 0; } if (imcontext->preedit_string_capacity <= preedit_string_length) { imcontext->preedit_string_capacity = preedit_string_length; free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char) * (imcontext->preedit_string_capacity + 1)); } if (preedit_string_length > 0) { strcpy (imcontext->preedit_string, preedit_string); } else { imcontext->preedit_string[0] = '\0'; } } void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean preedit_shown) { imcontext->preedit_shown = preedit_shown; if (!preedit_shown) { free (imcontext->preedit_string); imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_attributes != NULL) { pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; } } } void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position) { imcontext->preedit_cursor_position = cursor_position; } void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, ScimBridgeAttribute** const preedit_attributes, int attribute_count) { if (imcontext->preedit_attributes != NULL) pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = pango_attr_list_new (); int preedit_string_length = 0; int preedit_wstring_length = 0; if (imcontext->preedit_string != NULL) { preedit_string_length = strlen (imcontext->preedit_string); preedit_wstring_length = g_utf8_strlen (imcontext->preedit_string, -1); } boolean *has_attribute = alloca (sizeof (boolean) * preedit_string_length); int i; for (i = 0; i < preedit_string_length; ++i) { has_attribute[i] = FALSE; } for (i = 0; i < attribute_count; ++i) { const ScimBridgeAttribute *attr = preedit_attributes[i]; const int begin_pos = scim_bridge_attribute_get_begin (attr); const int end_pos = scim_bridge_attribute_get_end (attr); if (begin_pos <= end_pos && 0 <= begin_pos && end_pos <= preedit_wstring_length) { const int start_index = g_utf8_offset_to_pointer (imcontext->preedit_string, begin_pos) - imcontext->preedit_string; const int end_index = g_utf8_offset_to_pointer (imcontext->preedit_string, end_pos) - imcontext->preedit_string; const scim_bridge_attribute_type_t attr_type = scim_bridge_attribute_get_type (attr); const scim_bridge_attribute_value_t attr_value = scim_bridge_attribute_get_value (attr); boolean valid_attribute = FALSE; if (attr_type == ATTRIBUTE_DECORATE) { if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_UNDERLINE) { valid_attribute = TRUE; PangoAttribute *pango_attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } else if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE) { valid_attribute = TRUE; PangoAttribute *pango_attr0 = pango_attr_foreground_new (preedit_normal_background.red, preedit_normal_background.green, preedit_normal_background.blue); pango_attr0->start_index = start_index; pango_attr0->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr0); PangoAttribute *pango_attr1 = pango_attr_background_new (preedit_normal_foreground.red, preedit_normal_foreground.green, preedit_normal_foreground.blue); pango_attr1->start_index = start_index; pango_attr1->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr1); } else if (attr_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT) { valid_attribute = TRUE; PangoAttribute *pango_attr0 = pango_attr_foreground_new (preedit_active_foreground.red, preedit_active_foreground.green, preedit_active_foreground.blue); pango_attr0->start_index = start_index; pango_attr0->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr0); PangoAttribute *pango_attr1 = pango_attr_background_new (preedit_active_background.red, preedit_active_background.green, preedit_active_background.blue); pango_attr1->start_index = start_index; pango_attr1->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr1); } else { scim_bridge_perrorln ("Unknown preedit decoration!"); } } else if (attr_type == ATTRIBUTE_FOREGROUND) { valid_attribute = TRUE; const unsigned int red = scim_bridge_attribute_get_red (attr) * 256; const unsigned int green = scim_bridge_attribute_get_green (attr) * 256; const unsigned int blue = scim_bridge_attribute_get_blue (attr) * 256; PangoAttribute *pango_attr = pango_attr_foreground_new (red, green, blue); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } else if (attr_type == ATTRIBUTE_BACKGROUND) { valid_attribute = TRUE; const unsigned int red = scim_bridge_attribute_get_red (attr) * 256; const unsigned int green = scim_bridge_attribute_get_green (attr) * 256; const unsigned int blue = scim_bridge_attribute_get_blue (attr) * 256; PangoAttribute *pango_attr = pango_attr_background_new (red, green, blue); pango_attr->start_index = start_index; pango_attr->end_index = end_index; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } if (valid_attribute) { int j; for (j = start_index; j < end_index; ++j) { has_attribute[j] = TRUE; } } } } // Add underlines for the all characters without attributes. for (i = 0; i < preedit_string_length; ++i) { if (has_attribute[i] == FALSE) { PangoAttribute *pango_attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); pango_attr->start_index = i; for (; i < preedit_string_length && has_attribute[i] == FALSE; ++i); pango_attr->end_index = i; pango_attr_list_insert (imcontext->preedit_attributes, pango_attr); } } } void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext) { if (imcontext->preedit_shown && !imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-start"); imcontext->preedit_started = TRUE; } if (is_precise_cursor_enabled ()) { const size_t old_cursor_position = imcontext->preedit_cursor_position; imcontext->preedit_cursor_position = 0; if (imcontext->preedit_string != NULL) imcontext->preedit_cursor_position = g_utf8_strlen (imcontext->preedit_string, -1); imcontext->preedit_cursor_flicking = TRUE; g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); imcontext->preedit_cursor_position = old_cursor_position; imcontext->preedit_cursor_flicking = FALSE; } g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-changed"); if (!imcontext->preedit_shown && imcontext->preedit_started) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "preedit-end"); imcontext->preedit_started = FALSE; } } void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *commit_string) { size_t commit_string_length; if (commit_string != NULL) { commit_string_length = strlen (commit_string); } else { commit_string_length = 0; } if (imcontext->commit_string_capacity <= commit_string_length) { imcontext->commit_string_capacity = commit_string_length; free (imcontext->commit_string); imcontext->commit_string = malloc (sizeof (char) * (imcontext->commit_string_capacity + 1)); } if (commit_string_length > 0) { strcpy (imcontext->commit_string, commit_string); } else { imcontext->commit_string[0] = '\0'; } } void scim_bridge_client_imcontext_commit (ScimBridgeClientIMContext *imcontext) { g_signal_emit_by_name ((ScimBridgeClientIMContext*) imcontext, "commit", imcontext->commit_string); } void scim_bridge_client_imcontext_beep (ScimBridgeClientIMContext *imcontext) { gdk_beep (); } boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position) { char *str; int cur_pos_in_utf8; if (gtk_im_context_get_surrounding (GTK_IM_CONTEXT (imcontext), &str, &cur_pos_in_utf8)) { const size_t fetch_wstr_length = g_utf8_strlen (str, -1); const size_t after_wstr_length = g_utf8_strlen (str + cur_pos_in_utf8, -1); const size_t before_wstr_length = fetch_wstr_length - after_wstr_length; size_t before_copy_wstr_length; size_t after_copy_wstr_length; if (after_wstr_length > after_max) { after_copy_wstr_length = after_max; } else { after_copy_wstr_length = after_wstr_length; } if (before_wstr_length > before_max) { before_copy_wstr_length = before_max; } else { before_copy_wstr_length = before_wstr_length; } const size_t begin_wstr_index = before_wstr_length - before_copy_wstr_length; const size_t end_wstr_index = fetch_wstr_length - (after_wstr_length - after_copy_wstr_length); char* begin_str_ptr = g_utf8_offset_to_pointer (str, begin_wstr_index); char* end_str_ptr = g_utf8_offset_to_pointer (str, end_wstr_index); size_t str_length = end_str_ptr - begin_str_ptr; *string = malloc (sizeof (char) * (str_length + 1)); strncpy (*string, begin_str_ptr, str_length); (*string)[str_length] = '\0'; *cursor_position = before_copy_wstr_length; g_free (str); return TRUE; } else { *string = NULL; return FALSE; } } boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length) { boolean retval = gtk_im_context_delete_surrounding (GTK_IM_CONTEXT (imcontext), offset, length); return retval; } boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string) { gtk_im_context_set_surrounding (GTK_IM_CONTEXT (imcontext), string, -1, cursor_position); return TRUE; } void scim_bridge_client_imcontext_forward_key_event (ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event) { if (imcontext && imcontext == focused_imcontext) { GdkEventKey gdk_event; scim_bridge_key_event_bridge_to_gdk (&gdk_event, imcontext->client_window, key_event); gdk_event.send_event |= SEND_EVENT_MASK; if (!gtk_im_context_filter_keypress (GTK_IM_CONTEXT (imcontext->slave), &gdk_event)) { // To avoid timing issue, we need emit the signal directly, rather than put the event into the queue. if (focused_widget) { gboolean result; g_signal_emit_by_name(focused_widget, scim_bridge_key_event_is_pressed (key_event) ? "key-press-event" : "key-release-event", &gdk_event, &result ); } else { gdk_event_put ((GdkEvent *) &gdk_event); } } } } void scim_bridge_client_imcontext_imengine_status_changed (ScimBridgeClientIMContext *imcontext, boolean enabled) { if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } } imcontext->enabled = enabled; } /* Class Implementations */ void scim_bridge_client_imcontext_static_initialize () { gdk_color_parse ("gray92", &preedit_normal_background); gdk_color_parse ("black", &preedit_normal_foreground); gdk_color_parse ("light blue", &preedit_active_background); gdk_color_parse ("black", &preedit_active_foreground); focused_imcontext = NULL; } void scim_bridge_client_imcontext_static_finalize () { if (key_snooper_used) { gtk_key_snooper_remove (key_snooper_id); key_snooper_id = 0; key_snooper_used = FALSE; } focused_imcontext = NULL; } void scim_bridge_client_imcontext_connection_opened () { } void scim_bridge_client_imcontext_connection_closed () { if (focused_imcontext != NULL) scim_bridge_client_imcontext_set_preedit_shown (focused_imcontext, FALSE); } void scim_bridge_client_imcontext_class_initialize (ScimBridgeClientIMContextClass *klass, gpointer *klass_data) { root_klass = (GObjectClass *) g_type_class_peek_parent (klass); GtkIMContextClass *gtk_im_klass = GTK_IM_CONTEXT_CLASS (klass); gtk_im_klass->set_client_window = scim_bridge_client_imcontext_set_client_window; gtk_im_klass->filter_keypress = scim_bridge_client_imcontext_filter_key_event; gtk_im_klass->reset = scim_bridge_client_imcontext_reset; gtk_im_klass->get_preedit_string = scim_bridge_client_imcontext_get_preedit_string; gtk_im_klass->focus_in = scim_bridge_client_imcontext_focus_in; gtk_im_klass->focus_out = scim_bridge_client_imcontext_focus_out; gtk_im_klass->set_cursor_location = scim_bridge_client_imcontext_set_cursor_location; gtk_im_klass->set_use_preedit = scim_bridge_client_imcontext_set_preedit_enabled; GObjectClass *gobject_klass = G_OBJECT_CLASS (klass); gobject_klass->finalize = scim_bridge_client_imcontext_finalize; } GType scim_bridge_client_imcontext_get_type () { return class_type; } void scim_bridge_client_imcontext_register_type (GTypeModule *type_module) { scim_bridge_pdebugln (2, "scim_bridge_client_imcontext_register_type ()"); static const GTypeInfo klass_info = { sizeof (ScimBridgeClientIMContextClass), /* no base class initializer */ NULL, /* no base class finalizer */ NULL, /* class initializer */ (GClassInitFunc) scim_bridge_client_imcontext_class_initialize, /* no class finalizer */ NULL, /* no class data */ NULL, sizeof (ScimBridgeClientIMContext), 0, /* object initizlier */ #if GTK_CHECK_VERSION(3, 0, 0) (GInstanceInitFunc) scim_bridge_client_imcontext_initialize, #else (GtkObjectInitFunc) scim_bridge_client_imcontext_initialize, #endif 0 }; class_type = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "ScimBridgeClientIMContext", &klass_info, 0); } GtkIMContext *scim_bridge_client_imcontext_new () { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_new ()"); ScimBridgeClientIMContext *ic = SCIM_BRIDGE_CLIENT_IMCONTEXT (g_object_new (GTK_TYPE_SCIM_CLIENT_IMCONTEXT, NULL)); return GTK_IM_CONTEXT (ic); } void scim_bridge_client_imcontext_initialize (ScimBridgeClientIMContext *imcontext, ScimBridgeClientIMContextClass *klass) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_initialize ()"); /* slave exists for using gtk+'s table based input method */ imcontext->slave_preedit = FALSE; imcontext->slave = gtk_im_context_simple_new (); g_signal_connect(G_OBJECT(imcontext->slave), "commit", G_CALLBACK(gtk_im_slave_commit_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-changed", G_CALLBACK(gtk_im_slave_preedit_changed_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-start", G_CALLBACK(gtk_im_slave_preedit_start_cb), imcontext); g_signal_connect(G_OBJECT(imcontext->slave), "preedit-end", G_CALLBACK(gtk_im_slave_preedit_end_cb), imcontext); imcontext->preedit_shown = FALSE; imcontext->preedit_started = FALSE; imcontext->preedit_cursor_position = 0; imcontext->preedit_cursor_flicking = FALSE; imcontext->preedit_string = malloc (sizeof (char)); imcontext->preedit_string[0] = '\0'; imcontext->preedit_string_capacity = 0; imcontext->preedit_attributes = NULL; imcontext->commit_string = malloc (sizeof (char)); imcontext->commit_string[0] = '\0'; imcontext->commit_string_capacity = 0; imcontext->enabled = FALSE; imcontext->client_window = NULL; imcontext->id = -1; if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_register_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to register the IMContext"); } else { scim_bridge_pdebugln (1, "IMContext registered: id = %d", imcontext->id); } } void scim_bridge_client_imcontext_finalize (GObject *object) { scim_bridge_pdebugln (5, "scim_bridge_client_imcontext_finalize ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (object); if (imcontext == focused_imcontext) scim_bridge_client_imcontext_focus_out (GTK_IM_CONTEXT (imcontext)); if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_deregister_imcontext (imcontext)) { scim_bridge_perrorln ("Failed to deregister an IMContext"); } else { scim_bridge_pdebugln (3, "IMContext deregistered: id = %d", imcontext->id); } if (imcontext->client_window) g_object_unref (imcontext->client_window); free (imcontext->preedit_string); free (imcontext->commit_string); if (imcontext->preedit_attributes != NULL) pango_attr_list_unref (imcontext->preedit_attributes); imcontext->preedit_attributes = NULL; g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_commit_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_changed_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_start_cb, (void *)imcontext); g_signal_handlers_disconnect_by_func(imcontext->slave, (void *)gtk_im_slave_preedit_end_cb, (void *)imcontext); g_object_unref(imcontext->slave); root_klass->finalize (object); } /* Class functions */ gboolean scim_bridge_client_imcontext_filter_key_event (GtkIMContext *context, GdkEventKey *event) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_filter_key_event ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); boolean ret = FALSE; if (imcontext) { if (!key_snooper_used) ret = key_snooper(0, event, 0); if (imcontext->slave) { if (!ret) { ret = gtk_im_context_filter_keypress (imcontext->slave, event); } else if (imcontext->slave_preedit) { imcontext->slave_preedit = FALSE; gtk_im_context_reset (imcontext->slave); } } } return ret; } void scim_bridge_client_imcontext_reset (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_reset ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != focused_imcontext) return; if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_reset_imcontext (imcontext)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_reset ()"); } } } void scim_bridge_client_imcontext_get_preedit_string (GtkIMContext *context, gchar **str, PangoAttrList **pango_attrs, gint *cursor_pos) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_get_preedit_string ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext->slave_preedit) { gtk_im_context_get_preedit_string (imcontext->slave, str, pango_attrs, cursor_pos); return; } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL && imcontext->preedit_shown) { const size_t preedit_string_length = strlen (imcontext->preedit_string); const size_t preedit_wstring_length = g_utf8_strlen (imcontext->preedit_string, -1); if (str) { if (preedit_string_length > 0) { *str = g_strdup (imcontext->preedit_string); } else { *str = g_strdup (""); } } if (cursor_pos) { if (imcontext->preedit_cursor_position > preedit_wstring_length) { *cursor_pos = preedit_wstring_length; } else { *cursor_pos = imcontext->preedit_cursor_position; } } if (pango_attrs) { *pango_attrs = imcontext->preedit_attributes; pango_attr_list_ref (imcontext->preedit_attributes); } } else { if (str) *str = g_strdup (""); if (cursor_pos) *cursor_pos = 0; if (pango_attrs) *pango_attrs = pango_attr_list_new (); } } void scim_bridge_client_imcontext_focus_in (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_in ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (focused_imcontext != NULL && focused_imcontext != imcontext) scim_bridge_client_imcontext_focus_out (GTK_IM_CONTEXT (focused_imcontext)); focused_imcontext = imcontext; if (!scim_bridge_client_is_messenger_opened () && scim_bridge_client_is_reconnection_enabled ()) { scim_bridge_pdebugln (7, "Trying to open the connection again..."); scim_bridge_client_open_messenger (); } if (!key_snooper_used && is_key_snooper_enabled ()) { key_snooper_id = gtk_key_snooper_install ((GtkKeySnoopFunc) &key_snooper, NULL); key_snooper_used = TRUE; } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, TRUE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_in ()"); } } } void scim_bridge_client_imcontext_focus_out (GtkIMContext *context) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_focus_out ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); focused_widget = NULL; focused_imcontext = imcontext; if (imcontext->preedit_shown) { if (imcontext->enabled) { scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE); scim_bridge_client_imcontext_update_preedit (imcontext); } } if (scim_bridge_client_is_messenger_opened () && imcontext != NULL) { if (scim_bridge_client_change_focus (imcontext, FALSE)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_focus_out ()"); } } if (key_snooper_used) { gtk_key_snooper_remove (key_snooper_id); key_snooper_id = 0; key_snooper_used = FALSE; } focused_imcontext = NULL; } void scim_bridge_client_imcontext_set_client_window (GtkIMContext *context, GdkWindow *new_window) { scim_bridge_pdebugln (7, "scim_bridge_client_imcontext_set_client_window ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != NULL) { if (imcontext->client_window != NULL) g_object_unref (imcontext->client_window); imcontext->client_window = new_window; if (new_window != NULL) { g_object_ref (new_window); gdk_window_get_origin (imcontext->client_window, &imcontext->window_x, &imcontext->window_y); } } } void scim_bridge_client_imcontext_set_cursor_location (GtkIMContext *context, GdkRectangle *area) { scim_bridge_pdebugln (4, "scim_bridge_client_imcontext_set_cursor_location ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext->preedit_cursor_flicking) return; if (imcontext != NULL && imcontext->client_window != NULL) { const int new_cursor_x = area->x + area->width; const int new_cursor_y = area->y + area->height + 8; int new_window_x; int new_window_y; gdk_window_get_origin (imcontext->client_window, &new_window_x, &new_window_y); if (set_cursor_location (imcontext, new_window_x, new_window_y, new_cursor_x, new_cursor_y)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()"); } } } void scim_bridge_client_imcontext_set_preedit_enabled (GtkIMContext *context, gboolean enabled) { scim_bridge_pdebugln (8, "scim_bridge_client_imcontext_set_preedit_enabled ()"); ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context); if (imcontext != NULL) { if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_preedit_mode (imcontext, enabled ? PREEDIT_EMBEDDED:PREEDIT_ANY)) { scim_bridge_perrorln ("An IOException occurred at scim_bridge_client_imcontext_set_preedit_enabled ()"); } } } } static void gtk_im_slave_commit_cb ( GtkIMContext *context, const char *str, ScimBridgeClientIMContext *imcontext ) { g_return_if_fail(str); g_signal_emit_by_name(imcontext, "commit", str); } static void gtk_im_slave_preedit_changed_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = TRUE; g_signal_emit_by_name(imcontext, "preedit-changed"); } static void gtk_im_slave_preedit_start_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = TRUE; g_signal_emit_by_name(imcontext, "preedit-start"); } static void gtk_im_slave_preedit_end_cb ( GtkIMContext *context, ScimBridgeClientIMContext *imcontext ) { imcontext->slave_preedit = FALSE; g_signal_emit_by_name(imcontext, "preedit-end"); } scim-master/extras/immodules/client-gtk/scim-bridge-client-imcontext-gtk.h000066400000000000000000000070031415264260100272550ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header for gtk imcontext of scim-bridge. */ #ifndef SCIMBRIDGECLIENTIMCONTEXTGTK_H_ #define SCIMBRIDGECLIENTIMCONTEXTGTK_H_ #include #if GTK_CHECK_VERSION(3, 0, 0) #else #include #endif #include #include "scim-bridge.h" #include "scim-bridge-client-imcontext.h" #define GTK_TYPE_SCIM_CLIENT_IMCONTEXT (scim_bridge_client_imcontext_get_type ()) #if GTK_CHECK_VERSION(3, 0, 0) #define SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContext)) #else #define SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContext)) #endif #define SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #if GTK_CHECK_VERSION(3, 0, 0) #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #else #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT(class) (GTK_CHECK_TYPE ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #endif #define IS_SCIM_BRIDGE_CLIENT_IMCONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCIM_CLIENT_IMCONTEXT)) #if GTK_CHECK_VERSION(3, 0, 0) #define SCIM_BRIDGE_CLIENT_IMCONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #else #define SCIM_BRIDGE_CLIENT_IMCONTEXT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_SCIM_CLIENT_IMCONTEXT, ScimBridgeClientIMContextClass)) #endif struct _ScimBridgeClientIMContextClass { GtkIMContextClass parent_class; }; /** * IMContext class for gtk client. */ typedef struct _ScimBridgeClientIMContextClass ScimBridgeClientIMContextClass; /** * Initialize IMContext class itself. */ void scim_bridge_client_imcontext_static_initialize (); /** * Finalize IMContext class itself. */ void scim_bridge_client_imcontext_static_finalize (); /** * The connection with the agent is opened. */ void scim_bridge_client_imcontext_connection_opened (); /** * The connection with the agent is closed. */ void scim_bridge_client_imcontext_connection_closed (); /** * Allocate an IMContext. * * @return new IMContext. */ GtkIMContext *scim_bridge_client_imcontext_new (); /** * Get the type value of IMContexts. * * @return The type value of IMContexts. */ GType scim_bridge_client_imcontext_get_type (); /** * Register the type value for IMContexts. * * @param type_module The type module. */ void scim_bridge_client_imcontext_register_type (GTypeModule *type_module); #endif /*SCIMBRIDGECLIENTIMCONTEXTGTK_H_*/ scim-master/extras/immodules/client-gtk/scim-bridge-client-key-event-utility-gtk.c000066400000000000000000000136451415264260100306570ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #ifdef GDK_WINDOWING_X11 #include #include #include #include #endif #include "scim-bridge-client-key-event-utility-gtk.h" #include "scim-bridge-key-event.h" /* Helper Functions */ static GdkKeymap *get_gdk_keymap (GdkWindow *window) { #if GDK_MULTIHEAD_SAFE #if GTK_CHECK_VERSION(3, 0, 0) if (window) return gdk_keymap_get_for_display (gdk_window_get_display (window)); #else if (window) return gdk_keymap_get_for_display (gdk_drawable_get_display (window)); #endif #endif return gdk_keymap_get_default (); } /* Implementations */ void scim_bridge_key_event_bridge_to_gdk (GdkEventKey *gdk_key_event, GdkWindow *client_window, const ScimBridgeKeyEvent *key_event) { gdk_key_event->state = 0; if (scim_bridge_key_event_is_shift_down (key_event)) gdk_key_event->state |= GDK_SHIFT_MASK; if (scim_bridge_key_event_is_caps_lock_down (key_event)) gdk_key_event->state |= GDK_LOCK_MASK; if (scim_bridge_key_event_is_control_down (key_event)) gdk_key_event->state |= GDK_CONTROL_MASK; if (scim_bridge_key_event_is_alt_down (key_event)) gdk_key_event->state |= GDK_MOD1_MASK; if (scim_bridge_key_event_is_num_lock_down (key_event)) gdk_key_event->state |= GDK_MOD2_MASK; if (scim_bridge_key_event_is_pressed (key_event)) { gdk_key_event->type = GDK_KEY_PRESS; } else { gdk_key_event->type = GDK_KEY_RELEASE; gdk_key_event->state |= GDK_RELEASE_MASK; } gdk_key_event->window = client_window; struct timeval current_time; gettimeofday (¤t_time, NULL); gdk_key_event->time = current_time.tv_sec * 1000 + current_time.tv_usec / 1000; gdk_key_event->keyval = scim_bridge_key_event_get_code (key_event); gdk_key_event->length = 0; gdk_key_event->string = 0; GdkKeymap *key_map = get_gdk_keymap (gdk_key_event->window); GdkKeymapKey *keys; gint n_keys; if (gdk_keymap_get_entries_for_keyval (key_map, gdk_key_event->keyval, &keys, &n_keys)) { gdk_key_event->hardware_keycode = keys[0].keycode; gdk_key_event->group = keys [0].group; } else { gdk_key_event->hardware_keycode = 0; gdk_key_event->group = 0; } } void scim_bridge_key_event_gdk_to_bridge (ScimBridgeKeyEvent *bridge_key_event, GdkWindow *window, const GdkEventKey *key_event) { // Use Key Symbole provided by gtk. scim_bridge_key_event_set_code (bridge_key_event, (scim_bridge_key_code_t) key_event->keyval); scim_bridge_key_event_clear_modifiers (bridge_key_event); #if GTK_CHECK_VERSION(3, 0, 0) if (key_event->state & GDK_SHIFT_MASK || key_event->keyval == GDK_KEY_Shift_L || key_event->keyval == GDK_KEY_Shift_R) scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); if (key_event->state & GDK_LOCK_MASK || key_event->keyval == GDK_KEY_Caps_Lock) scim_bridge_key_event_set_caps_lock_down (bridge_key_event, TRUE); if (key_event->state & GDK_CONTROL_MASK || key_event->keyval == GDK_KEY_Control_L || key_event->keyval == GDK_KEY_Control_R) scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); if (key_event->state & GDK_MOD1_MASK || key_event->keyval == GDK_KEY_Alt_L || key_event->keyval == GDK_KEY_Alt_R) scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); if (key_event->state & GDK_MOD2_MASK) scim_bridge_key_event_set_num_lock_down (bridge_key_event, TRUE); #else if (key_event->state & GDK_SHIFT_MASK || key_event->keyval == GDK_Shift_L || key_event->keyval == GDK_Shift_R) scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); if (key_event->state & GDK_LOCK_MASK || key_event->keyval == GDK_Caps_Lock) scim_bridge_key_event_set_caps_lock_down (bridge_key_event, TRUE); if (key_event->state & GDK_CONTROL_MASK || key_event->keyval == GDK_Control_L || key_event->keyval == GDK_Control_R) scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); if (key_event->state & GDK_MOD1_MASK || key_event->keyval == GDK_Alt_L || key_event->keyval == GDK_Alt_R) scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); if (key_event->state & GDK_MOD2_MASK) scim_bridge_key_event_set_num_lock_down (bridge_key_event, TRUE); #endif if (key_event->type != GDK_KEY_RELEASE) { scim_bridge_key_event_set_pressed (bridge_key_event, TRUE); } else { scim_bridge_key_event_set_pressed (bridge_key_event, FALSE); } #ifdef GDK_WINDOWING_X11 Display *display = NULL; if (window != NULL) { display = GDK_WINDOW_XDISPLAY (window); } else { display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); } if (scim_bridge_key_event_get_code (bridge_key_event) == SCIM_BRIDGE_KEY_CODE_backslash) { boolean kana_ro = FALSE; int keysym_size = 0; KeySym *keysyms = XGetKeyboardMapping (display, key_event->hardware_keycode, 1, &keysym_size); if (keysyms != NULL) { kana_ro = (keysyms[0] == XK_backslash && keysyms[1] == XK_underscore); XFree (keysyms); } scim_bridge_key_event_set_quirk_enabled (bridge_key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO, kana_ro); } #endif } scim-master/extras/immodules/client-gtk/scim-bridge-client-key-event-utility-gtk.h000066400000000000000000000036261415264260100306620ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header of the functions to translate key events between scim-bridge and gtk. */ #ifndef SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_ #define SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_ #include #include "scim-bridge.h" #include "scim-bridge-key-event.h" /** * Translate a key event from scim-bridge into gdk. * * @param gdk_key_event A key event of gdk. * @param client_window The gdk window for the key event. * @param key_event The key event from scim-bridge. */ void scim_bridge_key_event_bridge_to_gdk (GdkEventKey *gdk_key_event, GdkWindow *client_window, const ScimBridgeKeyEvent *key_event); /** * Translate a key event from gdk into scim-bridge. * * @param bridge_key_event A key event of scim-bridge. * @param client_window The gdk window for the key event. * @param key_event The key event from gdk. */ void scim_bridge_key_event_gdk_to_bridge (ScimBridgeKeyEvent *bridge_key_event, GdkWindow *client_window, const GdkEventKey *key_event); #endif /*SCIMBRIDGECLIENTKEYEVENTUTILITYGTK_H_*/ scim-master/extras/immodules/client-qt/000077500000000000000000000000001415264260100205075ustar00rootroot00000000000000scim-master/extras/immodules/client-qt/.qmake.conf000066400000000000000000000000261415264260100225300ustar00rootroot00000000000000load(qt_build_config) scim-master/extras/immodules/client-qt/README000066400000000000000000000007051415264260100213710ustar00rootroot00000000000000SCIM Qt5 Input Method Plugin This code is adopted from SCIM Qt4 counterpart, using the qmake build system. Integration of qmake to autotools is possible in the future. To build and install, 1. build scim, including the im-agent. 2. change to this directory and call `qmake` 3. make 4. make install Reference: 1. Debian packages gcin-qt5-immodule, uim-qt5-immodule libfcitx-qt5-1 (dbus), ibus (dbus) 2. https://www.kdab.com/qt-input-method-depth/scim-master/extras/immodules/client-qt/im-scim-bridge-qt.cpp000066400000000000000000000062631415264260100244340ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include using namespace Qt; #include "scim-bridge.h" #include "scim-bridge-client-common-qt.h" #include "scim-bridge-client-imcontext-qt.h" #include "scim-bridge-client-qt.h" /* Static Variables */ static ScimBridgeClientQt *client = NULL; /* The class Definition */ class ScimBridgeInputContextPlugin: public QPlatformInputContextPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "scim.json") private: /** * The language list for SCIM. */ static QStringList scim_languages; public: ScimBridgeInputContextPlugin (); ~ScimBridgeInputContextPlugin (); QStringList keys () const; QStringList languages (const QString &key); QString description (const QString &key); ScimBridgeClientIMContext *create (const QString &key, const QStringList ¶m) Q_DECL_OVERRIDE; QString displayName (const QString &key); }; /* Implementations */ QStringList ScimBridgeInputContextPlugin::scim_languages; ScimBridgeInputContextPlugin::ScimBridgeInputContextPlugin () { } ScimBridgeInputContextPlugin::~ScimBridgeInputContextPlugin () { delete client; client = NULL; } QStringList ScimBridgeInputContextPlugin::keys () const { QStringList identifiers; identifiers.push_back (SCIM_BRIDGE_IDENTIFIER_NAME); return identifiers; } QStringList ScimBridgeInputContextPlugin::languages (const QString &key) { if (scim_languages.empty ()) { scim_languages.push_back ("zh_CN"); scim_languages.push_back ("zh_TW"); scim_languages.push_back ("zh_HK"); scim_languages.push_back ("ja"); scim_languages.push_back ("ko"); } return scim_languages; } QString ScimBridgeInputContextPlugin::description (const QString &key) { return QString::fromUtf8 ("Qt immodule plugin for SCIM Bridge"); } ScimBridgeClientIMContext *ScimBridgeInputContextPlugin::create (const QString &key, const QStringList ¶m) { Q_UNUSED(param); if (key.toLower () != SCIM_BRIDGE_IDENTIFIER_NAME) { return NULL; } else { if (client == NULL) client = new ScimBridgeClientQt (); return ScimBridgeClientIMContext::alloc (); } } QString ScimBridgeInputContextPlugin::displayName (const QString &key) { return key; } #include "im-scim-bridge-qt.moc" scim-master/extras/immodules/client-qt/scim-bridge-client-common-qt.h000066400000000000000000000023331415264260100262320ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the common header for qt client of scim-bridge. */ #ifndef SCIMBRIDGECOMMONQT_H_ #define SCIMBRIDGECOMMONQT_H_ #include #include #include "scim-bridge.h" /** * The identifier name for SCIM input module. */ const QString SCIM_BRIDGE_IDENTIFIER_NAME = "scim"; #endif /*SCIMBRIDGECOMMONQT_H_*/ scim-master/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.cpp000066400000000000000000000560721415264260100273200ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include "scim-bridge-output.h" #include "scim-bridge-string.h" #include "scim-bridge-client.h" #include "scim-bridge-client-imcontext-qt.h" #include "scim-bridge-client-key-event-utility-qt.h" using namespace std; using namespace Qt; typedef QInputMethodEvent::Attribute QAttribute; /* Static variables */ class ScimBridgeClientIMContextImpl; static ScimBridgeClientIMContextImpl *focused_imcontext = NULL; static bool key_event_forwarded = false; /* Class Definition */ class ScimBridgeClientIMContextImpl: public _ScimBridgeClientIMContext { public: ScimBridgeClientIMContextImpl (); ~ScimBridgeClientIMContextImpl (); bool x11FilterEvent (QWidget *widget, XEvent *event); bool filterEvent (const QEvent *event); void update (); QString identifierName (); QString language (); bool isValid() const Q_DECL_OVERRIDE; void setFocusObject (QObject *object) Q_DECL_OVERRIDE; void widgetDestroyed (QWidget *widget); bool isComposing () const; void mouseHandler (int offset, QMouseEvent *event); void reset (); /* Semi private functions */ void focus_in (); void focus_out (); void set_commit_string (const char *new_commit_string); void commit (); void forward_key_event (const ScimBridgeKeyEvent *key_event); void set_preedit_shown (bool shown); void set_preedit_string (const char *new_preedit_string); void set_preedit_attributes (ScimBridgeAttribute** const new_attributes, int new_attribute_count); void set_preedit_cursor_position (int new_cursor_position); void update_preedit (); scim_bridge_imcontext_id_t get_id () const; void set_id (scim_bridge_imcontext_id_t new_id); bool get_surrounding_text (unsigned int before_max, unsigned int after_max, char **string, int *cursor_position); bool delete_surrounding_text (int offset, int length); bool replace_surrounding_text (const char *text, int cursor_position); private: scim_bridge_imcontext_id_t id; bool preedit_shown; QString preedit_string; QList preedit_attributes; int preedit_cursor_position; QString commit_string; QPoint cursor_location; void set_cursor_location (const QPoint &new_cursor_location); }; /* Implementations */ void _ScimBridgeClientIMContext::static_initialize () { } void _ScimBridgeClientIMContext::static_finalize () { } void _ScimBridgeClientIMContext::connection_opened () { } void _ScimBridgeClientIMContext::connection_closed () { } _ScimBridgeClientIMContext *_ScimBridgeClientIMContext::alloc () { return new ScimBridgeClientIMContextImpl (); } ScimBridgeClientIMContextImpl::ScimBridgeClientIMContextImpl (): id (-1), preedit_shown (false) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::ScimBridgeClientIMContextImpl ()"); preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0)); if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_register_imcontext (this)) { scim_bridge_perrorln ("Failed to register the IMContext"); } else { scim_bridge_pdebugln (1, "IMContext registered: id = %d", id); } } ScimBridgeClientIMContextImpl::~ScimBridgeClientIMContextImpl () { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::~ScimBridgeClientIMContextImpl ()"); if (this == focused_imcontext) focus_out (); if (!scim_bridge_client_is_messenger_opened ()) { scim_bridge_perrorln ("The messenger is now down"); } else if (scim_bridge_client_deregister_imcontext (this)) { scim_bridge_perrorln ("Failed to deregister an IMContext"); } else { scim_bridge_pdebugln (3, "IMContext deregistered: id = %d", id); } } QString ScimBridgeClientIMContextImpl::identifierName () { return SCIM_BRIDGE_IDENTIFIER_NAME; } QString ScimBridgeClientIMContextImpl::language () { return ""; } void ScimBridgeClientIMContextImpl::widgetDestroyed (QWidget *widget) { scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::widgetDestroyed ()"); focus_out (); update (); } bool ScimBridgeClientIMContextImpl::isValid() const { return true; } void ScimBridgeClientIMContextImpl::setFocusObject (QObject *object) { scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::setFocusObject ()"); QPlatformInputContext::setFocusObject (object); if (object == NULL) { focus_out (); } else { focus_in (); } update (); } void ScimBridgeClientIMContextImpl::update () { scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::update ()"); QWidget *focused_widget = qApp->focusWidget (); if (focused_widget != NULL) { if (focused_imcontext == NULL) focus_in (); QRect rect = focused_widget->inputMethodQuery (ImMicroFocus).toRect (); QPoint point (rect.x (), rect.y () + rect.height ()); QPoint new_cursor_location = focused_widget->mapToGlobal (point); set_cursor_location (new_cursor_location); } } bool ScimBridgeClientIMContextImpl::isComposing () const { scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::isComposing ()"); return preedit_string.size () > 0; } void ScimBridgeClientIMContextImpl::mouseHandler (int offset, QMouseEvent *mevent) { } bool ScimBridgeClientIMContextImpl::get_surrounding_text (unsigned int before_max, unsigned int after_max, char **text, int *cursor_position) { scim_bridge_pdebugln (6, "ScimBridgeClientIMContextImpl::get_surrounding_text ()"); scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_delete_surrounding_text () is not yet implemented."); return false; } bool ScimBridgeClientIMContextImpl::delete_surrounding_text (int offset, int length) { scim_bridge_pdebugln (6, "ScimBridgeClientIMContextImpl::delete_surrounding_text ()"); scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_delete_surrounding_text () is not yet implemented."); return false; } bool ScimBridgeClientIMContextImpl::replace_surrounding_text (const char *text, int cursor_position) { scim_bridge_pdebugln (6, "ScimBridgeClientIMContextImpl::replace_surrounding_text ()"); scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_delete_surrounding_text () is not yet implemented."); return false; } bool ScimBridgeClientIMContextImpl::x11FilterEvent (QWidget *widget, XEvent *xevent) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::x11FilterEvent ()"); if (key_event_forwarded || (xevent->type != XKeyPress && xevent->type != XKeyRelease)) return false; if (focused_imcontext != this) focus_in (); if (scim_bridge_client_is_messenger_opened ()) { ScimBridgeKeyEvent *bridge_key_event = scim_bridge_key_event_x11_to_bridge (xevent); boolean consumed = FALSE; const retval_t retval_error = scim_bridge_client_handle_key_event (this, bridge_key_event, &consumed); scim_bridge_free_key_event (bridge_key_event); if (retval_error) { scim_bridge_perrorln ("An IOException at x11FilterEvent ()"); } else { return consumed; } } return false; } bool ScimBridgeClientIMContextImpl::filterEvent (const QEvent *qevent) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::filterEvent ()"); if (key_event_forwarded || (qevent->type () != QEvent::KeyPress && qevent->type () != QEvent::KeyRelease)) return false; if (focused_imcontext != this) focus_in (); if (scim_bridge_client_is_messenger_opened ()) { const QKeyEvent *key_event = static_cast (qevent); ScimBridgeKeyEvent *bridge_key_event = scim_bridge_key_event_qt_to_bridge (key_event); if (scim_bridge_key_event_get_code (bridge_key_event) == SCIM_BRIDGE_KEY_CODE_NullKey) return false; boolean consumed = FALSE; const retval_t retval_error = scim_bridge_client_handle_key_event (this, bridge_key_event, &consumed); scim_bridge_free_key_event (bridge_key_event); if (retval_error) { scim_bridge_perrorln ("An IOException at filterEvent ()"); } else { return consumed; } } return false; } void ScimBridgeClientIMContextImpl::reset () { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::reset ()"); preedit_cursor_position = 0; preedit_attributes.clear (); preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0)); preedit_string = ""; if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_reset_imcontext (this)) { scim_bridge_perrorln ("An IOException at filterEvent ()"); } } } /* Private Functions */ void ScimBridgeClientIMContextImpl::set_cursor_location (const QPoint &new_cursor_location) { scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::set_cursor_location ()"); if (cursor_location != new_cursor_location) { cursor_location = new_cursor_location; scim_bridge_pdebugln (3, "The cursor location is changed: x = %d\ty = %d", cursor_location.x (), cursor_location.y ()); if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_set_cursor_location (this, cursor_location.x (), cursor_location.y ())) scim_bridge_perrorln ("An IOException occurred at set_cursor_location ()"); } } } void ScimBridgeClientIMContextImpl::focus_in () { scim_bridge_pdebugln (8, "ScimBridgeClientIMContextImpl::focus_in ()"); if (focused_imcontext != NULL && focused_imcontext != this) focused_imcontext->focus_out (); focused_imcontext = this; if (!scim_bridge_client_is_messenger_opened () && scim_bridge_client_is_reconnection_enabled ()) { scim_bridge_pdebugln (7, "Trying to open the connection again..."); scim_bridge_client_open_messenger (); } if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_change_focus (this, TRUE)) { scim_bridge_perrorln ("An IOException occurred at focus_in ()"); } } } void ScimBridgeClientIMContextImpl::focus_out () { scim_bridge_pdebugln (8, "ScimBridgeClientIMContextImpl::focus_out ()"); if (focused_imcontext != this) return; if (scim_bridge_client_is_messenger_opened ()) { if (scim_bridge_client_change_focus (this, false)) { scim_bridge_perrorln ("An IOException occurred at focus_out ()"); } } if (preedit_shown) { set_preedit_shown (false); update_preedit (); } focused_imcontext = NULL; } void ScimBridgeClientIMContextImpl::set_commit_string (const char *new_string) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_commit_string ()"); commit_string = QString::fromUtf8 (new_string); } void ScimBridgeClientIMContextImpl::commit () { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::commit ()"); if (commit_string.length () <= 0) return; scim_bridge_pdebugln (9, "commit string: %s", commit_string.toUtf8 ().data ()); QObject *input = qApp->focusObject(); if (!input) return; const bool is_composing = isComposing (); QInputMethodEvent commit_event; commit_event.setCommitString (commit_string); QCoreApplication::sendEvent (input, &commit_event); if (is_composing) update_preedit (); } void ScimBridgeClientIMContextImpl::forward_key_event (const ScimBridgeKeyEvent *key_event) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::forward_key_event ()"); QWidget *focused_widget = qApp->focusWidget (); if (focused_widget != NULL) { key_event_forwarded = true; QKeyEvent *forwarded_key_event = scim_bridge_key_event_bridge_to_qt (key_event); QApplication::sendEvent (focused_widget, forwarded_key_event); delete forwarded_key_event; key_event_forwarded = false; } else { scim_bridge_pdebugln (4, "No widget is focused"); } } void ScimBridgeClientIMContextImpl::set_preedit_shown (bool shown) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_preedit_shown ()"); preedit_shown = shown; if (!preedit_shown) { preedit_string = ""; preedit_cursor_position = 0; preedit_attributes.clear (); preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0)); } } void ScimBridgeClientIMContextImpl::set_preedit_cursor_position (int new_cursor_position) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_preedit_cursor_position ()"); preedit_cursor_position = new_cursor_position; } void ScimBridgeClientIMContextImpl::set_preedit_string (const char *new_string) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_preedit_string ()"); preedit_string = QString::fromUtf8 (new_string); } void ScimBridgeClientIMContextImpl::set_preedit_attributes (ScimBridgeAttribute** const attributes, int attribute_count) { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_preedit_attribute ()"); preedit_attributes.clear (); preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0)); for (int i = 0; i < attribute_count; ++i) { const ScimBridgeAttribute *attribute = attributes[i]; const size_t attribute_begin = scim_bridge_attribute_get_begin (attribute); const size_t attribute_end = scim_bridge_attribute_get_end (attribute); const scim_bridge_attribute_type_t attribute_type = scim_bridge_attribute_get_type (attribute); const scim_bridge_attribute_value_t attribute_value = scim_bridge_attribute_get_value (attribute); const size_t attribute_length = attribute_end - attribute_begin; const QWidget *focused_widget = qApp->focusWidget (); const QPalette &palette = focused_widget->palette (); const QBrush &reversed_foreground = palette.base (); const QBrush &reversed_background = palette.text (); const QBrush &hilight_foreground = palette.highlightedText (); const QBrush &hilight_background = palette.highlight (); switch (attribute_type) { case ATTRIBUTE_DECORATE: switch (attribute_value) { case SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT: { QTextCharFormat text_format; text_format.setForeground (hilight_foreground); text_format.setBackground (hilight_background); QAttribute qt_attribute (QInputMethodEvent::TextFormat, attribute_begin, attribute_length, text_format); preedit_attributes.push_back (qt_attribute); } break; case SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE: { QTextCharFormat text_format; text_format.setForeground (reversed_foreground); text_format.setBackground (reversed_background); QAttribute qt_attribute (QInputMethodEvent::TextFormat, attribute_begin, attribute_length, text_format); preedit_attributes.push_back (qt_attribute); } break; case SCIM_BRIDGE_ATTRIBUTE_DECORATE_UNDERLINE: { QTextCharFormat text_format; text_format.setProperty (QTextFormat::FontUnderline, true); QAttribute qt_attribute (QInputMethodEvent::TextFormat, attribute_begin, attribute_length, text_format); preedit_attributes.push_back (qt_attribute); } break; } break; case ATTRIBUTE_FOREGROUND: { QTextCharFormat text_format; const unsigned int red = scim_bridge_attribute_get_red (attribute); const unsigned int green = scim_bridge_attribute_get_green (attribute); const unsigned int blue = scim_bridge_attribute_get_blue (attribute); text_format.setForeground (QColor (red, green, blue)); QAttribute qt_attribute (QInputMethodEvent::TextFormat, attribute_begin, attribute_length, text_format); preedit_attributes.push_back (qt_attribute); } break; case ATTRIBUTE_BACKGROUND: { QTextCharFormat text_format; const unsigned int red = scim_bridge_attribute_get_red (attribute); const unsigned int green = scim_bridge_attribute_get_green (attribute); const unsigned int blue = scim_bridge_attribute_get_blue (attribute); text_format.setBackground (QColor (red, green, blue)); QAttribute qt_attribute (QInputMethodEvent::TextFormat, attribute_begin, attribute_length, text_format); preedit_attributes.push_back (qt_attribute); } break; default: break; } } } void ScimBridgeClientIMContextImpl::update_preedit () { scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::update_preedit ()"); QObject *input = qApp->focusObject(); if (!input) return; preedit_attributes[0] = QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0); QInputMethodEvent im_event (preedit_string, preedit_attributes); QCoreApplication::sendEvent(input, &im_event); update (); } scim_bridge_imcontext_id_t ScimBridgeClientIMContextImpl::get_id () const { return id; } void ScimBridgeClientIMContextImpl::set_id (scim_bridge_imcontext_id_t new_id) { id = new_id; } /* Bindings */ scim_bridge_imcontext_id_t scim_bridge_client_imcontext_get_id (const ScimBridgeClientIMContext *imcontext) { const ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); return imcontext_impl->get_id (); } void scim_bridge_client_imcontext_set_id (ScimBridgeClientIMContext *imcontext, scim_bridge_imcontext_id_t new_id) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_id (new_id); } void scim_bridge_client_imcontext_beep (ScimBridgeClientIMContext *imcontext) { QApplication::beep (); } void scim_bridge_client_imcontext_focus_in (ScimBridgeClientIMContext *imcontext) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->focus_in (); } void scim_bridge_client_imcontext_focus_out (ScimBridgeClientIMContext *imcontext) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->focus_out (); } void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *commit_string) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_commit_string (commit_string); } void scim_bridge_client_imcontext_commit (ScimBridgeClientIMContext *imcontext) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->commit (); } void scim_bridge_client_imcontext_forward_key_event (ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->forward_key_event (key_event); } void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean shown) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_preedit_shown (shown); } void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *preedit_string) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_preedit_string (preedit_string); } void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_preedit_cursor_position (cursor_position); } void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, ScimBridgeAttribute** const attributes, int attribute_count) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->set_preedit_attributes (attributes, attribute_count); } void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); imcontext_impl->update_preedit (); } boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); return imcontext_impl->get_surrounding_text (before_max, after_max, string, cursor_position); } boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); return imcontext_impl->delete_surrounding_text (offset, length); } boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string) { ScimBridgeClientIMContextImpl *imcontext_impl = static_cast (imcontext); return imcontext_impl->replace_surrounding_text (string, cursor_position); } void scim_bridge_client_imcontext_imengine_status_changed (ScimBridgeClientIMContext *imcontext, boolean enabled) { // Do nothing. } scim-master/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.h000066400000000000000000000070251415264260100267570ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header of the public interface of IMContexts. */ #ifndef SCIMBRIDGECLIENTIMCONTEXTQT_H_ #define SCIMBRIDGECLIENTIMCONTEXTQT_H_ #include #include #include #include #include #include #include #include #include "scim-bridge.h" #include "scim-bridge-attribute.h" #include "scim-bridge-client-imcontext.h" #include "scim-bridge-client-common-qt.h" /** * IMContext class for qt client. */ struct _ScimBridgeClientIMContext: public QPlatformInputContext { public: /** * Initialize the class itself. */ static void static_initialize (); /** * Finalize the class itself. */ static void static_finalize (); /** * The connection with the agent is opened. */ static void connection_opened (); /** * The connection with the agent is closed. */ static void connection_closed (); /** * Allocate a new IMContext. * * @return A new IMContext. */ static _ScimBridgeClientIMContext *alloc (); /** * Destructor. */ virtual ~_ScimBridgeClientIMContext () {} /** * Filter a key event. * * @param event The key event. * @return If this event is consumed or not. */ virtual bool filterEvent (const QEvent *event) = 0; /** * The focus has been changed. */ virtual void update () = 0; /** * Get the identifier name for this input context. * * @return The identifier name. */ virtual QString identifierName () = 0; /** * Get the languages for the input context. * * @return The languages for the input context. */ virtual QString language () = 0; /** * Filter a mouse event. * * @param offset The cursor offset in the preedit string. * @param event The mouse event. */ virtual void mouseHandler (int offset, QMouseEvent *event) = 0; /** * The current focused widget is destroied. * * @param widget The widget under destroying. */ virtual void widgetDestroyed (QWidget *widget) = 0; /** * Reset the current IME. */ virtual void reset () = 0; protected: /** * Constructor. */ _ScimBridgeClientIMContext () {} }; #endif /*SCIMBRIDGECLIENTIMCONTEXTQT_H_*/ scim-master/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.cpp000066400000000000000000000371011415264260100307060ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include "scim-bridge-output.h" #include "scim-bridge-client-key-event-utility-qt.h" using std::map; /* Static variables */ static bool initialized = false; static map qt_to_bridge_key_map; static map bridge_to_qt_key_map; /* Helper functions */ static void register_key (int qt_key_code, scim_bridge_key_code_t bridge_key_code) { qt_to_bridge_key_map[qt_key_code] = bridge_key_code; qt_to_bridge_key_map[bridge_key_code] = qt_key_code; } static void static_initialize () { if (initialized) return; register_key ('/', SCIM_BRIDGE_KEY_CODE_KP_Divide); register_key ('*', SCIM_BRIDGE_KEY_CODE_KP_Multiply); register_key ('-', SCIM_BRIDGE_KEY_CODE_KP_Subtract); register_key ('+', SCIM_BRIDGE_KEY_CODE_KP_Add); register_key (Qt::Key_Return, SCIM_BRIDGE_KEY_CODE_KP_Enter); register_key (Qt::Key_Escape, SCIM_BRIDGE_KEY_CODE_Escape); register_key (Qt::Key_Tab, SCIM_BRIDGE_KEY_CODE_Tab); register_key (Qt::Key_Backtab, SCIM_BRIDGE_KEY_CODE_ISO_Left_Tab); register_key (Qt::Key_Backspace, SCIM_BRIDGE_KEY_CODE_BackSpace); register_key (Qt::Key_Return, SCIM_BRIDGE_KEY_CODE_Return); register_key (Qt::Key_Enter, SCIM_BRIDGE_KEY_CODE_KP_Enter); register_key (Qt::Key_Insert, SCIM_BRIDGE_KEY_CODE_Insert); register_key (Qt::Key_Delete, SCIM_BRIDGE_KEY_CODE_Delete); register_key (Qt::Key_Pause, SCIM_BRIDGE_KEY_CODE_Pause); #ifdef sun register_key (Qt::Key_Print, SCIM_BRIDGE_KEY_CODE_F22); #else register_key (Qt::Key_Print, SCIM_BRIDGE_KEY_CODE_Print); #endif register_key (Qt::Key_SysReq, SCIM_BRIDGE_KEY_CODE_Sys_Req); register_key (Qt::Key_Home, SCIM_BRIDGE_KEY_CODE_Home); register_key (Qt::Key_End, SCIM_BRIDGE_KEY_CODE_End); register_key (Qt::Key_Left, SCIM_BRIDGE_KEY_CODE_Left); register_key (Qt::Key_Up, SCIM_BRIDGE_KEY_CODE_Up); register_key (Qt::Key_Right, SCIM_BRIDGE_KEY_CODE_Right); register_key (Qt::Key_Down, SCIM_BRIDGE_KEY_CODE_Down); register_key (Qt::Key_PageUp, SCIM_BRIDGE_KEY_CODE_Prior); register_key (Qt::Key_PageDown, SCIM_BRIDGE_KEY_CODE_Next); register_key (Qt::Key_CapsLock, SCIM_BRIDGE_KEY_CODE_Caps_Lock); register_key (Qt::Key_NumLock, SCIM_BRIDGE_KEY_CODE_Num_Lock); register_key (Qt::Key_ScrollLock, SCIM_BRIDGE_KEY_CODE_Scroll_Lock); register_key (Qt::Key_F1, SCIM_BRIDGE_KEY_CODE_F1); register_key (Qt::Key_F2, SCIM_BRIDGE_KEY_CODE_F2); register_key (Qt::Key_F3, SCIM_BRIDGE_KEY_CODE_F3); register_key (Qt::Key_F4, SCIM_BRIDGE_KEY_CODE_F4); register_key (Qt::Key_F5, SCIM_BRIDGE_KEY_CODE_F5); register_key (Qt::Key_F6, SCIM_BRIDGE_KEY_CODE_F6); register_key (Qt::Key_F7, SCIM_BRIDGE_KEY_CODE_F7); register_key (Qt::Key_F8, SCIM_BRIDGE_KEY_CODE_F8); register_key (Qt::Key_F9, SCIM_BRIDGE_KEY_CODE_F9); register_key (Qt::Key_F10, SCIM_BRIDGE_KEY_CODE_F10); register_key (Qt::Key_F11, SCIM_BRIDGE_KEY_CODE_F11); register_key (Qt::Key_F12, SCIM_BRIDGE_KEY_CODE_F12); register_key (Qt::Key_F13, SCIM_BRIDGE_KEY_CODE_F13); register_key (Qt::Key_F14, SCIM_BRIDGE_KEY_CODE_F14); register_key (Qt::Key_F15, SCIM_BRIDGE_KEY_CODE_F15); register_key (Qt::Key_F16, SCIM_BRIDGE_KEY_CODE_F16); register_key (Qt::Key_F17, SCIM_BRIDGE_KEY_CODE_F17); register_key (Qt::Key_F18, SCIM_BRIDGE_KEY_CODE_F18); register_key (Qt::Key_F19, SCIM_BRIDGE_KEY_CODE_F19); register_key (Qt::Key_F20, SCIM_BRIDGE_KEY_CODE_F20); register_key (Qt::Key_F21, SCIM_BRIDGE_KEY_CODE_F21); register_key (Qt::Key_F22, SCIM_BRIDGE_KEY_CODE_F22); register_key (Qt::Key_F23, SCIM_BRIDGE_KEY_CODE_F23); register_key (Qt::Key_F24, SCIM_BRIDGE_KEY_CODE_F24); register_key (Qt::Key_F25, SCIM_BRIDGE_KEY_CODE_F25); register_key (Qt::Key_F26, SCIM_BRIDGE_KEY_CODE_F26); register_key (Qt::Key_F27, SCIM_BRIDGE_KEY_CODE_F27); register_key (Qt::Key_F28, SCIM_BRIDGE_KEY_CODE_F28); register_key (Qt::Key_F29, SCIM_BRIDGE_KEY_CODE_F29); register_key (Qt::Key_F30, SCIM_BRIDGE_KEY_CODE_F30); register_key (Qt::Key_F31, SCIM_BRIDGE_KEY_CODE_F31); register_key (Qt::Key_F32, SCIM_BRIDGE_KEY_CODE_F32); register_key (Qt::Key_F33, SCIM_BRIDGE_KEY_CODE_F33); register_key (Qt::Key_F34, SCIM_BRIDGE_KEY_CODE_F34); register_key (Qt::Key_F35, SCIM_BRIDGE_KEY_CODE_F35); register_key (Qt::Key_Super_L, SCIM_BRIDGE_KEY_CODE_Super_L); register_key (Qt::Key_Super_R, SCIM_BRIDGE_KEY_CODE_Super_R); register_key (Qt::Key_Menu, SCIM_BRIDGE_KEY_CODE_Menu); register_key (Qt::Key_Hyper_L, SCIM_BRIDGE_KEY_CODE_Hyper_L); register_key (Qt::Key_Hyper_R, SCIM_BRIDGE_KEY_CODE_Hyper_R); register_key (Qt::Key_Help, SCIM_BRIDGE_KEY_CODE_Help); register_key (Qt::Key_Multi_key, SCIM_BRIDGE_KEY_CODE_Multi_key); register_key (Qt::Key_Codeinput, SCIM_BRIDGE_KEY_CODE_Codeinput); register_key (Qt::Key_SingleCandidate, SCIM_BRIDGE_KEY_CODE_SingleCandidate); register_key (Qt::Key_MultipleCandidate, SCIM_BRIDGE_KEY_CODE_MultipleCandidate); register_key (Qt::Key_PreviousCandidate , SCIM_BRIDGE_KEY_CODE_PreviousCandidate); register_key (Qt::Key_Mode_switch, SCIM_BRIDGE_KEY_CODE_Mode_switch); register_key (Qt::Key_Kanji, SCIM_BRIDGE_KEY_CODE_Kanji); register_key (Qt::Key_Muhenkan, SCIM_BRIDGE_KEY_CODE_Muhenkan); register_key (Qt::Key_Henkan, SCIM_BRIDGE_KEY_CODE_Henkan); register_key (Qt::Key_Romaji, SCIM_BRIDGE_KEY_CODE_Romaji); register_key (Qt::Key_Hiragana, SCIM_BRIDGE_KEY_CODE_Hiragana); register_key (Qt::Key_Katakana, SCIM_BRIDGE_KEY_CODE_Katakana); register_key (Qt::Key_Hiragana_Katakana, SCIM_BRIDGE_KEY_CODE_Hiragana_Katakana); register_key (Qt::Key_Zenkaku, SCIM_BRIDGE_KEY_CODE_Zenkaku); register_key (Qt::Key_Hankaku, SCIM_BRIDGE_KEY_CODE_Hankaku); register_key (Qt::Key_Zenkaku_Hankaku, SCIM_BRIDGE_KEY_CODE_Zenkaku_Hankaku); register_key (Qt::Key_Touroku, SCIM_BRIDGE_KEY_CODE_Touroku); register_key (Qt::Key_Massyo, SCIM_BRIDGE_KEY_CODE_Massyo); register_key (Qt::Key_Kana_Lock, SCIM_BRIDGE_KEY_CODE_Kana_Lock); register_key (Qt::Key_Kana_Shift, SCIM_BRIDGE_KEY_CODE_Kana_Shift); register_key (Qt::Key_Eisu_Shift, SCIM_BRIDGE_KEY_CODE_Eisu_Shift); register_key (Qt::Key_Eisu_toggle, SCIM_BRIDGE_KEY_CODE_Eisu_toggle); register_key (Qt::Key_Hangul, SCIM_BRIDGE_KEY_CODE_Hangul); register_key (Qt::Key_Hangul_Start, SCIM_BRIDGE_KEY_CODE_Hangul_Start); register_key (Qt::Key_Hangul_End, SCIM_BRIDGE_KEY_CODE_Hangul_End); register_key (Qt::Key_Hangul_Hanja, SCIM_BRIDGE_KEY_CODE_Hangul_Hanja); register_key (Qt::Key_Hangul_Jamo, SCIM_BRIDGE_KEY_CODE_Hangul_Jamo); register_key (Qt::Key_Hangul_Romaja, SCIM_BRIDGE_KEY_CODE_Hangul_Romaja); register_key (Qt::Key_Hangul_Jeonja, SCIM_BRIDGE_KEY_CODE_Hangul_Jeonja); register_key (Qt::Key_Hangul_Banja, SCIM_BRIDGE_KEY_CODE_Hangul_Banja); register_key (Qt::Key_Hangul_PreHanja, SCIM_BRIDGE_KEY_CODE_Hangul_PreHanja); register_key (Qt::Key_Hangul_Special, SCIM_BRIDGE_KEY_CODE_Hangul_Special); initialized = true; } /* Implementations */ QKeyEvent *scim_bridge_key_event_bridge_to_qt (const ScimBridgeKeyEvent *bridge_key_event) { if (!initialized) static_initialize (); const QEvent::Type type = scim_bridge_key_event_is_pressed (bridge_key_event) ? QEvent::KeyPress : QEvent::KeyRelease; const scim_bridge_key_code_t bridge_key_code = scim_bridge_key_event_get_code (bridge_key_event); unsigned int ascii_code = '\0'; unsigned int qt_key_code; if (bridge_key_code < 0x1000) { if (bridge_key_code >= SCIM_BRIDGE_KEY_CODE_a && bridge_key_code <= SCIM_BRIDGE_KEY_CODE_z) { ascii_code = bridge_key_code; qt_key_code = QChar (ascii_code).toUpper ().toLatin1 (); } else { ascii_code = bridge_key_code; qt_key_code = bridge_key_code; } } else if (bridge_key_code < 0x3000) { qt_key_code = bridge_key_code; } else { qt_key_code = Qt::Key_unknown; } Qt::KeyboardModifiers modifiers = Qt::NoModifier; if (scim_bridge_key_event_is_alt_down (bridge_key_event)) modifiers |= Qt::AltModifier; if (scim_bridge_key_event_is_shift_down (bridge_key_event)) modifiers |= Qt::ShiftModifier; if (scim_bridge_key_event_is_control_down (bridge_key_event)) modifiers |= Qt::ControlModifier; if (scim_bridge_key_event_is_meta_down (bridge_key_event)) modifiers |= Qt::MetaModifier; return new QKeyEvent (type, qt_key_code, modifiers); } ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *key_event) { if (!initialized) static_initialize (); ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event (); const Qt::KeyboardModifiers modifiers = key_event->modifiers (); if (modifiers & Qt::ShiftModifier) { scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); } if (modifiers & Qt::ControlModifier) { scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); } if (modifiers & Qt::AltModifier) { scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); } if (modifiers & Qt::MetaModifier) { scim_bridge_key_event_set_meta_down (bridge_key_event, TRUE); } const int qt_key_code = key_event->key (); int bridge_key_code; #ifdef SCIM_QT_IMMODULE_USE_KDE KKeyNative nk = KKey (qt_key_code); bridge_key_code = nk.sym (); #else if ((qt_key_code & Qt::UNICODE_ACCEL) || (qt_key_code & 0xffff) < 0x1000) { const QString qt_key_raw_str = QString (QChar (qt_key_code)); const QString qt_key_str = key_event->text (); if ((qt_key_str == qt_key_raw_str) ^ scim_bridge_key_event_is_shift_down (bridge_key_event)) { scim_bridge_pdebugln (5, "CapsLock: on"); scim_bridge_key_event_set_caps_lock_down (bridge_key_event, true); } else { scim_bridge_pdebugln (5, "CapsLock: off"); scim_bridge_key_event_set_caps_lock_down (bridge_key_event, false); } if (!scim_bridge_key_event_is_caps_lock_down (bridge_key_event) ^ scim_bridge_key_event_is_shift_down (bridge_key_event)) { bridge_key_code = QChar (qt_key_code).toLower ().unicode (); } else { bridge_key_code = QChar (qt_key_code).toUpper ().unicode (); } } else { map::iterator iter = qt_to_bridge_key_map.find (qt_key_code); if (iter != qt_to_bridge_key_map.end ()) { bridge_key_code = iter->second; } else { bridge_key_code = SCIM_BRIDGE_KEY_CODE_NullKey; } } #endif scim_bridge_key_event_set_code (bridge_key_event, bridge_key_code); scim_bridge_key_event_set_pressed (bridge_key_event, key_event->type () != QEvent::KeyRelease); return bridge_key_event; } XEvent *scim_bridge_key_event_bridge_to_x11 (const ScimBridgeKeyEvent *bridge_key_event, Display *display, WId window_id) { XEvent *x_event = static_cast (malloc (sizeof (XEvent))); XKeyEvent *x_key_event = &x_event->xkey; x_key_event->type = scim_bridge_key_event_is_pressed (bridge_key_event) ? XKeyPress : XKeyRelease; x_key_event->display = display; x_key_event->window = window_id; x_key_event->subwindow = window_id; x_key_event->serial = 0; x_key_event->send_event = FALSE; x_key_event->same_screen = FALSE; struct timeval current_time; gettimeofday (¤t_time, NULL); x_key_event->time = (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000); if (display != NULL) { x_key_event->root = DefaultRootWindow (display); x_key_event->keycode = XKeysymToKeycode (display, (KeySym) scim_bridge_key_event_get_code (bridge_key_event)); } else { x_key_event->root = None; x_key_event->keycode = SCIM_BRIDGE_KEY_CODE_NullKey; } x_key_event->state = 0; if (scim_bridge_key_event_is_shift_down (bridge_key_event)) x_key_event->state |= ShiftMask; if (scim_bridge_key_event_is_control_down (bridge_key_event)) x_key_event->state |= ControlMask; if (scim_bridge_key_event_is_caps_lock_down (bridge_key_event)) x_key_event->state |= LockMask; if (scim_bridge_key_event_is_alt_down (bridge_key_event)) x_key_event->state |= Mod1Mask; if (scim_bridge_key_event_is_meta_down (bridge_key_event)) x_key_event->state |= Mod4Mask; return x_event; } ScimBridgeKeyEvent* scim_bridge_key_event_x11_to_bridge (const XEvent *x_event) { const XKeyEvent *x_key_event = &x_event->xkey; const int key_strlen = 32; char key_str[key_strlen]; KeySym keysym; if (XLookupString (const_cast (&x_event->xkey), key_str, key_strlen, &keysym, 0) <= 0) { keysym = XLookupKeysym (const_cast (&x_event->xkey), 0); } ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event (); scim_bridge_key_event_set_code (bridge_key_event, keysym); if (x_key_event->type == XKeyRelease) { scim_bridge_key_event_set_pressed (bridge_key_event, false); } else { scim_bridge_key_event_set_pressed (bridge_key_event, true); } if (x_key_event->state & ShiftMask || (x_key_event->type == XKeyPress && (x_key_event->keycode == XK_Shift_L || x_key_event->keycode == XK_Shift_R))) { scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE); } if (x_key_event->state & ControlMask || (x_key_event->type == XKeyPress && (x_key_event->keycode == XK_Control_L || x_key_event->keycode == XK_Control_R))) { scim_bridge_key_event_set_control_down (bridge_key_event, TRUE); } if (x_key_event->state & LockMask || (x_key_event->type == XKeyPress && (x_key_event->keycode == XK_Caps_Lock))) { scim_bridge_key_event_set_caps_lock_down (bridge_key_event, TRUE); } if (x_key_event->state & Mod1Mask || (x_key_event->type == XKeyPress && (x_key_event->keycode == XK_Alt_L || x_key_event->keycode == XK_Alt_R))) { scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE); } if (x_key_event->state & Mod4Mask || (x_key_event->type == XKeyPress && (x_key_event->keycode == XK_Meta_L || x_key_event->keycode == XK_Meta_R))) { scim_bridge_key_event_set_meta_down (bridge_key_event, TRUE); } if (scim_bridge_key_event_get_code (bridge_key_event) == SCIM_BRIDGE_KEY_CODE_backslash) { boolean kana_ro = FALSE; int keysym_size = 0; KeySym *keysyms = XGetKeyboardMapping (x_key_event->display, x_key_event->keycode, 1, &keysym_size); if (keysyms != NULL) { kana_ro = (keysyms[0] == XK_backslash && keysyms[1] == XK_underscore); XFree (keysyms); } scim_bridge_key_event_set_quirk_enabled (bridge_key_event, SCIM_BRIDGE_KEY_QUIRK_KANA_RO, kana_ro); } return bridge_key_event; } scim-master/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.h000066400000000000000000000050111415264260100303460ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header of the functions to translate key events between scim-bridge and qt. */ #ifndef SCIMBRIDGECLIENTKEYEVENTUTILITYQT_H_ #define SCIMBRIDGECLIENTKEYEVENTUTILITYQT_H_ #include "scim-bridge.h" #include "scim-bridge-key-code.h" #include "scim-bridge-key-event.h" #include "scim-bridge-client-common-qt.h" #include #include #include static const int XKeyPress = KeyPress; static const int XKeyRelease = KeyRelease; #undef KeyPress #undef KeyRelease class QKeyEvent; /** * Translate a key event from scim-bridge into qt. * * @param bridge_key_event The key event from scim-bridge. * @return The key event for Qt. */ QKeyEvent *scim_bridge_key_event_bridge_to_qt (const ScimBridgeKeyEvent *bridge_key_event); /** * Translate a key event from qt into scim-bridge. * * @param qt_key_event The key event from Qt. * @return The key event from scim-bridge. */ ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *qt_key_event); /** * Translate a key event from scim-bridge into X11. * * @param bridge_key_event The key event from scim-bridge. * @param display The X11 display. * @param window_id The id for the focused window. * @return The key event for X11. */ XEvent *scim_bridge_key_event_bridge_to_x11 (const ScimBridgeKeyEvent *bridge_key_event, Display *display, WId window_id); /** * Translate a key event from X11 into scim-bridge. * * @param x11_event The event from X11. * @return The key event from scim-bridge. */ ScimBridgeKeyEvent* scim_bridge_key_event_x11_to_bridge (const XEvent *x11_event); #endif /*SCIMBRIDGECLIENTKEYEVENTUTILITYQT_H_*/ scim-master/extras/immodules/client-qt/scim-bridge-client-qt.cpp000066400000000000000000000054721415264260100253060ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include "scim-bridge-client.h" #include "scim-bridge-client-protected.h" #include "scim-bridge-output.h" #include "scim-bridge-client-qt.h" using namespace Qt; /* Static variables */ static ScimBridgeClientQt *client = NULL; /* Bindings */ void scim_bridge_client_messenger_opened () { client->messenger_opened (); } void scim_bridge_client_messenger_closed () { client->messenger_closed (); } /* Implementations */ ScimBridgeClientQt::ScimBridgeClientQt (): socket_notifier (NULL) { client = this; if (scim_bridge_client_initialize ()) { scim_bridge_perrorln ("Failed to init scim bridge..."); } else { scim_bridge_client_open_messenger (); } ScimBridgeClientIMContext::static_initialize (); } ScimBridgeClientQt::~ScimBridgeClientQt () { if (scim_bridge_client_finalize ()) { scim_bridge_perrorln ("Failed to finalize scim bridge..."); } ScimBridgeClientIMContext::static_finalize (); client = NULL; } void ScimBridgeClientQt::messenger_opened () { const int fd = scim_bridge_client_get_messenger_fd (); socket_notifier = new QSocketNotifier (fd, QSocketNotifier::Read); connect (socket_notifier, SIGNAL (activated (int)), this, SLOT (handle_message ())); ScimBridgeClientIMContext::connection_opened (); } void ScimBridgeClientQt::messenger_closed () { if (socket_notifier) { socket_notifier->setEnabled (false); socket_notifier->deleteLater (); socket_notifier = NULL; } ScimBridgeClientIMContext::connection_closed (); } void ScimBridgeClientQt::handle_message () { const int socket_fd = scim_bridge_client_get_messenger_fd (); fd_set read_set; FD_ZERO (&read_set); FD_SET (socket_fd, &read_set); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; if (select (socket_fd + 1, &read_set, NULL, NULL, &timeout) > 0) { if (scim_bridge_client_read_and_dispatch ()) { scim_bridge_perrorln ("An IOException occurred at handle_message ()"); return; } } } scim-master/extras/immodules/client-qt/scim-bridge-client-qt.h000066400000000000000000000035711415264260100247510ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header for qt client of scim-bridge. */ #ifndef SCIMBRIDGECLIENTQT_H_ #define SCIMBRIDGECLIENTQT_H_ #include #include #include "scim-bridge.h" #include "scim-bridge-client-imcontext-qt.h" #include "scim-bridge-client-common-qt.h" /** * The public interface of scim-bridge-client for Qt apps. */ class ScimBridgeClientQt: public QObject { Q_OBJECT public slots: void handle_message (); public: /** * Constructor. */ ScimBridgeClientQt (); /** * Destructor. */ ~ScimBridgeClientQt (); /** * A messenger is opened. */ void messenger_opened (); /** * A messenger is closed. */ void messenger_closed (); private: /** * The notifier for the messenger socket. */ QSocketNotifier *socket_notifier; }; #endif /*SCIMBRIDGECLIENTQT_H_*/ scim-master/extras/immodules/client-qt/scim.json000066400000000000000000000000331415264260100223310ustar00rootroot00000000000000{ "Keys": [ "scim" ] } scim-master/extras/immodules/client-qt/scim.pro000066400000000000000000000014341415264260100221660ustar00rootroot00000000000000CONFIG += plugin TARGET = im-scim INCLUDEPATH += . ../common ../client-common QT += gui-private widgets x11extras HEADERS += scim-bridge-client-common-qt.h \ scim-bridge-client-imcontext-qt.h \ scim-bridge-client-key-event-utility-qt.h \ scim-bridge-client-qt.h SOURCES += im-scim-bridge-qt.cpp \ scim-bridge-client-imcontext-qt.cpp \ scim-bridge-client-key-event-utility-qt.cpp \ scim-bridge-client-qt.cpp QMAKE_LIBDIR += ../client-common/.libs ../common/.libs LIBS += -lscimbridgeclientcommon -lscimbridgecommon -lX11 OTHER_FILES += scim.json PLUGIN_TYPE = platforminputcontexts PLUGIN_EXTENDS = - PLUGIN_CLASS_NAME = ScimBridgeInputContextPlugin target.path += $$[QT_INSTALL_PLUGINS]/platforminputcontexts load(qt_plugin) scim-master/extras/immodules/common/000077500000000000000000000000001415264260100200775ustar00rootroot00000000000000scim-master/extras/immodules/common/Makefile.am000066400000000000000000000045761415264260100221470ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MAINTAINERCLEANFILES = Makefile.in AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/data \ -I$(top_srcdir)/utils \ -I$(top_srcdir)/extras/panel \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" \ -DSCIM_KEYBOARD_ICON_FILE=\"@SCIM_ICONDIR@/keyboard.png\" noinst_HEADERS = scim-bridge-attribute.h \ scim-bridge-debug.h \ scim-bridge-display.h \ scim-bridge-imcontext.h \ scim-bridge-key-code.h \ scim-bridge-key-event.h \ scim-bridge-message.h \ scim-bridge-message-constant.h \ scim-bridge-messenger.h \ scim-bridge-output.h \ scim-bridge-path.h \ scim-bridge-string.h \ scim-bridge.h noinst_LTLIBRARIES = libscimbridgecommon.la libscimbridgecommon_la_SOURCES = scim-bridge-attribute.c \ scim-bridge-display.c \ scim-bridge-path.c \ scim-bridge-key-event.c \ scim-bridge-message.c \ scim-bridge-messenger.c \ scim-bridge-string.c #libscimbridgecommon_la_CFLAGS = @SCIM_CFLAGS@ #libscimbridgecommon_la_CXXFLAGS = @SCIM_CFLAGS@ #libscimbridgecommon_la_LDFLAGS = @SCIM_LIBS@ scim-master/extras/immodules/common/scim-bridge-attribute.c000066400000000000000000000106121415264260100244310ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include "scim-bridge-attribute.h" /* Data type */ struct _ScimBridgeAttribute { size_t begin; size_t end; scim_bridge_attribute_type_t type; scim_bridge_attribute_value_t value; }; /* Functions */ ScimBridgeAttribute *scim_bridge_alloc_attribute () { ScimBridgeAttribute *attribute = malloc (sizeof (ScimBridgeAttribute)); attribute->begin = 0; attribute->end = 0; attribute->type = ATTRIBUTE_NONE; attribute->value = SCIM_BRIDGE_ATTRIBUTE_DECORATE_NONE; return attribute; } void scim_bridge_free_attribute (ScimBridgeAttribute *attribute) { if (attribute != NULL) free (attribute); } void scim_bridge_copy_attribute (ScimBridgeAttribute *dst, const ScimBridgeAttribute *src) { if (dst == src) return; memcpy (dst, src, sizeof (ScimBridgeAttribute)); } boolean scim_bridge_attribute_equals (const ScimBridgeAttribute *atr1, const ScimBridgeAttribute *atr2) { return atr1->begin == atr2->begin && atr1->end == atr2->end && atr1->type == atr2->type && atr1->value == atr2->value; } scim_bridge_attribute_type_t scim_bridge_attribute_get_type (const ScimBridgeAttribute *attribute) { return attribute->type; } void scim_bridge_attribute_set_type (ScimBridgeAttribute *attribute, scim_bridge_attribute_type_t type) { attribute->type = type; } size_t scim_bridge_attribute_get_begin (const ScimBridgeAttribute *attribute) { return attribute->begin; } void scim_bridge_attribute_set_begin (ScimBridgeAttribute *attribute, size_t begin) { attribute->begin = begin; } size_t scim_bridge_attribute_get_end (const ScimBridgeAttribute *attribute) { return attribute->end; } void scim_bridge_attribute_set_end (ScimBridgeAttribute *attribute, size_t end) { attribute->end = end; } scim_bridge_attribute_value_t scim_bridge_attribute_get_value (const ScimBridgeAttribute *attribute) { return attribute->value; } void scim_bridge_attribute_set_value (ScimBridgeAttribute *attribute, scim_bridge_attribute_value_t value) { attribute->value = value; } void scim_bridge_attribute_set_color (ScimBridgeAttribute *attribute, unsigned int red, unsigned int green, unsigned int blue) { attribute->value = (scim_bridge_attribute_value_t) (((red & 0xFF) << 16) | ((green & 0xFF) << 8) | ((blue & 0xFF) << 0)); } unsigned int scim_bridge_attribute_get_red (const ScimBridgeAttribute *attribute) { return ((unsigned int) (attribute->value & 0xFF0000)) >> 16; } void scim_bridge_attribute_set_red (ScimBridgeAttribute *attribute, unsigned int red) { unsigned int green = scim_bridge_attribute_get_green (attribute); unsigned int blue = scim_bridge_attribute_get_blue (attribute); scim_bridge_attribute_set_color (attribute, red, green, blue); } unsigned int scim_bridge_attribute_get_green (const ScimBridgeAttribute *attribute) { return ((unsigned int) (attribute->value & 0x00FF00)) >> 8; } void scim_bridge_attribute_set_green (ScimBridgeAttribute *attribute, unsigned int green) { unsigned int red = scim_bridge_attribute_get_red (attribute); unsigned int blue = scim_bridge_attribute_get_blue (attribute); scim_bridge_attribute_set_color (attribute, red, green, blue); } unsigned int scim_bridge_attribute_get_blue (const ScimBridgeAttribute *attribute) { return ((unsigned int) (attribute->value & 0x0000FF)) >> 0; } void scim_bridge_attribute_set_blue (ScimBridgeAttribute *attribute, unsigned int blue) { unsigned int red = scim_bridge_attribute_get_red (attribute); unsigned int green = scim_bridge_attribute_get_green (attribute); scim_bridge_attribute_set_color (attribute, red, green, blue); } scim-master/extras/immodules/common/scim-bridge-attribute.h000066400000000000000000000216711415264260100244450ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about attributes. * * Attributes are used to give the clients some hints how the preedit strings should be shown.\n * They are used to highlight the current segment in the convertion mode, * or to underline the newly-input-strings. */ #ifndef SCIMBRIDGEATTRIBUTE_H_ #define SCIMBRIDGEATTRIBUTE_H_ #include "scim-bridge.h" enum _scim_bridge_attribute_type_t { ATTRIBUTE_NONE, ATTRIBUTE_DECORATE, ATTRIBUTE_FOREGROUND, ATTRIBUTE_BACKGROUND }; /** * This is enumeration type for the type of attributes. */ typedef enum _scim_bridge_attribute_type_t scim_bridge_attribute_type_t; /** * This is type for the value or the color of attributes. */ typedef unsigned int scim_bridge_attribute_value_t; /** * This is the type of attribute. */ typedef struct _ScimBridgeAttribute ScimBridgeAttribute; /** * The attribute type, which means that the attribute is invalid. */ static const scim_bridge_attribute_value_t SCIM_BRIDGE_ATTRIBUTE_DECORATE_NONE = 0x1000000; /** * The attribute type, which means that the attribute provides an underline. */ static const scim_bridge_attribute_value_t SCIM_BRIDGE_ATTRIBUTE_DECORATE_UNDERLINE = 0x2000000; /** * The attribute type, which means that the attribute provides an highlight. */ static const scim_bridge_attribute_value_t SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT = 0x4000000; /** * The attribute type, which means that the attribute provides an reversed highlight. */ static const scim_bridge_attribute_value_t SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE = 0x8000000; #ifdef __cplusplus extern "C" { #endif /** * Allocate an attribute. * * @return a new attribute. */ ScimBridgeAttribute *scim_bridge_alloc_attribute (); /** * Free an attribute. * * @param attribute The attribute to free. * @note Do not use free (). It will cause memleaks. */ void scim_bridge_free_attribute (ScimBridgeAttribute *attribute); /** * Copy an attribute into another. * * @param src The attribute to duplicate. * @param dst The destination to copy in. */ void scim_bridge_copy_attribute (ScimBridgeAttribute *dst, const ScimBridgeAttribute *src); /** * See if one attribute equals the other. * * @param atr1 The attribute. * @param atr2 Another attribute. * @return true if the two attributes are the same. */ boolean scim_bridge_attribute_equals (const ScimBridgeAttribute *atr1, const ScimBridgeAttribute *atr2); /** * Get the type of an attribute. * * @param attribute The attribute. * @return The type of the attribute. */ scim_bridge_attribute_type_t scim_bridge_attribute_get_type (const ScimBridgeAttribute *attribute); /** * Set the type of an attribute. * * @param attribute The attribute. */ void scim_bridge_attribute_set_type (ScimBridgeAttribute *attribute, scim_bridge_attribute_type_t type); /** * Get the begining index of the attribute. * * @param attribute The attribute. * @return The index of the first wide-character to apply this attribute. */ size_t scim_bridge_attribute_get_begin (const ScimBridgeAttribute *attribute); /** * Set the begining index of the attribute. * * @param attribute The attribute. * @param begin The index of the first wide-character to apply this attribute. */ void scim_bridge_attribute_set_begin (ScimBridgeAttribute *attribute, size_t begin); /** * Get the ending index of the attribute. * * @param attribute The attribute. * @return The index of the end wide-character to apply this attribute. */ size_t scim_bridge_attribute_get_end (const ScimBridgeAttribute *attribute); /** * Set the ending index of the attribute. * * @param attribute The attribute. * @param end The index of the end wide-character to apply this attribute. */ void scim_bridge_attribute_set_end (ScimBridgeAttribute *attribute, size_t end); /** * Get the type of the attribute. * * @param attribute The attribute. * @return The type of the attribute. */ scim_bridge_attribute_type_t scim_bridge_attribute_get_type (const ScimBridgeAttribute *attribute); /** * Set the type of the attribute. * * @param attribute The attribute. * @param type The type of the attribute. */ void scim_bridge_attribute_set_type (ScimBridgeAttribute *attribute, scim_bridge_attribute_type_t type); /** * Get the value of the attribute.\n * Notice, the value stands for RGB color from 0x000000 to 0xFFFFFF\n * if the attribute type is ATTRIBUTE_FOREGROUND or ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @return The value of the attribute. */ scim_bridge_attribute_value_t scim_bridge_attribute_get_value (const ScimBridgeAttribute *attribute); /** * Set the value of the attribute.\n * Notice, the value stands for RGB color from 0x000000 to 0xFFFFFF\n * if the attribute type is ATTRIBUTE_FOREGROUND or ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @param value The value of the attribute. */ void scim_bridge_attribute_set_value (ScimBridgeAttribute *attribute, scim_bridge_attribute_value_t value); /** * Set the color of the attribute.\n * The color value will be ignored * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @param red The red value, from 0x0 to 0xFF. * @param green The green value, from 0x0 to 0xFF. * @param blue The blue value, from 0x0 to 0xFF. */ void scim_bridge_attribute_set_color (ScimBridgeAttribute *attribute, unsigned int red, unsigned int green, unsigned int blue); /** * Get the red value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @return The red value, from 0x0 to 0xFF. */ unsigned int scim_bridge_attribute_get_red (const ScimBridgeAttribute *attribute); /** * Set the red value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @param red The red value, from 0x0 to 0xFF. */ void scim_bridge_attribute_set_red (ScimBridgeAttribute *attribute, unsigned int red); /** * Get the green value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @return The green value, from 0x0 to 0xFF. */ unsigned int scim_bridge_attribute_get_green (const ScimBridgeAttribute *attribute); /** * Set the green value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @param green The green value, from 0x0 to 0xFF. */ void scim_bridge_attribute_set_green (ScimBridgeAttribute *attribute, unsigned int green); /** * Get the blue value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @return The blue value, from 0x0 to 0xFF. */ unsigned int scim_bridge_attribute_get_blue (const ScimBridgeAttribute *attribute); /** * Set the blue value of the attribute.\n * The color value has no meanings * when the attribute type is not ATTRIBUTE_FOREGROUND nor ATTRIBUTE_BACKGROUND. * * @param attribute The attribute. * @param blue The blue value, from 0x0 to 0xFF. */ void scim_bridge_attribute_set_blue (ScimBridgeAttribute *attribute, unsigned int blue); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEATTRIBUTE_H_*/ scim-master/extras/immodules/common/scim-bridge-debug.h000066400000000000000000000031241415264260100235210ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about debug related features. */ #ifndef SCIMBRIDGEDEBUG_H_ #define SCIMBRIDGEDEBUG_H_ #include "scim-bridge.h" /** * This is the type of debug level. */ typedef int scim_bridge_debug_level_t; /** * The maximum value of the debug level. */ static const scim_bridge_debug_level_t SCIM_BRIDGE_MAX_DEBUG_LEVEL = 9; /** * The minimum value of the debug level. */ static const scim_bridge_debug_level_t SCIM_BRIDGE_MIN_DEBUG_LEVEL = 0; #ifdef __cplusplus extern "C" { #endif /** * Get the debug level. * * @return The debug level. */ scim_bridge_debug_level_t scim_bridge_debug_get_level (); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEDEBUG_H_*/ scim-master/extras/immodules/common/scim-bridge-display.c000066400000000000000000000135131415264260100240760ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include "scim-bridge-display.h" #include "scim-bridge-output.h" /* Type definitions */ struct _ScimBridgeDisplay { char *name; int display_number; int screen_number; }; /* Implementations */ ScimBridgeDisplay *scim_bridge_alloc_display () { ScimBridgeDisplay *display = malloc (sizeof (ScimBridgeDisplay)); display->name = malloc (sizeof (char)); display->name[0] = '\0'; display->display_number = -1; display->screen_number = -1; return display; } void scim_bridge_free_display (ScimBridgeDisplay *display) { if (display == NULL) return; free (display->name); free (display); } void scim_bridge_copy_display (ScimBridgeDisplay *dst, const ScimBridgeDisplay *src) { if (dst == NULL || src == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } const size_t str_length = strlen (src->name); dst->name = realloc (dst->name, sizeof (char) * (str_length + 1)); strcpy (dst->name, src->name); dst->display_number = src->display_number; dst->screen_number = src->screen_number; } boolean scim_bridge_display_equals (const ScimBridgeDisplay *dst, const ScimBridgeDisplay *src) { return dst->display_number == src->display_number && dst->screen_number == src->screen_number; } retval_t scim_bridge_display_fetch_current (ScimBridgeDisplay *display) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); return RETVAL_FAILED; } int display_number = 0; int screen_number = 0; char *display_name = getenv ("DISPLAY"); if (display_name == NULL) { return RETVAL_FAILED; } else { const char *c; for (c = display_name; TRUE; ++c) { if (*c == ':') { break; } else if (*c == '\0') { return RETVAL_FAILED; } } boolean reading_display_number = TRUE; static char *digits = "0123456789"; for (c += sizeof (char); *c != '\0'; ++c) { switch (*c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (reading_display_number) { display_number = display_number * 10 + (index (digits, *c) - digits); } else { screen_number = screen_number * 10 + (index (digits, *c) - digits); } break; case '.': if (reading_display_number) { reading_display_number = FALSE; } else { return RETVAL_FAILED; } break; default: return RETVAL_FAILED; } } const size_t display_name_str_length = strlen (display_name); free (display->name); display->name = malloc (sizeof (char) * (display_name_str_length + 1)); strcpy (display->name, display_name); display->display_number = display_number; display->screen_number = screen_number; return RETVAL_SUCCEEDED; } } const char *scim_bridge_display_get_name (const ScimBridgeDisplay *display) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); return NULL; } return display->name; } void scim_bridge_display_set_name (ScimBridgeDisplay *display, const char *display_name) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } if (display_name == NULL) { scim_bridge_perrorln ("The pointer given as a string is NULL"); abort (); } free (display->name); display->name = malloc (sizeof (char) * (strlen (display_name) + 1)); strcpy (display->name, display_name); } int scim_bridge_display_get_display_number (const ScimBridgeDisplay *display) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } return display->display_number; } void scim_bridge_display_set_display_number (ScimBridgeDisplay *display, int display_number) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } display->display_number = display_number; } int scim_bridge_display_get_screen_number (const ScimBridgeDisplay *display) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } return display->screen_number; } void scim_bridge_display_set_screen_number (ScimBridgeDisplay *display, int screen_number) { if (display == NULL) { scim_bridge_perrorln ("The pointer given as a display is NULL"); abort (); } display->screen_number = screen_number; } scim-master/extras/immodules/common/scim-bridge-display.h000066400000000000000000000100541415264260100241000ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about the information of the display. */ #ifndef SCIMBRIDGEDISPLAY_H_ #define SCIMBRIDGEDISPLAY_H_ #include "scim-bridge.h" /** * The data type for display informations. */ typedef struct _ScimBridgeDisplay ScimBridgeDisplay; #ifdef __cplusplus extern "C" { #endif /** * Allocate a new display. * * @return The new display. */ ScimBridgeDisplay *scim_bridge_alloc_display (); /** * Free a display. * * @param display The display to free. */ void scim_bridge_free_display (ScimBridgeDisplay *display); /** * Copy a display into another. * * @param dst The destination to copy in. * @param src The source display. */ void scim_bridge_copy_display (ScimBridgeDisplay *dst, const ScimBridgeDisplay *src); /** * See the two display are the same or not. * * @param dst A display. * @param src Another display. * @return true if the two displays are the same. */ boolean scim_bridge_display_equals (const ScimBridgeDisplay *dst, const ScimBridgeDisplay *src); /** * Fetch the current display infomation. * * @param display The destination to write the data in. */ retval_t scim_bridge_display_fetch_current (ScimBridgeDisplay *display); /** * Get the name of a display.\n * A display name is usually the same as the environmental variable "DISPLAY".\n * When you are not in X, the value is undefined for now... * * @param display The display. * @return The display name. */ const char *scim_bridge_display_get_name (const ScimBridgeDisplay *display); /** * Set the name of a display. * * @param display The display. * @param name The display display_name. */ void scim_bridge_display_set_name (ScimBridgeDisplay *display, const char *display_name); /** * Get the display number of a display.\n * A display number is usually grabbed from the environmental variable "DISPLAY".\n * For example, this function returns "0" if "DISPLAY=localhost:0.1". * * @param display The display. * @return The display number. */ int scim_bridge_display_get_display_number (const ScimBridgeDisplay *display); /** * set the display number of a display. * * @param display The display. * @param display_number The display number. */ void scim_bridge_display_set_display_number (ScimBridgeDisplay *display, int display_number); /** * Get the screen number of a display.\n * A screen number is usually grabbed from the environmental variable "DISPLAY".\n * For example, this function returns "1" if "DISPLAY=localhost:0.1". * * @param display The display. * @return The screen number. */ int scim_bridge_display_get_screen_number (const ScimBridgeDisplay *display); /** * Set the screen number of a display. * * @param display The display. * @param The screen number of a display. */ void scim_bridge_display_set_screen_number (ScimBridgeDisplay *display, int screen_number); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEDISPLAY_H_*/ scim-master/extras/immodules/common/scim-bridge-imcontext.h000066400000000000000000000027151415264260100244520ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include /** * @file * @author Ryo Dairiki * @brief This header must be included by all the source codes which use IMContextes. */ #ifndef SCIMBRIDGEIMCONTEXT_H_ #define SCIMBRIDGEIMCONTEXT_H_ enum _scim_bridge_preedit_mode_t { PREEDIT_FLOATING, PREEDIT_HANGING, PREEDIT_EMBEDDED, PREEDIT_ANY, }; /** * The type for the way to show the preedit. */ typedef enum _scim_bridge_preedit_mode_t scim_bridge_preedit_mode_t; /** * This is the type for imcontext id. * Notice, every imcontext has the unique id. */ typedef int scim_bridge_imcontext_id_t; #endif /*SCIMBRIDGEIMCONTEXT_H_*/ scim-master/extras/immodules/common/scim-bridge-key-code.h000066400000000000000000004047421415264260100241460ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about key codes. */ #ifndef SCIM_BRIDGE_KEY_CODE_H_ #define SCIM_BRIDGE_KEY_CODE_H_ #include "scim-bridge.h" /** * This is the type of key codes. */ typedef unsigned int scim_bridge_key_code_t; /* All the key_codes are exactly the same as the scim key codes */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_NullKey = 0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_VoidSymbol = 0xFFFFFF; /* function keys */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_BackSpace = 0xFF08; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Tab = 0xFF09; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Linefeed = 0xFF0A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Clear = 0xFF0B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Return = 0xFF0D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pause = 0xFF13; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Scroll_Lock = 0xFF14; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Sys_Req = 0xFF15; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Escape = 0xFF1B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Delete = 0xFFFF; /* International & multi-key character composition */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Multi_key = 0xFF20; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Codeinput = 0xFF37; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_SingleCandidate = 0xFF3C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_MultipleCandidate = 0xFF3D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_PreviousCandidate = 0xFF3E; /* Japanese keyboard support */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Kanji = 0xFF21; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Muhenkan = 0xFF22; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Henkan_Mode = 0xFF23; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Henkan = 0xFF23; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Romaji = 0xFF24; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hiragana = 0xFF25; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Katakana = 0xFF26; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hiragana_Katakana = 0xFF27; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zenkaku = 0xFF28; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hankaku = 0xFF29; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zenkaku_Hankaku = 0xFF2A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Touroku = 0xFF2B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Massyo = 0xFF2C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Kana_Lock = 0xFF2D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Kana_Shift = 0xFF2E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eisu_Shift = 0xFF2F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eisu_toggle = 0xFF30; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Kanji_Bangou = 0xFF37; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zen_Koho = 0xFF3D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Mae_Koho = 0xFF3E; /* Cursor control & motion */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Home = 0xFF50; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Left = 0xFF51; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Up = 0xFF52; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Right = 0xFF53; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Down = 0xFF54; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Prior = 0xFF55; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Page_Up = 0xFF55; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Next = 0xFF56; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Page_Down = 0xFF56; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_End = 0xFF57; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Begin = 0xFF58; /* Misc Functions */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Select = 0xFF60; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Print = 0xFF61; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Execute = 0xFF62; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Insert = 0xFF63; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Undo = 0xFF65; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Redo = 0xFF66; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Menu = 0xFF67; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Find = 0xFF68; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cancel = 0xFF69; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Help = 0xFF6A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Break = 0xFF6B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Mode_switch = 0xFF7E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Num_Lock = 0xFF7F; /* Keypad */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Space = 0xFF80; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Tab = 0xFF89; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Enter = 0xFF8D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_F1 = 0xFF91; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_F2 = 0xFF92; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_F3 = 0xFF93; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_F4 = 0xFF94; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Home = 0xFF95; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Left = 0xFF96; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Up = 0xFF97; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Right = 0xFF98; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Down = 0xFF99; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Prior = 0xFF9A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Page_Up = 0xFF9A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Next = 0xFF9B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Page_Down = 0xFF9B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_End = 0xFF9C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Begin = 0xFF9D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Insert = 0xFF9E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Delete = 0xFF9F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Equal = 0xFFBD; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Multiply = 0xFFAA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Add = 0xFFAB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Separator = 0xFFAC; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Subtract = 0xFFAD; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Decimal = 0xFFAE; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_Divide = 0xFFAF; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_0 = 0xFFB0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_1 = 0xFFB1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_2 = 0xFFB2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_3 = 0xFFB3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_4 = 0xFFB4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_5 = 0xFFB5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_6 = 0xFFB6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_7 = 0xFFB7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_8 = 0xFFB8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_KP_9 = 0xFFB9; /* Auxilliary Functions */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F1 = 0xFFBE; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F2 = 0xFFBF; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F3 = 0xFFC0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F4 = 0xFFC1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F5 = 0xFFC2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F6 = 0xFFC3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F7 = 0xFFC4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F8 = 0xFFC5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F9 = 0xFFC6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F10 = 0xFFC7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F11 = 0xFFC8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F12 = 0xFFC9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F13 = 0xFFCA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F14 = 0xFFCB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F15 = 0xFFCC; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F16 = 0xFFCD; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F17 = 0xFFCE; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F18 = 0xFFCF; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F19 = 0xFFD0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F20 = 0xFFD1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F21 = 0xFFD2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F22 = 0xFFD3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F23 = 0xFFD4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F24 = 0xFFD5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F25 = 0xFFD6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F26 = 0xFFD7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F27 = 0xFFD8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F28 = 0xFFD9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F29 = 0xFFDA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F30 = 0xFFDB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F31 = 0xFFDC; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F32 = 0xFFDD; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F33 = 0xFFDE; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F34 = 0xFFDF; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F35 = 0xFFE0; /* modifier keys */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Shift_L = 0xFFE1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Shift_R = 0xFFE2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Control_L = 0xFFE3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Control_R = 0xFFE4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Caps_Lock = 0xFFE5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Shift_Lock = 0xFFE6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Meta_L = 0xFFE7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Meta_R = 0xFFE8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Alt_L = 0xFFE9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Alt_R = 0xFFEA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Super_L = 0xFFEB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Super_R = 0xFFEC; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hyper_L = 0xFFED; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hyper_R = 0xFFEE; /* * ISO 9995 Function and Modifier Keys * Byte 3 = 0xFE */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Lock = 0xFE01; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Level2_Latch = 0xFE02; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Level3_Shift = 0xFE03; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Level3_Latch = 0xFE04; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Level3_Lock = 0xFE05; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Group_Shift = 0xFF7E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Group_Latch = 0xFE06; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Group_Lock = 0xFE07; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Next_Group = 0xFE08; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Next_Group_Lock = 0xFE09; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Prev_Group = 0xFE0A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Prev_Group_Lock = 0xFE0B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_First_Group = 0xFE0C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_First_Group_Lock = 0xFE0D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Last_Group = 0xFE0E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Last_Group_Lock = 0xFE0F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Left_Tab = 0xFE20; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Move_Line_Up = 0xFE21; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Move_Line_Down = 0xFE22; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Partial_Line_Up = 0xFE23; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Partial_Line_Down = 0xFE24; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Partial_Space_Left = 0xFE25; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Partial_Space_Right = 0xFE26; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Set_Margin_Left = 0xFE27; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Set_Margin_Right = 0xFE28; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Release_Margin_Left = 0xFE29; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Release_Margin_Right = 0xFE2A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Release_Both_Margins = 0xFE2B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Fast_Cursor_Left = 0xFE2C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Fast_Cursor_Right = 0xFE2D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Fast_Cursor_Up = 0xFE2E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Fast_Cursor_Down = 0xFE2F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Continuous_Underline = 0xFE30; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Discontinuous_Underline = 0xFE31; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Emphasize = 0xFE32; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Center_Object = 0xFE33; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ISO_Enter = 0xFE34; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_grave = 0xFE50; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_acute = 0xFE51; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_circumflex = 0xFE52; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_tilde = 0xFE53; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_macron = 0xFE54; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_breve = 0xFE55; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_abovedot = 0xFE56; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_diaeresis = 0xFE57; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_abovering = 0xFE58; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_doubleacute = 0xFE59; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_caron = 0xFE5A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_cedilla = 0xFE5B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_ogonek = 0xFE5C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_iota = 0xFE5D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_voiced_sound = 0xFE5E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_semivoiced_sound = 0xFE5F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_belowdot = 0xFE60; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_hook = 0xFE61; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dead_horn = 0xFE62; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_First_Virtual_Screen = 0xFED0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Prev_Virtual_Screen = 0xFED1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Next_Virtual_Screen = 0xFED2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Last_Virtual_Screen = 0xFED4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Terminate_Server = 0xFED5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_AccessX_Enable = 0xFE70; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_AccessX_Feedback_Enable = 0xFE71; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_RepeatKeys_Enable = 0xFE72; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_SlowKeys_Enable = 0xFE73; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_BounceKeys_Enable = 0xFE74; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_StickyKeys_Enable = 0xFE75; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_MouseKeys_Enable = 0xFE76; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_MouseKeys_Accel_Enable = 0xFE77; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Overlay1_Enable = 0xFE78; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Overlay2_Enable = 0xFE79; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_AudibleBell_Enable = 0xFE7A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Left = 0xFEE0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Right = 0xFEE1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Up = 0xFEE2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Down = 0xFEE3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_UpLeft = 0xFEE4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_UpRight = 0xFEE5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DownLeft = 0xFEE6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DownRight = 0xFEE7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button_Dflt = 0xFEE8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button1 = 0xFEE9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button2 = 0xFEEA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button3 = 0xFEEB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button4 = 0xFEEC; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Button5 = 0xFEED; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick_Dflt = 0xFEEE; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick1 = 0xFEEF; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick2 = 0xFEF0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick3 = 0xFEF1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick4 = 0xFEF2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DblClick5 = 0xFEF3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag_Dflt = 0xFEF4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag1 = 0xFEF5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag2 = 0xFEF6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag3 = 0xFEF7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag4 = 0xFEF8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Drag5 = 0xFEFD; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_EnableKeys = 0xFEF9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_Accelerate = 0xFEFA; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DfltBtnNext = 0xFEFB; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pointer_DfltBtnPrev = 0xFEFC; /* * 3270 Terminal Keys * Byte 3 = 0xFD */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Duplicate = 0xFD01; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_FieldMark = 0xFD02; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Right2 = 0xFD03; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Left2 = 0xFD04; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_BackTab = 0xFD05; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_EraseEOF = 0xFD06; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_EraseInput = 0xFD07; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Reset = 0xFD08; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Quit = 0xFD09; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_PA1 = 0xFD0A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_PA2 = 0xFD0B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_PA3 = 0xFD0C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Test = 0xFD0D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Attn = 0xFD0E; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_CursorBlink = 0xFD0F; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_AltCursor = 0xFD10; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_KeyClick = 0xFD11; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Jump = 0xFD12; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Ident = 0xFD13; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Rule = 0xFD14; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Copy = 0xFD15; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Play = 0xFD16; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Setup = 0xFD17; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Record = 0xFD18; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_ChangeScreen = 0xFD19; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_DeleteWord = 0xFD1A; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_ExSelect = 0xFD1B; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_CursorSelect = 0xFD1C; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_PrintScreen = 0xFD1D; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3270_Enter = 0xFD1E; /* Latin 1 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_space = 0x020; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_exclam = 0x021; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_quotedbl = 0x022; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_numbersign = 0x023; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dollar = 0x024; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_percent = 0x025; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ampersand = 0x026; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_apostrophe = 0x027; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_quoteright = 0x027; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_parenleft = 0x028; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_parenright = 0x029; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_asterisk = 0x02a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_plus = 0x02b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_comma = 0x02c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_minus = 0x02d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_period = 0x02e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_slash = 0x02f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_0 = 0x030; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_1 = 0x031; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_2 = 0x032; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_3 = 0x033; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_4 = 0x034; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_5 = 0x035; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_6 = 0x036; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_7 = 0x037; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_8 = 0x038; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_9 = 0x039; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_colon = 0x03a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_semicolon = 0x03b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_less = 0x03c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_equal = 0x03d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_greater = 0x03e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_question = 0x03f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_at = 0x040; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_A = 0x041; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_B = 0x042; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_C = 0x043; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_D = 0x044; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_E = 0x045; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_F = 0x046; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_G = 0x047; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_H = 0x048; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_I = 0x049; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_J = 0x04a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_K = 0x04b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_L = 0x04c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_M = 0x04d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_N = 0x04e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_O = 0x04f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_P = 0x050; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Q = 0x051; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_R = 0x052; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_S = 0x053; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_T = 0x054; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_U = 0x055; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_V = 0x056; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_W = 0x057; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_X = 0x058; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Y = 0x059; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Z = 0x05a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_bracketleft = 0x05b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_backslash = 0x05c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_bracketright = 0x05d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_asciicircum = 0x05e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_underscore = 0x05f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_grave = 0x060; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_a = 0x061; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_b = 0x062; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_c = 0x063; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_d = 0x064; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_e = 0x065; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_f = 0x066; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_g = 0x067; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_h = 0x068; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_i = 0x069; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_j = 0x06a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_k = 0x06b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_l = 0x06c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_m = 0x06d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_n = 0x06e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_o = 0x06f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_p = 0x070; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_q = 0x071; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_r = 0x072; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_s = 0x073; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_t = 0x074; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_u = 0x075; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_v = 0x076; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_w = 0x077; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_x = 0x078; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_y = 0x079; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_z = 0x07a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_braceleft = 0x07b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_bar = 0x07c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_braceright = 0x07d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_asciitilde = 0x07e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_nobreakspace = 0x0a0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_exclamdown = 0x0a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cent = 0x0a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_sterling = 0x0a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_currency = 0x0a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_yen = 0x0a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_brokenbar = 0x0a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_section = 0x0a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_diaeresis = 0x0a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_copyright = 0x0a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ordfeminine = 0x0aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_guillemotleft = 0x0ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_notsign = 0x0ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hyphen = 0x0ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_registered = 0x0ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_macron = 0x0af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_degree = 0x0b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_plusminus = 0x0b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_twosuperior = 0x0b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_threesuperior = 0x0b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acute = 0x0b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_mu = 0x0b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_paragraph = 0x0b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_periodcentered = 0x0b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cedilla = 0x0b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onesuperior = 0x0b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_masculine = 0x0ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_guillemotright = 0x0bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onequarter = 0x0bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onehalf = 0x0bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_threequarters = 0x0be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_questiondown = 0x0bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Agrave = 0x0c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Aacute = 0x0c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflex = 0x0c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Atilde = 0x0c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Adiaeresis = 0x0c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Aring = 0x0c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_AE = 0x0c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ccedilla = 0x0c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Egrave = 0x0c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eacute = 0x0c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflex = 0x0ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ediaeresis = 0x0cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Igrave = 0x0cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Iacute = 0x0cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Icircumflex = 0x0ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Idiaeresis = 0x0cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ETH = 0x0d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eth = 0x0d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ntilde = 0x0d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ograve = 0x0d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Oacute = 0x0d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflex = 0x0d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Otilde = 0x0d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Odiaeresis = 0x0d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_multiply = 0x0d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ooblique = 0x0d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Oslash = 0x0d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ugrave = 0x0d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uacute = 0x0da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ucircumflex = 0x0db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Udiaeresis = 0x0dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Yacute = 0x0dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_THORN = 0x0de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thorn = 0x0de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ssharp = 0x0df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_agrave = 0x0e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_aacute = 0x0e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflex = 0x0e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_atilde = 0x0e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_adiaeresis = 0x0e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_aring = 0x0e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ae = 0x0e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ccedilla = 0x0e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_egrave = 0x0e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_eacute = 0x0e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflex = 0x0ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ediaeresis = 0x0eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_igrave = 0x0ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_iacute = 0x0ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_icircumflex = 0x0ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_idiaeresis = 0x0ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_eth = 0x0f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ntilde = 0x0f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ograve = 0x0f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_oacute = 0x0f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflex = 0x0f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_otilde = 0x0f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_odiaeresis = 0x0f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_division = 0x0f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_oslash = 0x0f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ooblique = 0x0f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ugrave = 0x0f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uacute = 0x0fa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ucircumflex = 0x0fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_udiaeresis = 0x0fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_yacute = 0x0fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_thorn = 0x0fe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ydiaeresis = 0x0ff; /* * Latin 2 * Byte 3 = 1 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Aogonek = 0x1a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_breve = 0x1a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lstroke = 0x1a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lcaron = 0x1a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Sacute = 0x1a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Scaron = 0x1a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Scedilla = 0x1aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Tcaron = 0x1ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zacute = 0x1ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zcaron = 0x1ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zabovedot = 0x1af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_aogonek = 0x1b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ogonek = 0x1b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lstroke = 0x1b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lcaron = 0x1b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_sacute = 0x1b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_caron = 0x1b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_scaron = 0x1b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_scedilla = 0x1ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_tcaron = 0x1bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_zacute = 0x1bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_doubleacute = 0x1bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_zcaron = 0x1be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_zabovedot = 0x1bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Racute = 0x1c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abreve = 0x1c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lacute = 0x1c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cacute = 0x1c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ccaron = 0x1c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eogonek = 0x1ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecaron = 0x1cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Dcaron = 0x1cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Dstroke = 0x1d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Nacute = 0x1d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ncaron = 0x1d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Odoubleacute = 0x1d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Rcaron = 0x1d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uring = 0x1d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Udoubleacute = 0x1db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Tcedilla = 0x1de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_racute = 0x1e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abreve = 0x1e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lacute = 0x1e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cacute = 0x1e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ccaron = 0x1e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_eogonek = 0x1ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecaron = 0x1ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dcaron = 0x1ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dstroke = 0x1f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_nacute = 0x1f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ncaron = 0x1f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_odoubleacute = 0x1f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_udoubleacute = 0x1fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rcaron = 0x1f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uring = 0x1f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_tcedilla = 0x1fe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abovedot = 0x1ff; /* * Latin 3 * Byte 3 = 2 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hstroke = 0x2a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hcircumflex = 0x2a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Iabovedot = 0x2a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gbreve = 0x2ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Jcircumflex = 0x2ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hstroke = 0x2b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hcircumflex = 0x2b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_idotless = 0x2b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gbreve = 0x2bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_jcircumflex = 0x2bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cabovedot = 0x2c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ccircumflex = 0x2c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gabovedot = 0x2d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gcircumflex = 0x2d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ubreve = 0x2dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Scircumflex = 0x2de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cabovedot = 0x2e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ccircumflex = 0x2e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gabovedot = 0x2f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gcircumflex = 0x2f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ubreve = 0x2fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_scircumflex = 0x2fe; /* * Latin 4 * Byte 3 = 3 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kra = 0x3a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kappa = 0x3a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Rcedilla = 0x3a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Itilde = 0x3a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lcedilla = 0x3a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Emacron = 0x3aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gcedilla = 0x3ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Tslash = 0x3ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rcedilla = 0x3b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_itilde = 0x3b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lcedilla = 0x3b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emacron = 0x3ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gcedilla = 0x3bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_tslash = 0x3bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ENG = 0x3bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_eng = 0x3bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Amacron = 0x3c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Iogonek = 0x3c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Eabovedot = 0x3cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Imacron = 0x3cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ncedilla = 0x3d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Omacron = 0x3d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Kcedilla = 0x3d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uogonek = 0x3d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Utilde = 0x3dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Umacron = 0x3de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_amacron = 0x3e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_iogonek = 0x3e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_eabovedot = 0x3ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_imacron = 0x3ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ncedilla = 0x3f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_omacron = 0x3f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kcedilla = 0x3f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uogonek = 0x3f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_utilde = 0x3fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_umacron = 0x3fe; /* * Latin-8 * Byte 3 = 18 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Babovedot = 0x12a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_babovedot = 0x12a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Dabovedot = 0x12a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Wgrave = 0x12a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Wacute = 0x12aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dabovedot = 0x12ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ygrave = 0x12ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Fabovedot = 0x12b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_fabovedot = 0x12b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Mabovedot = 0x12b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_mabovedot = 0x12b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Pabovedot = 0x12b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_wgrave = 0x12b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_pabovedot = 0x12b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_wacute = 0x12ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Sabovedot = 0x12bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ygrave = 0x12bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Wdiaeresis = 0x12bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_wdiaeresis = 0x12be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_sabovedot = 0x12bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Wcircumflex = 0x12d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Tabovedot = 0x12d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ycircumflex = 0x12de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_wcircumflex = 0x12f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_tabovedot = 0x12f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ycircumflex = 0x12fe; /* * Latin-9 (a.k.a.Latin-0) * Byte 3 = 19 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_OE = 0x13bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_oe = 0x13bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ydiaeresis = 0x13be; /* * Katakana * Byte 3 = 4 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_overline = 0x47e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_fullstop = 0x4a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_openingbracket = 0x4a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_closingbracket = 0x4a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_comma = 0x4a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_conjunctive = 0x4a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_middledot = 0x4a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_WO = 0x4a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_a = 0x4a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_i = 0x4a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_u = 0x4a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_e = 0x4aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_o = 0x4ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_ya = 0x4ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_yu = 0x4ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_yo = 0x4ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_tsu = 0x4af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_tu = 0x4af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_prolongedsound = 0x4b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_A = 0x4b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_I = 0x4b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_U = 0x4b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_E = 0x4b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_O = 0x4b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_KA = 0x4b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_KI = 0x4b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_KU = 0x4b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_KE = 0x4b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_KO = 0x4ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_SA = 0x4bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_SHI = 0x4bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_SU = 0x4bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_SE = 0x4be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_SO = 0x4bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TA = 0x4c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_CHI = 0x4c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TI = 0x4c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TSU = 0x4c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TU = 0x4c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TE = 0x4c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_TO = 0x4c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_NA = 0x4c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_NI = 0x4c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_NU = 0x4c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_NE = 0x4c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_NO = 0x4c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_HA = 0x4ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_HI = 0x4cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_FU = 0x4cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_HU = 0x4cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_HE = 0x4cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_HO = 0x4ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_MA = 0x4cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_MI = 0x4d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_MU = 0x4d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_ME = 0x4d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_MO = 0x4d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_YA = 0x4d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_YU = 0x4d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_YO = 0x4d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_RA = 0x4d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_RI = 0x4d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_RU = 0x4d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_RE = 0x4da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_RO = 0x4db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_WA = 0x4dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_N = 0x4dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_voicedsound = 0x4de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_semivoicedsound = 0x4df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_kana_switch = 0xFF7E; /* * Arabic * Byte 3 = 5 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_0 = 0x590; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_1 = 0x591; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_2 = 0x592; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_3 = 0x593; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_4 = 0x594; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_5 = 0x595; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_6 = 0x596; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_7 = 0x597; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_8 = 0x598; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_9 = 0x599; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_percent = 0x5a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_superscript_alef = 0x5a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_tteh = 0x5a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_peh = 0x5a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_tcheh = 0x5a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_ddal = 0x5aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_rreh = 0x5ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_comma = 0x5ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_fullstop = 0x5ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_0 = 0x5b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_1 = 0x5b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_2 = 0x5b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_3 = 0x5b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_4 = 0x5b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_5 = 0x5b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_6 = 0x5b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_7 = 0x5b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_8 = 0x5b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_9 = 0x5b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_semicolon = 0x5bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_question_mark = 0x5bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamza = 0x5c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_maddaonalef = 0x5c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamzaonalef = 0x5c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamzaonwaw = 0x5c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamzaunderalef = 0x5c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamzaonyeh = 0x5c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_alef = 0x5c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_beh = 0x5c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_tehmarbuta = 0x5c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_teh = 0x5ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_theh = 0x5cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_jeem = 0x5cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hah = 0x5cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_khah = 0x5ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_dal = 0x5cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_thal = 0x5d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_ra = 0x5d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_zain = 0x5d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_seen = 0x5d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_sheen = 0x5d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_sad = 0x5d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_dad = 0x5d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_tah = 0x5d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_zah = 0x5d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_ain = 0x5d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_ghain = 0x5da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_tatweel = 0x5e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_feh = 0x5e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_qaf = 0x5e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_kaf = 0x5e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_lam = 0x5e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_meem = 0x5e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_noon = 0x5e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_ha = 0x5e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_heh = 0x5e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_waw = 0x5e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_alefmaksura = 0x5e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_yeh = 0x5ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_fathatan = 0x5eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_dammatan = 0x5ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_kasratan = 0x5ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_fatha = 0x5ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_damma = 0x5ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_kasra = 0x5f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_shadda = 0x5f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_sukun = 0x5f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_madda_above = 0x5f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamza_above = 0x5f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_hamza_below = 0x5f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_jeh = 0x5f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_veh = 0x5f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_keheh = 0x5f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_gaf = 0x5f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_noon_ghunna = 0x5fa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_heh_doachashmee = 0x5fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Farsi_yeh = 0x5fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_farsi_yeh = 0x5fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_yeh_baree = 0x5fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_heh_goal = 0x5fe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Arabic_switch = 0xFF7E; /* * Cyrillic * Byte 3 = 6 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_GHE_bar = 0x680; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ghe_bar = 0x690; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ZHE_descender = 0x681; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_zhe_descender = 0x691; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_KA_descender = 0x682; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ka_descender = 0x692; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_KA_vertstroke = 0x683; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ka_vertstroke = 0x693; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_EN_descender = 0x684; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_en_descender = 0x694; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_U_straight = 0x685; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_u_straight = 0x695; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_U_straight_bar = 0x686; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_u_straight_bar = 0x696; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_HA_descender = 0x687; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ha_descender = 0x697; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_CHE_descender = 0x688; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_che_descender = 0x698; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_CHE_vertstroke = 0x689; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_che_vertstroke = 0x699; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SHHA = 0x68a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_shha = 0x69a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SCHWA = 0x68c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_schwa = 0x69c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_I_macron = 0x68d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_i_macron = 0x69d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_O_bar = 0x68e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_o_bar = 0x69e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_U_macron = 0x68f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_u_macron = 0x69f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_dje = 0x6a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_gje = 0x6a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_io = 0x6a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_ie = 0x6a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_je = 0x6a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_dse = 0x6a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_i = 0x6a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_i = 0x6a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_yi = 0x6a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_yi = 0x6a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_je = 0x6a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_je = 0x6a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_lje = 0x6a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_lje = 0x6a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_nje = 0x6aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_nje = 0x6aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_tshe = 0x6ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_kje = 0x6ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_ghe_with_upturn = 0x6ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Byelorussian_shortu = 0x6ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_dzhe = 0x6af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_dze = 0x6af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_numerosign = 0x6b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_DJE = 0x6b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_GJE = 0x6b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_IO = 0x6b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_IE = 0x6b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_JE = 0x6b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_DSE = 0x6b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_I = 0x6b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_I = 0x6b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_YI = 0x6b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukranian_YI = 0x6b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_JE = 0x6b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_JE = 0x6b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_LJE = 0x6b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_LJE = 0x6b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_NJE = 0x6ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_NJE = 0x6ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_TSHE = 0x6bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Macedonia_KJE = 0x6bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ukrainian_GHE_WITH_UPTURN = 0x6bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Byelorussian_SHORTU = 0x6be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_DZHE = 0x6bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Serbian_DZE = 0x6bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_yu = 0x6c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_a = 0x6c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_be = 0x6c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_tse = 0x6c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_de = 0x6c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ie = 0x6c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ef = 0x6c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ghe = 0x6c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ha = 0x6c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_i = 0x6c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_shorti = 0x6ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ka = 0x6cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_el = 0x6cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_em = 0x6cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_en = 0x6ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_o = 0x6cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_pe = 0x6d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ya = 0x6d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_er = 0x6d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_es = 0x6d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_te = 0x6d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_u = 0x6d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_zhe = 0x6d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ve = 0x6d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_softsign = 0x6d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_yeru = 0x6d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ze = 0x6da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_sha = 0x6db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_e = 0x6dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_shcha = 0x6dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_che = 0x6de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_hardsign = 0x6df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_YU = 0x6e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_A = 0x6e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_BE = 0x6e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_TSE = 0x6e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_DE = 0x6e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_IE = 0x6e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_EF = 0x6e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_GHE = 0x6e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_HA = 0x6e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_I = 0x6e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SHORTI = 0x6ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_KA = 0x6eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_EL = 0x6ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_EM = 0x6ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_EN = 0x6ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_O = 0x6ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_PE = 0x6f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_YA = 0x6f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ER = 0x6f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ES = 0x6f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_TE = 0x6f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_U = 0x6f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ZHE = 0x6f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_VE = 0x6f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SOFTSIGN = 0x6f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_YERU = 0x6f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_ZE = 0x6fa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SHA = 0x6fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_E = 0x6fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_SHCHA = 0x6fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_CHE = 0x6fe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Cyrillic_HARDSIGN = 0x6ff; /* * Greek * Byte 3 = 7 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_ALPHAaccent = 0x7a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_EPSILONaccent = 0x7a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_ETAaccent = 0x7a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_IOTAaccent = 0x7a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_IOTAdieresis = 0x7a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_IOTAdiaeresis = 0x7a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_OMICRONaccent = 0x7a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_UPSILONaccent = 0x7a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_UPSILONdieresis = 0x7a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_OMEGAaccent = 0x7ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_accentdieresis = 0x7ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_horizbar = 0x7af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_alphaaccent = 0x7b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_epsilonaccent = 0x7b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_etaaccent = 0x7b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_iotaaccent = 0x7b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_iotadieresis = 0x7b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_iotaaccentdieresis = 0x7b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_omicronaccent = 0x7b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_upsilonaccent = 0x7b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_upsilondieresis = 0x7b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_upsilonaccentdieresis = 0x7ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_omegaaccent = 0x7bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_ALPHA = 0x7c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_BETA = 0x7c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_GAMMA = 0x7c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_DELTA = 0x7c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_EPSILON = 0x7c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_ZETA = 0x7c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_ETA = 0x7c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_THETA = 0x7c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_IOTA = 0x7c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_KAPPA = 0x7ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_LAMDA = 0x7cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_LAMBDA = 0x7cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_MU = 0x7cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_NU = 0x7cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_XI = 0x7ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_OMICRON = 0x7cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_PI = 0x7d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_RHO = 0x7d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_SIGMA = 0x7d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_TAU = 0x7d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_UPSILON = 0x7d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_PHI = 0x7d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_CHI = 0x7d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_PSI = 0x7d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_OMEGA = 0x7d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_alpha = 0x7e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_beta = 0x7e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_gamma = 0x7e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_delta = 0x7e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_epsilon = 0x7e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_zeta = 0x7e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_eta = 0x7e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_theta = 0x7e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_iota = 0x7e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_kappa = 0x7ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_lamda = 0x7eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_lambda = 0x7eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_mu = 0x7ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_nu = 0x7ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_xi = 0x7ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_omicron = 0x7ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_pi = 0x7f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_rho = 0x7f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_sigma = 0x7f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_finalsmallsigma = 0x7f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_tau = 0x7f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_upsilon = 0x7f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_phi = 0x7f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_chi = 0x7f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_psi = 0x7f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_omega = 0x7f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Greek_switch = 0xFF7E; /* * Technical * Byte 3 = 8 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftradical = 0x8a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topleftradical = 0x8a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizconnector = 0x8a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topintegral = 0x8a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botintegral = 0x8a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_vertconnector = 0x8a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topleftsqbracket = 0x8a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botleftsqbracket = 0x8a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_toprightsqbracket = 0x8a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botrightsqbracket = 0x8aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topleftparens = 0x8ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botleftparens = 0x8ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_toprightparens = 0x8ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botrightparens = 0x8ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftmiddlecurlybrace = 0x8af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightmiddlecurlybrace = 0x8b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topleftsummation = 0x8b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botleftsummation = 0x8b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topvertsummationconnector = 0x8b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botvertsummationconnector = 0x8b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_toprightsummation = 0x8b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_botrightsummation = 0x8b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightmiddlesummation = 0x8b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lessthanequal = 0x8bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_notequal = 0x8bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_greaterthanequal = 0x8be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_integral = 0x8bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_therefore = 0x8c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_variation = 0x8c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_infinity = 0x8c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_nabla = 0x8c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_approximate = 0x8c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_similarequal = 0x8c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ifonlyif = 0x8cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_implies = 0x8ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_identical = 0x8cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_radical = 0x8d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_includedin = 0x8da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_includes = 0x8db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_intersection = 0x8dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_union = 0x8dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_logicaland = 0x8de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_logicalor = 0x8df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_partialderivative = 0x8ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_function = 0x8f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftarrow = 0x8fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uparrow = 0x8fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightarrow = 0x8fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_downarrow = 0x8fe; /* * Special * Byte 3 = 9 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_blank = 0x9df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_soliddiamond = 0x9e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_checkerboard = 0x9e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ht = 0x9e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ff = 0x9e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cr = 0x9e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lf = 0x9e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_nl = 0x9e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_vt = 0x9e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lowrightcorner = 0x9ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uprightcorner = 0x9eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_upleftcorner = 0x9ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lowleftcorner = 0x9ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_crossinglines = 0x9ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizlinescan1 = 0x9ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizlinescan3 = 0x9f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizlinescan5 = 0x9f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizlinescan7 = 0x9f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_horizlinescan9 = 0x9f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftt = 0x9f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightt = 0x9f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_bott = 0x9f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_topt = 0x9f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_vertbar = 0x9f8; /* * Publishing * Byte 3 = a */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emspace = 0xaa1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_enspace = 0xaa2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_em3space = 0xaa3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_em4space = 0xaa4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_digitspace = 0xaa5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_punctspace = 0xaa6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_thinspace = 0xaa7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hairspace = 0xaa8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emdash = 0xaa9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_endash = 0xaaa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_signifblank = 0xaac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ellipsis = 0xaae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_doubbaselinedot = 0xaaf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onethird = 0xab0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_twothirds = 0xab1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onefifth = 0xab2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_twofifths = 0xab3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_threefifths = 0xab4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_fourfifths = 0xab5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_onesixth = 0xab6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_fivesixths = 0xab7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_careof = 0xab8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_figdash = 0xabb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftanglebracket = 0xabc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_decimalpoint = 0xabd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightanglebracket = 0xabe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_marker = 0xabf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_oneeighth = 0xac3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_threeeighths = 0xac4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_fiveeighths = 0xac5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_seveneighths = 0xac6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_trademark = 0xac9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_signaturemark = 0xaca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_trademarkincircle = 0xacb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftopentriangle = 0xacc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightopentriangle = 0xacd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emopencircle = 0xace; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emopenrectangle = 0xacf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftsinglequotemark = 0xad0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightsinglequotemark = 0xad1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftdoublequotemark = 0xad2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightdoublequotemark = 0xad3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_prescription = 0xad4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_minutes = 0xad6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_seconds = 0xad7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_latincross = 0xad9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hexagram = 0xada; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_filledrectbullet = 0xadb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_filledlefttribullet = 0xadc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_filledrighttribullet = 0xadd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emfilledcircle = 0xade; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_emfilledrect = 0xadf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_enopencircbullet = 0xae0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_enopensquarebullet = 0xae1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_openrectbullet = 0xae2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_opentribulletup = 0xae3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_opentribulletdown = 0xae4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_openstar = 0xae5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_enfilledcircbullet = 0xae6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_enfilledsqbullet = 0xae7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_filledtribulletup = 0xae8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_filledtribulletdown = 0xae9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftpointer = 0xaea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightpointer = 0xaeb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_club = 0xaec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_diamond = 0xaed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_heart = 0xaee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_maltesecross = 0xaf0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_dagger = 0xaf1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_doubledagger = 0xaf2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_checkmark = 0xaf3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ballotcross = 0xaf4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_musicalsharp = 0xaf5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_musicalflat = 0xaf6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_malesymbol = 0xaf7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_femalesymbol = 0xaf8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_telephone = 0xaf9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_telephonerecorder = 0xafa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_phonographcopyright = 0xafb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_caret = 0xafc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_singlelowquotemark = 0xafd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_doublelowquotemark = 0xafe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_cursor = 0xaff; /* * APL * Byte 3 = b */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftcaret = 0xba3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightcaret = 0xba6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_downcaret = 0xba8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_upcaret = 0xba9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_overbar = 0xbc0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_downtack = 0xbc2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_upshoe = 0xbc3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_downstile = 0xbc4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_underbar = 0xbc6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_jot = 0xbca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_quad = 0xbcc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uptack = 0xbce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_circle = 0xbcf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_upstile = 0xbd3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_downshoe = 0xbd6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_rightshoe = 0xbd8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_leftshoe = 0xbda; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lefttack = 0xbdc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_righttack = 0xbfc; /* * Hebrew * Byte 3 = c */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_doublelowline = 0xcdf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_aleph = 0xce0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_bet = 0xce1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_beth = 0xce1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_gimel = 0xce2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_gimmel = 0xce2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_dalet = 0xce3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_daleth = 0xce3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_he = 0xce4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_waw = 0xce5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_zain = 0xce6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_zayin = 0xce6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_chet = 0xce7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_het = 0xce7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_tet = 0xce8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_teth = 0xce8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_yod = 0xce9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalkaph = 0xcea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_kaph = 0xceb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_lamed = 0xcec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalmem = 0xced; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_mem = 0xcee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalnun = 0xcef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_nun = 0xcf0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_samech = 0xcf1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_samekh = 0xcf1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_ayin = 0xcf2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalpe = 0xcf3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_pe = 0xcf4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalzade = 0xcf5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_finalzadi = 0xcf5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_zade = 0xcf6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_zadi = 0xcf6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_qoph = 0xcf7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_kuf = 0xcf7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_resh = 0xcf8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_shin = 0xcf9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_taw = 0xcfa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_hebrew_taf = 0xcfa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hebrew_switch = 0xFF7E; /* * Thai * Byte 3 = d */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_kokai = 0xda1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_khokhai = 0xda2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_khokhuat = 0xda3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_khokhwai = 0xda4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_khokhon = 0xda5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_khorakhang = 0xda6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_ngongu = 0xda7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_chochan = 0xda8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_choching = 0xda9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_chochang = 0xdaa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_soso = 0xdab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_chochoe = 0xdac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_yoying = 0xdad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_dochada = 0xdae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_topatak = 0xdaf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thothan = 0xdb0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thonangmontho = 0xdb1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thophuthao = 0xdb2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_nonen = 0xdb3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_dodek = 0xdb4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_totao = 0xdb5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thothung = 0xdb6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thothahan = 0xdb7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thothong = 0xdb8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_nonu = 0xdb9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_bobaimai = 0xdba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_popla = 0xdbb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_phophung = 0xdbc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_fofa = 0xdbd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_phophan = 0xdbe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_fofan = 0xdbf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_phosamphao = 0xdc0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_moma = 0xdc1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_yoyak = 0xdc2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_rorua = 0xdc3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_ru = 0xdc4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_loling = 0xdc5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lu = 0xdc6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_wowaen = 0xdc7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sosala = 0xdc8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sorusi = 0xdc9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sosua = 0xdca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_hohip = 0xdcb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lochula = 0xdcc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_oang = 0xdcd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_honokhuk = 0xdce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_paiyannoi = 0xdcf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraa = 0xdd0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maihanakat = 0xdd1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraaa = 0xdd2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraam = 0xdd3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarai = 0xdd4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraii = 0xdd5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraue = 0xdd6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarauee = 0xdd7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarau = 0xdd8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarauu = 0xdd9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_phinthu = 0xdda; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maihanakat_maitho = 0xdde; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_baht = 0xddf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarae = 0xde0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraae = 0xde1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_sarao = 0xde2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraaimaimuan = 0xde3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_saraaimaimalai = 0xde4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lakkhangyao = 0xde5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maiyamok = 0xde6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maitaikhu = 0xde7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maiek = 0xde8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maitho = 0xde9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maitri = 0xdea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_maichattawa = 0xdeb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_thanthakhat = 0xdec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_nikhahit = 0xded; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_leksun = 0xdf0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_leknung = 0xdf1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_leksong = 0xdf2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_leksam = 0xdf3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_leksi = 0xdf4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lekha = 0xdf5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lekhok = 0xdf6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lekchet = 0xdf7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lekpaet = 0xdf8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Thai_lekkao = 0xdf9; /* * Korean * Byte 3 = e */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul = 0xff31; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Start = 0xff32; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_End = 0xff33; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Hanja = 0xff34; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Jamo = 0xff35; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Romaja = 0xff36; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Codeinput = 0xff37; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Jeonja = 0xff38; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Banja = 0xff39; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_PreHanja = 0xff3a; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_PostHanja = 0xff3b; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SingleCandidate = 0xff3c; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_MultipleCandidate = 0xff3d; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_PreviousCandidate = 0xff3e; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Special = 0xff3f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_switch = 0xFF7E; /* Hangul Consonant Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Kiyeog = 0xea1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SsangKiyeog = 0xea2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_KiyeogSios = 0xea3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Nieun = 0xea4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_NieunJieuj = 0xea5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_NieunHieuh = 0xea6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Dikeud = 0xea7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SsangDikeud = 0xea8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Rieul = 0xea9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulKiyeog = 0xeaa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulMieum = 0xeab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulPieub = 0xeac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulSios = 0xead; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulTieut = 0xeae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulPhieuf = 0xeaf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulHieuh = 0xeb0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Mieum = 0xeb1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Pieub = 0xeb2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SsangPieub = 0xeb3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_PieubSios = 0xeb4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Sios = 0xeb5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SsangSios = 0xeb6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Ieung = 0xeb7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Jieuj = 0xeb8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SsangJieuj = 0xeb9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Cieuc = 0xeba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Khieuq = 0xebb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Tieut = 0xebc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Phieuf = 0xebd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_Hieuh = 0xebe; /* Hangul Vowel Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_A = 0xebf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_AE = 0xec0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YA = 0xec1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YAE = 0xec2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_EO = 0xec3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_E = 0xec4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YEO = 0xec5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YE = 0xec6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_O = 0xec7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_WA = 0xec8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_WAE = 0xec9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_OE = 0xeca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YO = 0xecb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_U = 0xecc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_WEO = 0xecd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_WE = 0xece; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_WI = 0xecf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YU = 0xed0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_EU = 0xed1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YI = 0xed2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_I = 0xed3; /* Hangul syllable-final (JongSeong) Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Kiyeog = 0xed4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_SsangKiyeog = 0xed5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_KiyeogSios = 0xed6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Nieun = 0xed7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_NieunJieuj = 0xed8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_NieunHieuh = 0xed9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Dikeud = 0xeda; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Rieul = 0xedb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulKiyeog = 0xedc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulMieum = 0xedd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulPieub = 0xede; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulSios = 0xedf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulTieut = 0xee0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulPhieuf = 0xee1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_RieulHieuh = 0xee2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Mieum = 0xee3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Pieub = 0xee4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_PieubSios = 0xee5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Sios = 0xee6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_SsangSios = 0xee7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Ieung = 0xee8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Jieuj = 0xee9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Cieuc = 0xeea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Khieuq = 0xeeb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Tieut = 0xeec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Phieuf = 0xeed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_Hieuh = 0xeee; /* Ancient Hangul Consonant Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_RieulYeorinHieuh = 0xeef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SunkyeongeumMieum = 0xef0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SunkyeongeumPieub = 0xef1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_PanSios = 0xef2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_KkogjiDalrinIeung = 0xef3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_SunkyeongeumPhieuf = 0xef4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_YeorinHieuh = 0xef5; /* Ancient Hangul Vowel Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_AraeA = 0xef6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_AraeAE = 0xef7; /* Ancient Hangul syllable-final (JongSeong) Characters */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_PanSios = 0xef8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_KkogjiDalrinIeung = 0xef9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Hangul_J_YeorinHieuh = 0xefa; /* Korean currency symbol */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Korean_Won = 0xeff; /* * Armenian * Byte 3 = 0x14 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_eternity = 0x14a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ligature_ew = 0x14a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_full_stop = 0x14a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_verjaket = 0x14a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_parenright = 0x14a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_parenleft = 0x14a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_guillemotright = 0x14a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_guillemotleft = 0x14a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_em_dash = 0x14a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_dot = 0x14a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_mijaket = 0x14a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_separation_mark = 0x14aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_but = 0x14aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_comma = 0x14ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_en_dash = 0x14ac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_hyphen = 0x14ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_yentamna = 0x14ad; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ellipsis = 0x14ae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_exclam = 0x14af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_amanak = 0x14af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_accent = 0x14b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_shesht = 0x14b0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_question = 0x14b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_paruyk = 0x14b1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_AYB = 0x14b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ayb = 0x14b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_BEN = 0x14b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ben = 0x14b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_GIM = 0x14b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_gim = 0x14b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_DA = 0x14b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_da = 0x14b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_YECH = 0x14ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_yech = 0x14bb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ZA = 0x14bc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_za = 0x14bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_E = 0x14be; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_e = 0x14bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_AT = 0x14c0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_at = 0x14c1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_TO = 0x14c2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_to = 0x14c3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ZHE = 0x14c4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_zhe = 0x14c5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_INI = 0x14c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ini = 0x14c7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_LYUN = 0x14c8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_lyun = 0x14c9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_KHE = 0x14ca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_khe = 0x14cb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_TSA = 0x14cc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_tsa = 0x14cd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_KEN = 0x14ce; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ken = 0x14cf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_HO = 0x14d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ho = 0x14d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_DZA = 0x14d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_dza = 0x14d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_GHAT = 0x14d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ghat = 0x14d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_TCHE = 0x14d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_tche = 0x14d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_MEN = 0x14d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_men = 0x14d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_HI = 0x14da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_hi = 0x14db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_NU = 0x14dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_nu = 0x14dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_SHA = 0x14de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_sha = 0x14df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_VO = 0x14e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_vo = 0x14e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_CHA = 0x14e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_cha = 0x14e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_PE = 0x14e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_pe = 0x14e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_JE = 0x14e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_je = 0x14e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_RA = 0x14e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ra = 0x14e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_SE = 0x14ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_se = 0x14eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_VEV = 0x14ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_vev = 0x14ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_TYUN = 0x14ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_tyun = 0x14ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_RE = 0x14f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_re = 0x14f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_TSO = 0x14f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_tso = 0x14f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_VYUN = 0x14f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_vyun = 0x14f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_PYUR = 0x14f6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_pyur = 0x14f7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_KE = 0x14f8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_ke = 0x14f9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_O = 0x14fa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_o = 0x14fb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_FE = 0x14fc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_fe = 0x14fd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_apostrophe = 0x14fe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Armenian_section_sign = 0x14ff; /* * Georgian * Byte 3 = 0x15 */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_an = 0x15d0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_ban = 0x15d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_gan = 0x15d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_don = 0x15d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_en = 0x15d4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_vin = 0x15d5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_zen = 0x15d6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_tan = 0x15d7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_in = 0x15d8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_kan = 0x15d9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_las = 0x15da; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_man = 0x15db; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_nar = 0x15dc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_on = 0x15dd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_par = 0x15de; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_zhar = 0x15df; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_rae = 0x15e0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_san = 0x15e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_tar = 0x15e2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_un = 0x15e3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_phar = 0x15e4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_khar = 0x15e5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_ghan = 0x15e6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_qar = 0x15e7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_shin = 0x15e8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_chin = 0x15e9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_can = 0x15ea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_jil = 0x15eb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_cil = 0x15ec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_char = 0x15ed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_xan = 0x15ee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_jhan = 0x15ef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_hae = 0x15f0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_he = 0x15f1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_hie = 0x15f2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_we = 0x15f3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_har = 0x15f4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_hoe = 0x15f5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Georgian_fi = 0x15f6; /* * Azeri (and other Turkic or Caucasian languages of ex-USSR) * Byte 3 = 0x16 */ /* latin */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ccedillaabovedot = 0x16a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Xabovedot = 0x16a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Qabovedot = 0x16a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ibreve = 0x16a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_IE = 0x16a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_UO = 0x16a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Zstroke = 0x16a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gcaron = 0x16aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Obarred = 0x16af; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ccedillaabovedot = 0x16b2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_xabovedot = 0x16b3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocaron = 0x16b4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_qabovedot = 0x16b5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ibreve = 0x16b6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ie = 0x16b7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uo = 0x16b8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_zstroke = 0x16b9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gcaron = 0x16ba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocaron = 0x16bd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_obarred = 0x16bf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_SCHWA = 0x16c6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_schwa = 0x16f6; /* those are not really Caucasus; but I put them here for now */ /* For Inupiak */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lbelowdot = 0x16d1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Lstrokebelowdot = 0x16d2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lbelowdot = 0x16e1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_lstrokebelowdot = 0x16e2; /* For Guarani */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Gtilde = 0x16d3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_gtilde = 0x16e3; /* * Vietnamese * Byte 3 = 0x1e */ static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abelowdot = 0x1ea0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abelowdot = 0x1ea1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ahook = 0x1ea2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ahook = 0x1ea3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflexacute = 0x1ea4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflexacute = 0x1ea5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflexgrave = 0x1ea6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflexgrave = 0x1ea7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflexhook = 0x1ea8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflexhook = 0x1ea9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflextilde = 0x1eaa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflextilde = 0x1eab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Acircumflexbelowdot = 0x1eac; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_acircumflexbelowdot = 0x1ead; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abreveacute = 0x1eae; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abreveacute = 0x1eaf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abrevegrave = 0x1eb0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abrevegrave = 0x1eb1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abrevehook = 0x1eb2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abrevehook = 0x1eb3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abrevetilde = 0x1eb4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abrevetilde = 0x1eb5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Abrevebelowdot = 0x1eb6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_abrevebelowdot = 0x1eb7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ebelowdot = 0x1eb8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ebelowdot = 0x1eb9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ehook = 0x1eba; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ehook = 0x1ebb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Etilde = 0x1ebc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_etilde = 0x1ebd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflexacute = 0x1ebe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflexacute = 0x1ebf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflexgrave = 0x1ec0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflexgrave = 0x1ec1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflexhook = 0x1ec2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflexhook = 0x1ec3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflextilde = 0x1ec4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflextilde = 0x1ec5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ecircumflexbelowdot = 0x1ec6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ecircumflexbelowdot = 0x1ec7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ihook = 0x1ec8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ihook = 0x1ec9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ibelowdot = 0x1eca; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ibelowdot = 0x1ecb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Obelowdot = 0x1ecc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_obelowdot = 0x1ecd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohook = 0x1ece; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohook = 0x1ecf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflexacute = 0x1ed0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflexacute = 0x1ed1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflexgrave = 0x1ed2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflexgrave = 0x1ed3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflexhook = 0x1ed4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflexhook = 0x1ed5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflextilde = 0x1ed6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflextilde = 0x1ed7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ocircumflexbelowdot = 0x1ed8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ocircumflexbelowdot = 0x1ed9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohornacute = 0x1eda; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohornacute = 0x1edb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohorngrave = 0x1edc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohorngrave = 0x1edd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohornhook = 0x1ede; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohornhook = 0x1edf; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohorntilde = 0x1ee0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohorntilde = 0x1ee1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohornbelowdot = 0x1ee2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohornbelowdot = 0x1ee3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ubelowdot = 0x1ee4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ubelowdot = 0x1ee5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhook = 0x1ee6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhook = 0x1ee7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhornacute = 0x1ee8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhornacute = 0x1ee9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhorngrave = 0x1eea; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhorngrave = 0x1eeb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhornhook = 0x1eec; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhornhook = 0x1eed; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhorntilde = 0x1eee; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhorntilde = 0x1eef; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhornbelowdot = 0x1ef0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhornbelowdot = 0x1ef1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ybelowdot = 0x1ef4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ybelowdot = 0x1ef5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Yhook = 0x1ef6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_yhook = 0x1ef7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ytilde = 0x1ef8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ytilde = 0x1ef9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Ohorn = 0x1efa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ohorn = 0x1efb; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_Uhorn = 0x1efc; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_uhorn = 0x1efd; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_combining_tilde = 0x1e9f; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_combining_grave = 0x1ef2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_combining_acute = 0x1ef3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_combining_hook = 0x1efe; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_combining_belowdot = 0x1eff; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_EcuSign = 0x20a0; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_ColonSign = 0x20a1; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_CruzeiroSign = 0x20a2; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_FFrancSign = 0x20a3; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_LiraSign = 0x20a4; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_MillSign = 0x20a5; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_NairaSign = 0x20a6; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_PesetaSign = 0x20a7; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_RupeeSign = 0x20a8; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_WonSign = 0x20a9; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_NewSheqelSign = 0x20aa; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_DongSign = 0x20ab; static const scim_bridge_key_code_t SCIM_BRIDGE_KEY_CODE_EuroSign = 0x20ac; #endif /*SCIM_BRIDGE_KEY_CODE_H_*/ scim-master/extras/immodules/common/scim-bridge-key-event.c000066400000000000000000000147041415264260100243430ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include "scim-bridge-key-event.h" #include "scim-bridge-message-constant.h" typedef unsigned int scim_bridge_key_modifier_t; #define SCIM_BRIDGE_MODIFIER_MASK_NULL (0) #define SCIM_BRIDGE_MODIFIER_MASK_SHIFT (1 << 0) #define SCIM_BRIDGE_MODIFIER_MASK_CAPS_LOCK (1 << 1) #define SCIM_BRIDGE_MODIFIER_MASK_CONTROL (1 << 2) #define SCIM_BRIDGE_MODIFIER_MASK_ALT (1 << 3) #define SCIM_BRIDGE_MODIFIER_MASK_META (1 << 4) #define SCIM_BRIDGE_MODIFIER_MASK_SUPER (1 << 5) #define SCIM_BRIDGE_MODIFIER_MASK_HYPER (1 << 6) #define SCIM_BRIDGE_MODIFIER_MASK_NUM_LOCK (1 << 7) struct _ScimBridgeKeyEvent { boolean pressed; scim_bridge_key_code_t code; scim_bridge_key_modifier_t mod_state; scim_bridge_key_quirk_t quirks; }; /* Functions */ ScimBridgeKeyEvent *scim_bridge_alloc_key_event () { ScimBridgeKeyEvent *key_event = malloc (sizeof (ScimBridgeKeyEvent)); key_event->pressed = FALSE; key_event->mod_state = SCIM_BRIDGE_MODIFIER_MASK_NULL; key_event->code = SCIM_BRIDGE_KEY_CODE_NullKey; key_event->quirks = SCIM_BRIDGE_KEY_NO_QUIRK; return key_event; } void scim_bridge_free_key_event (ScimBridgeKeyEvent *key_event) { free (key_event); } scim_bridge_key_code_t scim_bridge_key_event_get_code (const ScimBridgeKeyEvent *key_event) { return key_event->code; } void scim_bridge_key_event_set_code (ScimBridgeKeyEvent *key_event, scim_bridge_key_code_t key_code) { key_event->code = key_code; } boolean scim_bridge_key_event_is_pressed (const ScimBridgeKeyEvent *key_event) { return key_event->pressed; } void scim_bridge_key_event_set_pressed (ScimBridgeKeyEvent *key_event, boolean pressed) { key_event->pressed = pressed; } void scim_bridge_key_event_clear_modifiers (ScimBridgeKeyEvent *key_event) { key_event->mod_state = SCIM_BRIDGE_MODIFIER_MASK_NULL; } boolean scim_bridge_key_event_is_shift_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_SHIFT) != 0; } void scim_bridge_key_event_set_shift_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_SHIFT; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_SHIFT; } } boolean scim_bridge_key_event_is_caps_lock_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_CAPS_LOCK) != 0; } void scim_bridge_key_event_set_caps_lock_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_CAPS_LOCK; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_CAPS_LOCK; } } boolean scim_bridge_key_event_is_control_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_CONTROL) != 0; } void scim_bridge_key_event_set_control_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_CONTROL; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_CONTROL; } } boolean scim_bridge_key_event_is_alt_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_ALT) != 0; } void scim_bridge_key_event_set_alt_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_ALT; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_ALT; } } int scim_bridge_key_event_is_meta_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_META) != 0; } void scim_bridge_key_event_set_meta_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_META; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_META; } } int scim_bridge_key_event_is_super_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_SUPER) != 0; } void scim_bridge_key_event_set_super_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_SUPER; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_SUPER; } } int scim_bridge_key_event_is_hyper_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_HYPER) != 0; } void scim_bridge_key_event_set_hyper_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_HYPER; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_HYPER; } } int scim_bridge_key_event_is_num_lock_down (const ScimBridgeKeyEvent *key_event) { return (key_event->mod_state & SCIM_BRIDGE_MODIFIER_MASK_NUM_LOCK) != 0; } void scim_bridge_key_event_set_num_lock_down (ScimBridgeKeyEvent *key_event, boolean down) { if (down) { key_event->mod_state |= SCIM_BRIDGE_MODIFIER_MASK_NUM_LOCK; } else { key_event->mod_state &= ~SCIM_BRIDGE_MODIFIER_MASK_NUM_LOCK; } } boolean scim_bridge_key_event_is_quirk_enabled (const ScimBridgeKeyEvent *key_event, scim_bridge_key_quirk_t quirk) { return (key_event->quirks & quirk) != 0; } void scim_bridge_key_event_set_quirk_enabled (ScimBridgeKeyEvent *key_event, scim_bridge_key_quirk_t quirk, boolean enabled) { if (enabled) { key_event->quirks |= quirk; } else { key_event->quirks &= ~quirk; } } void scim_bridge_key_event_clear_all_quirks (ScimBridgeKeyEvent *key_event) { key_event->quirks = SCIM_BRIDGE_KEY_NO_QUIRK; } scim-master/extras/immodules/common/scim-bridge-key-event.h000066400000000000000000000205751415264260100243530ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about key events. */ #ifndef SCIM_BRIDGE_KEY_EVENT_H_ #define SCIM_BRIDGE_KEY_EVENT_H_ #include "scim-bridge.h" #include "scim-bridge-key-code.h" /** * The type for quirks of key events. */ typedef unsigned int scim_bridge_key_quirk_t; /** * There is no quirk on this key event. */ #define SCIM_BRIDGE_KEY_NO_QUIRK (0) /** * All quirks are set on this key event. */ #define SCIM_BRIDGE_KEY_ALL_QUIRKS (0xF) /** * This key is not simple backslash but Japanese kana_ro. */ #define SCIM_BRIDGE_KEY_QUIRK_KANA_RO (1 << 1) /** * This is the data type of KeyEvent. */ typedef struct _ScimBridgeKeyEvent ScimBridgeKeyEvent; #ifdef __cplusplus extern "C" { #endif /** * Allocate a new key event. * * @return The new key event. */ ScimBridgeKeyEvent *scim_bridge_alloc_key_event (); /** * Free a key event. * * @param key_event The key event to free. * @note Do not use free (). It will cause memleaks. */ void scim_bridge_free_key_event (ScimBridgeKeyEvent *key_event); /** * Get the key code of an event. * * @param key_event The key event. * @return The key code of the event. */ scim_bridge_key_code_t scim_bridge_key_event_get_code (const ScimBridgeKeyEvent *key_event); /** * Set the key code of an event. * * @param key_event The key event. * @param key_code The key code. */ void scim_bridge_key_event_set_code (ScimBridgeKeyEvent *key_event, scim_bridge_key_code_t key_code); /** * Get the key state of an event. * * @param key_event The key event. * @return TRUE if pressed, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_pressed (const ScimBridgeKeyEvent *key_event); /** * Set the key state of an event. * * @param key_event The key event. * @param pressed Give TRUE if pressed, otherwise give FALSE. */ void scim_bridge_key_event_set_pressed (ScimBridgeKeyEvent *key_event, boolean pressed); /** * Clear all the modifiers of a key event. * * @param key_event The key event. */ void scim_bridge_key_event_clear_modifiers (ScimBridgeKeyEvent *key_event); /** * Get the state of the shift key of an event. * * @param key_event The key event. * @return TRUE when the shift key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_shift_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the shift key of an event. * * @param key_event The key event. * @param down Give TRUE when the shift key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_shift_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the caps lock key of an event. * * @param key_event The key event. * @return TRUE when the caps lock key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_caps_lock_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the caps lock key of an event. * * @param key_event The key event. * @param down Give TRUE when the caps lock key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_caps_lock_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the control state of an event. * * @param key_event The key event. * @return TRUE when the control key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_control_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the control key of an event. * * @param key_event The key event. * @param down Give TRUE when the control is down, otherwise give FALSE. */ void scim_bridge_key_event_set_control_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the alt key of an event. * * @param key_event The key event. * @return TRUE when the alt key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_alt_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the alt key of an event. * * @param key_event The key event. * @param down Give TRUE when the alt key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_alt_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the meta key of an event. * * @param key_event The key event. * @return TRUE when the meta key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_meta_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the meta key of an event. * * @param key_event The key event. * @param down Give TRUE when the meta key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_meta_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the super key of an event. * * @param key_event The key event. * @return TRUE when the super key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_super_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the super key of an event. * * @param key_event The key event. * @param down Give TRUE when the super key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_super_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the hyper key of an event. * * @param key_event The key event. * @return TRUE when the hyper key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_hyper_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the huper key of an event. * * @param key_event The key event. * @param down Give TRUE when the hyper key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_hyper_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Get the state of the num lock key of an event. * * @param key_event The key event. * @return TRUE when the num lock key is down, otherwise it returns FALSE. */ boolean scim_bridge_key_event_is_num_lock_down (const ScimBridgeKeyEvent *key_event); /** * Set the state of the num lock key of an event. * * @param key_event The key event. * @param down Give TRUE when the num lock key is down, otherwise give FALSE. */ void scim_bridge_key_event_set_num_lock_down (ScimBridgeKeyEvent *key_event, boolean down); /** * Check if the given quirk is enabled on this key event. * * @param key_event The key event. * @param quirk The quirk to check. */ boolean scim_bridge_key_event_is_quirk_enabled (const ScimBridgeKeyEvent *key_event, scim_bridge_key_quirk_t quirk); /** * Set the sate of the given quirk of this key event. * * @param key_event The key event. * @param quirk The quirk to change the state. * @param enabled The new state. */ void scim_bridge_key_event_set_quirk_enabled (ScimBridgeKeyEvent *key_event, scim_bridge_key_quirk_t quirk, boolean enabled); /** * Clear all the quirks of this key event. * * @param key_event The key event. */ void scim_bridge_key_event_clear_all_quirks (ScimBridgeKeyEvent *key_event); #ifdef __cplusplus } #endif #endif /*SCIM_BRIDGE_KEY_EVENT_H_*/ scim-master/extras/immodules/common/scim-bridge-message-constant.h000066400000000000000000000223541415264260100257140ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header contains all the string constant used in communication between the agent and clients. */ #ifndef SCIMBRIDGEMESSAGECONSTANT_H_ #define SCIMBRIDGEMESSAGECONSTANT_H_ #include "scim-bridge.h" /** * The string constant of "set_preedit_mode" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_PREEDIT_MODE[] = "set_preedit_mode"; /** * The string constant of "preedit_mode_changed" for messages. */ static const char SCIM_BRIDGE_MESSAGE_PREEDIT_MODE_CHANGED[] = "preedit_mode_changed"; /** * The string constant of "embedded" for messages. */ static const char SCIM_BRIDGE_MESSAGE_EMBEDDED[] = "embedded"; /** * The string constant of "floating" for messages. */ static const char SCIM_BRIDGE_MESSAGE_FLOATING[] = "floating"; /** * The string constant of "hanging" for messages. */ static const char SCIM_BRIDGE_MESSAGE_HANGING[] = "hanging"; /** * The string constant of "any" for messages. */ static const char SCIM_BRIDGE_MESSAGE_ANY[] = "any"; /** * The string constant of "update_preedit" for messages. */ static const char SCIM_BRIDGE_MESSAGE_UPDATE_PREEDIT[] = "update_preedit"; /** * The string constant of "preedit_updated" for messages. */ static const char SCIM_BRIDGE_MESSAGE_PREEDIT_UPDATED[] = "preedit_updated"; /** * The string constant of "set_preedit_string" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_PREEDIT_STRING[] = "set_preedit_string"; /** * The string constant of "set_preedit_attributes" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_PREEDIT_ATTRIBUTES[] = "set_preedit_attributes"; /** * The string constant of "set_preedit_cursor_position" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_PREEDIT_CURSOR_POSITION[] = "set_preedit_cursor_position"; /** * The string constant of "set_preedit_shown" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_PREEDIT_SHOWN[] = "set_preedit_shown"; /** * The string constant of "change_focus" for messages. */ static const char SCIM_BRIDGE_MESSAGE_CHANGE_FOCUS[] = "change_focus"; /** * The string constant of "focus_changed" for messages. */ static const char SCIM_BRIDGE_MESSAGE_FOCUS_CHANGED[] = "focus_changed"; /** * The string constant of "handle_key_event" for messages. */ static const char SCIM_BRIDGE_MESSAGE_HANDLE_KEY_EVENT[] = "handle_key_event"; /** * The string constant of "key_event_handled" for messages. */ static const char SCIM_BRIDGE_MESSAGE_KEY_EVENT_HANDLED[] ="key_event_handled"; /** * The string constant "set_cursor_location" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_CURSOR_LOCATION[] = "set_cursor_location"; /** * The string constant "cursor_location_changed" for messages. */ static const char SCIM_BRIDGE_MESSAGE_CURSOR_LOCATION_CHANGED[] = "cursor_location_changed"; /** * The string constant of "register_imcontext" for messages. */ static const char SCIM_BRIDGE_MESSAGE_REGISTER_IMCONTEXT[] = "register_imcontext"; /** * The string constant of "imcontext_registered" for messages. */ static const char SCIM_BRIDGE_MESSAGE_IMCONTEXT_REGISTERED[] = "imcontext_registered"; /** * The string constant of "deregister_imcontext" for messages. */ static const char SCIM_BRIDGE_MESSAGE_DEREGISTER_IMCONTEXT[] = "deregister_imcontext"; /** * The string constant of "imcontext_registered" for messages. */ static const char SCIM_BRIDGE_MESSAGE_IMCONTEXT_DEREGISTERED[] = "imcontext_deregister"; /** * The string constant of "reset_imcontext" for messages. */ static const char SCIM_BRIDGE_MESSAGE_RESET_IMCONTEXT[] = "reset_imcontext"; /** * The string constant of "imcontext_reseted" for messages. */ static const char SCIM_BRIDGE_MESSAGE_IMCONTEXT_RESETED[] = "imcontext_reseted"; /** * The string constant of "forward_key_event" for messages. */ static const char SCIM_BRIDGE_MESSAGE_FORWARD_KEY_EVENT[] = "forward_key_event"; /** * The string constant of "set_commit_string" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SET_COMMIT_STRING[] = "set_commit_string"; /** * The string constant of "commit_string" for messages. */ static const char SCIM_BRIDGE_MESSAGE_COMMIT_STRING[] = "commit_string"; /** * The string constant of "commit" for messages. */ static const char SCIM_BRIDGE_MESSAGE_STRING_COMMITED[] = "string_commited"; /** * The string constant of "beep" for messages. */ static const char SCIM_BRIDGE_MESSAGE_BEEP[] = "beep"; /** * The string constant of "get_surrounding_text" for messages. */ static const char SCIM_BRIDGE_MESSAGE_GET_SURROUNDING_TEXT[] = "get_surrounding_text"; /** * The string constant of "delete_surrounding_text" for messages. */ static const char SCIM_BRIDGE_MESSAGE_DELETE_SURROUNDING_TEXT[] = "delete_surrounding_text"; /** * The string constant of "replace_surrounding_text" for messages. */ static const char SCIM_BRIDGE_MESSAGE_REPLACE_SURROUNDING_TEXT[] = "replace_surrounding_text"; /** * The string constant of "surrounding_text_gotten" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_GOTTEN[] = "surrounding_text_gotten"; /** * The string constant of "surrounding_text_deleted" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_DELETED[] = "surrounding_text_deleted"; /** * The string constant of "surrounding_text_replaced" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SURROUNDING_TEXT_REPLACED[] = "surrounding_text_replaced"; /** * The string constant of "imengine_status_changed" for messages. */ static const char SCIM_BRIDGE_MESSAGE_IMENGINE_STATUS_CHANGED[] = "imengine_status_changed"; /** * The string constant of "enable_imcontext" for messages. */ static const char SCIM_BRIDGE_MESSAGE_ENABLE_IMCONTEXT[] = "enable_imcontext"; /** * The string constant of "enabled" for messages. */ static const char SCIM_BRIDGE_MESSAGE_ENABLED[] = "enabled"; /** * The string constant of "disable_imcontext" for messages. */ static const char SCIM_BRIDGE_MESSAGE_DISABLE_IMCONTEXT[] = "disable_imcontext"; /** * The string constant of "disabled" for messages. */ static const char SCIM_BRIDGE_MESSAGE_DISABLED[] = "disabled"; /** * The string constant of "shift" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SHIFT[] = "shift"; /** * The string constant of "control" for messages. */ static const char SCIM_BRIDGE_MESSAGE_CONTROL[] = "control"; /** * The string constant of "alt" for messages. */ static const char SCIM_BRIDGE_MESSAGE_ALT[] = "alt"; /** * The string constant of "meta" for messages. */ static const char SCIM_BRIDGE_MESSAGE_META[] = "meta"; /** * The string constant of "super" for messages. */ static const char SCIM_BRIDGE_MESSAGE_SUPER[] = "super"; /** * The string constant of "hyper" for messages. */ static const char SCIM_BRIDGE_MESSAGE_HYPER[] = "hyper"; /** * The string constant of "caps_lock" for messages. */ static const char SCIM_BRIDGE_MESSAGE_CAPS_LOCK[] = "caps_lock"; /** * The string constant of "num_lock" for messages. */ static const char SCIM_BRIDGE_MESSAGE_NUM_LOCK[] = "num_lock"; /** * The string constant of "kana_ro" for messages. */ static const char SCIM_BRIDGE_MESSAGE_KANA_RO[] = "kana_ro"; /** * The string constant of "unknown" for messages. */ static const char SCIM_BRIDGE_MESSAGE_UNKNOWN[] = "unknown"; /** * The string constant of "true" for messages. */ static const char SCIM_BRIDGE_MESSAGE_TRUE[] = "true"; /** * The string constant of "false" for messages. */ static const char SCIM_BRIDGE_MESSAGE_FALSE[] = "false"; /** * The string constant of "none" for messages. */ static const char SCIM_BRIDGE_MESSAGE_NONE[] = "none"; /** * The string constant of "decorate" for messages. */ static const char SCIM_BRIDGE_MESSAGE_DECORATE[] = "decoreate"; /** * The string constant of "foreground" for messages. */ static const char SCIM_BRIDGE_MESSAGE_FOREGROUND[] = "foreground"; /** * The string constant of "background" for messages. */ static const char SCIM_BRIDGE_MESSAGE_BACKGROUND[] = "background"; /** * The string constant of "color" for messages. */ static const char SCIM_BRIDGE_MESSAGE_COLOR[] = "#"; /** * The string constant of "underline" for messages. */ static const char SCIM_BRIDGE_MESSAGE_UNDERLINE[] = "underline"; /** * The string constant of "hilight" for messages. */ static const char SCIM_BRIDGE_MESSAGE_HIGHLIGHT[] = "highlight"; /** * The string constant of "reverse" for messages. */ static const char SCIM_BRIDGE_MESSAGE_REVERSE[] = "reverse"; #endif /*SCIMBRIDGEMESSAGECONSTANT_H_*/ scim-master/extras/immodules/common/scim-bridge-message.c000066400000000000000000000103031415264260100240470ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include "scim-bridge-message.h" #include "scim-bridge-output.h" /* Type definition */ struct _ScimBridgeMessage { char *header; char **arguments; size_t *argument_capacities; size_t argument_count; }; /* Implementations */ ScimBridgeMessage *scim_bridge_alloc_message (const char *header, size_t argument_count) { if (header == NULL) { scim_bridge_perrorln ("The given header of a message is NULL"); return NULL; } ScimBridgeMessage *message = malloc (sizeof (ScimBridgeMessage)); message->header = malloc (sizeof (char) * (strlen (header) + 1)); strcpy (message->header, header); message->argument_count = argument_count; if (argument_count > 0) { message->arguments = malloc (sizeof (char*) * message->argument_count); message->argument_capacities = malloc (sizeof (size_t) * message->argument_count); } else { message->arguments = NULL; message->argument_capacities = NULL; } int i; for (i = 0; i < message->argument_count; ++i) { message->argument_capacities[i] = 10; message->arguments[i] = malloc (sizeof (char) * (message->argument_capacities[i] + 1)); message->arguments[i][0] = '\0'; } return message; } void scim_bridge_free_message (ScimBridgeMessage *message) { if (message == NULL) return; free (message->header); int i; for (i = 0; i < message->argument_count; ++i) { free (message->arguments[i]); } if (message->argument_capacities) free (message->argument_capacities); if (message->arguments) free (message->arguments); free (message); } const char *scim_bridge_message_get_header (const ScimBridgeMessage *message) { return message->header; } size_t scim_bridge_message_get_argument_count (const ScimBridgeMessage *message) { return message->argument_count; } const char *scim_bridge_message_get_argument (const ScimBridgeMessage *message, size_t index) { if (message == NULL) { scim_bridge_perrorln ("The pointer given as a message is NULL"); return NULL; } if (index >= message->argument_count) { scim_bridge_perrorln ("An out of bounds exception occurred at scim_bridge_message_get_argument ()"); return NULL; } else { return message->arguments[index]; } } retval_t scim_bridge_message_set_argument (ScimBridgeMessage *message, size_t index, const char *argument) { if (argument == NULL) { scim_bridge_perrorln ("The pointer given as an argument is NULL"); return RETVAL_FAILED; } if (message == NULL) { scim_bridge_perrorln ("The pointer given as a message is NULL"); return RETVAL_FAILED; } if (index >= message->argument_count) { scim_bridge_perrorln ("An out of bounds exception occurred at scim_bridge_message_set_argument ()"); return RETVAL_FAILED; } else { const size_t argument_length = strlen (argument); if (argument_length > message->argument_capacities[index]) { const size_t new_argument_capacity = argument_length; free (message->arguments[index]); message->arguments[index] = malloc (sizeof (char) * (new_argument_capacity + 1)); message->argument_capacities[index] = new_argument_capacity; } strcpy (message->arguments[index], argument); return RETVAL_SUCCEEDED; } } scim-master/extras/immodules/common/scim-bridge-message.h000066400000000000000000000056341415264260100240670ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes abut the data type of messages. */ #ifndef SCIMBRIDGEMESSAGE_H_ #define SCIMBRIDGEMESSAGE_H_ #include "scim-bridge.h" /** * The struct type of message. */ typedef struct _ScimBridgeMessage ScimBridgeMessage; #ifdef __cplusplus extern "C" { #endif /** * Allocate a message. * All the arguments are set to '\0'. * * @param header The header of the message. * @param argument_count The number of arguments. * @return The new message. */ ScimBridgeMessage *scim_bridge_alloc_message (const char *header, size_t argument_count); /** * Free a message. * * @param message The message to free. */ void scim_bridge_free_message (ScimBridgeMessage *message); /** * Get the header of a message. * * @param message The message. * @return The header of the message. */ const char *scim_bridge_message_get_header (const ScimBridgeMessage *message); /** * Get the number of message arguments. * * @param message The message. * @return The argument count of the message. */ size_t scim_bridge_message_get_argument_count (const ScimBridgeMessage *message); /** * Get the specific argument of the message. * * @param message The message. * @param index The index of the argument. * @return The argument if the index is valid. Otherwise it returns NULL. */ const char *scim_bridge_message_get_argument (const ScimBridgeMessage *message, size_t index); /** * Set the specific argument of the message. * * @param message The message. * @param index The index of the argument. If invalid index is give, it fails. * @param argument The new argument value. If NULL is give, it fails. * @return RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED. */ retval_t scim_bridge_message_set_argument (ScimBridgeMessage *message, size_t index, const char *argument); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEMESSAGE_H_*/ scim-master/extras/immodules/common/scim-bridge-messenger.c000066400000000000000000000476211415264260100244300ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "scim-bridge-messenger.h" #include "scim-bridge-output.h" /* Type definition */ struct _ScimBridgeMessenger { int socket_fd; char *sending_buffer; size_t sending_buffer_offset; size_t sending_buffer_size; size_t sending_buffer_capacity; char *receiving_buffer; size_t receiving_buffer_offset; size_t receiving_buffer_size; size_t receiving_buffer_capacity; boolean has_received_message; }; /* Implementations */ ScimBridgeMessenger *scim_bridge_alloc_messenger (int socket_fd) { scim_bridge_pdebugln (4, "scim_bridge_alloc_messenger ()"); if (socket_fd < 0) { scim_bridge_perrorln ("An invalid file descriptor is given at scim_bridge_alloc_messenger ()"); return NULL; } const int socket_flags = fcntl (socket_fd, F_GETFL); if (socket_flags < 0) { scim_bridge_perrorln ("Failed to get the flags of the socket"); return NULL; } if (fcntl (socket_fd, F_SETFL, socket_flags | O_NONBLOCK)) { scim_bridge_perrorln ("Failed to set the flags of the socket"); return NULL; } ScimBridgeMessenger *messenger = malloc (sizeof (ScimBridgeMessenger)); messenger->socket_fd = socket_fd; messenger->sending_buffer_capacity = 20; messenger->sending_buffer = malloc (sizeof (char) * messenger->sending_buffer_capacity); messenger->sending_buffer_offset = 0; messenger->sending_buffer_size = 0; messenger->receiving_buffer_capacity = 20; messenger->receiving_buffer = malloc (sizeof (char) * messenger->receiving_buffer_capacity); messenger->receiving_buffer_offset = 0; messenger->receiving_buffer_size = 0; messenger->has_received_message = FALSE; return messenger; } void scim_bridge_free_messenger (ScimBridgeMessenger *messenger) { scim_bridge_pdebugln (4, "scim_bridge_free_messenger ()"); if (messenger == NULL) return; scim_bridge_close_messenger (messenger); free (messenger->sending_buffer); free (messenger->receiving_buffer); free (messenger); } retval_t scim_bridge_close_messenger (ScimBridgeMessenger *messenger) { scim_bridge_pdebugln (4, "scim_bridge_close_messenger ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return RETVAL_FAILED; } if (messenger->socket_fd < 0) return RETVAL_SUCCEEDED; shutdown (messenger->socket_fd, SHUT_RDWR); close (messenger->socket_fd); messenger->socket_fd = -1; return RETVAL_SUCCEEDED; } boolean scim_bridge_messenger_is_closed (const ScimBridgeMessenger *messenger) { if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return FALSE; } return messenger->socket_fd < 0; } int scim_bridge_messenger_get_socket_fd (const ScimBridgeMessenger *messenger) { scim_bridge_pdebugln (4, "scim_bridge_messenger_get_socket_fd ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return RETVAL_FAILED; } return messenger->socket_fd; } retval_t scim_bridge_messenger_push_message (ScimBridgeMessenger *messenger, const ScimBridgeMessage *message) { scim_bridge_pdebugln (4, "scim_bridge_messenger_push_message ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return RETVAL_FAILED; } if (message == NULL) { scim_bridge_perrorln ("The pointer given as a message is NULL"); return RETVAL_FAILED; } const ssize_t arg_count = (ssize_t) scim_bridge_message_get_argument_count (message); scim_bridge_pdebug (4, "message:"); int i; for (i = -1; i < arg_count; ++i) { const char *str; if (i == -1) { str = scim_bridge_message_get_header (message); } else { str = scim_bridge_message_get_argument (message, i); } scim_bridge_pdebug (4, " %s", str); const size_t str_length = strlen (str); int j; for (j = 0; j <= str_length; ++j) { const size_t buffer_size = messenger->sending_buffer_size; size_t buffer_capacity = messenger->sending_buffer_capacity; size_t buffer_offset = messenger->sending_buffer_offset; if (buffer_size + 2 >= buffer_capacity) { const size_t new_buffer_capacity = buffer_capacity + 20; char *new_buffer = malloc (sizeof (char) * new_buffer_capacity); memcpy (new_buffer, messenger->sending_buffer + buffer_offset, sizeof (char) * (buffer_capacity - buffer_offset)); memcpy (new_buffer + buffer_capacity - buffer_offset, messenger->sending_buffer, sizeof (char) * buffer_offset); free (messenger->sending_buffer); messenger->sending_buffer = new_buffer; buffer_capacity = new_buffer_capacity; messenger->sending_buffer_capacity = buffer_capacity; buffer_offset = 0; messenger->sending_buffer_offset = buffer_offset; } if (j < str_length) { switch (str[j]) { case '\n': messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = '\\'; messenger->sending_buffer[(buffer_offset + buffer_size + 1) % buffer_capacity] = 'n'; messenger->sending_buffer_size += 2; break; case ' ': messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = '\\'; messenger->sending_buffer[(buffer_offset + buffer_size + 1) % buffer_capacity] = 's'; messenger->sending_buffer_size += 2; break; case '\\': messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = '\\'; messenger->sending_buffer[(buffer_offset + buffer_size + 1) % buffer_capacity] = '\\'; messenger->sending_buffer_size += 2; break; default: messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = str[j]; messenger->sending_buffer_size += 1; } } else { if (i + 1 == arg_count) { messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = '\n'; } else { messenger->sending_buffer[(buffer_offset + buffer_size) % buffer_capacity] = ' '; } messenger->sending_buffer_size += 1; } } } scim_bridge_pdebug (4, "\n"); return RETVAL_SUCCEEDED; } retval_t scim_bridge_messenger_poll_message (ScimBridgeMessenger *messenger, ScimBridgeMessage **message) { scim_bridge_pdebugln (3, "scim_bridge_messenger_poll_message ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return RETVAL_FAILED; } if (message == NULL) { scim_bridge_perrorln ("The pointer given as a destination for a message is NULL"); return RETVAL_FAILED; } if (!messenger->has_received_message) { scim_bridge_pdebugln (2, "No message to poll"); return RETVAL_FAILED; } const size_t buffer_capacity = messenger->receiving_buffer_capacity; const size_t buffer_offset = messenger->receiving_buffer_offset; const size_t buffer_size = messenger->receiving_buffer_size; boolean escaped = FALSE; char *tmp_buffer = alloca (sizeof (char) * (buffer_size + 1)); size_t tmp_buffer_size = 0; int arg_count = -1; int arg_capacity = 10; char **args = alloca (sizeof (char*) * arg_capacity); args[0] = tmp_buffer; int i; for (i = 0; i < buffer_size; ++i) { if (arg_count + 2 >= arg_capacity) { const int new_arg_capacity = arg_capacity + 10; char **new_args = alloca (sizeof (char*) * new_arg_capacity); memcpy (new_args, args, sizeof (char*) * arg_capacity); args = new_args; arg_capacity = new_arg_capacity; } const char c = messenger->receiving_buffer[(buffer_offset + i) % buffer_capacity]; switch (c) { case '\\': if (escaped) { tmp_buffer[tmp_buffer_size] = c; ++tmp_buffer_size; escaped = FALSE; } else { escaped = TRUE; } break; case ' ': case '\n': escaped = FALSE; tmp_buffer[tmp_buffer_size] = '\0'; ++tmp_buffer_size; ++arg_count; args[arg_count + 1] = tmp_buffer + i + 1; if (c == '\n') { *message = scim_bridge_alloc_message (args[0], arg_count); scim_bridge_pdebug (5, "message: %s", args[0]); int j; for (j = 0; j < arg_count; ++j) { scim_bridge_pdebug (5, " %s", args[j + 1]); scim_bridge_message_set_argument (*message, j, args[j + 1]); } scim_bridge_pdebug (5, "\n"); messenger->receiving_buffer_offset = (buffer_offset + i + 1) % buffer_capacity; messenger->receiving_buffer_size -= i + 1; return RETVAL_SUCCEEDED; } break; default: if (escaped) { if (c == 'n') { tmp_buffer[tmp_buffer_size] = '\n'; } else if (c == 's') { tmp_buffer[tmp_buffer_size] = ' '; } else { tmp_buffer[tmp_buffer_size] = c; } } else { tmp_buffer[tmp_buffer_size] = c; } ++tmp_buffer_size; escaped = FALSE; } } scim_bridge_pdebugln (2, "The message is not completed"); messenger->has_received_message = FALSE; return RETVAL_FAILED; } retval_t scim_bridge_messenger_send_message (ScimBridgeMessenger *messenger, const struct timeval *timeout) { scim_bridge_pdebugln (3, "scim_bridge_messenger_send_message ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return RETVAL_FAILED; } const size_t buffer_capacity = messenger->sending_buffer_capacity; const size_t buffer_size = messenger->sending_buffer_size; const size_t buffer_offset = messenger->sending_buffer_offset; if (buffer_size == 0) return RETVAL_SUCCEEDED; size_t write_size; if (buffer_offset + buffer_size > buffer_capacity) { write_size = buffer_capacity - buffer_offset; } else { write_size = buffer_size; } const int fd = messenger->socket_fd; if (fd < 0) { scim_bridge_perrorln ("The socket is broken at scim_bridge_messenger_send_message ()"); return RETVAL_FAILED; } fd_set select_set; FD_ZERO (&select_set); FD_SET (fd, &select_set); if (timeout != NULL) { struct timeval polling_timeout; polling_timeout.tv_sec = timeout->tv_sec; polling_timeout.tv_usec = timeout->tv_usec; if (select (fd + 1, NULL, &select_set, &select_set, &polling_timeout) < 0) { if (errno == EINTR) { scim_bridge_pdebugln (2, "An interruption occurred at scim_bridge_messenger_send_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException occurred at scim_bridge_messenger_send_message ()"); return RETVAL_FAILED; } } } else { if (select (fd + 1, NULL, &select_set, &select_set, NULL) < 0) { if (errno == EINTR) { scim_bridge_pdebugln (2, "An interruption occurred at scim_bridge_messenger_send_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException occurred at scim_bridge_messenger_send_message ()"); return RETVAL_FAILED; } } } ssize_t written_bytes = send (fd, messenger->sending_buffer + buffer_offset, sizeof (char) * write_size, MSG_NOSIGNAL); if (written_bytes < 0) { if (errno == EINTR || errno == EAGAIN) { scim_bridge_pdebugln (2, "Cannot send for now at scim_bridge_messenger_send_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException at scim_bridge_messenger_send_message (): %s", errno != 0 ? strerror (errno):"Unknown reason"); return RETVAL_FAILED; } } else { scim_bridge_pdebugln (1, "offset = %d, size = %d + %d (%d), capacity = %d", buffer_offset, buffer_size, written_bytes / sizeof (char), write_size, buffer_capacity); char *tmp_str = alloca (written_bytes + sizeof (char)); memcpy (tmp_str, messenger->sending_buffer + buffer_offset, written_bytes); tmp_str[written_bytes / sizeof (char)] = '\0'; scim_bridge_pdebugln (1, "<- %s", tmp_str); messenger->sending_buffer_size -= written_bytes / sizeof (char); messenger->sending_buffer_offset = (buffer_offset + written_bytes / sizeof (char)) % buffer_capacity; return RETVAL_SUCCEEDED; } } retval_t scim_bridge_messenger_receive_message (ScimBridgeMessenger *messenger, const struct timeval *timeout) { scim_bridge_pdebugln (4, "scim_bridge_messenger_receive_message ()"); const size_t buffer_size = messenger->receiving_buffer_size; size_t buffer_capacity = messenger->receiving_buffer_capacity; size_t buffer_offset = messenger->receiving_buffer_offset; if (buffer_size + 20 >= buffer_capacity) { const size_t new_buffer_capacity = buffer_capacity + 40; char *new_buffer = malloc (sizeof (char) * new_buffer_capacity); memcpy (new_buffer, messenger->receiving_buffer + buffer_offset, sizeof (char) * (buffer_capacity - buffer_offset)); memcpy (new_buffer + buffer_capacity - buffer_offset, messenger->receiving_buffer, sizeof (char) * buffer_offset); free (messenger->receiving_buffer); messenger->receiving_buffer = new_buffer; buffer_capacity = new_buffer_capacity; messenger->receiving_buffer_capacity = buffer_capacity; buffer_offset = 0; messenger->receiving_buffer_offset = buffer_offset; } size_t read_size; if (buffer_offset + buffer_size < buffer_capacity) { read_size = buffer_capacity - (buffer_offset + buffer_size); } else { read_size = buffer_offset - (buffer_offset + buffer_size) % buffer_capacity; } const int fd = messenger->socket_fd; if (fd < 0) { scim_bridge_perrorln ("The socket is broken at scim_bridge_messenger_receive_message ()"); return RETVAL_FAILED; } fd_set select_set; FD_ZERO (&select_set); FD_SET (fd, &select_set); if (timeout != NULL) { struct timeval polling_timeout; polling_timeout.tv_sec = timeout->tv_sec; polling_timeout.tv_usec = timeout->tv_usec; if (select (fd + 1, &select_set, NULL, &select_set, &polling_timeout) < 0) { if (errno == EINTR) { scim_bridge_pdebugln (2, "An interruption occurred at scim_bridge_messenger_receive_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException occurred at scim_bridge_messenger_receive_message ()"); return RETVAL_FAILED; } } } else { if (select (fd + 1, &select_set, NULL, &select_set, NULL) < 0) { if (errno == EINTR) { scim_bridge_pdebugln (2, "An interruption occurred at scim_bridge_messenger_receive_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException occurred at scim_bridge_messenger_receive_message ()"); return RETVAL_FAILED; } } } assert (read_size > 0); const ssize_t read_bytes = recv (fd, messenger->receiving_buffer + (buffer_offset + buffer_size) % buffer_capacity, sizeof (char) * read_size, 0); if (read_bytes == 0) { scim_bridge_pdebugln (9, "The socket is closed at scim_bridge_messenger_receive_message ()"); return RETVAL_FAILED; } else if (read_bytes < 0) { if (errno == EINTR || errno == EAGAIN) { scim_bridge_pdebugln (2, "Cannot read for now at scim_bridge_messenger_receive_message ()"); return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An IOException at scim_bridge_messenger_receive_message (): %s", errno != 0 ? strerror (errno):"Unknown reason"); return RETVAL_FAILED; } } else { scim_bridge_pdebugln (1, "offset = %d, size = %d + %d (%d), capacity = %d", buffer_offset, buffer_size, read_bytes / sizeof (char), read_size, buffer_capacity); char *tmp_str = alloca (read_bytes + sizeof (char)); memcpy (tmp_str, messenger->receiving_buffer + (buffer_offset + buffer_size) % buffer_capacity, read_bytes); tmp_str[read_bytes / sizeof (char)] = '\0'; scim_bridge_pdebugln (1, "-> %s", tmp_str); if (!messenger->has_received_message) { int i; for (i = 0; i < read_bytes / sizeof (char); ++i) { char c = messenger->receiving_buffer[(buffer_offset + buffer_size + i) % buffer_capacity]; if (c == '\n') { scim_bridge_pdebugln (3, "A message has arrived"); messenger->has_received_message = TRUE; break; } } } messenger->receiving_buffer_size += read_bytes / sizeof (char); return RETVAL_SUCCEEDED; } } ssize_t scim_bridge_messenger_get_sending_buffer_size (const ScimBridgeMessenger *messenger) { scim_bridge_pdebugln (3, "scim_bridge_messenger_get_sending_buffer_size ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return -1; } scim_bridge_pdebugln (2, "The sending buffer size: %d", messenger->sending_buffer_size); return messenger->sending_buffer_size; } ssize_t scim_bridge_messenger_get_receiving_buffer_size (const ScimBridgeMessenger *messenger) { scim_bridge_pdebugln (3, "scim_bridge_messenger_get_receiving_buffer_size ()"); if (messenger == NULL) { scim_bridge_perrorln ("The pointer given as a messenger is NULL"); return -1; } scim_bridge_pdebugln (2, "The receiving buffer size: %d", messenger->receiving_buffer_size); return messenger->receiving_buffer_size; } scim-master/extras/immodules/common/scim-bridge-messenger.h000066400000000000000000000114751415264260100244330ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes abut fucntions used for sending and receving messages. */ #ifndef SCIMBRIDGEMESSAGENGER_H_ #define SCIMBRIDGEMESSAGENGER_H_ #include "scim-bridge.h" #include "scim-bridge-message.h" /** * The struct type of Messenger. */ typedef struct _ScimBridgeMessenger ScimBridgeMessenger; struct timeval; #ifdef __cplusplus extern "C" { #endif /** * Allocate a new messenger. * * @param socket_fd The file discriptor for the socket. * @return The new messenger. */ ScimBridgeMessenger *scim_bridge_alloc_messenger (int socket_fd); /** * Free a messenger, and close the socket if it's still open.\n * Do not use "free ()" for variables for this type. * * @param messenger The messenger. */ void scim_bridge_free_messenger (ScimBridgeMessenger *messenger); /** * Get the file descriptor which assosicates with this messenger. * * @param messenger The messenger. * @return The assosicated file descriptor. */ int scim_bridge_messenger_get_socket_fd (const ScimBridgeMessenger *messenger); /** * Close the socket of the messenger. * * @param messenger The messenger. * @return RETVAL_SUCCEEDED if no error has been occurred, otherwise it return RETVAL_FAILED. */ retval_t scim_bridge_close_messenger (ScimBridgeMessenger *messenger); /** * Check if the messenger is closed. * * @param messenger The messeger * @return TRUE if closed, otherwise it returns FALSE. */ boolean scim_bridge_messenger_is_closed (const ScimBridgeMessenger *messenger); /** * Push a messenge into the sending buffer. * * @param messenger The messenger. * @param message The message to send. * @return RETVAL_SUCCEEDED if it succeeded, otherwise it return RETVAL_FAILED. */ retval_t scim_bridge_messenger_push_message (ScimBridgeMessenger *messenger, const ScimBridgeMessage *message); /** * Poll a messenge from the received buffer. * * @param messenger The messenger. * @param message The pointer for the received message. It returns NULL if no message is available. * @return RETVAL_SUCCEEDED if it succeeded, otherwise it return RETVAL_FAILED. */ retval_t scim_bridge_messenger_poll_message (ScimBridgeMessenger *messenger, ScimBridgeMessage **message); /** * Send the oldest stored message if it can. * * @param messenger The messenger. * @param timeout The maximum time to block. It will blocks until all the stored messages is sent if you give NULL here. * @return RETVAL_SUCCEEDED if no error has been occurred, otherwise it return RETVAL_FAILED. */ retval_t scim_bridge_messenger_send_message (ScimBridgeMessenger *messenger, const struct timeval *timeout); /** * Receive a message and store it. * * @param messenger The messenger. * @param timeout The maximum time to block. It will blocks until one whole message is available if you give NULL here. * @return RETVAL_SUCCEEDED if no error has been occurred, otherwise it return RETVAL_FAILED. */ retval_t scim_bridge_messenger_receive_message (ScimBridgeMessenger *messenger, const struct timeval *timeout); /** * Get the size of sendig buffer. * it implies that there is a message to send if the retval is greater thatn 0. * * @param messenger The messenger. * @return The size of messages to send. */ ssize_t scim_bridge_messenger_get_sending_buffer_size (const ScimBridgeMessenger *messenger); /** * Get the size of receiving buffer. * It implies that there might be a message to poll if the retval is greater than 0. * * @param messenger The messenger. * @return The size of received messages. */ ssize_t scim_bridge_messenger_get_receiving_buffer_size (const ScimBridgeMessenger *messenger); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEMESSAGENGER_H_*/ scim-master/extras/immodules/common/scim-bridge-output.h000066400000000000000000000060141415264260100237740ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header is used for print out error messages. */ #ifndef SCIMBRIDGEOUTPUT_H_ #define SCIMBRIDGEOUTPUT_H_ #include "scim-bridge.h" #include "scim-bridge-debug.h" #ifdef __cplusplus extern "C" { #endif /** * Print out a message and give a line feed ('\n'). * The messages will be shown in the stdout. * * @param format The message in printf style. */ void scim_bridge_println (const char *format,...); /** * Print out an error message and give a line feed ('\n'). * The error messages will be shown in the stderr. * * @param format The message in printf style. */ void scim_bridge_perrorln (const char *format,...); /** * Print out an debug message and give a line feed ('\n'). * The error messages will be shown in the stdout. * Note, the message will be ignored if the given debug level is lower than that of the preference. * @ ee scim_bridge_debug_get_level () * * @param level The debug level. * @param format The message in printf style. */ void scim_bridge_pdebugln (scim_bridge_debug_level_t level, const char *format,...); /** * Print out a message without giving a line feed ('\n'). * The messages will be shown in the stdout. * * @param format The message in printf style. */ void scim_bridge_print (const char *format,...); /** * Print out an error message without giving a line feed ('\n'). * The error messages will be shown in the stderr. * * @param format The message in printf style. */ void scim_bridge_perror (const char *format,...); /** * Print out an debug message without giving a line feed ('\n'). * The error messages will be shown in the stdout. * Note, the message will be ignored if the given debug level is lower than that of the preference. * @ ee scim_bridge_debug_get_level () * * @param level The debug level. * @param format The message in printf style. */ void scim_bridge_pdebug (scim_bridge_debug_level_t level, const char *format,...); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEOUTPUT_H_*/ scim-master/extras/immodules/common/scim-bridge-path.c000066400000000000000000000063501415264260100233660ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include "scim-bridge-display.h" #include "scim-bridge-path.h" /* Private variables */ static const char COMPAT_VERSION[] = "0.3.0"; static const char SOCKET_DIR[] = "/tmp/"; static const char SOCKET_NAME[] = "socket"; static const char LOCKFILE_DIR[] = "/tmp/"; static const char LOCKFILE_NAME[] = "lockfile"; static const char AGENT_DIR[] = ""; static const char AGENT_NAME[] = "scim-im-agent"; static const char HOST_NAME[] = "localhost"; static char *lockfile_path = NULL; static char *socket_path = NULL; static char *agent_path = NULL; /* Private function */ static void static_initialize () { ScimBridgeDisplay *display = scim_bridge_alloc_display (); scim_bridge_display_fetch_current (display); const int display_number = scim_bridge_display_get_display_number (display); const int screen_number = scim_bridge_display_get_screen_number (display); scim_bridge_free_display (display); const uid_t uid = geteuid (); const size_t lockfile_path_length = snprintf (NULL, 0, "%s%s-%s.%s-%d@%s:%d.%d", LOCKFILE_DIR, AGENT_NAME, COMPAT_VERSION, LOCKFILE_NAME, uid, HOST_NAME, display_number, screen_number); lockfile_path = malloc (sizeof (char) * (lockfile_path_length + 1)); sprintf (lockfile_path, "%s%s-%s.%s-%d@%s:%d.%d", LOCKFILE_DIR, AGENT_NAME, COMPAT_VERSION, LOCKFILE_NAME, uid, HOST_NAME, display_number, screen_number); const size_t socket_path_length = snprintf (NULL, 0, "%s%s-%s.%s-%d@%s:%d.%d", SOCKET_DIR, AGENT_NAME, COMPAT_VERSION, SOCKET_NAME, uid, HOST_NAME, display_number, screen_number); socket_path = malloc (sizeof (char) * (socket_path_length + 1)); sprintf (socket_path, "%s%s-%s.%s-%d@%s:%d.%d", SOCKET_DIR, AGENT_NAME, COMPAT_VERSION, SOCKET_NAME, uid, HOST_NAME, display_number, screen_number); const size_t agent_path_length = snprintf (NULL, 0, "%s%s", AGENT_DIR, AGENT_NAME); agent_path = malloc (sizeof (char) * (agent_path_length + 1)); sprintf (agent_path, "%s%s", AGENT_DIR, AGENT_NAME); } /* Implementations */ const char *scim_bridge_path_get_lockfile () { if (lockfile_path == NULL) static_initialize (); return lockfile_path; } const char *scim_bridge_path_get_socket () { if (socket_path == NULL) static_initialize (); return socket_path; } const char *scim_bridge_path_get_agent () { if (agent_path == NULL) static_initialize (); return agent_path; } scim-master/extras/immodules/common/scim-bridge-path.h000066400000000000000000000033241415264260100233710ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes abut path related information. */ #ifndef SCIMBRIDGEPATH_H_ #define SCIMBRIDGEPATH_H_ #include "scim-bridge.h" #ifndef SUN_LEN #define SUN_LEN(su) \ (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path)) #endif #ifdef __cplusplus extern "C" { #endif /** * Get the socket path for messengers. * * @return The socket path. */ const char *scim_bridge_path_get_socket (); /** * Get the path for the lockfile of the agent. * * @return The path for the lockfile. */ const char *scim_bridge_path_get_lockfile (); /** * Get the path for the binary of the agent. * * @return The path for the binary of the agent. */ const char *scim_bridge_path_get_agent (); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGEPATH_H_*/ scim-master/extras/immodules/common/scim-bridge-string.c000066400000000000000000000370051415264260100237410ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include "scim-bridge-string.h" #include "scim-bridge-output.h" ssize_t scim_bridge_string_to_wstring (wchar **wstr, const char *str) { if (str == NULL) { *wstr = NULL; scim_bridge_perrorln ("A NULL pointer is given as the UTF8 string at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } const size_t str_length = strlen (str); size_t str_index = 0; size_t wstr_capacity = 10; wchar *wstr_buffer = alloca (sizeof (wchar) * (wstr_capacity + 1)); int i; for (i = 0; str_index <= str_length; ++i) { if (i > wstr_capacity) { const size_t new_wstr_capacity = wstr_capacity + 10; wchar *new_wstr_buffer = alloca (sizeof (wchar) * (new_wstr_capacity + 1)); memcpy (new_wstr_buffer, wstr_buffer, sizeof (wchar) * (wstr_capacity + 1)); wstr_buffer = new_wstr_buffer; wstr_capacity = new_wstr_capacity; } unsigned char a = '\0'; unsigned char b = '\0'; unsigned char c = '\0'; unsigned char d = '\0'; unsigned char e = '\0'; unsigned char f = '\0'; a = (unsigned char)str[str_index]; if (str_index + 1 <= str_length) b = (unsigned char)str[str_index + 1]; if (str_index + 2 <= str_length) c = (unsigned char)str[str_index + 2]; if (str_index + 3 <= str_length) d = (unsigned char)str[str_index + 3]; if (str_index + 4 <= str_length) e = (unsigned char)str[str_index + 4]; if (str_index + 5 <= str_length) f = (unsigned char)str[str_index + 5]; size_t wchar_size; if (a < 0x80) { wchar_size = 1; } else if (a < 0xc2) { wchar_size = 0; } else if (a < 0xe0) { wchar_size = 2; } else if (a < 0xf0) { wchar_size = 3; } else if (a < 0xf8) { wchar_size = 4; } else if (a < 0xfc) { wchar_size = 5; } else if (a < 0xfe) { wchar_size = 6; } else { wchar_size = 0; } switch (wchar_size) { case 1: wstr_buffer[i] = a; str_index += 1; break; case 2: if (str_index + 1 > str_length || ! ((b ^ 0x80) < 0x40)) { *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } else { wstr_buffer[i] = ((wchar) (a & 0x1f) << 6) | (wchar) (b ^ 0x80); str_index += 2; } break; case 3: if (str_index + 2 > str_length || ! ((b ^ 0x80) < 0x40 && (c ^ 0x80) < 0x40 && (a >= 0xe1 || b >= 0xa0))) { *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } else { wstr_buffer[i] = ((wchar) (a & 0x0f) << 12) | ((wchar) (b ^ 0x80) << 6) | (wchar) (c ^ 0x80); str_index += 3; } break; case 4: if (str_index + 3 > str_length || ! ((b ^ 0x80) < 0x40 && (c ^ 0x80) < 0x40 && (d ^ 0x80) < 0x40 && (a >= 0xf1 || b >= 0x90))) { *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } else { wstr_buffer[i] = ((wchar) (a & 0x07) << 18) | ((wchar) (b ^ 0x80) << 12) | ((wchar) (c ^ 0x80) << 6) | (wchar) (d ^ 0x80); str_index += 4; } break; case 5: if (str_index + 4 > str_length || ! ((b ^ 0x80) < 0x40 && (c ^ 0x80) < 0x40 && (d ^ 0x80) < 0x40 && (e ^ 0x80) < 0x40 && (a >= 0xf9 || b >= 0x88))) { *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } else { wstr_buffer[i] = ((wchar) (a & 0x03) << 24) | ((wchar) (b ^ 0x80) << 18) | ((wchar) (c ^ 0x80) << 12) | ((wchar) (d ^ 0x80) << 6) | (wchar) (e ^ 0x80); str_index +=5; } break; case 6: if (str_index + 5 > str_length || ! ((b ^ 0x80) < 0x40 && (c ^ 0x80) < 0x40 && (d ^ 0x80) < 0x40 && (e ^ 0x80) < 0x40 && (f ^ 0x80) < 0x40 && (a >= 0xfd || b >= 0x84))) { *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } else { wstr_buffer[i] = ((wchar) (a & 0x01) << 30) | ((wchar) (b ^ 0x80) << 24) | ((wchar) (c ^ 0x80) << 18) | ((wchar) (d ^ 0x80) << 12) | ((wchar) (e ^ 0x80) << 6) | (wchar) (f ^ 0x80); str_index += 6; } default: *wstr = NULL; scim_bridge_perrorln ("An invalid UTF8 string is given at scim_bridge_string_to_wstring ()"); return RETVAL_FAILED; } } const size_t wstr_length = i - 1; *wstr = malloc (sizeof (wchar) * (wstr_length + 1)); memcpy (*wstr, wstr_buffer, sizeof (wchar) * (wstr_length + 1)); return wstr_length; } ssize_t scim_bridge_wstring_to_string (char **str, const wchar *wstr) { if (wstr == NULL) { *str = NULL; scim_bridge_perrorln ("A NULL pointer is given as the UCS4 string at scim_bridge_wstring_to_string ()"); return RETVAL_FAILED; } const size_t wstr_length = scim_bridge_wstring_get_length (wstr); size_t str_index = 0; size_t str_capacity = 10; char *str_buffer = alloca (sizeof (char) * (str_capacity + 1)); int i; for (i = 0; i <= wstr_length; ++i) { wchar wc = wstr[i]; size_t wc_size_in_utf8; if (wc < 0x80) { wc_size_in_utf8 = 1; } else if (wc < 0x800) { wc_size_in_utf8 = 2; } else if (wc < 0x10000) { wc_size_in_utf8 = 3; } else if (wc < 0x200000) { wc_size_in_utf8 = 4; } else if (wc < 0x4000000) { wc_size_in_utf8 = 5; } else if (wc <= 0x7fffffff) { wc_size_in_utf8 = 6; } else { wc_size_in_utf8 = 0; } if (wc_size_in_utf8 == 0) { *str = NULL; scim_bridge_perrorln ("An invalid UCS4 string is given at scim_bridge_wstring_to_string ()"); return RETVAL_FAILED; } if (str_index + wc_size_in_utf8 > str_capacity) { const size_t new_str_capacity = str_capacity + 10; char *new_str_buffer = alloca (sizeof (char) * (new_str_capacity + 1)); strncpy (new_str_buffer, str_buffer, str_capacity + 1); str_buffer = new_str_buffer; str_capacity = new_str_capacity; } /* note: code falls through cases! */ switch (wc_size_in_utf8) { case 6: str_buffer[str_index + 5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000; case 5: str_buffer[str_index + 4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000; case 4: str_buffer[str_index + 3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; case 3: str_buffer[str_index + 2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; case 2: str_buffer[str_index + 1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; case 1: str_buffer[str_index + 0] = wc; } str_index += wc_size_in_utf8; } const size_t str_length = str_index - 1; *str = malloc (sizeof (char) * (str_length + 1)); strcpy (*str, str_buffer); return str_length; } ssize_t scim_bridge_wstring_get_length (const wchar *wstr) { if (wstr == NULL) { scim_bridge_perrorln ("A NULL pointer is given as the UCS4 string at scim_bridge_wstring_get_length ()"); return RETVAL_FAILED; } size_t i; for (i = 0; wstr[i] != L'\0'; ++i); return i; } ssize_t scim_bridge_string_get_length (const char *str) { if (str == NULL) { scim_bridge_perrorln ("A NULL pointer is given as the UTF8 string at scim_bridge_string_get_length ()"); return RETVAL_FAILED; } return strlen (str); } retval_t scim_bridge_string_to_uint (unsigned int *dst, const char *str) { if (str == NULL) { scim_bridge_perrorln ("A NULL pointer is given as a string at scim_bridge_string_to_uint ()"); return RETVAL_FAILED; } else { unsigned long value = 0; size_t i; for (i = 0; str[i] != '\0'; ++i) { unsigned int digit; switch (str[i]) { case '0': digit = 0; break; case '1': digit = 1; break; case '2': digit = 2; break; case '3': digit = 3; break; case '4': digit = 4; break; case '5': digit = 5; break; case '6': digit = 6; break; case '7': digit = 7; break; case '8': digit = 8; break; case '9': digit = 9; break; default: scim_bridge_perrorln ("An invalid char is given at scim_bridge_string_to_uint (): %c", str[i]); return RETVAL_FAILED; } value *= 10; value += digit; if (value > UINT_MAX) { scim_bridge_perrorln ("An over flow exception occurred at scim_bridge_string_to_uint ()"); return RETVAL_FAILED; } } *dst = value; return RETVAL_SUCCEEDED; } } retval_t scim_bridge_string_to_int (int *dst, const char *str) { if (str == NULL) { scim_bridge_perrorln ("A NULL pointer is given as a string at scim_bridge_string_to_int ()"); return RETVAL_FAILED; } else { unsigned long value = 0; boolean negative = FALSE; size_t i; for (i = 0; str[i] != '\0'; ++i) { unsigned int digit; switch (str[i]) { case '-': if (i == 0) { negative = TRUE; } else { scim_bridge_perrorln ("Negative signs cannot be given at the middle of the number at scim_bridge_string_to_int (): %s", str); return RETVAL_FAILED; } case '0': digit = 0; break; case '1': digit = 1; break; case '2': digit = 2; break; case '3': digit = 3; break; case '4': digit = 4; break; case '5': digit = 5; break; case '6': digit = 6; break; case '7': digit = 7; break; case '8': digit = 8; break; case '9': digit = 9; break; default: scim_bridge_perrorln ("An invalid char is given at scim_bridge_string_to_int (): %c", str[i]); return RETVAL_FAILED; } value *= 10; value += digit; if (!negative) { if (value > INT_MAX) { scim_bridge_perrorln ("An over flow exception occurred at scim_bridge_string_to_int ()"); return RETVAL_FAILED; } } else { if (-((long) value) < INT_MIN) { scim_bridge_perrorln ("An over flow exception at scim_bridge_string_to_int ()"); return RETVAL_FAILED; } } } if (!negative) { *dst = value; } else { *dst = -value; } return RETVAL_SUCCEEDED; } } retval_t scim_bridge_string_to_boolean (boolean *dst, const char *str) { if (str == NULL) { scim_bridge_perrorln ("A NULL pointer is given as a string at scim_bridge_string_to_boolean ()"); return RETVAL_FAILED; } else { if (strcmp (str, "TRUE") == 0 || strcmp (str, "True") == 0 || strcmp (str, "true") == 0) { *dst = TRUE; return RETVAL_SUCCEEDED; } else if (strcmp (str, "FALSE") == 0 || strcmp (str, "False") == 0 || strcmp (str, "false") == 0) { *dst = FALSE; return RETVAL_SUCCEEDED; } else { scim_bridge_perrorln ("An invalid string is given at scim_bridge_string_to_boolean (): %s", str); return RETVAL_FAILED; } } } size_t scim_bridge_string_from_uint (char **str, unsigned int value) { const size_t str_length = snprintf (NULL, 0, "%u", value); *str = malloc (sizeof (char) * (str_length + 1)); sprintf (*str, "%u", value); return str_length; } size_t scim_bridge_string_from_int (char **str, int value) { const size_t str_length = snprintf (NULL, 0, "%d", value); *str = malloc (sizeof (char) * (str_length + 1)); sprintf (*str, "%d", value); return str_length; } size_t scim_bridge_string_from_boolean (char **str, boolean value) { if (value == TRUE) { *str = malloc (sizeof (char) * 5); strcpy (*str, "TRUE"); return 4; } else { *str = malloc (sizeof (char) * 6); strcpy (*str, "FALSE"); return 5; } } scim-master/extras/immodules/common/scim-bridge-string.h000066400000000000000000000105751415264260100237510ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This is the header for the functions to manupulate strings. */ #ifndef SCIMBRIDGESTRING_H_ #define SCIMBRIDGESTRING_H_ #include #include #include #include "scim-bridge.h" #ifdef __cplusplus extern "C" { #endif #ifndef __STDC_ISO_10646__ /** * The type for wide string. */ typedef uint32_t wchar; #else /** * The type for wide string. */ typedef wchar_t wchar; #endif /** * Translate an utf8 string into an ucs4 wide string. * * @param str String to translate. * @param wstr The destination for the new wide string. * @return The length of the new wide string. -1 means that it failed to translate. */ ssize_t scim_bridge_string_to_wstring (wchar **wstr, const char *str); /** * Translate an ucs4 wide string into an utf8 string. * * @param wstr Wide string to translate. * @param str The destination for the new string. * @return The length of the new string. -1 means that it failed to translate. */ ssize_t scim_bridge_wstring_to_string (char **str, const wchar *wstr); /** * Get the length of a string. * * @param str The string. * @return The length of the string. */ ssize_t scim_bridge_string_get_length (const char *str); /** * Get the length of a wide string. * * @param str The wide string. * @return The length of the wide string. */ ssize_t scim_bridge_wstring_get_length (const wchar *wstr); /** * Translate a string into an unsigned integer. * * @param str The string to translate. * @param dst The destination pointer of uint. * @return It returns RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_string_to_uint (unsigned int *dst, const char *str); /** * Translate a string into a integer. * * @param str The string to translate. * @param dst The destination pointer of int. * @return It returns RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_string_to_int (int *dst, const char *str); /** * Translate a string into a boolean. * * @param str The string to translate. * @param dst The destination pointer of boolean. * @return It returns RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAIL_FAILED. */ retval_t scim_bridge_string_to_boolean (boolean *dst, const char *str); /** * Translate an unsigned integer into a string. * * @param value The value to translate. * @param str The destination pointer for the new string. * @return The length of the new string if succeeded, otherwise it returns -1. */ size_t scim_bridge_string_from_uint (char **str, unsigned int value); /** * Translate a integer into a string. * * @param value The value to translate. * @param str The destination pointer for the new string. * @return The length of the new string if succeeded, otherwise it returns -1. */ size_t scim_bridge_string_from_int (char **str, int value); /** * Translate a boolean into a string. * * @param value The value to translate. * @param str The destination pointer for the new string. * @return The length of the new string if succeeded, otherwise it returns -1. */ size_t scim_bridge_string_from_boolean (char **str, boolean value); #ifdef __cplusplus } #endif #endif /*SCIMBRIDGESTRING_H_*/ scim-master/extras/immodules/common/scim-bridge.h000066400000000000000000000031141415264260100224340ustar00rootroot00000000000000/* * SCIM Bridge * * Copyright (c) 2006 Ryo Dairiki * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation and * appearing in the file LICENSE.LGPL included in the package of this file. * You can also redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation and * appearing in the file LICENSE.GPL included in the package of this file. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /** * @file * @author Ryo Dairiki * @brief This header describes about fundamental definitions of scim-bridge. */ #ifndef SCIMBRIDE_H_ #define SCIMBRIDE_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifndef SCIM_VERSION #define SCIM_VERSION "" #endif /** * The type of boolean. */ typedef int boolean; #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef NULL #define NULL 0 #endif /** * The type of retvals. */ typedef int retval_t; /** * The return value of failture. */ #define RETVAL_FAILED -1 /** * The return value of successness. */ #define RETVAL_SUCCEEDED 0 /** * The return value of ignoreness. */ #define RETVAL_IGNORED 1 #endif /*SCIMBRIDE_H_*/ scim-master/extras/immodules/config.rpath000077500000000000000000000436471415264260100211350ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2007 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <= 2.4.0 pango >= 1.1.0 gdk-pixbuf-2.0 >= 2.4.0], [SCIM_BRIDGE_HAS_GTK2=yes], [SCIM_BRIDGE_HAS_GTK2=no]) # Check if we should build scim-bridge-gtk3-immodule PKG_CHECK_MODULES(GTK3, [gtk+-3.0 >= 3.0.0 pango >= 1.24.0 gdk-pixbuf-2.0 >= 2.22.1], [SCIM_BRIDGE_HAS_GTK3=yes], [SCIM_BRIDGE_HAS_GTK3=no]) PKG_CHECK_MODULES(GTK4, [gtk4 >= 4.0.0 pango >= 1.48.0 gdk-pixbuf-2.0 >= 2.42.0], [SCIM_BRIDGE_HAS_GTK4=yes], [SCIM_BRIDGE_HAS_GTK4=no]) SCIM_BRIDGE_HAS_GTK2_2=no if test "$SCIM_BRIDGE_HAS_GTK2" = "yes"; then if $PKG_CONFIG --exists "gtk+-2.0 >= 2.2" ; then SCIM_BRIDGE_HAS_GTK2_2=yes GTK2_VERSION=2.2.0 AC_DEFINE(GDK_MULTIHEAD_SAFE,1,[Force use of GDK's multihead-safe APIs.]) fi if $PKG_CONFIG --exists "gtk+-2.0 >= 2.3.5" ; then SCIM_BRIDGE_HAS_GTK2_4=yes GTK2_VERSION=2.3.5 AC_DEFINE(HAVE_GTK_DRAW_INSERTION_CURSOR,1,[Have gtk_draw_insertion_cursor ().]) fi GTK2_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0` GTK2_LIBDIR=`$PKG_CONFIG --variable=libdir gtk+-2.0` if test -z "$GTK2_LIBDIR)"; then GTK2_LIBDIR="$libdir" fi AC_SUBST(GTK2_LIBDIR) AC_SUBST(GTK2_VERSION) AC_SUBST(GTK2_BINARY_VERSION) fi if test "$SCIM_BRIDGE_HAS_GTK3" = "yes"; then GTK3_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0` GTK3_LIBDIR=`$PKG_CONFIG --variable=libdir gtk+-3.0` if test -z "$GTK3_LIBDIR)"; then GTK3_LIBDIR="$libdir" fi AC_SUBST(GTK3_LIBDIR) AC_SUBST(GTK3_VERSION) AC_SUBST(GTK3_BINARY_VERSION) fi if test "$SCIM_BRIDGE_HAS_GTK4" = "yes"; then GTK4_BINARY_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk4` GTK4_LIBDIR=`$PKG_CONFIG --variable=libdir gtk4` if test -z "$GTK4_LIBDIR)"; then GTK4_LIBDIR="$libdir" fi AC_SUBST(GTK4_LIBDIR) AC_SUBST(GTK4_VERSION) AC_SUBST(GTK4_BINARY_VERSION) fi # Check if we should build scim-bridge-qt-immodule PKG_CHECK_MODULES(QT3, [qt-mt >= 3.3], [SCIM_BRIDGE_HAS_QT3=yes], [SCIM_BRIDGE_HAS_QT3=no]) if test "$SCIM_BRIDGE_HAS_QT3" = "yes"; then if test -z "$QT3_PREFIX"; then QT3_PREFIX=`$PKG_CONFIG --variable=prefix qt-mt` fi AC_SUBST(QT3_PREFIX) fi PKG_CHECK_MODULES(QT4, [QtGui >= 4.0, QtCore >= 4.0], [SCIM_BRIDGE_HAS_QT4=yes], [SCIM_BRIDGE_HAS_QT4=no]) if test "$SCIM_BRIDGE_HAS_QT4" = "yes"; then if test -z "$QT4_PREFIX"; then QT4_PREFIX=`$PKG_CONFIG --variable=prefix QtCore` fi AC_SUBST(QT4_PREFIX) fi # Check if we should build scim-bridge-clutter-immodule PKG_CHECK_MODULES(CLUTTER, clutter-0.9 clutter-imcontext-0.1, [SCIM_BRIDGE_HAS_CLUTTER=yes], [SCIM_BRIDGE_HAS_CLUTTER=no]) if test "$SCIM_BRIDGE_HAS_CLUTTER" = "yes"; then CLUTTER_IMCONTEXT_LIBDIR=`$PKG_CONFIG --variable=libdir clutter-imcontext-0.1` AC_SUBST(CLUTTER_LIBDIR) AC_SUBST(CLUTTER_VERSION) AC_SUBST(CLUTTER_BINARY_VERSION) AC_SUBST(CLUTTER_IMCONTEXT_LIBDIR) enable_clutter_immodule="yes"; fi ########################################################### ## Definiation of compile args. ## ########################################################### AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], [turn on debugging])], , enable_debug=no) AC_ARG_ENABLE(tests, [AS_HELP_STRING([--enable-tests], [build tests])], , enable_tests=yes) AC_ARG_ENABLE(documents, [AS_HELP_STRING([--enable-documents], [build documents])], , enable_documents=yes) AC_ARG_ENABLE(agent, [AS_HELP_STRING([--enable-agent], [build scim-bridge-agent])], , enable_agent=yes) AC_ARG_ENABLE(gtk2-immodule, [AS_HELP_STRING([--enable-gtk2-immodule], [build GTK2 IM module])], , enable_gtk2_immodule=yes) AC_ARG_ENABLE(gtk3-immodule, [AS_HELP_STRING([--enable-gtk3-immodule], [build GTK3 IM module])], , enable_gtk3_immodule=yes) AC_ARG_ENABLE(gtk4-immodule, [AS_HELP_STRING([--enable-gtk4-immodule], [build GTK4 IM module])], , enable_gtk4_immodule=yes) AC_ARG_ENABLE(qt3-immodule, [AS_HELP_STRING([--enable-qt3-immodule], [build Qt3 IM module])], , enable_qt3_immodule=yes) AC_ARG_ENABLE(qt4-immodule, [AS_HELP_STRING([--enable-qt4-immodule], [build Qt4 IM module])], , enable_qt4_immodule=yes) AC_ARG_ENABLE(clutter-immodule, [AS_HELP_STRING([--enable-clutter-immodule], [build CLUTTER IM module])], , ) if test "$enable_debug" = "yes"; then AC_DEFINE(ENABLE_DEBUG,1,[Define this to enable the debug facility in libscim]) CFLAGS="$CFLAGS -g -Wall -Wmissing-declarations -Wreturn-type" CXXFLAGS="$CXXFLAGS -g -Wall -Wshadow -Woverloaded-virtual -Wreturn-type" else enable_debug=no fi if test "$enable_tests" = "yes"; then SCIM_BRIDGE_BUILD_TESTS=1 else SCIM_BRIDGE_BUILD_TESTS=0 enable_tests=no fi if test "$enable_documents" = "yes"; then SCIM_BRIDGE_BUILD_DOCUMENTS=1 else SCIM_BRIDGE_BUILD_DOCUMENTS=0 enable_documents=no fi if test "$enable_agent" = "yes"; then PKG_CHECK_MODULES(SCIM,[scim >= $SCIM_VERSION]) SCIM_BRIDGE_BUILD_AGENT=1 else SCIM_BRIDGE_BUILD_AGENT=0 enable_agent=no fi SCIM_BRIDGE_BUILD_IMMODULE=0 enable_immodule=no if test "$enable_gtk2_immodule" = "yes" -a "$SCIM_BRIDGE_HAS_GTK2" = "yes"; then SCIM_BRIDGE_BUILD_GTK2_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BRIDGE_BUILD_GTK2_IMMODULE=0 enable_gtk2_immodule=no fi if test "$enable_gtk3_immodule" = "yes" -a "$SCIM_BRIDGE_HAS_GTK3" = "yes"; then SCIM_BRIDGE_BUILD_GTK3_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BRIDGE_BUILD_GTK3_IMMODULE=0 enable_gtk3_immodule=no fi if test "$enable_gtk4_immodule" = "yes" -a "$SCIM_BRIDGE_HAS_GTK4" = "yes"; then SCIM_BRIDGE_BUILD_GTK4_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BRIDGE_BUILD_GTK4_IMMODULE=0 enable_gtk4_immodule=no fi if test "$enable_qt3_immodule" = "yes" -a "$SCIM_BRIDGE_HAS_QT3" = "yes"; then SCIM_BRIDGE_BUILD_QT3_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BRIDGE_BUILD_QT3_IMMODULE=0 enable_qt3_immodule=no fi if test "$enable_qt4_immodule" = "yes" -a "$SCIM_BRIDGE_HAS_QT4" = "yes"; then SCIM_BRIDGE_BUILD_QT4_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 enable_immodule=yes else SCIM_BRIDGE_BUILD_QT4_IMMODULE=0 enable_qt4_immodule=no fi if test "$enable_clutter_immodule" = "yes"; then SCIM_BRIDGE_BUILD_CLUTTER_IMMODULE=1 SCIM_BRIDGE_BUILD_IMMODULE=1 if test "$SCIM_BRIDGE_HAS_CLUTTER" = "no" ; then AC_MSG_ERROR([CLUTTER can not be found!]) fi enable_immodule=yes else SCIM_BRIDGE_BUILD_CLUTTER_IMMODULE=0 enable_clutter_immodule=no fi AM_CONDITIONAL(SCIM_BRIDGE_BUILD_TESTS, [test "$enable_tests" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_DOCUMENTS, [test "$enable_documents" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_AGENT, [test "$enable_agent" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_GTK2_IMMODULE, [test "$enable_gtk2_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_GTK3_IMMODULE, [test "$enable_gtk3_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_GTK4_IMMODULE, [test "$enable_gtk4_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_QT3_IMMODULE, [test "$enable_qt3_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_QT4_IMMODULE, [test "$enable_qt4_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_CLUTTER_IMMODULE, [test "$enable_clutter_immodule" = "yes"]) AM_CONDITIONAL(SCIM_BRIDGE_BUILD_IMMODULE, [test "$enable_immodule" = "yes"]) AC_SUBST(SCIM_BRIDGE_BUILD_TESTS) AC_SUBST(SCIM_BRIDGE_BUILD_DOCUMENTS) AC_SUBST(SCIM_BRIDGE_BUILD_AGENT) AC_SUBST(SCIM_BRIDGE_BUILD_GTK2_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_GTK3_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_GTK4_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_QT3_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_QT4_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_CLUTTER_IMMODULE) AC_SUBST(SCIM_BRIDGE_BUILD_IMMODULE) # Output All necessary Paths. SCIM_ICONDIR=`$PKG_CONFIG --variable=icondir scim` SCIM_MODULEDIR=`$PKG_CONFIG --variable=moduledir scim` SCIM_DATADIR=`$PKG_CONFIG --variable=scimdatadir scim` SCIM_PREFIX=`$PKG_CONFIG --variable=prefix scim` SCIM_LIBDIR=`$PKG_CONFIG --variable=libdir scim` SCIM_LOCALEDIR=`$PKG_CONFIG --variable=localedir scim` if test "x$SCIM_ICONDIR" = "x"; then SCIM_ICONDIR=${datadir}/scim/icons fi if test "x$SCIM_MODULEDIR" = "x"; then SCIM_MODULEDIR=${libdir}/scim-1.0 fi if test "x$SCIM_DATADIR" = "x"; then SCIM_DATADIR=${datadir}/scim fi if test "x$SCIM_LIBEXECDIR" = "x"; then SCIM_LIBEXECDIR="${SCIM_LIBDIR}/scim-1.0" fi AC_SUBST(SCIM_ICONDIR) AC_SUBST(SCIM_MODULEDIR) AC_SUBST(SCIM_DATADIR) AC_SUBST(SCIM_LIBEXECDIR) AC_SUBST(SCIM_VERSION) AC_SUBST(SCIM_LOCALDIR) ########################################################### ## Output files. ## ########################################################### AC_SUBST(ac_aux_dir) AC_CONFIG_FILES([Makefile common/Makefile agent/Makefile client-common/Makefile client-gtk/gtk2/Makefile client-gtk/gtk3/Makefile client-qt/qt3/Makefile client-qt/qt4/Makefile client-clutter/Makefile tests/Makefile doc/Makefile]) AC_OUTPUT AC_MSG_RESULT([ Build options: Version $SCIM_BRIDGE_VERSION Install prefix $prefix Build shared libs $enable_shared Build static libs $enable_static Enable debug $enable_debug Module options: Build Tests $enable_tests Build Documents $enable_documents Build Agent $enable_agent Build GTK2 IMModule $enable_gtk2_immodule Build GTK3 IMModule $enable_gtk3_immodule Build GTK4 IMModule $enable_gtk4_immodule Build QT3 IMModule $enable_qt3_immodule Build QT4 IMModule $enable_qt4_immodule Build CLUTTER IMModule $enable_clutter_immodule ]) scim-master/extras/immodules/developers000066400000000000000000000000751415264260100207040ustar00rootroot00000000000000ryo-dairiki:'Ryo Dairiki 'scim-master/extras/immodules/doc/000077500000000000000000000000001415264260100173545ustar00rootroot00000000000000scim-master/extras/immodules/doc/LICENSE.GPL000066400000000000000000000431031415264260100210030ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. scim-master/extras/immodules/doc/LICENSE.LGPL000066400000000000000000000634761415264260100211360ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! scim-master/extras/immodules/doc/Makefile.am000066400000000000000000000023551415264260100214150ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_DOCUMENTS api: -rm -rf api; cd ..; doxygen doc/doxygen.conf all: api clean: rm -rf api endif MAINTAINERCLEANFILES = Makefile.in api CLEANFILES = *.bak EXTRA_DIST = doxygen.conf index.html document.css LICENSE.LGPL LICENSE.GPL dist-hook: mkdir -p $(distdir)/user mkdir -p $(distdir)/developer mkdir -p $(distdir)/tests cp user/*.html $(distdir)/user cp developer/*.html $(distdir)/developer cp tests/*.txt $(distdir)/tests scim-master/extras/immodules/doc/developer/000077500000000000000000000000001415264260100213415ustar00rootroot00000000000000scim-master/extras/immodules/doc/developer/client.html000066400000000000000000000322471415264260100235150ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Developer Manual: The clients

    Up

    The introduction

    The clients of scim-bridge communicates with the agent with utf8 string messages, but you don't have to understand them at all. There are the client library to handle them. All you have to do is to understand how to use this library.

    Let's learn about the event loop

    Most GUI applications have their own event loop. The event loop is unique for each process, and all the GUI events are handled in this big loop. Immodules could have another thread, but I don't recommand that because most GUI libraries are not "thread-safe". You should handle GUI events in the GUI thread and change the preedit only from the same thread. The most difficult point is the communication with the agent.

    How should I handle messages?

    The first step you should do is to add the pool trigger for your GUI library. This invokes an event when the message from the agent available. Creating another thread to pooling the socket is not recommanded as many GUI library is not thread safe. The ancient scim-bridge-0.1.* always has troubles with the violation of the GUI thread policy.

    Example:

    
    // This function is called while initializing the immodule.
    void scim_bridge_client_gtk_initialize ()
    {
        ...
    
        // Try to initialize scim client library.
        if (!scim_bridge_client_initialize ()) {
    
            // Add the IO channel for the socket.
            messenger_iochannel = g_io_channel_unix_new (scim_bridge_client_get_socket_fd ());
    
            // Register the IO channel to the GUI event loop, 
            // so that it calls handle_message () when the message is arrived.
            messenger_event_source = g_io_add_watch (messenger_iochannel, G_IO_IN, &handle_message, NULL);
    
        } else {
            scim_bridge_perrorln ("Error: Cannot initialize the client library");
            return;
        }
    
        ...
    }
                    

    In the event handler, you have to read_and_dispatch the message. It reads the message, translate it into C function calls for you. Note, read_and_dispatch might be block itself when there is no message at all.

    • retval_t scim_bridge_client_read_and_dispatch ()
      • Read and dispatch the message.
      • It returns RETVAL_SUCCEEDED if succeeded, otherwise it returns RETVAL_FAILED.

    Example:

    
    // This function is called when a message is arrived from the agent.
    static gboolean handle_message (GIOChannel *source, GIOCondition condition, gpointer data)
    {
        // Get the file discriptor for the socket.
        const int socket_fd = scim_bridge_client_get_socket_fd ();
    
        fd_set read_set;
        FD_ZERO (&read_set);
        FD_SET (socket_fd, &read_set);
    
        struct timeval timeout;
        timeout.tv_sec = 0;
        timeout.tv_usec = 0;
    
        // The GTK+ has some bug that it sometimes give us invalid pool events.
        // I have to check if an message is really available.
        if (select (socket_fd + 1, &read_set, NULL, NULL, &timeout) > 0) {
            
            // There should be an message arraived.
            // Now, read and dispatch the message.
            if (scim_bridge_client_read_and_dispatch ()) {
                // Error.
                scim_bridge_perrorln ("Error: IO exception");
            }
        }
    
        return TRUE;
    }
                    

    Note, some of the functions may block until the agent returns a response, but another message from the agent may interrupt to invoke the helper function while blocking. You might make a serious bug without understanding this feature. :<

    The registration

    When a new IMContext is allocated, you have to register it to the agent. You can get the unique ID for the IMContext if registration is succeeded. Of course, you also have to unregister it when it's freed. Note, the agent would free all the imcontext of the client when the connection is lost by accidents.

    • retval_t scim_bridge_client_register_imcontext (ScimBridgeClientIMContext *imcontext)
      • Register the new IMContext to the agent.
      • It gives the IMContext an uniqe ID if succeeded. Otherwise, the ID of the IMContext is set to -1.
    • retval_t scim_bridge_client_deregister_imcontext (ScimBridgeClientIMContext *imcontext)
      • Deregister the IMContext from the agent.
      • It sets the ID of the IMContext to -1.

    The preedit

    You can change the way to show the preedit for the client by following function. This is useful especially in the case the agent cannot show the preedit for you; The client can stop the agent showing the preedit and show the one by itself.

    • retval_t scim_bridge_client_set_preedit_mode (const ScimBridgeClientIMContext *imcontext, scim_bridge_preedit_mode_t mode)
      • Set the way to show the preedit.
      • The default value is SCIM_BRIDGE_PREEDIT_ANY, but you can chage that by giving NULL to imcontext.

    The key event

    As it says, the agent sometimes ignores the key events. In that case, the client can handle it by itself. If the "A" key is pressed and ignored, the client can commit "A" by its own. Otherwise, the client should not be handle it by its own. There is some arguments about the acclerator key events. Some say that the accelerator key events and nmemonic key events should not be passed the IM but be handled by the clients, while others say that IM should handle all the key events first. There is no standard for this, but I personally believe that the accelerators should be handled by the clients first and be passed to the agent later if it has not been consumed. :)

    • retval_t scim_bridge_handle_key_event (const ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event, boolean *consumed)
      • Request the agent to handle a key event.
      • When the event is consumed, The flag consumed gives TRUE.

    Example:

    
    // This function is called everytime a key event occures unless it's an accelerator key event.
    gboolean scim_bridge_client_imcontext_filter_key_event (GtkIMContext *context, GdkEventKey *event)
    {
        ...
    
        // Get the imcontext which is currently focused.
        ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context);
    
        // Check if the imcontext is valid.
        if (scim_bridge_client_is_active () && imcontext != NULL && !key_snooper_used) {
            ...
    
            // Translate the key event of Gtk+ into the one of scim-bridge.
            ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event ();
            scim_bridge_key_event_gdk_to_bridge (bridge_key_event, imcontext->client_window, event);
    
            // Pass it to the agent.
            boolean consumed = FALSE;
            const retval_t retval_error = scim_bridge_client_handle_key_event (imcontext, bridge_key_event, &consumed);
    
            if (retval_error) {
                // Error
                scim_bridge_perrorln ("IO error occured");
            } else if (consumed) {
                // The key event has been consumed.
                // Do not handle it any more.
                return TRUE;
            }
        }
    
        // The key event has not been consumed.
        // Handle it by the fallback handler.
        return gtk_im_context_filter_keypress (fallback_imcontext, event);
    }
                    

    The focus and the cursor location

    The information about the focus is very important. Without it, the agent can't handle IM events properly. You have to tell the agent everytime an IMContext loses its focus or gains a focus. When the focus is moved from an IMContext to another one, please tell focus-out first and then tell focus-in.

    • retval_t scim_bridge_client_set_focus (const ScimBridgeClientIMContext *imcontext, boolean focus_in)
      • The focus of an IMContext has been changed.
      • focus_in stands for the type of this focus changing. Give it TRUE if the IMContext gets the focus newly, otherwise give it FALSE.

    Example:

    // This function is called when it gains the focus.
    void scim_bridge_client_imcontext_focus_in (GtkIMContext *context)
    {
        ...
    
        // Get the imcontex which gets the focus now.
        ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context);
    
        // If another IMContext still has the focus, get it back. 
        if (focused_imcontext != NULL && focused_imcontext != imcontext) {
            scim_bridge_client_imcontext_focus_out (GTK_IM_CONTEXT (focused_imcontext));
        }
    
        focused_imcontext = imcontext;
    
        ...
        if (scim_bridge_client_is_active () && imcontext != NULL) {
            
            // Tell the agent the focus changing.
            if (scim_bridge_client_set_focus (imcontext, TRUE)) {
                // Error
                scim_bridge_perrorln ("Cannot handle `focus-in` properly");
            }
        }
    
        ....
    }
    
    // This function is called when it loses the focus.
    void scim_bridge_client_imcontext_focus_out (GtkIMContext *context)
    {
        ...
    
        ScimBridgeClientIMContext *imcontext = SCIM_BRIDGE_CLIENT_IMCONTEXT (context);
    
        focused_imcontext = imcontext;
    
        // Hide the preedit. (Not necessary, but recommanded)
        if (imcontext->preedit_shown) {
            scim_bridge_client_imcontext_set_preedit_shown (imcontext, FALSE);
            scim_bridge_client_imcontext_update_preedit (imcontext);
        }
        if (scim_bridge_client_is_active () && imcontext != NULL) {
    
            // Tell the agent the focus changing.
            if (scim_bridge_client_set_focus (imcontext, FALSE)) {
                scim_bridge_perrorln ("Cannot handle `focus-out` properly");
            }
        }
    
        ...
        focused_imcontext = NULL;
    }
                    

    The cursor location is required by the agent when it shows the preedit and the lookup table. You have to tell the agent the cursor position in the display continually to update the location of them properly, otherwise they won't show up in the correct positions. On the other hand, you don't have to tell it when all of them are showen by the clients.

    • retval_t scim_bridge_client_set_cursor_location (const ScimBridgeClientIMContext *imcontext, int x, int y)
      • Change the cursor location in the display.


    scim-master/extras/immodules/doc/developer/imcontext.html000066400000000000000000000245071415264260100242510ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Developer Manual: IMContexts

    Up

    About this datatype

    The IMContext is the data type for input methods. This contains context data of input method, such as focused widgets or current lines. IMContexts behave as interface between the client library of scim-bridge and GUI libraries. Every message from the agent invokes functions of the current IMContext, and GUI events should be treated as events from IMContexts (see the previous section). So basically, all the functions of IMContext is to be implemented by you.

    Registering and deregistering it

    In allocating and finalizing IMContexts, the client must call scim_bridge_client_register_imcontext and scim_bridge_client_degister_imcontext. See the previous section.

    Showing the preedit string

    In the embedded preedit mode, preedit related functions are called everytime the agent update the preedit. There are some functions to implement to show it.

    • void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imcontext)
      • Update the preedit.
      • All the changes are applied by calling this function.
    • void scim_bridge_client_imcontext_set_preedit_shown (ScimBridgeClientIMContext *imcontext, boolean shown)
      • Set the visibility of the preedit.
      • shown stands for the visibility, TRUE to show it.
    • void scim_bridge_client_imcontext_set_preedit_string (ScimBridgeClientIMContext *imcontext, const char *string)
      • Set the contents of the preedit.
      • string is the utf8 encoded string for the preedit.
    • void scim_bridge_client_imcontext_set_preedit_attributes (ScimBridgeClientIMContext *imcontext, const ScimBridgeAttribute **attributes, int attribute_count)
      • Set the attributes (= appearance) of the preedit.
      • attributes is the array of the attributes for the preedit.
      • attribute_count is the number of the attributes.
    • void scim_bridge_client_imcontext_set_preedit_cursor_position (ScimBridgeClientIMContext *imcontext, int cursor_position)
      • Set the caret index in the preedit.
      • cursor_position is the caret index, 0 means that the caret is in the front of the preediting resion.

    Commiting a string

    Commit functions are called everytime you settle the preedit string.

    • void scim_bridge_client_imcontext_set_commit_string (ScimBridgeClientIMContext *imcontext, const char *string)
      • Set the string to commit.
    • void scim_bridge_client_imcontext_commit_string (ScimBridgeClientIMContext *imcontext)
      • Commit a string.

    Handling key events

    When the key is pressed, the client should call scim_bridge_handle_key_event. See the previous section.

    There are also forwarding key events from the agent. Please add it into the GUI event queue.

    • void scim_bridge_client_imcontext_forward_key_event (const ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event)
      • A key event is forwarded from the agent.

    Example:

    // This function is called when a key event is forwarded from the agent.
    void scim_bridge_client_imcontext_forward_key_event (const ScimBridgeClientIMContext *imcontext, const ScimBridgeKeyEvent *key_event)
    {
        // Translate it into GTK key event.
        GdkEventKey gdk_event;
        scim_bridge_key_event_bridge_to_gdk (&gdk_event, imcontext->client_window, key_event);
    
        // Then add it into gtk event queue.
        gdk_event_put ((GdkEvent*) &gdk_event);
    }
                    

    Handling the focus and the cursor location

    The focus information and the cursor locations should be send the agent. Follow the instruction in the previous section.

    Processing the surrounding text

    There are some IME which use the text around input cursor. The clients should be able to handle at least one paragraph before and after the cursor. This feature is very important for IMEs of some languages. They choose which character to insert following to the characters before and after the insertation position. The following functions are called when manupulation of the surrounding text is required.

    • boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position)
      • The surrounding text is required from the agent.
      • Return TRUE if it succeeded to get the surrounding text, otherwise return FALSE.
      • before_max and after_max are the maximum wchars to get before and after the cursor.
      • string is the pointer for the gotten text. You can give it "NULL" if not available.
      • cursor_position is the cursor_position (in wchar) in the gotten text.
    • boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, intlength)
      • Delete a part of the surrounding text.
      • This function is applied on the surrounding text, which is gotten by the previous call of get_surrounding_text ().
      • Return TRUE if it succeeded to delete that, otherwise return FALSE.
      • offset is the begining offset (in wchar) of the text to delete from the caret.
      • length is the length of the text to remove.
    • boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string)
      • Replace the surrounding text.
      • This function is applied on the surrounding text, which is gotten by the previous call of get_surrounding_text ().
      • Return TRUE if it succeeded to replace the surrounding text, otherwise return FALSE.
      • cursor_position is the cursor_position (in wchar) in the new text.
      • string is the new text to set as the surrounding text.

    Misc functions

    There are some functions you have to implement, but they can be ignored if you doesn't need it. If you wonder how to implement, leave them as dummy (empty) implimentations.

    • void scim_bridge_client_imcontext_beep (const ScimBridgeIMContext *imcontext)
      • Make a beep sound.


    scim-master/extras/immodules/doc/developer/index.html000066400000000000000000000070541415264260100233440ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Developer Manual

    Up


    scim-master/extras/immodules/doc/developer/introduction.html000066400000000000000000000061001415264260100247450ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Developer Manual: The introduction

    Up

    About the author

    This library is mainly written by one of a member of SCIM project, Ryo Dairiki.
    Please contact me freely if you find any bug.
    Any other reports are also welcomed.

    What is this for?

    Scim-bridge is wrapper library for SCIM, written in C. It is firstly written to solve problems occured by the ABI transition of GNU libstdc++ between 3.* branch and 4.* branch. That's not the problem in the most of cases because you usually used the same compiler for SCIM and GUI apps.

    But there are some cases you have to load the shared libraries into apps compiled on the different C++ ABI. For example, you cannot use SCIM compiled by g++ 4.* on acroread, which seems to be compiled by g++ 3.*. But you can load Scim-bridge even in that case, because it is written in C not C++.

    There is another benefit of it too, that is, you can reduce the complexity of dependency tree around SCIM by using Scim-bridge. Scim-bridge is seperated in two parts, the agent and the clients. The agent is the IME server which communicates with SCIM. The clients are IMModules which communicate only with the agent so that there is no binary dependency between the clients and SCIM. The binary dependency between the GUI apps and SCIM often cause problems, and difficult to solve. I hope this will help the packagers of SCIM.

    How does it work?

    The immodule of Scim-bridge, that is, scim-bridge-clients forward key events to the agent over the unix domain socket. And the agent handled them and send back the commands to update the preedit or show lookup table.

    The plan for the future

    There are some plans for the future.

    • Qt client
    • Console client
    • UIM agent


    scim-master/extras/immodules/doc/developer/protocol.html000066400000000000000000000476641415264260100241110ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Developer Manual: The communication protocol

    Up

    Who does need this section?

    Basically, you don't have to know about the communication protocol between the agent and the clients because the client library interprets it for you. So, this section is mainly written for...

    • core developers of scim-bridge.
    • he or she who wants to write clients without using C language.
    • he or she who wants to write an alternative agent.

    Let's know about the fumdamental rules

    • Every message is described in UTF8, and it ends with '\n'.
    • Every message must begin with the header. It can also has some following arguments.
    • All the items (the header and the arguments) in a message are seperated by spaces (' ').
      Note, the seperator of two spaces indicate that there are a *NULL* argument between them.
    • Space characters (' ') or line feed characters ('\n') included in headers and arguments must be espaced by '\', like "\s" and "\n".
      Note, '\' itself must be espaced by itself.
    • Some commands expect response from the other. It will block until the responsive message arrives, so you have to send it as soon as possible.

    Now, you can communicate with the agent by open the unix domain socket in O_RDWR mode.

    The command list

    The following list describes all the commands go through the socket.

    From the agent to clients:

    • preedit_mode_changed
      • The way to show the preedit has been changed.
      • This message is the response of set_preedit_mode.
    • imcontext_registered id
      • An IMContext has been registered.
      • This message is the response of register_imcontext.
      • id stands for the ID for the new IMContext.
    • imcontext_deregistered
      • An IMContext has been deregistered.
      • This message is the response of deregister_imcontext.
    • imcontext_reseted
      • An IMContext has been reseted.
      • This message is the response of reset_imcontext.
    • focus_changed
      • The focus has been changed.
      • This message is the response of set_focus.
    • cursor_location_changed
      • The cursor position in the display has been changed.
      • This message is the response of set_cursor_location.
    • update_preedit id
      • Update the embedded preedit.
      • You should expect preedit_updated as the response.
      • id stands for the ID of IMContext.
    • set_preedit_shown id shown
      • Update visibility of the preedit.
      • id stands for the ID of IMContext.
      • shown stands for new visiblity. Give it "true" or "false".
      • Note that clients shouldn't change the preedit until update_preedit is called.
      • This command can be ignored if invalid IMContext is requested.
    • set_preedit_string id string
      • Update the preedit string.
      • id stands for the ID of IMContext.
      • string stands for new preedit string.
      • Note that clients shouldn't change the preedit until update_preedit is called.
      • This command can be ignored if invalid IMContext is requested, or the preedit is not shown.
    • set_preedit_attributes id begin1 end1 type1 value1 begin2 ...
      • Update the attributes of the preedit string.
      • id stands for the ID of IMContext.
      • begin* stands for begining index (in wcs) of the attribute.
      • end* stands for ending index (in wcs) of the attribute.
      • type* stands for the type of the attribute.
      • value* stands for the value of the attribute.
      • Please read here if you want to know what attributes are supported.
      • Note that clients shouldn't change the preedit until update_preedit is called.
      • This command can be ignored if invalid IMContext is requested, or the preedit is not shown.
    • commit_string id string
      • Commit a string into the focused widget.
      • You should expect string_committed as the response.
      • id stands for the ID of IMContext.
      • string stands for the string to commit.
    • get_surrounding_string id before_max after_max
      • Get the surrounding string of the caret.
      • You should expect surrounding_string_gotten as the response.
      • id stands for the ID of IMContext.
      • before_max is the maximum expected wide characters before the caret.
      • after_max is the maximum expected wide characters after the caret.
    • delete_surrounding_string id offset length
      • Delete a part of the surrounding string of the caret.
      • You have to get it by get_surrounding_string before using this.
      • You should expect surrounding_string_deleted as the response.
      • id stands for the ID of IMContext.
      • offset is the starting offset of the text to remove from the caret.
      • length is the length of the text to remove.
    • replace_surrounding_string id corsor_index string
      • Replace the surrounding string of the caret.
      • You have to get it by get_surrounding_string before using this.
      • You should expect surrounding_string_replaced as the response.
      • id stands for the ID of IMContext.
      • cursor_index is the new caret position in the new surrounding string.
      • string is the text to be set as the new surrounding string.
    • beep id
      • Make a beep sound.
      • You should expect beeped as the response.
      • id stands for the ID of IMContext.
    • key_event_handled consumed
      • The key event has been handled.
      • consumed stands for if the event has been consumed. You'll get "true" if the event has been consumed. Otherwise, you'll get "false".
      • Note, the events which has not been consumed must be passed to GUI library as the fallback key events.

    From the clients to agent:

    • set_preedit_mode id mode
      • Set the way to show the preedit.
      • You should expect preedit_mode_changed as the response.
      • id stands for the ID for the new IMContext. You can give it "-1" to change the default value for the client.
      • mode stands for how to show the preedit. See also here.
      • Note, the default mode is "any".
    • set_cursor_location x y
      • Change the cursor location in the screen.
      • Note, the location must be an abolute location in the screen.
      • You must send this message unless you use "embedded" or "floating" for all the preedits, the lookup tables.
    • register_imcontext
      • Register a new imcontext to the agent.
      • You should expect imcontext_registered as the response.
    • deregister_imcontext id
      • Request to deregister of an imcontext.
      • id stands for the ID of IMContext.
      • You should expect imcontext_reseted as the response.
    • reset_imcontext id
      • Request to reset of an imcontext.
      • id stands for the ID of IMContext.
      • You should expect imcontext_reseted as the response.
    • string_commited
      • A string is commited into the focused widget.
      • This messages is the response of commit_string.
    • preedit_updated
      • The embedded preedit has been updated.
      • This message is the response of update_preedit.
    • set_focus id focus_in
      • Request to focus or unfocus an IMContext.
      • You should expect focus_changed as the response.
      • id stands for the ID of IMContext.
      • focus_in stands for which request this is. Give it "true" if you want to focus this. Otherwise, give it "false".
    • handle_key_event id key_code key_pressed modifier1 modifier2 ...
      • Handle a key event.
      • You should expect key_event_handled as the response.
      • id stands for the ID of IMContext.
      • key_code stands for the code of the key. (I'll give you a list of them later...)
      • key_pressed stands for whether the key is pressed or not. Give it "true" if the key is pressed. Otherwise, give it "false".
      • modifier* stands for the modifier accompanied with the event key. (I'll give you a list of them later...)
    • forward_key_event id key_code key_pressed modifier1 modifier2 ...
      • A key event has been forwarded from the agent.
      • key_code stands for the code of the key. (I'll give you a list of them later...)
      • key_pressed stands for whether the key is pressed or not. You'll get "true" if the key is pressed. Otherwise, you'll get "false".
      • modifier* stands for the modifier accompanied with the event key. (I'll give you a list of them later...)
    • surrounding_string_gotten retval string cursor_position
      • The surrounding string has been gotten.
      • This is the response of get_surrounding_string.
      • retval returns "TRUE" if it succeeded, otherwise it returns "FALSE".
      • cursor_position is the caret position in the surrounding string. None is given if (retval) is FALSE.
      • string is the surrounding string. None is given if retval is "FALSE".
    • surrounding_string_deleted retval
      • The surrounding string of the caret has been deleted.
      • This is the response of delete_surrounding_string.
      • retval returns "TRUE" if it succeeded, otherwise it returns "FALSE".
    • surrounding_string_replaced retval
      • The surrounding string of the caret has been replaced.
      • This is the response of replace_surrounding_string.
      • retval returns "TRUE" if it succeeded, otherwise it returns "FALSE".


    Appendix: Supported attributes

    TypeDescriptionSupported values
    foregroundChange the text color of the preedit.Colors in the format of "#RRGGBB".
    backgroundChange the background color of the preedit.Colors in the format of "#RRGGBB".
    decoratationChange the background color of the preedit."reverse" to exchange the foreground color and background one.
    "hilight" to hilight the preedit.
    "underline" to add a line under the preedit.
    noneInvalid attribute."none" is recommanded.


    Appendix: Modes for the the preedit.

    TypeDescription
    embeddedThe clients show the one by itself. The agent must not show the one.
    hangingThe agent show the one just under the caret if the caret position is available. Otherwise, this is the same as "floating".
    floatingThe agent show the one in any position.
    anyThe agent uses it following to its preference.


    scim-master/extras/immodules/doc/document.css000066400000000000000000000014401415264260100217030ustar00rootroot00000000000000body { background-color: #FFFFFF; font-family: "sans"; font-size: medium; margin-top: 1em; margin-left: 1em; margin-right: 1em; margin-bottom: 1em; text-align: left; } ul { margin-bottom: 1em; } li { margin-top: 0.5em; margin-bottom: 0.5em; } td { padding: 0.5em; } table { border-width: 1; margin-left: 1em; } .example { margin-left: 2em; margin-right: 2em; background: #CCCCCC; } .description { margin: 1em; } .cauntion { font-size: large; font-weight: bold; font-style: italic; color: #FF0000; } .caption { margin-left: 1em; font-size: medium; font-weight: bold; } .bullet_in { font-size: large; text-align: left; } .copyright { font-size: medium; text-align: right; } scim-master/extras/immodules/doc/doxygen.conf000066400000000000000000001436641415264260100217160ustar00rootroot00000000000000# Doxyfile 1.4.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = SCIM Bridge # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 0.4.x # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = Yes # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = no # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = YES # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = NO # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO scim-master/extras/immodules/doc/icon/000077500000000000000000000000001415264260100203045ustar00rootroot00000000000000scim-master/extras/immodules/doc/icon/kasasagi.png000066400000000000000000000022361415264260100226000ustar00rootroot00000000000000PNG  IHDRw=sBIT|dtEXtSoftwarewww.inkscape.org<0IDATHǥkL[eEoFf2PBPڮR P"Y8-8-7 8ؼg"c8լt\6.-:(I9=yz}mށ-0MxVvLϦ¾) n p9 LN2>9}RgzvCVW.1Aɉ];=NmVB?/{vF;}AW%"I5$t`Eh/%@<P^/Ѓ]s1t]`vsf;BEUf.q image/svg+xml scim-master/extras/immodules/doc/index.html000066400000000000000000000014601415264260100213520ustar00rootroot00000000000000 Scim Bridge: Developer Manual

    Scim Bridge Documents


    The developer manual
    The user manual
    The api manual


    scim-master/extras/immodules/doc/tests/000077500000000000000000000000001415264260100205165ustar00rootroot00000000000000scim-master/extras/immodules/doc/tests/basic.txt000066400000000000000000000032461415264260100223450ustar00rootroot00000000000000* Basic tests: Preparation: 1. Kill all the process of "scim-bridge" before the tests. 2. Confirm that the IME is currently turned off if you use "shared-imengine" mode. 3. Open a terminal on the X. 4. export the environmental variable, "GTK_IM_MODULE=scim-bridge". 5. export the environmental variable, "SCIM_BRIDGE_DEBUG_LEVEL=9". 6. Launch "gedit". Steps: 0-1. Confirm that the debug strings are appeared in the terminal. 0-3. Confirm that the IME is still deactivated. 0-4. Type "hello, world!" to check if SCIM-Bridge is correctly loaded. 0-5. Focus in and out the the window, and then type "hello, again". 0-6. Press "ctrl+F" to open the fiding dialog. 0-7. Switch the focus between the dialog and the main window. 0-8. Type other strings to confirm that focus transition is correctly handled. 0-9. Close the fiding dialog with the focus staying on the entry field of it. Expected results: - "scim-bridge" will be launched and it'll exit on quitting gedit. - Nothing special is occured. Steps: 1-1. Turn on the IME from the menu on the panel. (I use "scim-anthy" in the following case) 1-2. Check if the status display of the panel has been changed. 1-3. Type something to confirm the preedit is correctly shown. 1-4. Move the cursor in the preedit forward and backward. 1-5. Enter the coversation mode, and show the lookup table. The lookup table should be shown just under the cursor. 1-6. Shrink and expand the conversation segments to check the appearance of the preedit is correctly applied. 1-7. Commit it, and see if the string is correctly inserted. 1-8. Focus out the main window with the preedit shown. The preedit should be killed that time. Expected results: - Nothing to say. scim-master/extras/immodules/doc/tests/broken_clients.txt000066400000000000000000000017071415264260100242650ustar00rootroot00000000000000* Kill a client: Steps: 1. Open a terminal on the X. 2. export the environmental variable, "GTK_IM_MODULE=scim-bridge". 3. Launch "scim-bridge --verbose --standalone --noexit". 4. Launch "gedit" and "yelp". 5. Kill the client by "sleep 5; killall gedit". Please stay focusing or typing in gedit until it exits. Expected results: - The client exits. - The agent notices that the client is downed. (Such kind of messages are shown) - You are still able to use scim-bridge on "yelp". * Suspend a client. Steps: 1. Open a terminal on the X. 2. export the environmental variable, "GTK_IM_MODULE=scim-bridge". 3. Launch "scim-bridge --verbose --standalone --noexit". 4. Launch "gedit" and "yelp". 5. Kill the client by "sleep 5; killall -SIGSTOP gedit". Please stay focusing or typing in gedit until it exits. Expected results: - The client suspends. - You are still able to use scim-bridge on "yelp". - (You can resume the client by "killall -SIGCONT gedit" later) scim-master/extras/immodules/doc/tests/fallback.txt000066400000000000000000000013361415264260100230210ustar00rootroot00000000000000* Confirm that the fallback imengine in GTK behaves politely for SCIM: Steps: 1. Launch gedit on the X. 2. Choose US/Keyboard from SCIM panel, or disable SCIM by "ctrl+space". 3. Type "Ctrl+Shift+123" in gedit. (Ctrl and Shift are pressed while typing 1, 2, and 3) 4. Release Ctrl+Shift. 5. Repeat step3. 6. Click the desktop to focus out gedit. 7. Return the focus on gedit again. 8. Choose SCIM-Anthy or SCIM-Pinyin form SCIM panel. 9. Repeat step3. Expected results: - Underlined text, "u123" appears as a preedit in step3. - The preedit vanished, and the character for U+0123 ("g" with a dash mark) is inserted in step4. - The preedit canceled in step6. - No preedit or commitment on gedit in step7. - Nothing happens in step 9.scim-master/extras/immodules/doc/tests/im_status.txt000066400000000000000000000020041415264260100232630ustar00rootroot00000000000000* Turn on and off the IME in the shared IME mode: Steps: 1. Open the scim-setup and turn on "Share the same input method among all applications" in the "global" category, and exit. 2. Turn on the IME. 3. Shift the focus into another window. 4. Turn off the IME. 5. Shift the focus back to the previous window. Expected results: - The status of the IME are shared between the windows. - The on-and-off status is shared. - The always the same IME are selected. * Turn on and off the IME in the non-shared IME mode: Steps: 1. Open the scim-setup and turn off "Share the same input method among all applications" in the "global" category, and exit. 2. Turn on the IME. 3. Shift the focus into another window. 4. Turn off the IME. 5. Shift the focus back to the previous window. 6. Tuen on the IME, and choose another IME by the panel. 7. Focus back the other window. Expected results: - The IME are always off when you focus a window. - The IME are not shared between the window; You can choose different one for each window. scim-master/extras/immodules/doc/tests/launching.txt000066400000000000000000000024061415264260100232310ustar00rootroot00000000000000* Launch the scim-bridge in the "standalone" mode: Steps: 1. Open a terminal on the X. 2. export the environmental variable, "GTK_IM_MODULE=scim-bridge". 3. Launch "scim-bridge --verbose --standalone". Expected results: - The process of "scim-bridge" will be invoked. (You can check this by "ps -A | grep scim-bridge") - The lockfile, "scim-bridge-.lockfile-@localhost:." is created under "/tmp" dir. - The socket, "scim-bridge-.socket-@localhost:." is created under "/tmp" dir. - You'll see the startup messages from the scim-bridge. - "^c" (= ctrl-c) kills the agent process without any error. - The lockfile and the socket are removed on exiting. * Launch another process of scim-bridge in the "standalone" mode: Steps: 1. Open a terminal on the X. 2. export the environmental variable, "GTK_IM_MODULE=scim-bridge". 3. Launch "scim-bridge --verbose --standalone". 4. Open another terminal on the X, and repeat from 2 and 3 on the new terminal. Expected results: - The new process will exit automatically with the message of "Another agent is running, exitting...". - The old process still remains and is kicking. - The old lockfile and the socket remains under the directory of "/tmp". scim-master/extras/immodules/doc/user/000077500000000000000000000000001415264260100203325ustar00rootroot00000000000000scim-master/extras/immodules/doc/user/index.html000066400000000000000000000107631415264260100223360ustar00rootroot00000000000000 Scim Bridge: User Manual

    Scim Bridge User Manual

    Up

    How to install?

    The most component of scim-bridge can be installed just by "make install". However, there are some steps you have to do before you use it.

    The first step is registering the IMModule. Please run "update-gtk-immodules (host-triplet)" for GTK+ from the terminal with the root privilege. "(host-triplet)" is the architecture you use, for example, "x86_64-redhat-linux-gnu" in my case. If you have no error, go for the next step.

    The second step is choosing the new IMModule as the default IMModule. This is achived by exporting an environmental value as "GTK_IM_MODULE=scim-bridge" for GTK+. You can test this temporary from a X terminal. Please export it and launch "gedit". If the scim-bridge works correctly, you see "scim-bridge-agent" in the output of "ps -A". Most os have their own ways to export it it a X session. There seems no standard way to achieve this. Please follow the instruction of yours. :(

    How to debug it?

    The debug output from the client is easily gotten by exporting environmental variables, that is "SCIM_BRIDGE_DEBUG_LEVEL". This variable decides the verbosity of the debug output. If you set it "9", you get all the debug output from the client. On the other hand, "0" makes it quiet, kills all the debug output.

    On the other hand, the debug output from the agent is difficult to get, because it detaches itself from the console and fork as soon as it launches. You can disable this feature by launch it manually (kill the agent process beforehand) with the argument "--standalone", which prevent the process to daemonize itself. You can get the debug output by giving the argument "--verbose". There is also another usefull argument for debugging. That is "--noexit". Without it, the agent exits automatically when the last client is gone.

    Is there any undocumnented features?

    There are some undocumented features in scim-bridge. They are written only for dealing with bugs of famous (infamous?) applications, so they might be removed in the feature releases without any notification.

    • Key snooper. (enabled by the environmental variable, "SCIM_BRIDGE_KEY_SNOOPER=true")
      • Use "key snooper" to sneak all the key events in gtk+ apps.
      • Please use it for OpenOffice.org, which doesn't pass the key releasing events to IMModules.
      • Note, it might kill key accelerators of the applications.

    Where can I send a bug report?

    Scim-bridge is developed as the part of SCIM project. You can report it directly into the mailing list of that. (The most recommanded one is scim-devel-list, I won't miss it if you post there) But please note that you have to tell the distributors first if you use the package included in the distribution, or the package maden by someone else. They might know the better way to solve your problem than I do. :)


    scim-master/extras/immodules/tests/000077500000000000000000000000001415264260100177515ustar00rootroot00000000000000scim-master/extras/immodules/tests/Makefile.am000066400000000000000000000022331415264260100220050ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## ## Copyright (C) 2006 Ryo Dairiki ## ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public ## License as published by the Free Software Foundation and ## appearing in the file LICENSE.LGPL included in the package of this file. ## You can also redistribute it and/or modify it under the terms of ## the GNU General Public License as published by the Free Software Foundation and ## appearing in the file LICENSE.GPL included in the package of this file. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if SCIM_BUILD_TESTS do_subst = sed -e 's,[@]top_builddir[@],@top_builddir@,g' if SCIM_BUILD_TESTS noinst_SCRIPTS = test-exec.sh gtk.immodules test-exec.sh: test-exec.sh.in $(do_subst) < $^ > $@; chmod a+x $@ gtk.immodules: gtk.immodules.in $(do_subst) < $^ > $@; chmod a+x $@ endif endif MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = test-exec.sh.in gtk.immodules.in scim-master/extras/immodules/tests/gtk.immodules.in000066400000000000000000000001461415264260100230640ustar00rootroot00000000000000"@top_builddir@/client-gtk/.libs/im-scim-bridge.so" "scim-bridge" "SCIM Bridge Input Method" "" "" "" scim-master/extras/immodules/tests/test-exec.sh.in000077500000000000000000000010571415264260100226210ustar00rootroot00000000000000#!/bin/sh export SCIM_BRIDGE_DEBUG_LEVEL="9" export PATH=@top_builddir@/agent/:${PATH} export GTK_IM_MODULE_PATH=@top_builddir@/client-gtk/.libs/ export GTK_IM_MODULE_FILE=@top_builddir@/tests/gtk.immodules export GTK_IM_MODULE=scim-bridge export QT_IM_MODULE=scim-bridge help_needed=0 if [ $# -eq 0 ] then help_needed=1 elif [ $1 == "-h" -o $1 == "--help" ] then help_needed=1 fi if [ $help_needed -eq 1 ] then echo "Usage: $0 [command] [command-arguments]" echo "Note that testing for the qt immodule is not well implemented" fi exec $@ scim-master/extras/panel/000077500000000000000000000000001415264260100157105ustar00rootroot00000000000000scim-master/extras/panel/Makefile.am000066400000000000000000000017661415264260100177560ustar00rootroot00000000000000MAINTAINERCLEANFILES = Makefile.in AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/data \ -I$(top_srcdir)/utils \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" if SCIM_BUILD_PANEL_GTK CONFIG_SCIM_PANEL_GTK = scim-panel-gtk endif libexecdir = $(libdir)/scim@SCIM_EPOCH@ libexec_PROGRAMS = $(CONFIG_SCIM_PANEL_GTK) scim_panel_gtk_SOURCES = scim_panel_gtk.cpp scim_panel_gtk_CXXFLAGS = @GTK_CFLAGS@ @GTHREAD2_CFLAGS@ scim_panel_gtk_LDFLAGS = @GTK_LIBS@ @GTHREAD2_LIBS@ @LTLIBINTL@ scim_panel_gtk_LDADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la \ $(top_builddir)/utils/libscim-gtkutils@SCIM_EPOCH@.la scim-master/extras/panel/scim_panel_gtk.cpp000066400000000000000000004576731415264260100214210ustar00rootroot00000000000000/** @file scim_panel_gtk.cpp */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_panel_gtk.cpp,v 1.118.2.15 2007/04/11 11:30:31 suzhe Exp $ */ #include #include #include #include #include #include #include #include #ifdef GDK_WINDOWING_X11 #include #endif #include #include #include #define Uses_C_STDIO #define Uses_C_STDLIB #define Uses_SCIM_LOOKUP_TABLE #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_SCIM_TRANS_COMMANDS #define Uses_SCIM_CONFIG #define Uses_SCIM_CONFIG_MODULE #define Uses_SCIM_DEBUG #define Uses_SCIM_HELPER #define Uses_SCIM_HELPER_MODULE #define Uses_SCIM_PANEL_AGENT #include "scim_private.h" #include "scim.h" #include "scim_stl_map.h" #include "scimstringview.h" #if ENABLE_TRAY_ICON // #include "scimtrayicon.h" #endif using namespace scim; #include "icons/up.xpm" #include "icons/down.xpm" #include "icons/left.xpm" #include "icons/right.xpm" #include "icons/setup.xpm" #include "icons/help.xpm" #include "icons/trademark.xpm" #include "icons/pin-up.xpm" #include "icons/pin-down.xpm" #include "icons/menu.xpm" #define SCIM_CONFIG_PANEL_GTK_FONT "/Panel/Gtk/Font" #define SCIM_CONFIG_PANEL_GTK_COLOR_NORMAL_BG "/Panel/Gtk/Color/NormalBackground" #define SCIM_CONFIG_PANEL_GTK_COLOR_ACTIVE_BG "/Panel/Gtk/Color/ActiveBackground" #define SCIM_CONFIG_PANEL_GTK_COLOR_NORMAL_TEXT "/Panel/Gtk/Color/NormalText" #define SCIM_CONFIG_PANEL_GTK_COLOR_ACTIVE_TEXT "/Panel/Gtk/Color/ActiveText" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_SHOW "/Panel/Gtk/ToolBar/AlwaysShow" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_HIDDEN "/Panel/Gtk/ToolBar/AlwaysHidden" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_AUTO_SNAP "/Panel/Gtk/ToolBar/AutoSnap" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_HIDE_TIMEOUT "/Panel/Gtk/ToolBar/HideTimeout" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_X "/Panel/Gtk/ToolBar/POS_X" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_Y "/Panel/Gtk/ToolBar/POS_Y" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_ICON "/Panel/Gtk/ToolBar/ShowFactoryIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_NAME "/Panel/Gtk/ToolBar/ShowFactoryName" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_STICK_ICON "/Panel/Gtk/ToolBar/ShowStickIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_HELP_ICON "/Panel/Gtk/ToolBar/ShowHelpIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_MENU_ICON "/Panel/Gtk/ToolBar/ShowMenuIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_PROPERTY_LABEL "/Panel/Gtk/ToolBar/ShowPropertyLabel" #define SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_EMBEDDED "/Panel/Gtk/LookupTableEmbedded" #define SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_VERTICAL "/Panel/Gtk/LookupTableVertical" #define SCIM_CONFIG_PANEL_GTK_DEFAULT_STICKED "/Panel/Gtk/DefaultSticked" #define SCIM_CONFIG_PANEL_GTK_SHOW_TRAY_ICON "/Panel/Gtk/ShowTrayIcon" #define SCIM_KEYBOARD_ICON_FILE (SCIM_ICONDIR "/keyboard.png") #define SCIM_TRADEMARK_ICON_FILE (SCIM_ICONDIR "/trademark.png") #define SCIM_SETUP_ICON_FILE (SCIM_ICONDIR "/setup.png") #define SCIM_HELP_ICON_FILE (SCIM_ICONDIR "/help.png") #define SCIM_MENU_ICON_FILE (SCIM_ICONDIR "/menu.png") #define SCIM_UP_ICON_FILE (SCIM_ICONDIR "/up.png") #define SCIM_DOWN_ICON_FILE (SCIM_ICONDIR "/down.png") #define SCIM_LEFT_ICON_FILE (SCIM_ICONDIR "/left.png") #define SCIM_RIGHT_ICON_FILE (SCIM_ICONDIR "/right.png") #define SCIM_PIN_UP_ICON_FILE (SCIM_ICONDIR "/pin-up.png") #define SCIM_PIN_DOWN_ICON_FILE (SCIM_ICONDIR "/pin-down.png") #define TOOLBAR_ICON_SIZE 16 #define TRAY_ICON_SIZE 11 #define LOOKUP_ICON_SIZE 12 ///////////////////////////////////////////////////////////////////////////// // Declaration of internal data types. ///////////////////////////////////////////////////////////////////////////// struct PropertyInfo { Property property; GtkWidget *widget; PropertyInfo () : widget (0) { } }; typedef std::vector PropertyRepository; struct HelperPropertyInfo { GtkWidget *holder; PropertyRepository repository; HelperPropertyInfo () : holder (0) { } }; #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map > HelperPropertyRepository; typedef __gnu_cxx::hash_map , scim_hash_string> MapStringVectorSizeT; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map > HelperPropertyRepository; typedef std::hash_map , scim_hash_string> MapStringVectorSizeT; #else typedef std::map HelperPropertyRepository; typedef std::map > MapStringVectorSizeT; #endif ///////////////////////////////////////////////////////////////////////////// // Declaration of internal functions. ///////////////////////////////////////////////////////////////////////////// static void ui_config_reload_callback (const ConfigPointer &config); static void ui_load_config (void); static void ui_initialize (void); static void ui_settle_input_window (bool relative = false, bool force = false); static void ui_settle_lookup_table_window (bool force = false); static void ui_settle_toolbar_window (bool force = false); static bool ui_get_screen_rect (GdkRectangle &rect); static int ui_multi_monitor_width (void); static int ui_multi_monitor_height (void); static int ui_screen_width (void); static int ui_screen_height (void); static void ui_get_workarea (int &x, int &y, int &width, int &height); #if ENABLE_TRAY_ICON static gboolean ui_create_tray_icon_when_idle (gpointer data); #endif #if GTK_CHECK_VERSION(2, 2, 0) static void ui_switch_screen (GdkScreen *screen); #endif static GdkPixbuf* ui_scale_pixbuf (GdkPixbuf *pixbuf, int width, int height); static GtkWidget* ui_create_label (const String &name, const String &iconfile, const char **xpm, bool show_icon_only = false, bool force_icon = false); static GtkWidget* ui_create_icon (const String &iconfile, const char **xpm = NULL, int width = -1, int height = -1, bool force_create = false); static GtkWidget* ui_create_trademark_icon (void); static GtkWidget* ui_create_stick_icon (bool sticked); static GtkWidget* ui_create_help_icon (void); static GtkWidget* ui_create_menu_icon (void); static GtkWidget* ui_create_up_icon (void); static GtkWidget* ui_create_down_icon (void); static GtkWidget* ui_create_left_icon (void); static GtkWidget* ui_create_right_icon (void); static GtkWidget* ui_create_factory_menu_entry (const PanelFactoryInfo &info, int id, GtkMenuShell *menu, bool show_lang, bool show_name); // callback functions static void ui_preedit_area_move_cursor_cb (ScimStringView *view, guint position); static void ui_help_button_click_cb (GtkButton *button, gpointer user_data); static void ui_menu_button_click_cb (GtkButton *button, gpointer user_data); static gboolean ui_factory_button_click_cb (GtkWidget *button, GdkEvent *event, gpointer user_data); static void ui_factory_menu_activate_cb (GtkMenuItem *item, gpointer user_data); static void ui_factory_menu_deactivate_cb (GtkMenuItem *item, gpointer user_data); static gboolean ui_lookup_table_vertical_click_cb (GtkWidget *item, GdkEventButton *event, gpointer user_data); static void ui_lookup_table_horizontal_click_cb (GtkWidget *item, guint position); static void ui_lookup_table_up_button_click_cb (GtkButton *button, gpointer user_data); static void ui_lookup_table_down_button_click_cb (GtkButton *button, gpointer user_data); static void ui_window_stick_button_click_cb (GtkButton *button, gpointer user_data); static gboolean ui_input_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data); static gboolean ui_input_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data); static gboolean ui_toolbar_window_crossing_cb (GtkWidget *window, GdkEventCrossing *event, gpointer user_data); static gboolean ui_toolbar_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data); static gboolean ui_toolbar_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data); static gboolean ui_lookup_table_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data); static gboolean ui_lookup_table_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data); static gboolean ui_hide_window_timeout_cb (gpointer data); static void ui_command_menu_exit_activate_cb (GtkMenuItem *item, gpointer user_data); static void ui_command_menu_reload_activate_cb (GtkMenuItem *item, gpointer user_data); static void ui_command_menu_stick_activate_cb (GtkMenuItem *item, gpointer user_data); static void ui_command_menu_hide_toolbar_toggled_cb (GtkMenuItem *item, gpointer user_data); static void ui_command_menu_help_activate_cb (GtkMenuItem *item, gpointer user_data); static void ui_command_menu_helper_activate_cb (GtkWidget *item, gpointer user_data); static void ui_command_menu_deactivate_cb (GtkWidget *item, gpointer user_data); #if ENABLE_TRAY_ICON #if GTK_CHECK_VERSION(3, 0, 0) static void ui_tray_icon_destroy_cb (GtkWidget *object, #else static void ui_tray_icon_destroy_cb (GtkObject *object, #endif gpointer user_data); static void ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data); static void ui_tray_icon_activate_cb (GtkStatusIcon *status_icon, gpointer user_data); #endif // Client Property Callback static void ui_property_activate_cb (GtkWidget *widget, gpointer user_data); static void ui_property_menu_deactivate_cb (GtkWidget *item, gpointer user_data); static bool ui_can_hide_input_window (void); static bool ui_any_menu_activated (void); static void ui_show_help (const String &help); static PangoAttrList * create_pango_attrlist (const String &str, const AttributeList &attrs); // Action function static void action_request_help (void); static void action_toggle_window_stick (void); static void action_show_command_menu (void); // PanelAgent related functions static bool initialize_panel_agent (const String &config, const String &display, bool resident); static bool run_panel_agent (void); static gpointer panel_agent_thread_func (gpointer data); static void start_auto_start_helpers (void); static void slot_transaction_start (void); static void slot_transaction_end (void); static void slot_reload_config (void); static void slot_turn_on (void); static void slot_turn_off (void); static void slot_update_screen (int screen); static void slot_update_spot_location (int x, int y); static void slot_update_factory_info (const PanelFactoryInfo &info); static void slot_show_help (const String &help); static void slot_show_factory_menu (const std::vector &menu); static void slot_show_preedit_string (void); static void slot_show_aux_string (void); static void slot_show_lookup_table (void); static void slot_hide_preedit_string (void); static void slot_hide_aux_string (void); static void slot_hide_lookup_table (void); static void slot_update_preedit_string (const String &str, const AttributeList &attrs); static void slot_update_preedit_caret (int caret); static void slot_update_aux_string (const String &str, const AttributeList &attrs); static void slot_update_lookup_table (const LookupTable &table); static void slot_register_properties (const PropertyList &props); static void slot_update_property (const Property &prop); static void slot_register_helper_properties (int id, const PropertyList &props); static void slot_update_helper_property (int id, const Property &prop); static void slot_register_helper (int id, const HelperInfo &helper); static void slot_remove_helper (int id); static void slot_lock (void); static void slot_unlock (void); static void create_properties (GtkWidget *container, PropertyRepository &repository, const PropertyList &properties, int client, int level); static GtkWidget* create_properties_node (PropertyRepository &repository, PropertyList::const_iterator begin, PropertyList::const_iterator end, int client, int level); static void register_frontend_properties (const PropertyList &properties); static void update_frontend_property (const Property &property); static void register_helper_properties (int client, const PropertyList &properties); static void update_helper_property (int client, const Property &property); static void update_property (PropertyRepository &repository, const Property &property); static void restore_properties (void); static gboolean check_exit_timeout_cb (gpointer data); ///////////////////////////////////////////////////////////////////////////// // Declaration of internal variables. ///////////////////////////////////////////////////////////////////////////// #if GTK_CHECK_VERSION(2, 2, 0) static GdkScreen *_current_screen = 0; #endif static GtkWidget *_input_window = 0; static GtkWidget *_preedit_area = 0; static GtkWidget *_aux_area = 0; static GtkWidget *_lookup_table_window = 0; static GtkWidget *_lookup_table_up_button = 0; static GtkWidget *_lookup_table_down_button = 0; static GtkWidget *_lookup_table_items [SCIM_LOOKUP_TABLE_MAX_PAGESIZE]; static GtkWidget *_toolbar_window = 0; static GtkWidget *_window_stick_button = 0; static GtkWidget *_factory_button = 0; static GtkWidget *_factory_menu = 0; static GtkWidget *_help_button = 0; static GtkWidget *_menu_button = 0; static GtkWidget *_client_properties_area = 0; static GtkWidget *_frontend_properties_area = 0; static GtkWidget *_help_dialog = 0; static GtkWidget *_help_scroll = 0; static GtkWidget *_help_area = 0; static GtkWidget *_command_menu = 0; #if GTK_CHECK_VERSION(2, 12, 0) #else static GtkTooltips *_tooltips = 0; #endif static PangoFontDescription *_default_font_desc = 0; #if ENABLE_TRAY_ICON static GtkStatusIcon *_tray_icon = 0; // static GtkWidget *_tray_icon_factory_button = 0; // static gulong _tray_icon_destroy_signal_id = 0; static bool _tray_icon_clicked = false; static guint _tray_icon_clicked_time = 0; #endif static gboolean _input_window_draging = FALSE; static gint _input_window_drag_x = 0; static gint _input_window_drag_y = 0; static gint _input_window_x = 0; static gint _input_window_y = 0; static gboolean _toolbar_window_draging = FALSE; static gint _toolbar_window_drag_x = 0; static gint _toolbar_window_drag_y = 0; static gboolean _lookup_table_window_draging = FALSE; static gint _lookup_table_window_drag_x = 0; static gint _lookup_table_window_drag_y = 0; static gint _lookup_table_window_x = 0; static gint _lookup_table_window_y = 0; static bool _lookup_table_embedded = true; static bool _lookup_table_vertical = false; static bool _window_sticked = false; #if ENABLE_TRAY_ICON static bool _show_tray_icon = true; #endif static bool _toolbar_always_show = false; static bool _toolbar_always_hidden = false; static bool _toolbar_auto_snap = true; static bool _toolbar_show_factory_icon = true; static bool _toolbar_show_factory_name = false; static bool _toolbar_show_stick_icon = false; static bool _toolbar_show_help_icon = false; static bool _toolbar_show_menu_icon = false; static bool _toolbar_show_property_label = false; static bool _toolbar_should_hide = false; static bool _toolbar_hidden = false; static bool _factory_menu_activated = false; static bool _command_menu_activated = false; static bool _property_menu_activated = false; static int _spot_location_x = -1; static int _spot_location_y = -1; static int _toolbar_window_x = -1; static int _toolbar_window_y = -1; static int _toolbar_hide_timeout_max = 0; static int _toolbar_hide_timeout_count = 0; static guint _toolbar_hide_timeout = 0; static bool _ui_initialized = false; static int _lookup_table_index [SCIM_LOOKUP_TABLE_MAX_PAGESIZE+1]; #if GTK_CHECK_VERSION(3, 0, 0) static GdkRGBA _normal_bg; static GdkRGBA _normal_text; static GdkRGBA _active_bg; static GdkRGBA _active_text; #else static GdkColor _normal_bg; static GdkColor _normal_text; static GdkColor _active_bg; static GdkColor _active_text; #endif static ConfigModule *_config_module = 0; static ConfigPointer _config; static guint _check_exit_timeout = 0; static bool _should_exit = false; static bool _panel_is_on = false; static GThread *_panel_agent_thread = 0; static PanelAgent *_panel_agent = 0; static std::vector _factory_menu_uuids; static std::list _recent_factory_uuids; static struct timeval _last_menu_deactivate_time = {0, 0}; static bool _multi_monitors = false; // client repository static PropertyRepository _frontend_property_repository; static HelperPropertyRepository _helper_property_repository; static std::vector _helper_list; G_LOCK_DEFINE_STATIC (_global_resource_lock); G_LOCK_DEFINE_STATIC (_panel_agent_lock); ///////////////////////////////////////////////////////////////////////////// // Implementation of internal functions. ///////////////////////////////////////////////////////////////////////////// static void ui_config_reload_callback (const ConfigPointer &config) { _config = config; ui_initialize (); restore_properties (); } static void ui_load_config (void) { String str; // Read configurations. #if GTK_CHECK_VERSION(3, 0, 0) gdk_rgba_parse (&_normal_bg, "gray92"); gdk_rgba_parse (&_normal_text, "black"); gdk_rgba_parse (&_active_bg, "light blue"); gdk_rgba_parse (&_active_text, "black"); #else gdk_color_parse ("gray92", &_normal_bg); gdk_color_parse ("black", &_normal_text); gdk_color_parse ("light blue", &_active_bg); gdk_color_parse ("black", &_active_text); #endif if (_default_font_desc) { pango_font_description_free (_default_font_desc); _default_font_desc = 0; } if (!_config.null ()) { str = _config->read (String (SCIM_CONFIG_PANEL_GTK_FONT), String ("default")); if (str != String ("default")) _default_font_desc = pango_font_description_from_string (str.c_str ()); str = _config->read (String (SCIM_CONFIG_PANEL_GTK_COLOR_NORMAL_BG), String ("gray92")); #if GTK_CHECK_VERSION(3, 0, 0) gdk_rgba_parse (&_normal_bg, str.c_str ()); #else gdk_color_parse (str.c_str (), &_normal_bg); #endif str = _config->read (String (SCIM_CONFIG_PANEL_GTK_COLOR_NORMAL_TEXT), String ("black")); #if GTK_CHECK_VERSION(3, 0, 0) gdk_rgba_parse (&_normal_text, str.c_str ()); #else gdk_color_parse (str.c_str (), &_normal_text); #endif str = _config->read (String (SCIM_CONFIG_PANEL_GTK_COLOR_ACTIVE_BG), String ("light blue")); #if GTK_CHECK_VERSION(3, 0, 0) gdk_rgba_parse (&_active_bg, str.c_str ()); #else gdk_color_parse (str.c_str (), &_active_bg); #endif str = _config->read (String (SCIM_CONFIG_PANEL_GTK_COLOR_ACTIVE_TEXT), String ("black")); #if GTK_CHECK_VERSION(3, 0, 0) gdk_rgba_parse (&_active_text, str.c_str ()); #else gdk_color_parse (str.c_str (), &_active_text); #endif _toolbar_window_x = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_X), _toolbar_window_x); _toolbar_window_y = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_Y), _toolbar_window_y); _window_sticked = _config->read (String (SCIM_CONFIG_PANEL_GTK_DEFAULT_STICKED), _window_sticked); _lookup_table_vertical = _config->read (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_VERTICAL), _lookup_table_vertical); _lookup_table_embedded = _config->read (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_EMBEDDED), _lookup_table_embedded); _toolbar_always_show = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_SHOW), _toolbar_always_show); _toolbar_always_hidden = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_HIDDEN), _toolbar_always_hidden); // Impossible if (_toolbar_always_show && _toolbar_always_hidden) _toolbar_always_hidden = false; _toolbar_auto_snap = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_AUTO_SNAP), _toolbar_auto_snap); _toolbar_show_factory_icon = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_ICON), _toolbar_show_factory_icon); _toolbar_show_factory_name = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_NAME), _toolbar_show_factory_name); _toolbar_show_stick_icon = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_STICK_ICON), _toolbar_show_stick_icon); _toolbar_show_help_icon = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_HELP_ICON), _toolbar_show_help_icon); _toolbar_show_menu_icon = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_MENU_ICON), _toolbar_show_menu_icon); _toolbar_show_property_label = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_PROPERTY_LABEL), _toolbar_show_property_label); _toolbar_hide_timeout_max = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_HIDE_TIMEOUT), _toolbar_hide_timeout_max); #if ENABLE_TRAY_ICON _show_tray_icon = _config->read (String (SCIM_CONFIG_PANEL_GTK_SHOW_TRAY_ICON), _show_tray_icon); #endif } } #ifdef GDK_WINDOWING_X11 static GdkFilterReturn ui_event_filter (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) { g_return_val_if_fail (gdk_xevent, GDK_FILTER_CONTINUE); XEvent *xev = (XEvent*)gdk_xevent; if (xev->type == PropertyNotify) { if (xev->xproperty.atom == gdk_x11_get_xatom_by_name ("_NET_WORKAREA") || xev->xproperty.atom == gdk_x11_get_xatom_by_name ("_NET_CURRENT_DESKTOP")) { ui_settle_toolbar_window (); } } return GDK_FILTER_CONTINUE; } #endif static void ui_initialize (void) { SCIM_DEBUG_MAIN (1) << "Initialize UI...\n"; GtkWidget *input_window_vbox; ui_load_config (); _toolbar_hidden = false; if (_lookup_table_window) gtk_widget_destroy (_lookup_table_window); if (_input_window) gtk_widget_destroy (_input_window); if (_toolbar_window) gtk_widget_destroy (_toolbar_window); if (_help_dialog) gtk_widget_destroy (_help_dialog); #if GTK_CHECK_VERSION(2, 12, 0) #else if (_tooltips) gtk_object_destroy (GTK_OBJECT (_tooltips)); #endif #if ENABLE_TRAY_ICON if (_tray_icon) { // g_signal_handler_disconnect (G_OBJECT (_tray_icon), // _tray_icon_destroy_signal_id); g_object_unref (_tray_icon); } _tray_icon = 0; #endif _lookup_table_window = 0; _input_window = 0; _toolbar_window = 0; _help_dialog = 0; #if GTK_CHECK_VERSION(2, 12, 0) #else _tooltips = 0; #endif #if GTK_CHECK_VERSION(2, 2, 0) // Initialize the Display and Screen. _current_screen = gdk_screen_get_default (); #endif // Create input window { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *frame; _input_window = gtk_window_new (GTK_WINDOW_POPUP); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_background_color (_input_window, GTK_STATE_FLAG_NORMAL, &_normal_bg); #else gtk_widget_modify_bg (_input_window, GTK_STATE_NORMAL, &_normal_bg); #endif gtk_window_set_resizable (GTK_WINDOW (_input_window), FALSE); gtk_widget_add_events (_input_window,GDK_BUTTON_PRESS_MASK); gtk_widget_add_events (_input_window,GDK_BUTTON_RELEASE_MASK); gtk_widget_add_events (_input_window,GDK_POINTER_MOTION_MASK); g_signal_connect (G_OBJECT (_input_window), "button-press-event", G_CALLBACK (ui_input_window_click_cb), GINT_TO_POINTER (0)); g_signal_connect (G_OBJECT (_input_window), "button-release-event", G_CALLBACK (ui_input_window_click_cb), GINT_TO_POINTER (1)); frame = gtk_frame_new (0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); gtk_container_add (GTK_CONTAINER (_input_window), frame); #if GTK_CHECK_VERSION(3, 2, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox = gtk_hbox_new (FALSE, 0); #endif gtk_container_add (GTK_CONTAINER (frame), hbox); #if GTK_CHECK_VERSION(3, 2, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else vbox = gtk_vbox_new (FALSE, 0); #endif gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); input_window_vbox = vbox; //Create preedit area _preedit_area = scim_string_view_new (); if (_default_font_desc) #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_font (_preedit_area, _default_font_desc); #else gtk_widget_modify_font (_preedit_area, _default_font_desc); #endif #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_background_color (_preedit_area, GTK_STATE_FLAG_NORMAL, &_normal_bg); gtk_widget_override_background_color (_preedit_area, GTK_STATE_FLAG_ACTIVE, &_active_bg); gtk_widget_override_color (_preedit_area, GTK_STATE_FLAG_NORMAL, &_normal_text); gtk_widget_override_color (_preedit_area, GTK_STATE_FLAG_ACTIVE, &_active_text); #else gtk_widget_modify_base (_preedit_area, GTK_STATE_NORMAL, &_normal_bg); gtk_widget_modify_base (_preedit_area, GTK_STATE_ACTIVE, &_active_bg); gtk_widget_modify_text (_preedit_area, GTK_STATE_NORMAL, &_normal_text); gtk_widget_modify_text (_preedit_area, GTK_STATE_ACTIVE, &_active_text); #endif scim_string_view_set_width_chars (SCIM_STRING_VIEW (_preedit_area), 24); scim_string_view_set_forward_event (SCIM_STRING_VIEW (_preedit_area), TRUE); scim_string_view_set_auto_resize (SCIM_STRING_VIEW (_preedit_area), TRUE); scim_string_view_set_has_frame (SCIM_STRING_VIEW (_preedit_area), FALSE); g_signal_connect (G_OBJECT (_preedit_area), "move_cursor", G_CALLBACK (ui_preedit_area_move_cursor_cb), 0); gtk_box_pack_start (GTK_BOX (vbox), _preedit_area, TRUE, TRUE, 0); //Create aux area _aux_area = scim_string_view_new (); if (_default_font_desc) #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_font (_aux_area, _default_font_desc); #else gtk_widget_modify_font (_aux_area, _default_font_desc); #endif #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_background_color (_aux_area, GTK_STATE_FLAG_NORMAL, &_normal_bg); gtk_widget_override_background_color (_aux_area, GTK_STATE_FLAG_ACTIVE, &_active_bg); gtk_widget_override_color (_aux_area, GTK_STATE_FLAG_NORMAL, &_normal_text); gtk_widget_override_color (_aux_area, GTK_STATE_FLAG_ACTIVE, &_active_text); #else gtk_widget_modify_base (_aux_area, GTK_STATE_NORMAL, &_normal_bg); gtk_widget_modify_base (_aux_area, GTK_STATE_ACTIVE, &_active_bg); gtk_widget_modify_text (_aux_area, GTK_STATE_NORMAL, &_normal_text); gtk_widget_modify_text (_aux_area, GTK_STATE_ACTIVE, &_active_text); #endif scim_string_view_set_width_chars (SCIM_STRING_VIEW (_aux_area), 24); scim_string_view_set_draw_cursor (SCIM_STRING_VIEW (_aux_area), FALSE); scim_string_view_set_forward_event (SCIM_STRING_VIEW (_aux_area), TRUE); scim_string_view_set_auto_resize (SCIM_STRING_VIEW (_aux_area), TRUE); scim_string_view_set_has_frame (SCIM_STRING_VIEW (_aux_area), FALSE); gtk_box_pack_start (GTK_BOX (vbox), _aux_area, TRUE, TRUE, 0); gtk_window_move (GTK_WINDOW (_input_window), ui_screen_width (), ui_screen_height ()); gtk_widget_show_all (_input_window); gtk_widget_hide (_input_window); } //Create lookup table window { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *frame; GtkWidget *lookup_table_parent; GtkWidget *image; GtkWidget *separator; if (_lookup_table_embedded) { #if GTK_CHECK_VERSION(3, 2, 0) _lookup_table_window = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else _lookup_table_window = gtk_vbox_new (FALSE, 0); #endif gtk_box_pack_start (GTK_BOX (input_window_vbox), _lookup_table_window, TRUE, TRUE, 0); lookup_table_parent = _lookup_table_window; #if GTK_CHECK_VERSION(3, 2, 0) separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); #else separator = gtk_hseparator_new (); #endif gtk_box_pack_start (GTK_BOX (lookup_table_parent), separator, FALSE, FALSE, 0); } else { _lookup_table_window = gtk_window_new (GTK_WINDOW_POPUP); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_background_color (_lookup_table_window, GTK_STATE_FLAG_NORMAL, &_normal_bg); #else gtk_widget_modify_bg (_lookup_table_window, GTK_STATE_NORMAL, &_normal_bg); #endif gtk_window_set_resizable (GTK_WINDOW (_lookup_table_window), FALSE); gtk_widget_add_events (_lookup_table_window,GDK_BUTTON_PRESS_MASK); gtk_widget_add_events (_lookup_table_window,GDK_BUTTON_RELEASE_MASK); gtk_widget_add_events (_lookup_table_window,GDK_POINTER_MOTION_MASK); g_signal_connect (G_OBJECT (_lookup_table_window), "button-press-event", G_CALLBACK (ui_lookup_table_window_click_cb), GINT_TO_POINTER (0)); g_signal_connect (G_OBJECT (_lookup_table_window), "button-release-event", G_CALLBACK (ui_lookup_table_window_click_cb), GINT_TO_POINTER (1)); gtk_container_set_border_width (GTK_CONTAINER (_lookup_table_window), 0); frame = gtk_frame_new (0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); gtk_container_add (GTK_CONTAINER (_lookup_table_window), frame); lookup_table_parent = frame; } //Vertical lookup table if (_lookup_table_vertical) { #if GTK_CHECK_VERSION(3, 2, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else vbox = gtk_vbox_new (FALSE, 0); #endif gtk_container_add (GTK_CONTAINER (lookup_table_parent), vbox); //New table items for (int i=0; i 0) { _toolbar_hide_timeout = #if GTK_CHECK_VERSION(2, 12, 0) gdk_threads_add_timeout #else g_timeout_add #endif (1000, ui_hide_window_timeout_cb, NULL); g_signal_connect (G_OBJECT (_toolbar_window), "enter-notify-event", G_CALLBACK (ui_toolbar_window_crossing_cb), GINT_TO_POINTER (0)); g_signal_connect (G_OBJECT (_toolbar_window), "leave-notify-event", G_CALLBACK (ui_toolbar_window_crossing_cb), GINT_TO_POINTER (1)); } // Init the tooltips { #if GTK_CHECK_VERSION(2, 12, 0) #else _tooltips = gtk_tooltips_new (); gtk_tooltips_set_delay (_tooltips, 1000); #endif if (_window_stick_button) #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (_window_stick_button, _("Stick/unstick the input window and the toolbar.")); #else gtk_tooltips_set_tip (_tooltips, _window_stick_button, _("Stick/unstick the input window and the toolbar."), NULL); #endif if (_help_button) #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (_help_button, _("Show a brief help about SCIM and the current input method.")); #else gtk_tooltips_set_tip (_tooltips, _help_button, _("Show a brief help about SCIM and the current input method."), #endif if (_menu_button) #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (_menu_button, _("Show command menu.")); #else gtk_tooltips_set_tip (_tooltips, _menu_button, _("Show command menu."), NULL); #endif } /* #ifdef GDK_WINDOWING_X11 // Add an event filter function to observe X root window's properties. GdkWindow *root_window = gdk_get_default_root_window (); GdkEventMask event_mask; #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) root_window = gdk_screen_get_root_window (_current_screen); #endif event_mask = (GdkEventMask) (gdk_window_get_events (root_window) | GDK_PROPERTY_NOTIFY); gdk_window_set_events (root_window, event_mask); gdk_window_add_filter (root_window, ui_event_filter, NULL); #endif */ _ui_initialized = true; } static void ui_settle_input_window (bool relative, bool force) { SCIM_DEBUG_MAIN (2) << " Settle input window...\n"; if (_window_sticked) { if (force) gtk_window_move (GTK_WINDOW (_input_window), _input_window_x, _input_window_y); return; } GtkRequisition ws; gint spot_x, spot_y; #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size (_input_window, &ws, NULL); #else gtk_widget_size_request (_input_window, &ws); #endif if (!relative) { spot_x = _spot_location_x; spot_y = _spot_location_y; } else { spot_x = _input_window_x; spot_y = _input_window_y; } if (spot_x < 0) spot_x = 0; if (spot_y < 0) spot_y = 0; if (spot_x + ws.width > ui_screen_width () - 4) spot_x = ui_screen_width () - ws.width - 4; if (spot_y + ws.height + 8 > ui_screen_height () - 4) spot_y = ui_screen_height () - ws.height - 4; if (spot_x != _input_window_x || spot_y != _input_window_y || force) { gtk_window_move (GTK_WINDOW (_input_window), spot_x, spot_y); _input_window_x = spot_x; _input_window_y = spot_y; } } static void ui_settle_lookup_table_window(bool force) { SCIM_DEBUG_MAIN (2) << " Settle lookup table window...\n"; if (_lookup_table_embedded) return; if (_window_sticked) { if (force) gtk_window_move (GTK_WINDOW (_lookup_table_window), _lookup_table_window_x, _lookup_table_window_y); return; } gint pos_x, pos_y; GtkRequisition iws; GtkRequisition ws; #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size (_input_window, &iws, NULL); gtk_widget_get_preferred_size (_lookup_table_window, &ws, NULL); #else gtk_widget_size_request (_input_window, &iws); gtk_widget_size_request (_lookup_table_window, &ws); #endif pos_x = _input_window_x; pos_y = _input_window_y + iws.height + 8; if (pos_x + ws.width > ui_screen_width () - 8) { pos_x = ui_screen_width () - ws.width - 8; } if (pos_y + ws.height > ui_screen_height () - 8) { pos_y = ui_screen_height () - ws.height - 40; } // input window and lookup table window are overlapped. if (pos_y < _input_window_y + iws.height && pos_y + ws.height > _input_window_y) { pos_y = _input_window_y - ws.height - 8; } if (_lookup_table_window_x != pos_x || _lookup_table_window_y != pos_y || force) { gtk_window_move (GTK_WINDOW (_lookup_table_window), pos_x, pos_y); _lookup_table_window_x = pos_x; _lookup_table_window_y = pos_y; } } static void ui_settle_toolbar_window (bool force) { SCIM_DEBUG_MAIN (2) << " Settle toolbar window...\n"; if (_window_sticked) { if (force) gtk_window_move (GTK_WINDOW (_toolbar_window), _toolbar_window_x, _toolbar_window_y); return; } gint workarea_x, workarea_y, workarea_width, workarea_height; ui_get_workarea (workarea_x, workarea_y, workarea_width, workarea_height); GtkRequisition ws; gint pos_x, pos_y; #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size (_toolbar_window, &ws, NULL); #else gtk_widget_size_request (_toolbar_window, &ws); #endif pos_x = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_X), workarea_x + workarea_width - ws.width); pos_y = _config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_Y), workarea_y + workarea_height - ws.height); if (_multi_monitors) { pos_x = -1; pos_y = -1; } if (pos_x == -1 && pos_y == -1) { pos_x = workarea_x + workarea_width - ws.width; pos_y = workarea_y + workarea_height - ws.height; } if (_toolbar_auto_snap) { if ((ui_screen_width () - (pos_x + ws.width)) < pos_x) pos_x = ui_screen_width () - ws.width; else pos_x = 0; } else if (pos_x + ws.width > ui_screen_width ()) { pos_x = ui_screen_width () - ws.width; } else if (pos_x < 0) { pos_x = 0; } if (pos_y + ws.height > ui_screen_height ()) pos_y = ui_screen_height () - ws.height; else if (pos_y < 0) pos_y = 0; if (_toolbar_window_x != pos_x || _toolbar_window_y != pos_y || force) { gtk_window_move (GTK_WINDOW (_toolbar_window), pos_x, pos_y); _toolbar_window_x = pos_x; _toolbar_window_y = pos_y; } } static bool ui_get_screen_rect (GdkRectangle &rect) { #if GTK_CHECK_VERSION(2, 2, 0) GdkWindow * active_window; int index; if (_current_screen) { if ( gdk_screen_get_n_monitors (_current_screen) > 1) { _multi_monitors = true; active_window = gdk_screen_get_active_window(_current_screen); index = gdk_screen_get_monitor_at_window(_current_screen, active_window); gdk_screen_get_monitor_geometry(_current_screen, index, &rect); return TRUE; } } #endif return FALSE; } static int ui_multi_monitor_width () { #if GTK_CHECK_VERSION(2, 2, 0) GdkRectangle rect; if (_current_screen) { if ( ui_get_screen_rect (rect) ) { return rect.x + rect.width; } return gdk_screen_get_width (_current_screen); } #endif return 0; } static int ui_multi_monitor_height () { #if GTK_CHECK_VERSION(2, 2, 0) GdkRectangle rect; if (_current_screen) { if ( ui_get_screen_rect (rect) ) { return rect.y + rect.height; } return gdk_screen_get_height (_current_screen); } #endif return 0; } static int ui_screen_width (void) { #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) return ui_multi_monitor_width (); #endif return gdk_screen_width (); } static int ui_screen_height (void) { #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) return ui_multi_monitor_height (); #endif return gdk_screen_height (); } static void ui_get_workarea (int &x, int &y, int &width, int &height) { static GdkAtom net_current_desktop_atom = gdk_atom_intern ("_NET_CURRENT_DESKTOP", TRUE);; static GdkAtom net_workarea_atom = gdk_atom_intern ("_NET_WORKAREA", TRUE); GdkWindow *root_window = gdk_get_default_root_window (); GdkAtom atom_ret; gint format, length, current_desktop = 0; guchar *data; #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) root_window = gdk_screen_get_root_window (_current_screen); #endif x = 0; y = 0; width = ui_screen_width (); height = ui_screen_height (); if (net_current_desktop_atom != GDK_NONE) { gboolean found = gdk_property_get (root_window, net_current_desktop_atom, GDK_NONE, 0, G_MAXLONG, FALSE, &atom_ret, &format, &length, &data); if (found && format == 32 && length / sizeof(glong) > 0) current_desktop = ((glong*)data)[0]; if (found) g_free (data); } if (net_workarea_atom != GDK_NONE) { gboolean found = gdk_property_get (root_window, net_workarea_atom, GDK_NONE, 0, G_MAXLONG, FALSE, &atom_ret, &format, &length, &data); if (found && format == 32 && length / sizeof(glong) >= (current_desktop + 1) * 4) { x = ((glong*)data)[current_desktop * 4]; y = ((glong*)data)[current_desktop * 4 + 1]; width = ((glong*)data)[current_desktop * 4 + 2]; height = ((glong*)data)[current_desktop * 4 + 3]; } if (found) g_free (data); } } #if GTK_CHECK_VERSION(2, 2, 0) static void ui_switch_screen (GdkScreen *screen) { if (screen) { if (_input_window) { gtk_window_set_screen (GTK_WINDOW (_input_window), screen); _input_window_x = ui_screen_width (); _input_window_y = ui_screen_height (); gtk_window_move (GTK_WINDOW (_input_window), _input_window_x, _input_window_y); } if (_toolbar_window) { gtk_window_set_screen (GTK_WINDOW (_toolbar_window), screen); ui_settle_toolbar_window (); } if (!_lookup_table_embedded && _lookup_table_window) { gtk_window_set_screen (GTK_WINDOW (_lookup_table_window), screen); _lookup_table_window_x = ui_screen_width (); _lookup_table_window_y = ui_screen_height (); gtk_window_move (GTK_WINDOW (_lookup_table_window), _lookup_table_window_x, _lookup_table_window_y); } #if ENABLE_TRAY_ICON // if (_tray_icon) { // gtk_window_set_screen (GTK_WINDOW (_tray_icon), screen); // } #endif if (_help_dialog) { gtk_window_set_screen (GTK_WINDOW (_help_dialog), screen); } /* #ifdef GDK_WINDOWING_X11 GdkWindow *root_window = gdk_get_default_root_window (); GdkEventMask event_mask; if (_current_screen) root_window = gdk_screen_get_root_window (_current_screen); event_mask = (GdkEventMask) (gdk_window_get_events (root_window) | GDK_PROPERTY_NOTIFY); gdk_window_set_events (root_window, event_mask); gdk_window_add_filter (root_window, ui_event_filter, NULL); #endif */ ui_settle_input_window (); ui_settle_lookup_table_window (); ui_settle_toolbar_window (); } } #endif #if ENABLE_TRAY_ICON // static gboolean // ui_tray_icon_expose_event_cb (GtkWidget *widget, GdkEventExpose *event) // { // gdk_window_clear_area (widget->window, event->area.x, event->area.y, // event->area.width, event->area.height); // return FALSE; // } // // static void // ui_tray_icon_style_set_cb (GtkWidget *widget, GtkStyle *previous_style) // { // gdk_window_set_back_pixmap (widget->window, NULL, TRUE); // } // // static void // ui_tray_icon_realize_cb (GtkWidget *widget) // { // #if GTK_CHECK_VERSION(2, 18, 0) // if (!gtk_widget_get_has_window (widget) || gtk_widget_get_app_paintable (widget)) // #else // if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget)) // #endif // return; // // gtk_widget_set_app_paintable (widget, TRUE); // gtk_widget_set_double_buffered (widget, FALSE); // gdk_window_set_back_pixmap (widget->window, NULL, TRUE); // g_signal_connect (widget, "expose_event", // G_CALLBACK (ui_tray_icon_expose_event_cb), NULL); // g_signal_connect_after (widget, "style_set", // G_CALLBACK (ui_tray_icon_style_set_cb), NULL); // } static gboolean ui_create_tray_icon_when_idle (gpointer data) { GtkWidget *image; // TODO use GtkNotification? G_GNUC_BEGIN_IGNORE_DEPRECATIONS _tray_icon = gtk_status_icon_new_from_file (SCIM_KEYBOARD_ICON_FILE); G_GNUC_END_IGNORE_DEPRECATIONS // g_signal_connect (G_OBJECT (_tray_icon), "realize", // G_CALLBACK (ui_tray_icon_realize_cb), NULL); // _tray_icon_destroy_signal_id = // g_signal_connect (G_OBJECT (_tray_icon), "destroy", // G_CALLBACK (ui_tray_icon_destroy_cb), // 0); // image = ui_create_icon (SCIM_KEYBOARD_ICON_FILE, // NULL, // TRAY_ICON_SIZE, // TRAY_ICON_SIZE, // true); // _tray_icon_factory_button = gtk_event_box_new (); // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "realize", // G_CALLBACK (ui_tray_icon_realize_cb), NULL); // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), image); // gtk_container_add (GTK_CONTAINER (_tray_icon), _tray_icon_factory_button); // g_signal_connect (G_OBJECT (_tray_icon_factory_button), "button-release-event", // G_CALLBACK (ui_factory_button_click_cb), // 0); g_signal_connect (G_OBJECT (_tray_icon), "popup-menu", G_CALLBACK (ui_tray_icon_popup_menu_cb), 0); g_signal_connect (G_OBJECT (_tray_icon), "activate", G_CALLBACK (ui_tray_icon_activate_cb), 0); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_status_icon_set_visible (_tray_icon, TRUE); G_GNUC_END_IGNORE_DEPRECATIONS return FALSE; } #endif static GdkPixbuf * ui_scale_pixbuf (GdkPixbuf *pixbuf, int width, int height) { if (pixbuf) { if (gdk_pixbuf_get_width (pixbuf) != width || gdk_pixbuf_get_height (pixbuf) != height) { GdkPixbuf *dest = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); g_object_unref (pixbuf); pixbuf = dest; } } return pixbuf; } static GtkWidget * ui_create_label (const String &name, const String &iconfile, const char **xpm, bool show_icon_only, bool force_icon) { #if GTK_CHECK_VERSION(3, 2, 0) GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else GtkWidget * hbox = gtk_hbox_new (FALSE, 0); #endif GtkWidget * label = gtk_label_new (name.c_str ()); gint width, height; if (_default_font_desc) #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_font (label, _default_font_desc); #else gtk_widget_modify_font (label, _default_font_desc); #endif gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); GtkWidget *icon = ui_create_icon (iconfile, xpm, width, height, force_icon); if (icon) { gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); if (!show_icon_only) gtk_box_set_spacing (GTK_BOX (hbox), 4); } if (!show_icon_only || !icon) gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); else gtk_widget_destroy (label); gtk_widget_show_all (hbox); return hbox; } static GtkWidget * ui_create_icon (const String &iconfile, const char **xpm, int width, int height, bool force_create) { String path = iconfile; GdkPixbuf *pixbuf = 0; if (path.length ()) { // Not a absolute path, prepend SCIM_ICONDIR if (path [0] != SCIM_PATH_DELIM) path = String (SCIM_ICONDIR) + String (SCIM_PATH_DELIM_STRING) + path; pixbuf = gdk_pixbuf_new_from_file (path.c_str (), 0); } if (!pixbuf && xpm) { pixbuf = gdk_pixbuf_new_from_xpm_data (xpm); } if (!pixbuf && force_create) { if (width <= 0 || height <= 0) return 0; pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, true, 8, width, height); if (!pixbuf) return 0; gdk_pixbuf_fill (pixbuf, 0); } if (pixbuf) { if (width <= 0) width = gdk_pixbuf_get_width (pixbuf); if (height <= 0) height = gdk_pixbuf_get_height (pixbuf); pixbuf = ui_scale_pixbuf (pixbuf, width, height); GtkWidget *icon = gtk_image_new_from_pixbuf (pixbuf); gtk_widget_show (icon); g_object_unref (pixbuf); return icon; } return 0; } static GtkWidget * ui_create_trademark_icon (void) { return ui_create_icon (SCIM_TRADEMARK_ICON_FILE, (const char **) trademark_xpm, TOOLBAR_ICON_SIZE + 4, TOOLBAR_ICON_SIZE + 4); } static GtkWidget * ui_create_stick_icon (bool sticked) { return ui_create_icon ((sticked ? SCIM_PIN_DOWN_ICON_FILE : SCIM_PIN_UP_ICON_FILE), (const char **) (sticked ? pin_down_xpm : pin_up_xpm), TOOLBAR_ICON_SIZE, TOOLBAR_ICON_SIZE); } static GtkWidget * ui_create_help_icon (void) { return ui_create_icon (SCIM_HELP_ICON_FILE, (const char **) help_xpm, TOOLBAR_ICON_SIZE, TOOLBAR_ICON_SIZE); } static GtkWidget * ui_create_menu_icon (void) { return ui_create_icon (SCIM_MENU_ICON_FILE, (const char **) menu_xpm, TOOLBAR_ICON_SIZE, TOOLBAR_ICON_SIZE); } static GtkWidget * ui_create_up_icon (void) { return ui_create_icon (SCIM_UP_ICON_FILE, (const char **) up_xpm, LOOKUP_ICON_SIZE, LOOKUP_ICON_SIZE); } static GtkWidget * ui_create_left_icon (void) { return ui_create_icon (SCIM_LEFT_ICON_FILE, (const char **) left_xpm, LOOKUP_ICON_SIZE, LOOKUP_ICON_SIZE); } static GtkWidget * ui_create_right_icon (void) { return ui_create_icon (SCIM_RIGHT_ICON_FILE, (const char **) right_xpm, LOOKUP_ICON_SIZE, LOOKUP_ICON_SIZE); } static GtkWidget * ui_create_down_icon (void) { return ui_create_icon (SCIM_DOWN_ICON_FILE, (const char **) down_xpm, LOOKUP_ICON_SIZE, LOOKUP_ICON_SIZE); } static GtkWidget* ui_create_factory_menu_entry (const PanelFactoryInfo &info, gint id, GtkMenuShell *menu, bool show_lang, bool show_name) { gint width, height; GtkWidget *menu_item; GtkWidget *icon_image; String text, tooltip; if ((!show_lang && show_name) || (show_lang && !show_name && (info.lang == "C" || info.lang == "~other"))) { text = info.name; tooltip = ""; } else if (show_lang && !show_name) { text = scim_get_language_name (info.lang); tooltip = info.name; } else { text = scim_get_language_name (info.lang) + " - " + info.name; tooltip = ""; } menu_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (text.c_str ()); gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); #if !GTK_CHECK_VERSION(3, 10, 0) icon_image = ui_create_icon (info.icon, NULL, width, height, false); if (icon_image) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon_image); #endif g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_factory_menu_activate_cb), GINT_TO_POINTER ((gint)id)); gtk_widget_show (menu_item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); if (tooltip != "") #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (menu_item, tooltip.c_str ()); #else gtk_tooltips_set_tip (_tooltips, menu_item, tooltip.c_str (), NULL); #endif return menu_item; } /* Implementation of callback functions */ static void ui_preedit_area_move_cursor_cb (ScimStringView *view, guint position) { SCIM_DEBUG_MAIN (3) << " ui_preedit_area_move_cursor_cb...\n"; _panel_agent->move_preedit_caret (position); } static void ui_help_button_click_cb (GtkButton *button, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_help_button_click_cb...\n"; #if GTK_CHECK_VERSION(2, 18, 0) if (gtk_widget_get_visible (_help_dialog)) { #else if (GTK_WIDGET_VISIBLE (_help_dialog)) { #endif gtk_widget_hide (_help_dialog); } else { action_request_help (); } } static void ui_menu_button_click_cb (GtkButton *button, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_menu_button_click_cb...\n"; struct timeval cur_time; gettimeofday (&cur_time, 0); if (cur_time.tv_sec < _last_menu_deactivate_time.tv_sec || (cur_time.tv_sec == _last_menu_deactivate_time.tv_sec && cur_time.tv_usec < _last_menu_deactivate_time.tv_usec + 200000)) return; action_show_command_menu (); } static gboolean ui_factory_button_click_cb (GtkWidget *button, GdkEvent *event, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_factory_button_click_cb...\n"; GdkEventButton *bevent = (GdkEventButton *) event; struct timeval cur_time; gettimeofday (&cur_time, 0); if (cur_time.tv_sec < _last_menu_deactivate_time.tv_sec || (cur_time.tv_sec == _last_menu_deactivate_time.tv_sec && cur_time.tv_usec < _last_menu_deactivate_time.tv_usec + 200000)) return FALSE; if (bevent->button <= 1) _panel_agent->request_factory_menu (); else action_show_command_menu (); return FALSE; } static void ui_tray_icon_popup_menu_cb (GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data) { _tray_icon_clicked = true; _tray_icon_clicked_time = activate_time; action_show_command_menu (); } static void ui_tray_icon_activate_cb (GtkStatusIcon *status_icon, gpointer user_data) { _tray_icon_clicked = true; _tray_icon_clicked_time = gtk_get_current_event_time (); _panel_agent->request_factory_menu (); } static void ui_factory_menu_activate_cb (GtkMenuItem *item, gpointer user_data) { int id = GPOINTER_TO_INT (user_data); if (id >= 0 && id < (int) _factory_menu_uuids.size ()) _panel_agent->change_factory (_factory_menu_uuids [id]); else _panel_agent->change_factory (""); } static void ui_factory_menu_deactivate_cb (GtkMenuItem *item, gpointer user_data) { _factory_menu_activated = false; gettimeofday (&_last_menu_deactivate_time, 0); } static gboolean ui_lookup_table_vertical_click_cb (GtkWidget *item, GdkEventButton *event, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_lookup_table_vertical_click_cb...\n"; _panel_agent->select_candidate ((uint32)GPOINTER_TO_INT (user_data)); return TRUE; } static void ui_lookup_table_horizontal_click_cb (GtkWidget *item, guint position) { SCIM_DEBUG_MAIN (3) << " ui_lookup_table_horizontal_click_cb...\n"; int *index = _lookup_table_index; int pos = (int) position; for (int i=0; i= 0; ++i) { if (pos >= index [i] && pos < index [i+1]) { _panel_agent->select_candidate ((uint32) i); return; } } } static void ui_lookup_table_up_button_click_cb (GtkButton *button, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_lookup_table_up_button_click_cb...\n"; _panel_agent->lookup_table_page_up (); } static void ui_lookup_table_down_button_click_cb (GtkButton *button, gpointer user_data) { SCIM_DEBUG_MAIN (3) << " ui_lookup_table_down_button_click_cb...\n"; _panel_agent->lookup_table_page_down (); } static void ui_window_stick_button_click_cb (GtkButton *button, gpointer user_data) { action_toggle_window_stick (); } static gboolean ui_input_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data) { gint pos_x, pos_y; if ((event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) != 0 && _input_window_draging) { gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y); gtk_window_move (GTK_WINDOW (window), pos_x + ((gint) event->x_root - _input_window_drag_x), pos_y + ((gint) event->y_root - _input_window_drag_y)); _input_window_drag_x = (gint) event->x_root; _input_window_drag_y = (gint) event->y_root; return TRUE; } return FALSE; } static gboolean ui_input_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data) { int click_type = GPOINTER_TO_INT (user_data); static gulong motion_handler; GdkCursor *cursor; #if GTK_CHECK_VERSION(3, 0, 0) GdkDisplay *display; GdkDevice *pointer; GdkDeviceManager *device_manager; display = gdk_window_get_display (gtk_widget_get_window (window)); device_manager = gdk_display_get_device_manager (display); pointer = gdk_device_manager_get_client_pointer (device_manager); #endif if (click_type == 0) { if (_input_window_draging) return FALSE; // Connection pointer motion handler to this window. motion_handler = g_signal_connect (G_OBJECT (window), "motion-notify-event", G_CALLBACK (ui_input_window_motion_cb), NULL); _input_window_draging = TRUE; _input_window_drag_x = (gint) event->x_root; _input_window_drag_y = (gint) event->y_root; cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); // Grab the cursor to prevent losing events. #if GTK_CHECK_VERSION(3, 0, 0) /* FIXME Not sure if report to GDK_OWNERSHIP_WINDOW or GDK_OWNERSHIP_APPLICATION */ gdk_device_grab (pointer, gtk_widget_get_window (window), GDK_OWNERSHIP_WINDOW, TRUE, GdkEventMask (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), cursor, event->time); g_object_unref (cursor); #else gdk_pointer_grab (window->window, TRUE, (GdkEventMask) (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), NULL, cursor, event->time); gdk_cursor_unref (cursor); #endif return TRUE; } else if (click_type == 1) { if (!_input_window_draging) return FALSE; g_signal_handler_disconnect (G_OBJECT (window), motion_handler); #if GTK_CHECK_VERSION(3, 0, 0) gdk_device_ungrab (pointer, event->time); #else gdk_pointer_ungrab (event->time); #endif _input_window_draging = FALSE; gtk_window_get_position (GTK_WINDOW (window), &_input_window_x, &_input_window_y); return TRUE; } return FALSE; } static gboolean ui_toolbar_window_crossing_cb (GtkWidget *window, GdkEventCrossing *event, gpointer user_data) { if (!_toolbar_always_show || _panel_is_on || _toolbar_window_draging) return FALSE; int crossing_type = GPOINTER_TO_INT (user_data); // 0 == enter, otherwise leave if (crossing_type == 0) { if (_toolbar_hidden) { if (_window_stick_button) gtk_widget_show (_window_stick_button); if (_factory_button) gtk_widget_show (_factory_button); if (_client_properties_area) gtk_widget_show (_client_properties_area); if (_menu_button) gtk_widget_show (_menu_button); if (_help_button) gtk_widget_show (_help_button); _toolbar_hidden = false; ui_settle_toolbar_window (); } _toolbar_should_hide = false; } else { _toolbar_should_hide = true; } return FALSE; } static gboolean ui_toolbar_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data) { gint pos_x, pos_y; if ((event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) != 0 && _toolbar_window_draging) { gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y); gtk_window_move (GTK_WINDOW (window), pos_x + ((gint) event->x_root - _toolbar_window_drag_x), pos_y + ((gint) event->y_root - _toolbar_window_drag_y)); _toolbar_window_drag_x = (gint) event->x_root; _toolbar_window_drag_y = (gint) event->y_root; return TRUE; } return FALSE; } static gboolean ui_toolbar_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data) { int click_type = GPOINTER_TO_INT (user_data); static gulong motion_handler; GdkCursor *cursor; #if GTK_CHECK_VERSION(3, 0, 0) GdkDisplay *display; GdkDevice *pointer; GdkDeviceManager *device_manager; display = gdk_window_get_display (gtk_widget_get_window (window)); device_manager = gdk_display_get_device_manager (display); pointer = gdk_device_manager_get_client_pointer (device_manager); #endif if (click_type == 0 && event->button <= 1) { if (_toolbar_window_draging) return FALSE; // Connection pointer motion handler to this window. motion_handler = g_signal_connect (G_OBJECT (window), "motion-notify-event", G_CALLBACK (ui_toolbar_window_motion_cb), NULL); _toolbar_window_draging = TRUE; _toolbar_window_drag_x = (gint) event->x_root; _toolbar_window_drag_y = (gint) event->y_root; cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); // Grab the cursor to prevent losing events. #if GTK_CHECK_VERSION(3, 0, 0) /* FIXME Not sure if report to GDK_OWNERSHIP_WINDOW or GDK_OWNERSHIP_APPLICATION */ gdk_device_grab (pointer, gtk_widget_get_window (window), GDK_OWNERSHIP_WINDOW, TRUE, GdkEventMask (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), cursor, event->time); g_object_unref (cursor); #else gdk_pointer_grab (window->window, TRUE, (GdkEventMask) (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), NULL, cursor, event->time); gdk_cursor_unref (cursor); #endif return TRUE; } else if (click_type == 1 && event->button <= 1) { if (!_toolbar_window_draging) return FALSE; g_signal_handler_disconnect (G_OBJECT (window), motion_handler); #if GTK_CHECK_VERSION(3, 0, 0) gdk_device_ungrab (pointer, event->time); #else gdk_pointer_ungrab (event->time); #endif _toolbar_window_draging = FALSE; gint pos_x, pos_y; gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y); if (!_config.null () && (_toolbar_window_x != pos_x || _toolbar_window_y != pos_y)) { if (_multi_monitors) { pos_x = -1; pos_y = -1; } _config->write ( SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_X, pos_x); _config->write ( SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_Y, pos_y); } _toolbar_window_x = pos_x; _toolbar_window_y = pos_y; return TRUE; } else if (click_type == 1 && event->button > 1) { action_show_command_menu (); return TRUE; } return FALSE; } static gboolean ui_lookup_table_window_motion_cb (GtkWidget *window, GdkEventMotion *event, gpointer user_data) { gint pos_x, pos_y; if ((event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) != 0 && _lookup_table_window_draging) { gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y); gtk_window_move (GTK_WINDOW (window), pos_x + ((gint) event->x_root - _lookup_table_window_drag_x), pos_y + ((gint) event->y_root - _lookup_table_window_drag_y)); _lookup_table_window_drag_x = (gint) event->x_root; _lookup_table_window_drag_y = (gint) event->y_root; return TRUE; } return FALSE; } static gboolean ui_lookup_table_window_click_cb (GtkWidget *window, GdkEventButton *event, gpointer user_data) { int click_type = GPOINTER_TO_INT (user_data); static gulong motion_handler; GdkCursor *cursor; #if GTK_CHECK_VERSION(3, 0, 0) GdkDisplay *display; GdkDevice *pointer; GdkDeviceManager *device_manager; display = gdk_window_get_display (gtk_widget_get_window (window)); device_manager = gdk_display_get_device_manager (display); pointer = gdk_device_manager_get_client_pointer (device_manager); #endif if (click_type == 0) { if (_lookup_table_window_draging) return FALSE; // Connection pointer motion handler to this window. motion_handler = g_signal_connect (G_OBJECT (window), "motion-notify-event", G_CALLBACK (ui_lookup_table_window_motion_cb), NULL); _lookup_table_window_draging = TRUE; _lookup_table_window_drag_x = (gint) event->x_root; _lookup_table_window_drag_y = (gint) event->y_root; cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); // Grab the cursor to prevent losing events. #if GTK_CHECK_VERSION(3, 0, 0) /* FIXME Not sure if report to GDK_OWNERSHIP_WINDOW or GDK_OWNERSHIP_APPLICATION */ gdk_device_grab (pointer, gtk_widget_get_window (window), GDK_OWNERSHIP_WINDOW, TRUE, GdkEventMask (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), cursor, event->time); g_object_unref (cursor); #else gdk_pointer_grab (window->window, TRUE, (GdkEventMask) (GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), NULL, cursor, event->time); gdk_cursor_unref (cursor); #endif return TRUE; } else if (click_type == 1) { if (!_lookup_table_window_draging) return FALSE; g_signal_handler_disconnect (G_OBJECT (window), motion_handler); #if GTK_CHECK_VERSION(3, 0, 0) gdk_device_ungrab (pointer, event->time); #else gdk_pointer_ungrab (event->time); #endif _lookup_table_window_draging = FALSE; gtk_window_get_position (GTK_WINDOW (window), &_lookup_table_window_x, &_lookup_table_window_y); return TRUE; } return FALSE; } static gboolean ui_hide_window_timeout_cb (gpointer data) { #if !GTK_CHECK_VERSION(2, 12, 0) gdk_threads_enter (); #endif if (!_toolbar_always_show) { #if !GTK_CHECK_VERSION(2, 12, 0) gdk_threads_leave (); #endif return TRUE; } if (!_toolbar_should_hide || _panel_is_on || _toolbar_window_draging || _toolbar_hidden || ui_any_menu_activated ()) { _toolbar_hide_timeout_count = 0; #if !GTK_CHECK_VERSION(2, 12, 0) gdk_threads_leave (); #endif return TRUE; } _toolbar_hide_timeout_count ++; if (_toolbar_hide_timeout_count > _toolbar_hide_timeout_max) { _toolbar_hide_timeout_count = 0; if (_help_button) gtk_widget_hide (_help_button); if (_menu_button) gtk_widget_hide (_menu_button); if (_client_properties_area) gtk_widget_hide (_client_properties_area); if (_factory_button) gtk_widget_hide (_factory_button); if (_window_stick_button) gtk_widget_hide (_window_stick_button); _toolbar_hidden = true; ui_settle_toolbar_window (); } #if !GTK_CHECK_VERSION(2, 12, 0) gdk_threads_leave (); #endif return TRUE; } static bool ui_can_hide_input_window (void) { if (!_panel_is_on) return true; #if GTK_CHECK_VERSION(2, 18, 0) if (gtk_widget_get_visible (_preedit_area) || gtk_widget_get_visible (_aux_area) || (_lookup_table_embedded && gtk_widget_get_visible (_lookup_table_window))) #else if (GTK_WIDGET_VISIBLE (_preedit_area) || GTK_WIDGET_VISIBLE (_aux_area) || (_lookup_table_embedded && GTK_WIDGET_VISIBLE (_lookup_table_window))) #endif return false; return true; } static bool ui_any_menu_activated (void) { return _factory_menu_activated || _command_menu_activated || _property_menu_activated; } static void ui_show_help (const String &help) { if (!help.length () || !_help_dialog || !_help_scroll || !_help_area) return; GtkRequisition size; gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (_help_scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_label_set_text (GTK_LABEL (_help_area), help.c_str ()); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size (_help_area, &size, NULL); #else gtk_widget_size_request (_help_area, &size); #endif if (size.width > ui_screen_width ()/2) { size.width = ui_screen_width ()/2; gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (_help_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); } if (size.height > ui_screen_height ()/2) size.height = ui_screen_height ()/2; if (size.height < size.width/2) size.height = size.width/2; gtk_widget_set_size_request (_help_scroll, size.width, size.height); gtk_window_set_position (GTK_WINDOW (_help_dialog), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_show (_help_dialog); } static PangoAttrList * create_pango_attrlist (const String &mbs, const AttributeList &attrs) { PangoAttrList *attrlist = pango_attr_list_new (); PangoAttribute *attr; guint start_index, end_index; guint wlen = g_utf8_strlen (mbs.c_str (), mbs.length ()); #if GTK_CHECK_VERSION(3, 0, 0) guint16 _normal_bg_rgb[] = { 65536*_normal_bg.red, 65536*_normal_bg.green, 65536*_normal_bg.blue }; guint16 _active_bg_rgb[] = { 65536*_active_bg.red, 65536*_active_bg.green, 65536*_active_bg.blue }; guint16 _normal_text_rgb[] = { 65536*_normal_text.red, 65536*_normal_text.green, 65536*_normal_text.blue }; guint16 _active_text_rgb[] = { 65536*_active_text.red, 65536*_active_text.green, 65536*_active_text.blue }; #else guint16 _normal_bg_rgb[] = { _normal_bg.red, _normal_bg.green, _normal_bg.blue }; guint16 _active_bg_rgb[] = { _active_bg.red, _active_bg.green, _active_bg.blue }; guint16 _normal_text_rgb[] = { _normal_text.red, _normal_text.green, _normal_text.blue }; guint16 _active_text_rgb[] = { _active_text.red, _active_text.green, _active_text.blue }; #endif for (int i=0; i < (int) attrs.size (); ++i) { start_index = attrs[i].get_start (); end_index = attrs[i].get_end (); if (end_index <= wlen && start_index < end_index) { start_index = g_utf8_offset_to_pointer (mbs.c_str (), attrs[i].get_start ()) - mbs.c_str (); end_index = g_utf8_offset_to_pointer (mbs.c_str (), attrs[i].get_end ()) - mbs.c_str (); if (attrs[i].get_type () == SCIM_ATTR_DECORATE) { if (attrs[i].get_value () == SCIM_ATTR_DECORATE_UNDERLINE) { attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); } else if (attrs[i].get_value () == SCIM_ATTR_DECORATE_REVERSE) { attr = pango_attr_foreground_new (_normal_bg_rgb[0], _normal_bg_rgb[1], _normal_bg_rgb[2]); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); attr = pango_attr_background_new (_normal_text_rgb[0], _normal_text_rgb[1], _normal_text_rgb[2]); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); } else if (attrs[i].get_value () == SCIM_ATTR_DECORATE_HIGHLIGHT) { attr = pango_attr_foreground_new (_active_text_rgb[0], _active_text_rgb[1], _active_text_rgb[2]); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); attr = pango_attr_background_new (_active_bg_rgb[0], _active_bg_rgb[1], _active_bg_rgb[2]); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); } } else if (attrs[i].get_type () == SCIM_ATTR_FOREGROUND) { unsigned int color = attrs[i].get_value (); attr = pango_attr_foreground_new (SCIM_RGB_COLOR_RED(color) * 256, SCIM_RGB_COLOR_GREEN(color) * 256, SCIM_RGB_COLOR_BLUE(color) * 256); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); } else if (attrs[i].get_type () == SCIM_ATTR_BACKGROUND) { unsigned int color = attrs[i].get_value (); attr = pango_attr_background_new (SCIM_RGB_COLOR_RED(color) * 256, SCIM_RGB_COLOR_GREEN(color) * 256, SCIM_RGB_COLOR_BLUE(color) * 256); attr->start_index = start_index; attr->end_index = end_index; pango_attr_list_insert (attrlist, attr); } } } return attrlist; } static void ui_command_menu_exit_activate_cb (GtkMenuItem *item, gpointer user_data) { _panel_agent->exit (); } static void ui_command_menu_reload_activate_cb (GtkMenuItem *item, gpointer user_data) { _panel_agent->reload_config (); if (!_config.null ()) _config->reload (); } static void ui_command_menu_stick_activate_cb (GtkMenuItem *item, gpointer user_data) { action_toggle_window_stick (); } static void ui_command_menu_hide_toolbar_toggled_cb (GtkMenuItem *item, gpointer user_data) { _toolbar_always_hidden = ! _toolbar_always_hidden; if (_toolbar_always_hidden && !_toolbar_hidden) { gtk_widget_hide (_toolbar_window); _toolbar_hidden = true; } else if (!_toolbar_always_hidden && _panel_is_on) { gtk_widget_show (_toolbar_window); _toolbar_hidden = false; } } static void ui_command_menu_help_activate_cb (GtkMenuItem *item, gpointer user_data) { #if GTK_CHECK_VERSION(2, 18, 0) if (gtk_widget_get_visible (_help_dialog)) { #else if (GTK_WIDGET_VISIBLE (_help_dialog)) { #endif gtk_widget_hide (_help_dialog); } else { action_request_help (); } } static void ui_command_menu_helper_activate_cb (GtkWidget *item, gpointer user_data) { size_t i = (size_t) GPOINTER_TO_INT (user_data); if (i < _helper_list.size ()) _panel_agent->start_helper (_helper_list [i].uuid); } static void ui_command_menu_deactivate_cb (GtkWidget *item, gpointer user_data) { _command_menu_activated = false; gettimeofday (&_last_menu_deactivate_time, 0); } #if ENABLE_TRAY_ICON // static void // ui_tray_icon_destroy_cb (GtkObject *object, // gpointer user_data) // { // SCIM_DEBUG_MAIN (1) << "Tray Icon destroyed!\n"; // // gtk_widget_destroy (GTK_WIDGET (object)); // // _tray_icon = 0; // _tray_icon_factory_button = 0; // // g_idle_add (ui_create_tray_icon_when_idle, NULL); // } #endif static void ui_property_activate_cb (GtkWidget *widget, gpointer user_data) { GtkWidget *submenu = (GtkWidget *) g_object_get_data (G_OBJECT (widget), "property_submenu"); if (submenu) { #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) gtk_menu_set_screen (GTK_MENU (submenu), _current_screen); #endif guint32 activate_time = gtk_get_current_event_time (); _property_menu_activated = true; gtk_menu_popup (GTK_MENU (submenu), 0, 0, 0, 0, 1, activate_time); return; } gchar * key = (gchar *) g_object_get_data (G_OBJECT (widget), "property_key"); if (key) { int client = GPOINTER_TO_INT (user_data); if (client < 0) _panel_agent->trigger_property (key); else _panel_agent->trigger_helper_property (client, key); } } static void ui_property_menu_deactivate_cb (GtkWidget *item, gpointer user_data) { _property_menu_activated = false; } //Implementation of the action functions static void action_request_help (void) { if (!_panel_agent->request_help ()) { String help; help = String (_("Smart Common Input Method platform ")) + String (SCIM_VERSION) + String (_("\n(C) 2002-2005 James Su ")); ui_show_help (help); } } static void action_toggle_window_stick (void) { GtkWidget *image; _window_sticked = ! _window_sticked; if (_window_stick_button) { image = gtk_bin_get_child (GTK_BIN (_window_stick_button)); gtk_container_remove (GTK_CONTAINER (_window_stick_button), image); image = ui_create_stick_icon (_window_sticked); gtk_container_add (GTK_CONTAINER (_window_stick_button), image); } } static void action_show_command_menu (void) { if (_command_menu_activated) return; _command_menu_activated = true; guint32 activate_time = gtk_get_current_event_time (); if (_command_menu) { gtk_widget_destroy (_command_menu); _command_menu = 0; } _command_menu = gtk_menu_new (); #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) gtk_menu_set_screen (GTK_MENU (_command_menu), _current_screen); #endif GtkWidget *menu_item; GtkWidget *icon; gint width, height; gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); // Add Helper object items. for (size_t i = 0; i < _helper_list.size (); ++i) { if ((_helper_list [i].option & SCIM_HELPER_STAND_ALONE) != 0 && (_helper_list [i].option & SCIM_HELPER_AUTO_START) == 0) { menu_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (_helper_list [i].name.c_str ()); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (menu_item, _helper_list [i].description.c_str ()); #else gtk_tooltips_set_tip (_tooltips, menu_item, _helper_list [i].description.c_str (), NULL); #endif #if !GTK_CHECK_VERSION(3, 10, 0) icon = ui_create_icon (_helper_list [i].icon, NULL, width, height, false); if (icon) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon); #endif gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_command_menu_helper_activate_cb), GINT_TO_POINTER ((int)i)); gtk_widget_show (menu_item); } } if (_helper_list.size ()) { menu_item = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); gtk_widget_show (menu_item); } //Reload Configuration. menu_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (_("Reload Configuration")); #if !GTK_CHECK_VERSION(3, 10, 0) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU)); #endif gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_command_menu_reload_activate_cb), 0); gtk_widget_show_all (menu_item); //Stick menu_item = gtk_check_menu_item_new_with_label (_("Stick Windows")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), _window_sticked); gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_command_menu_stick_activate_cb), 0); gtk_widget_show_all (menu_item); //Toolbar menu_item = gtk_check_menu_item_new_with_label (_("Hide Toolbar")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), _toolbar_always_hidden); gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "toggled", G_CALLBACK (ui_command_menu_hide_toolbar_toggled_cb), 0); gtk_widget_show_all (menu_item); //Help menu_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (_("Help ...")); #if !GTK_CHECK_VERSION(3, 10, 0) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU)); #endif gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_command_menu_help_activate_cb), 0); gtk_widget_show_all (menu_item); g_signal_connect (G_OBJECT (_command_menu), "deactivate", G_CALLBACK (ui_command_menu_deactivate_cb), NULL); menu_item = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); gtk_widget_show (menu_item); //Clients exit. menu_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (_("Exit")); #if !GTK_CHECK_VERSION(3, 10, 0) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU)); #endif gtk_menu_shell_append (GTK_MENU_SHELL (_command_menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ui_command_menu_exit_activate_cb), 0); gtk_widget_show_all (menu_item); if (_tray_icon_clicked && _tray_icon) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_menu_popup (GTK_MENU (_command_menu), 0, 0, gtk_status_icon_position_menu, _tray_icon, 2, _tray_icon_clicked_time); G_GNUC_END_IGNORE_DEPRECATIONS } else gtk_menu_popup (GTK_MENU (_command_menu), 0, 0, 0, 0, 2, activate_time); _tray_icon_clicked = false; } ////////////////////////////////////////////////////////////////////// // Start of PanelAgent Functions ////////////////////////////////////////////////////////////////////// static bool initialize_panel_agent (const String &config, const String &display, bool resident) { _panel_agent = new PanelAgent (); if (!_panel_agent->initialize (config, display, resident)) return false; _panel_agent->signal_connect_transaction_start (slot (slot_transaction_start)); _panel_agent->signal_connect_transaction_end (slot (slot_transaction_end)); _panel_agent->signal_connect_reload_config (slot (slot_reload_config)); _panel_agent->signal_connect_turn_on (slot (slot_turn_on)); _panel_agent->signal_connect_turn_off (slot (slot_turn_off)); _panel_agent->signal_connect_update_screen (slot (slot_update_screen)); _panel_agent->signal_connect_update_spot_location (slot (slot_update_spot_location)); _panel_agent->signal_connect_update_factory_info (slot (slot_update_factory_info)); _panel_agent->signal_connect_show_help (slot (slot_show_help)); _panel_agent->signal_connect_show_factory_menu (slot (slot_show_factory_menu)); _panel_agent->signal_connect_show_preedit_string (slot (slot_show_preedit_string)); _panel_agent->signal_connect_show_aux_string (slot (slot_show_aux_string)); _panel_agent->signal_connect_show_lookup_table (slot (slot_show_lookup_table)); _panel_agent->signal_connect_hide_preedit_string (slot (slot_hide_preedit_string)); _panel_agent->signal_connect_hide_aux_string (slot (slot_hide_aux_string)); _panel_agent->signal_connect_hide_lookup_table (slot (slot_hide_lookup_table)); _panel_agent->signal_connect_update_preedit_string (slot (slot_update_preedit_string)); _panel_agent->signal_connect_update_preedit_caret (slot (slot_update_preedit_caret)); _panel_agent->signal_connect_update_aux_string (slot (slot_update_aux_string)); _panel_agent->signal_connect_update_lookup_table (slot (slot_update_lookup_table)); _panel_agent->signal_connect_register_properties (slot (slot_register_properties)); _panel_agent->signal_connect_update_property (slot (slot_update_property)); _panel_agent->signal_connect_register_helper_properties (slot (slot_register_helper_properties)); _panel_agent->signal_connect_update_helper_property (slot (slot_update_helper_property)); _panel_agent->signal_connect_register_helper (slot (slot_register_helper)); _panel_agent->signal_connect_remove_helper (slot (slot_remove_helper)); _panel_agent->signal_connect_lock (slot (slot_lock)); _panel_agent->signal_connect_unlock (slot (slot_unlock)); _panel_agent->get_helper_list (_helper_list); return true; } static bool run_panel_agent (void) { SCIM_DEBUG_MAIN(1) << "run_panel_agent ()\n"; _panel_agent_thread = NULL; if (_panel_agent && _panel_agent->valid ()) { #if GTK_CHECK_VERSION(2, 32, 0) _panel_agent_thread = g_thread_new ("panel_agent", panel_agent_thread_func, NULL); #else _panel_agent_thread = g_thread_create (panel_agent_thread_func, NULL, TRUE, NULL); #endif } return (_panel_agent_thread != NULL); } static gpointer panel_agent_thread_func (gpointer data) { SCIM_DEBUG_MAIN(1) << "panel_agent_thread_func ()\n"; if (!_panel_agent->run ()) std::cerr << "Failed to run Panel.\n"; /* G_LOCK (_global_resource_lock); _should_exit = true; G_UNLOCK (_global_resource_lock); */ G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter (); G_GNUC_END_IGNORE_DEPRECATIONS gtk_main_quit (); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_leave (); g_thread_exit (NULL); G_GNUC_END_IGNORE_DEPRECATIONS return ((gpointer) NULL); } static void start_auto_start_helpers (void) { SCIM_DEBUG_MAIN(1) << "start_auto_start_helpers ()\n"; // Add Helper object items. for (size_t i = 0; i < _helper_list.size (); ++i) { if ((_helper_list [i].option & SCIM_HELPER_AUTO_START) != 0) { _panel_agent->start_helper (_helper_list [i].uuid); } } } static void slot_transaction_start (void) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter (); G_GNUC_END_IGNORE_DEPRECATIONS } static void slot_transaction_end (void) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_leave (); G_GNUC_END_IGNORE_DEPRECATIONS } static void slot_reload_config (void) { if (!_config.null ()) _config->reload (); } static void slot_turn_on (void) { _toolbar_should_hide = false; _toolbar_hidden = false; _panel_is_on = true; gtk_widget_hide (_lookup_table_window); gtk_widget_hide (_input_window); gtk_widget_hide (_preedit_area); gtk_widget_hide (_aux_area); if (_toolbar_always_hidden) return; if (_frontend_properties_area) gtk_widget_hide (_frontend_properties_area); if (_window_stick_button) gtk_widget_show (_window_stick_button); if (_factory_button) gtk_widget_show (_factory_button); if (_client_properties_area) gtk_widget_show (_client_properties_area); if (_menu_button) gtk_widget_show (_menu_button); if (_help_button) gtk_widget_show (_help_button); if (!_toolbar_always_hidden) gtk_widget_show (_toolbar_window); ui_settle_toolbar_window (true); } static void slot_turn_off (void) { if (ui_any_menu_activated ()) return; _panel_is_on = false; gtk_widget_hide (_input_window); gtk_widget_hide (_lookup_table_window); gtk_widget_hide (_preedit_area); gtk_widget_hide (_aux_area); if (_frontend_properties_area) gtk_widget_hide (_frontend_properties_area); if (_toolbar_always_show) { if (!_toolbar_hidden) { if (_window_stick_button) gtk_widget_show (_window_stick_button); if (_factory_button) gtk_widget_show (_factory_button); if (_client_properties_area) gtk_widget_show (_client_properties_area); if (_menu_button) gtk_widget_show (_menu_button); if (_help_button) gtk_widget_show (_help_button); } gtk_widget_show (_toolbar_window); ui_settle_toolbar_window (true); _toolbar_should_hide = true; } else { gtk_widget_hide (_toolbar_window); _toolbar_hidden = true; } } static void slot_update_screen (int num) { #if GTK_CHECK_VERSION(2, 2, 0) gint n_screens = #if GTK_CHECK_VERSION(3, 10, 0) 1 #else gdk_display_get_n_screens (gdk_display_get_default ()) #endif ; if (n_screens > num) { GdkScreen *screen = gdk_display_get_screen (gdk_display_get_default (), num); if (screen) { /* #ifdef GDK_WINDOWING_X11 GdkWindow *root_window = gdk_get_default_root_window (); if (_current_screen) root_window = gdk_screen_get_root_window (_current_screen); gdk_window_remove_filter (root_window, ui_event_filter, NULL); #endif */ _current_screen = screen; ui_switch_screen (screen); } } #endif } static void slot_update_factory_info (const PanelFactoryInfo &info) { if (_factory_button) { GtkWidget * newlabel = 0; if (_toolbar_show_factory_icon) { newlabel = ui_create_label (info.name, info.icon, 0, !_toolbar_show_factory_name, false); } else { newlabel = gtk_label_new (info.name.c_str ()); if (_default_font_desc) #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_override_font (newlabel, _default_font_desc); #else gtk_widget_modify_font (newlabel, _default_font_desc); #endif gtk_widget_show (newlabel); } if (newlabel) { GtkWidget * old = gtk_bin_get_child (GTK_BIN (_factory_button)); if (old) gtk_container_remove (GTK_CONTAINER (_factory_button), old); gtk_container_add (GTK_CONTAINER (_factory_button), newlabel); } #if GTK_CHECK_VERSION(2, 18, 0) if (!gtk_widget_get_visible (_factory_button) && !_toolbar_hidden) #else if (!GTK_WIDGET_VISIBLE (_factory_button) && !_toolbar_hidden) #endif gtk_widget_show (_factory_button); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (_factory_button, info.name.c_str ()); #else if (_tooltips) gtk_tooltips_set_tip (_tooltips, _factory_button, info.name.c_str (), NULL); #endif ui_settle_toolbar_window (); } #if ENABLE_TRAY_ICON // if (_tray_icon_factory_button) { // GtkWidget *icon = gtk_bin_get_child (GTK_BIN (_tray_icon_factory_button)); // if (icon) // gtk_container_remove (GTK_CONTAINER (_tray_icon_factory_button), icon); // icon = ui_create_icon (info.icon, NULL, TRAY_ICON_SIZE, TRAY_ICON_SIZE, true); // gtk_container_add (GTK_CONTAINER (_tray_icon_factory_button), icon); // gtk_widget_set_tooltip_text (_tray_icon_factory_button, info.name.c_str ()); // } if (_tray_icon) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_status_icon_set_from_file (_tray_icon, info.icon.c_str()); G_GNUC_END_IGNORE_DEPRECATIONS } #endif if (info.uuid != "") { _recent_factory_uuids.remove(info.uuid); _recent_factory_uuids.push_front(info.uuid); if (_recent_factory_uuids.size () > 5) _recent_factory_uuids.pop_back (); } } static void slot_show_help (const String &help) { ui_show_help (help); } static void slot_show_factory_menu (const std::vector &factories) { if (!_factory_menu_activated && factories.size ()) { size_t i; MapStringVectorSizeT groups; std::map langs, recents; _factory_menu_uuids.clear (); _factory_menu_activated = true; bool use_submenus = false; bool show_recent = (factories.size () > 5 && _recent_factory_uuids.size ()); for (i = 0; i < factories.size (); ++i) { _factory_menu_uuids.push_back (factories [i].uuid); langs [factories [i].lang]++; if (show_recent && std::find (_recent_factory_uuids.begin (), _recent_factory_uuids.end (), factories [i].uuid) != _recent_factory_uuids.end ()) { recents [factories [i].uuid] = i; } else { groups [factories [i].lang].push_back (i); if (groups [factories [i].lang].size () > 1) use_submenus = true; } } use_submenus = (use_submenus && factories.size () > 9); if (_factory_menu) { gtk_widget_destroy (_factory_menu); _factory_menu = 0; } _factory_menu = gtk_menu_new (); #if GTK_CHECK_VERSION(2, 2, 0) if (_current_screen) gtk_menu_set_screen (GTK_MENU (_factory_menu), _current_screen); #endif GtkWidget *submenu; GtkWidget *menu_item; guint id; PanelFactoryInfo info; // recently used factories if (show_recent && recents.size ()) { for (std::list::iterator it = _recent_factory_uuids.begin (); it != _recent_factory_uuids.end (); ++it) { id = recents [*it]; info = factories [id]; ui_create_factory_menu_entry (info, id, GTK_MENU_SHELL (_factory_menu), true, (langs [info.lang] > 1)); if (use_submenus) { MapStringVectorSizeT::iterator g = groups.find (info.lang); if (g != groups.end () && g->second.size () >= 1) { g->second.push_back (id); } } } menu_item = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (_factory_menu), menu_item); gtk_widget_show (menu_item); } for (MapStringVectorSizeT::iterator it = groups.begin (); it != groups.end (); ++ it) { if (use_submenus && it->second.size () > 1) { String lang = it->first; menu_item = gtk_menu_item_new_with_label (scim_get_language_name (lang).c_str ()); submenu = gtk_menu_new (); } else { menu_item = 0; submenu = 0; } for (i = 0; i < it->second.size (); ++i) { id = it->second [i]; info = factories [id]; ui_create_factory_menu_entry (info, id, GTK_MENU_SHELL (submenu ? submenu : _factory_menu), !submenu, (langs [info.lang] > 1)); } if (menu_item && submenu) { gtk_menu_shell_append (GTK_MENU_SHELL (_factory_menu), menu_item); gtk_widget_show (menu_item); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), submenu); gtk_widget_show (submenu); } } //Append an entry for forward mode. info = PanelFactoryInfo (String (""), String (_("English/Keyboard")), String ("C"), String (SCIM_KEYBOARD_ICON_FILE)); ui_create_factory_menu_entry (info, -1, GTK_MENU_SHELL (_factory_menu), false, true); g_signal_connect (G_OBJECT (_factory_menu), "deactivate", G_CALLBACK (ui_factory_menu_deactivate_cb), NULL); if (_tray_icon_clicked && _tray_icon) { while (gtk_main_iteration_do (FALSE)); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_menu_popup (GTK_MENU (_factory_menu), 0, 0, gtk_status_icon_position_menu, _tray_icon, 1, _tray_icon_clicked_time); G_GNUC_END_IGNORE_DEPRECATIONS } else { gtk_menu_popup (GTK_MENU (_factory_menu), 0, 0, 0, 0, 1, gtk_get_current_event_time ()); } _tray_icon_clicked = false; } } static void slot_update_spot_location (int x, int y) { if (x > 0 && x < ui_screen_width () && y > 0 && y < ui_screen_height ()) { _spot_location_x = x; _spot_location_y = y; ui_settle_input_window (); ui_settle_lookup_table_window (); } } static void slot_show_preedit_string (void) { gtk_widget_show (_preedit_area); #if GTK_CHECK_VERSION(2, 18, 0) if (_panel_is_on && !gtk_widget_get_visible (_input_window)) #else if (_panel_is_on && !GTK_WIDGET_VISIBLE (_input_window)) #endif gtk_widget_show (_input_window); ui_settle_input_window (true, true); ui_settle_lookup_table_window (); } static void slot_show_aux_string (void) { gtk_widget_show (_aux_area); #if GTK_CHECK_VERSION(2, 18, 0) if (_panel_is_on && !gtk_widget_get_visible (_input_window)) #else if (_panel_is_on && !gtk_widget_get_visible (_input_window)) #endif gtk_widget_show (_input_window); ui_settle_input_window (true, true); ui_settle_lookup_table_window (); } static void slot_show_lookup_table (void) { gtk_widget_show (_lookup_table_window); #if GTK_CHECK_VERSION(2, 18, 0) if (_panel_is_on && _lookup_table_embedded && !gtk_widget_get_visible (_input_window)) { #else if (_panel_is_on && _lookup_table_embedded && !GTK_WIDGET_VISIBLE (_input_window)) { #endif gtk_widget_show (_input_window); ui_settle_input_window (true, true); } ui_settle_lookup_table_window (true); } static void slot_hide_preedit_string (void) { gtk_widget_hide (_preedit_area); scim_string_view_set_text (SCIM_STRING_VIEW (_preedit_area), ""); if (ui_can_hide_input_window ()) gtk_widget_hide (_input_window); ui_settle_lookup_table_window (); } static void slot_hide_aux_string (void) { gtk_widget_hide (_aux_area); scim_string_view_set_text (SCIM_STRING_VIEW (_aux_area), ""); if (ui_can_hide_input_window ()) gtk_widget_hide (_input_window); ui_settle_lookup_table_window (); } static void slot_hide_lookup_table (void) { gtk_widget_hide (_lookup_table_window); if (_lookup_table_embedded && ui_can_hide_input_window ()) gtk_widget_hide (_input_window); } static void slot_update_preedit_string (const String &str, const AttributeList &attrs) { PangoAttrList *attrlist = create_pango_attrlist (str, attrs); scim_string_view_set_attributes (SCIM_STRING_VIEW (_preedit_area), attrlist); scim_string_view_set_text (SCIM_STRING_VIEW (_preedit_area), str.c_str ()); pango_attr_list_unref (attrlist); ui_settle_input_window (true); ui_settle_lookup_table_window (); } static void slot_update_preedit_caret (int caret) { scim_string_view_set_position (SCIM_STRING_VIEW (_preedit_area), caret); } static void slot_update_aux_string (const String &str, const AttributeList &attrs) { PangoAttrList *attrlist = create_pango_attrlist (str, attrs); scim_string_view_set_attributes (SCIM_STRING_VIEW (_aux_area), attrlist); scim_string_view_set_text (SCIM_STRING_VIEW (_aux_area), str.c_str ()); pango_attr_list_unref (attrlist); ui_settle_input_window (true); ui_settle_lookup_table_window (); } static void slot_update_lookup_table (const LookupTable &table) { size_t i; size_t item_num = table.get_current_page_size (); String mbs; WideString wcs; WideString label; GtkRequisition size; AttributeList attrs; PangoAttrList *attrlist; if (_lookup_table_vertical) { for (i = 0; i < SCIM_LOOKUP_TABLE_MAX_PAGESIZE; ++ i) { if (i < item_num) { mbs = String (); wcs = table.get_candidate_in_current_page (i); label = table.get_candidate_label (i); if (label.length ()) { label += utf8_mbstowcs (". "); } else { label = utf8_mbstowcs (" "); } mbs = utf8_wcstombs (label+wcs); scim_string_view_set_text (SCIM_STRING_VIEW (_lookup_table_items [i]), mbs.c_str ()); // Update attributes; attrs = table.get_attributes_in_current_page (i); if (attrs.size ()) { for (AttributeList::iterator ait = attrs.begin (); ait != attrs.end (); ++ait) ait->set_start (ait->get_start () + label.length ()); attrlist = create_pango_attrlist (mbs, attrs); scim_string_view_set_attributes (SCIM_STRING_VIEW (_lookup_table_items [i]), attrlist); pango_attr_list_unref (attrlist); } else { scim_string_view_set_attributes (SCIM_STRING_VIEW (_lookup_table_items [i]), 0); } if (i == table.get_cursor_pos_in_current_page () && table.is_cursor_visible ()) scim_string_view_set_highlight (SCIM_STRING_VIEW (_lookup_table_items [i]), 0, wcs.length () + 3); else scim_string_view_set_highlight (SCIM_STRING_VIEW (_lookup_table_items [i]), -1, -1); gtk_widget_show (_lookup_table_items [i]); } else { gtk_widget_hide (_lookup_table_items [i]); } } } else { _lookup_table_index [0] = 0; for (i=0; i= ui_screen_width () / 3 && !table.is_page_size_fixed ()) { item_num = i+1; } if (item_attrs.size ()) { for (AttributeList::iterator ait = item_attrs.begin (); ait != item_attrs.end (); ++ait) { ait->set_start (ait->get_start () + attr_start); if (ait->get_end () + attr_start > attr_end) ait->set_length (attr_end - ait->get_start ()); } attrs.insert (attrs.end (), item_attrs.begin (), item_attrs.end ()); } } else { _lookup_table_index [i+1] = -1; } } if (attrs.size ()) { attrlist = create_pango_attrlist (mbs, attrs); scim_string_view_set_attributes (SCIM_STRING_VIEW (_lookup_table_items [0]), attrlist); pango_attr_list_unref (attrlist); } else { scim_string_view_set_attributes (SCIM_STRING_VIEW (_lookup_table_items [0]), 0); } if (table.is_cursor_visible ()) { int start = _lookup_table_index [table.get_cursor_pos_in_current_page ()]; int end = _lookup_table_index [table.get_cursor_pos_in_current_page ()+1] - 1; scim_string_view_set_highlight (SCIM_STRING_VIEW (_lookup_table_items [0]), start, end); } else { scim_string_view_set_highlight (SCIM_STRING_VIEW (_lookup_table_items [0]), -1, -1); } } if (table.get_current_page_start ()) gtk_widget_set_sensitive (_lookup_table_up_button, TRUE); else gtk_widget_set_sensitive (_lookup_table_up_button, FALSE); if (table.get_current_page_start () + item_num < table.number_of_candidates ()) gtk_widget_set_sensitive (_lookup_table_down_button, TRUE); else gtk_widget_set_sensitive (_lookup_table_down_button, FALSE); if (item_num < table.get_current_page_size ()) _panel_agent->update_lookup_table_page_size (item_num); if (_lookup_table_embedded) ui_settle_input_window (true); else ui_settle_lookup_table_window (); } static void slot_register_properties (const PropertyList &props) { register_frontend_properties (props); } static void slot_update_property (const Property &prop) { update_frontend_property (prop); } static void slot_register_helper_properties (int id, const PropertyList &props) { register_helper_properties (id, props); } static void slot_update_helper_property (int id, const Property &prop) { update_helper_property (id, prop); } static void slot_register_helper (int id, const HelperInfo &helper) { } static void slot_remove_helper (int id) { HelperPropertyRepository::iterator it = _helper_property_repository.find (id); if (it != _helper_property_repository.end () && it->second.holder) gtk_widget_destroy (it->second.holder); _helper_property_repository.erase (id); } static void slot_lock (void) { G_LOCK (_panel_agent_lock); } static void slot_unlock (void) { G_UNLOCK (_panel_agent_lock); } ////////////////////////////////////////////////////////////////////// // End of PanelAgent-Functions ////////////////////////////////////////////////////////////////////// static GtkWidget * create_properties_node (PropertyRepository &repository, PropertyList::const_iterator begin, PropertyList::const_iterator end, int client, int level) { PropertyList::const_iterator it; PropertyList::const_iterator next; GtkWidget * node; PropertyInfo info; bool leaf = true; if (begin >= end) return 0; // If the level is zero, then create the this node as button, otherwise create as a menu item. if (!level) { GtkWidget * label = ui_create_label (begin->get_label (), begin->get_icon (), 0, !_toolbar_show_property_label, false); node = gtk_button_new (); gtk_container_add (GTK_CONTAINER (node), label); gtk_button_set_relief (GTK_BUTTON (node), GTK_RELIEF_NONE); } else { node = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (begin->get_label ().c_str ()); #if !GTK_CHECK_VERSION(3, 10, 0) gint width, height; gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); GtkWidget * icon = ui_create_icon (begin->get_icon (), NULL, width, height, false); if (icon) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (node), icon); #endif } if (begin->visible ()) gtk_widget_show (node); else gtk_widget_hide (node); gtk_widget_set_sensitive (node, begin->active ()); #if GTK_CHECK_VERSION(2, 12, 0) if (begin->get_tip ().length ()) gtk_widget_set_tooltip_text (node, begin->get_tip ().c_str ()); #else if (_tooltips && begin->get_tip ().length ()) gtk_tooltips_set_tip (_tooltips, node, begin->get_tip ().c_str (), NULL); #endif g_object_set_data_full (G_OBJECT (node), "property_key", g_strdup (begin->get_key ().c_str ()), g_free); info.property = *begin; info.widget = node; repository.push_back (info); it = begin + 1; if (it != end) { GtkWidget * submenu = gtk_menu_new (); GtkWidget * child; int menu_item_idx = 0; // Create all leafs of the first child. while (it != end) { // Find all leafs of the first child. for (next = it + 1; next != end; ++ next) if (!next->is_a_leaf_of (*it)) break; child = create_properties_node (repository, it, next, client, level + 1); if (child) { gtk_menu_shell_append (GTK_MENU_SHELL (submenu), child); g_object_set_data (G_OBJECT (child), "menu_item_idx", GINT_TO_POINTER (menu_item_idx)); ++ menu_item_idx; } it = next; } // The node is a button, so attach the submenu as its data. if (!level) { g_object_set_data_full (G_OBJECT (node), "property_submenu", submenu, (void (*)(void*)) gtk_widget_destroy); g_signal_connect (G_OBJECT (submenu), "deactivate", G_CALLBACK (ui_property_menu_deactivate_cb), NULL); } else // The node is a menu item, so attach the submenu directly. gtk_menu_item_set_submenu (GTK_MENU_ITEM (node), submenu); leaf = false; } if (leaf || level == 0) { g_signal_connect (G_OBJECT (node), ((level > 0) ? "activate" : "clicked"), G_CALLBACK (ui_property_activate_cb), GINT_TO_POINTER (client)); } return node; } static void create_properties (GtkWidget *container, PropertyRepository &repository, const PropertyList &properties, int client, int level) { PropertyList::const_iterator it; PropertyList::const_iterator next; PropertyList::const_iterator begin = properties.begin (); PropertyList::const_iterator end = properties.end (); GtkWidget *root; int menu_item_idx = 0; if (begin == end) return; #if GTK_CHECK_VERSION(3, 2, 0) root = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else root = gtk_hbox_new (FALSE, 0); #endif it = begin; next = begin + 1; while (it != end) { if (next == end || !next->is_a_leaf_of (*it)) { GtkWidget * node = create_properties_node (repository, it, next, client, level); if (node) { // The container is a hbox. if (!level) gtk_box_pack_start (GTK_BOX (container), node, TRUE, TRUE, 0); // The container is a menu. else { gtk_menu_shell_append (GTK_MENU_SHELL (container), node); g_object_set_data (G_OBJECT (node), "menu_item_idx", GINT_TO_POINTER (menu_item_idx)); ++ menu_item_idx; } } it = next; } ++ next; } } static void register_frontend_properties (const PropertyList &properties) { bool same = true; PropertyList::const_iterator pit = properties.begin (); if (properties.size () == 0) { same = false; } else if (properties.size () == _frontend_property_repository.size ()) { // Check if the properties are same as old ones. PropertyRepository::iterator it = _frontend_property_repository.begin (); for (; it != _frontend_property_repository.end (); ++it, ++pit) { if (it->property != *pit) { same = false; break; } } } else { same = false; } // Only update the properties. if (same) { for (pit = properties.begin (); pit != properties.end (); ++pit) update_frontend_property (*pit); gtk_widget_show (_frontend_properties_area); } else { // Construct all properties. if (_frontend_properties_area) gtk_widget_destroy (_frontend_properties_area); _frontend_properties_area = 0; _frontend_property_repository.clear (); if (properties.size ()) { #if GTK_CHECK_VERSION(3, 2, 0) _frontend_properties_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else _frontend_properties_area = gtk_hbox_new (FALSE, 0); #endif create_properties (_frontend_properties_area, _frontend_property_repository, properties, -1, 0); gtk_widget_show (_frontend_properties_area); gtk_box_pack_start (GTK_BOX (_client_properties_area), _frontend_properties_area, TRUE,TRUE, 0); } } ui_settle_toolbar_window (); } static void update_frontend_property (const Property &property) { update_property (_frontend_property_repository, property); } static void register_helper_properties (int client, const PropertyList &properties) { HelperPropertyRepository::iterator it = _helper_property_repository.find (client); if (it == _helper_property_repository.end ()) { _helper_property_repository [client] = HelperPropertyInfo (); it = _helper_property_repository.find (client); } if (it->second.holder) gtk_widget_destroy (it->second.holder); it->second.holder = 0; if (properties.size ()) { #if GTK_CHECK_VERSION(3, 2, 0) it->second.holder = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else it->second.holder = gtk_hbox_new (FALSE, 0); #endif create_properties (it->second.holder, it->second.repository, properties, client, 0); gtk_widget_show (it->second.holder); gtk_box_pack_end (GTK_BOX (_client_properties_area), it->second.holder, TRUE,TRUE, 0); } ui_settle_toolbar_window (); } static void update_helper_property (int client, const Property &property) { update_property (_helper_property_repository [client].repository, property); } static void update_property (PropertyRepository &repository, const Property &property) { PropertyRepository::iterator it = repository.begin (); for (; it != repository.end (); ++ it) { if (it->property == property) { if (!it->widget) break; if (it->property.get_label () != property.get_label () || it->property.get_icon () != property.get_icon ()) { if (GTK_IS_BUTTON (it->widget)) { GtkWidget *label = ui_create_label (property.get_label (), property.get_icon (), 0, !_toolbar_show_property_label, false); GtkWidget *old = gtk_bin_get_child (GTK_BIN (it->widget)); gtk_container_remove (GTK_CONTAINER (it->widget), old); gtk_container_add (GTK_CONTAINER (it->widget), label); } else if (GTK_IS_MENU_ITEM (it->widget)) { gint width, height; gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); GtkWidget * menu = gtk_widget_get_parent (it->widget); int menu_item_idx = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (it->widget), "menu_item_idx")); GtkWidget * icon = ui_create_icon (property.get_icon (), NULL, width, height, false); GtkWidget * new_item = #if GTK_CHECK_VERSION(3, 10, 0) gtk_menu_item_new_with_label #else gtk_image_menu_item_new_with_label #endif (property.get_label ().c_str ()); #if !GTK_CHECK_VERSION(3, 10, 0) gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new_item), icon); #endif GtkWidget * submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (it->widget)); gtk_menu_item_set_submenu (GTK_MENU_ITEM (new_item), submenu); g_object_set_data_full (G_OBJECT (new_item), "property_key", g_strdup (property.get_key ().c_str ()), g_free); g_object_set_data (G_OBJECT (new_item), "menu_item_idx", GINT_TO_POINTER (menu_item_idx)); gtk_widget_destroy (it->widget); it->widget = new_item; gtk_menu_shell_insert (GTK_MENU_SHELL (menu), new_item, menu_item_idx); } } if (property.visible ()) gtk_widget_show (it->widget); else gtk_widget_hide (it->widget); gtk_widget_set_sensitive (it->widget, property.active ()); #if GTK_CHECK_VERSION(2, 12, 0) if (property.get_tip ().length ()) gtk_widget_set_tooltip_text (it->widget, property.get_tip ().c_str ()); #else if (_tooltips && property.get_tip ().length ()) gtk_tooltips_set_tip (_tooltips, it->widget, property.get_tip ().c_str (), NULL); #endif it->property = property; break; } } ui_settle_toolbar_window (); } static void restore_properties (void) { PropertyList properties; _frontend_properties_area = 0; PropertyRepository::iterator it = _frontend_property_repository.begin (); HelperPropertyRepository::iterator helper_it = _helper_property_repository.begin (); for (; it != _frontend_property_repository.end (); ++it) properties.push_back (it->property); if (properties.size ()) { _frontend_property_repository.clear (); register_frontend_properties (properties); } for (; helper_it != _helper_property_repository.end (); ++ helper_it) { helper_it->second.holder = 0; properties.clear (); for (it = helper_it->second.repository.begin (); it != helper_it->second.repository.end (); ++it) properties.push_back (it->property); if (properties.size ()) { helper_it->second.repository.clear (); register_helper_properties (helper_it->first, properties); } } } static gboolean check_exit_timeout_cb (gpointer data) { G_LOCK (_global_resource_lock); if (_should_exit) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter (); G_GNUC_END_IGNORE_DEPRECATIONS gtk_main_quit (); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_leave (); G_GNUC_END_IGNORE_DEPRECATIONS } G_UNLOCK (_global_resource_lock); return TRUE; } static void signalhandler(int sig) { SCIM_DEBUG_MAIN (1) << "In signal handler...\n"; if (_panel_agent != NULL) { _panel_agent->stop (); } } int main (int argc, char *argv []) { std::vector config_list; int i; bool daemon = false; int new_argc = 0; char **new_argv = new char * [40]; String config_name ("simple"); String display_name; bool should_resident = true; //Display version info std::cerr << "GTK Panel of SCIM " << SCIM_VERSION << "\n\n"; //get modules list scim_get_config_module_list (config_list); //Add a dummy config module, it's not really a module! config_list.push_back ("dummy"); //Use socket Config module as default if available. if (config_list.size ()) { if (std::find (config_list.begin (), config_list.end (), config_name) == config_list.end ()) config_name = config_list [0]; } DebugOutput::disable_debug (SCIM_DEBUG_AllMask); DebugOutput::enable_debug (SCIM_DEBUG_MainMask); //parse command options i = 0; while (i= argc) break; if (String ("-l") == argv [i] || String ("--list") == argv [i]) { std::vector::iterator it; std::cout << "\n"; std::cout << "Available Config module:\n"; for (it = config_list.begin (); it != config_list.end (); it++) std::cout << " " << *it << "\n"; return 0; } if (String ("-c") == argv [i] || String ("--config") == argv [i]) { if (++i >= argc) { std::cerr << "no argument for option " << argv [i-1] << "\n"; return -1; } config_name = argv [i]; continue; } if (String ("-h") == argv [i] || String ("--help") == argv [i]) { std::cout << "Usage: " << argv [0] << " [option]...\n\n" << "The options are: \n" << " --display DISPLAY Run on display DISPLAY.\n" << " -l, --list List all of available config modules.\n" << " -c, --config NAME Uses specified Config module.\n" << " -d, --daemon Run " << argv [0] << " as a daemon.\n" << " -ns, --no-stay Quit if no connected client.\n" #if ENABLE_DEBUG << " -v, --verbose LEVEL Enable debug info, to specific LEVEL.\n" << " -o, --output FILE Output debug information into FILE.\n" #endif << " -h, --help Show this help message.\n"; return 0; } if (String ("-d") == argv [i] || String ("--daemon") == argv [i]) { daemon = true; continue; } if (String ("-ns") == argv [i] || String ("--no-stay") == argv [i]) { should_resident = false; continue; } if (String ("-v") == argv [i] || String ("--verbose") == argv [i]) { if (++i >= argc) { std::cerr << "no argument for option " << argv [i-1] << "\n"; return -1; } DebugOutput::set_verbose_level (atoi (argv [i])); continue; } if (String ("-o") == argv [i] || String ("--output") == argv [i]) { if (++i >= argc) { std::cerr << "No argument for option " << argv [i-1] << "\n"; return -1; } DebugOutput::set_output (argv [i]); continue; } if (String ("--display") == argv [i]) { if (++i >= argc) { std::cerr << "No argument for option " << argv [i-1] << "\n"; return -1; } display_name = argv [i]; continue; } if (String ("--") == argv [i]) break; std::cerr << "Invalid command line option: " << argv [i] << "\n"; return -1; } //End of command line parsing. new_argv [new_argc ++] = argv [0]; // Store the rest argvs into new_argv. for (++i; i < argc && new_argc < 40; ++i) { new_argv [new_argc ++] = argv [i]; } // Make up DISPLAY env. if (display_name.length ()) { new_argv [new_argc ++] = const_cast ("--display"); new_argv [new_argc ++] = const_cast (display_name.c_str ()); setenv ("DISPLAY", display_name.c_str (), 1); } new_argv [new_argc] = 0; if (!config_name.length ()) { std::cerr << "No Config module is available!\n"; return -1; } if (config_name != "dummy") { //load config module _config_module = new ConfigModule (config_name); if (!_config_module || !_config_module->valid ()) { std::cerr << "Can not load " << config_name << " Config module.\n"; return -1; } //create config instance _config = _config_module->create_config (); } else { _config = new DummyConfig (); } if (_config.null ()) { std::cerr << "Failed to create Config instance from " << config_name << " Config module.\n"; return -1; } #if !GTK_CHECK_VERSION(2, 32, 0) /* init threads */ g_thread_init (NULL); #endif G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_init (); G_GNUC_END_IGNORE_DEPRECATIONS signal(SIGQUIT, signalhandler); signal(SIGTERM, signalhandler); signal(SIGINT, signalhandler); signal(SIGHUP, signalhandler); gtk_init (&new_argc, &new_argv); ui_initialize (); // get current display. { #if GTK_CHECK_VERSION(2, 2, 0) const char *p = gdk_display_get_name (gdk_display_get_default ()); #else const char *p = getenv ("DISPLAY"); #endif if (p) display_name = String (p); } if (!initialize_panel_agent (config_name, display_name, should_resident)) { std::cerr << "Failed to initialize Panel Agent!\n"; return -1; } if (daemon) scim_daemon (); // connect the configuration reload signal. _config->signal_connect_reload (slot (ui_config_reload_callback)); if (!run_panel_agent()) { std::cerr << "Failed to run Socket Server!\n"; return -1; } start_auto_start_helpers (); // _check_exit_timeout = g_timeout_add (500, check_exit_timeout_cb, NULL); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter (); G_GNUC_END_IGNORE_DEPRECATIONS gtk_main (); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_leave (); G_GNUC_END_IGNORE_DEPRECATIONS // Exiting... g_thread_join (_panel_agent_thread); _config.reset (); std::cerr << "Successfully exited.\n"; return 0; } /* vi:ts=4:nowrap:expandtab */ scim-master/extras/setup/000077500000000000000000000000001415264260100157515ustar00rootroot00000000000000scim-master/extras/setup/Makefile.am000066400000000000000000000044721415264260100200140ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak scim-setup.desktop scim-setup AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" noinst_HEADERS = scim_setup_module.h \ scim_setup_ui.h if SCIM_BUILD_SCIM_SETUP CONFIG_SCIM_SETUP = scim-setup CONFIG_SCIM_SETUP_HELPER = setup.la endif bin_SCRIPTS = $(CONFIG_SCIM_SETUP) moduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/Helper module_LTLIBRARIES = $(CONFIG_SCIM_SETUP_HELPER) setup_la_SOURCES = scim_setup_ui.cpp \ scim_setup_module.cpp \ scim_setup_helper.cpp setup_la_CXXFLAGS = @GTK_CFLAGS@ setup_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @GTK_LIBS@ \ @LTLIBINTL@ setup_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la if SCIM_BUILD_SCIM_SETUP @INTLTOOL_DESKTOP_RULE@ desktopdir = $(datadir)/applications desktop_in_files = scim-setup.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) gnomeccdir = $(datadir)/control-center-2.0/capplets gnomecc_DATA = $(desktop_in_files:.desktop.in=.desktop) endif EXTRA_DIST = $(desktop_in_files) scim-setup.in scim-master/extras/setup/scim-setup.desktop.in000066400000000000000000000003671415264260100220500ustar00rootroot00000000000000[Desktop Entry] _Name=SCIM Input Method _Comment=Configure the Smart Common Input Method platform Exec=scim-setup Icon=scim-setup Terminal=false Type=Application StartupNotify=true Categories=Settings; NotShowIn=KDE; X-Ubuntu-Gettext-Domain=scim scim-master/extras/setup/scim-setup.in000066400000000000000000000021761415264260100204000ustar00rootroot00000000000000#!/bin/sh # Smart Common Input Method # # Copyright (c) 2002-2004 James Su # # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA # $Id: scim-setup.in,v 1.1 2005/01/03 03:41:06 suzhe Exp $ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ localedir=@datadir@/locale datadir=@datadir@ sysconfdir=@sysconfdir@ datarootdir=@datarootdir@ @SCIM_LIBEXECDIR@/scim-helper-launcher setup 8034d025-bdfc-4a10-86a4-82b9461b32b0 $* scim-master/extras/setup/scim_setup_helper.cpp000066400000000000000000000067101415264260100221730ustar00rootroot00000000000000/** @file scim_setup_helper.cpp * implementation of Setup Helper module. */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_setup_helper.cpp,v 1.5 2005/01/13 14:54:18 suzhe Exp $ */ #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_MODULE #define Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_HELPER #define Uses_STL_MAP #include "scim_private.h" #include "scim.h" #include "scim_setup_module.h" #include "scim_setup_ui.h" #define scim_module_init setup_LTX_scim_module_init #define scim_module_exit setup_LTX_scim_module_exit #define scim_helper_module_number_of_helpers setup_LTX_scim_helper_module_number_of_helpers #define scim_helper_module_get_helper_info setup_LTX_scim_helper_module_get_helper_info #define scim_helper_module_run_helper setup_LTX_scim_helper_module_run_helper using namespace scim; static HelperInfo __helper_info (String ("8034d025-bdfc-4a10-86a4-82b9461b32b0"), String (_("SCIM Setup")), String (SCIM_ICONDIR "/setup.png"), String (_("Integrated Setup Utility based on GTK Widget library.")), SCIM_HELPER_STAND_ALONE); //Module Interface extern "C" { void scim_module_init (void) { } void scim_module_exit (void) { } unsigned int scim_helper_module_number_of_helpers (void) { return 1; } bool scim_helper_module_get_helper_info (unsigned int idx, HelperInfo &info) { if (idx == 0) { info = __helper_info; return true; } return false; } void scim_helper_module_run_helper (const String &uuid, const ConfigPointer &config, const String &display) { SCIM_DEBUG_MAIN(1) << "setup_LTX_scim_helper_module_run_helper ()\n"; if (uuid == "8034d025-bdfc-4a10-86a4-82b9461b32b0") { SetupUI * setup_ui = new SetupUI (config, display, __helper_info); std::vector setup_list; SetupModule *setup_module = 0; scim_get_setup_module_list (setup_list); for (size_t i = 0; i < setup_list.size (); ++ i) { setup_module = new SetupModule (setup_list [i]); if (setup_module && setup_module->valid ()) { setup_ui->add_module (setup_module); } else if (setup_module) { delete setup_module; } } setup_ui->run (); delete setup_ui; } SCIM_DEBUG_MAIN(1) << "exit setup_LTX_scim_helper_module_run_helper ()\n"; } } /* vi:ts=4:nowrap:ai:expandtab */ scim-master/extras/setup/scim_setup_module.cpp000066400000000000000000000073761415264260100222120ustar00rootroot00000000000000/* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_setup_module.cpp,v 1.9 2005/01/10 08:30:45 suzhe Exp $ * */ #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_MODULE #include "scim_private.h" #include "scim.h" #include "scim_setup_module.h" SetupModule::SetupModule () : m_create_ui (0), m_get_category (0), m_get_name (0), m_get_description (0), m_load_config (0), m_save_config (0) { } SetupModule::SetupModule (const String &name) : m_create_ui (0), m_get_category (0), m_get_name (0), m_get_description (0), m_load_config (0), m_save_config (0) { load (name); } bool SetupModule::load (const String &name) { if (!m_module.load (name, "SetupUI")) return false; m_create_ui = (SetupModuleCreateUIFunc) m_module.symbol ("scim_setup_module_create_ui"); m_get_category = (SetupModuleGetCategoryFunc) m_module.symbol ("scim_setup_module_get_category"); m_get_name = (SetupModuleGetNameFunc) m_module.symbol ("scim_setup_module_get_name"); m_get_description = (SetupModuleGetDescriptionFunc) m_module.symbol ("scim_setup_module_get_description"); m_load_config = (SetupModuleLoadConfigFunc) m_module.symbol ("scim_setup_module_load_config"); m_save_config = (SetupModuleSaveConfigFunc) m_module.symbol ("scim_setup_module_save_config"); m_query_changed = (SetupModuleQueryChangedFunc) m_module.symbol ("scim_setup_module_query_changed"); if (!m_create_ui || !m_get_category || !m_get_name || !m_load_config || !m_save_config) { m_module.unload (); m_create_ui = 0; m_get_category = 0; m_get_name = 0; m_get_description = 0; m_load_config = 0; m_save_config = 0; return false; } return true; } bool SetupModule::valid () const { return (m_module.valid () && m_create_ui && m_get_category && m_get_name && m_load_config && m_save_config); } GtkWidget * SetupModule::create_ui () const { if (valid ()) return m_create_ui (); return 0; } String SetupModule::get_category () const { if (valid ()) return m_get_category (); return String (); } String SetupModule::get_name () const { if (valid ()) return m_get_name (); return String (); } String SetupModule::get_description () const { if (valid () && m_get_description) return m_get_description (); return String (); } void SetupModule::load_config (const ConfigPointer &config) const { if (valid ()) m_load_config (config); } void SetupModule::save_config (const ConfigPointer &config) const { if (valid ()) m_save_config (config); } bool SetupModule::query_changed () const { if (valid () && m_query_changed) return m_query_changed (); return false; } int scim_get_setup_module_list (std::vector & mod_list) { return scim_get_module_list (mod_list, "SetupUI"); } /* vi:ts=4:nowrap:ai:expandtab */ scim-master/extras/setup/scim_setup_module.h000066400000000000000000000050111415264260100216370ustar00rootroot00000000000000/** @file scim_setup_module.h * @brief definition of SetupModule related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_setup_module.h,v 1.9 2005/01/10 08:30:45 suzhe Exp $ */ #if !defined (__SCIM_SETUP_MODULE_H) #define __SCIM_SETUP_MODULE_H #include using namespace scim; typedef GtkWidget * (*SetupModuleCreateUIFunc) (void); typedef String (*SetupModuleGetCategoryFunc) (void); typedef String (*SetupModuleGetNameFunc) (void); typedef String (*SetupModuleGetDescriptionFunc) (void); typedef void (*SetupModuleLoadConfigFunc) (const ConfigPointer &config); typedef void (*SetupModuleSaveConfigFunc) (const ConfigPointer &config); typedef bool (*SetupModuleQueryChangedFunc) (void); class SetupModule { Module m_module; SetupModuleCreateUIFunc m_create_ui; SetupModuleGetCategoryFunc m_get_category; SetupModuleGetNameFunc m_get_name; SetupModuleGetDescriptionFunc m_get_description; SetupModuleLoadConfigFunc m_load_config; SetupModuleSaveConfigFunc m_save_config; SetupModuleQueryChangedFunc m_query_changed; SetupModule (const SetupModule &); SetupModule & operator= (const SetupModule &); public: SetupModule (); SetupModule (const String &name); bool load (const String &name); bool valid () const; GtkWidget * create_ui () const; String get_category () const; String get_name () const; String get_description () const; void load_config (const ConfigPointer &config) const; void save_config (const ConfigPointer &config) const; bool query_changed () const; }; int scim_get_setup_module_list (std::vector & mod_list); #endif // __SCIM_SETUP_MODULE_H /* vi:ts=4:ai:nowrap:expandtab */ scim-master/extras/setup/scim_setup_ui.cpp000066400000000000000000000545211415264260100213340ustar00rootroot00000000000000/* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_setup_ui.cpp,v 1.52 2005/06/23 05:12:58 suzhe Exp $ * */ #include #include #define Uses_SCIM_COMPOSE_KEY #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_MODULE #define Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_HELPER #include "scim_private.h" #include "scim.h" #include "scim_setup_module.h" #include "scim_setup_ui.h" #define LIST_ICON_SIZE 20 #define SCIM_TRADEMARK_ICON_FILE (SCIM_ICONDIR "/trademark.png") const gchar * scim_setup_module_categories [] = { N_("SCIM"), N_("FrontEnd"), N_("IMEngine"), N_("Panel"), N_("Extra"), NULL }; enum { MODULE_LIST_LABEL = 0, MODULE_LIST_CATEGORY, MODULE_LIST_MODULE, MODULE_LIST_WIDGET, MODULE_LIST_NUM_COLUMNS }; SetupUI::SetupUI (const ConfigPointer &config, const String &display, const HelperInfo &helper_info) : m_main_window (0), m_work_area (0), m_apply_button (0), m_restore_button (0), m_status_bar (0), m_module_list_view (0), m_module_list_selection (0), m_module_list_model (0), m_current_widget (0), m_current_module (0), m_config (config), m_query_changed_timeout (0), m_changes_applied (false) { char **argv = new char * [4]; int argc = 1; argv [0] = const_cast("scim-setup"); argv [1] = 0; if (display.length ()) { argv [argc ++] = const_cast ("--display"); argv [argc ++] = const_cast (display.c_str ()); argv [argc] = 0; setenv ("DISPLAY", display.c_str (), 1); } gtk_init (&argc, &argv); create_main_ui (); create_module_list_model (); m_query_changed_timeout = g_timeout_add (200, query_changed_timeout_cb, this); m_helper_agent.open_connection (helper_info, display); delete [] argv; } SetupUI::~SetupUI () { g_source_remove (m_query_changed_timeout); gtk_widget_destroy (m_main_window); m_helper_agent.close_connection (); } bool SetupUI::add_module (SetupModule *module) { if (!module || !module->valid ()) return false; GtkTreeIter iter, parent; GtkWidget *module_widget = module->create_ui (); String module_label = module->get_name (); String module_category = module->get_category (); if (!module_widget || !module_label.length () || !module_category.length ()) return false; if (!m_config.null ()) module->load_config (m_config); gtk_box_pack_start (GTK_BOX (m_work_area), module_widget, TRUE, TRUE, 0); gtk_widget_hide (module_widget); if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (m_module_list_model), &parent)) { gchar *category; do { gtk_tree_model_get (GTK_TREE_MODEL (m_module_list_model), &parent, MODULE_LIST_CATEGORY, &category, -1); // Find the right category and append the module. if (category && !strcmp (category, module_category.c_str ())) { gtk_tree_store_append (m_module_list_model, &iter, &parent); gtk_tree_store_set ( m_module_list_model, &iter, MODULE_LIST_LABEL, module_label.c_str (), MODULE_LIST_CATEGORY, NULL, MODULE_LIST_MODULE, module, MODULE_LIST_WIDGET, module_widget, -1); g_free (category); gtk_tree_view_expand_all (GTK_TREE_VIEW (m_module_list_view)); return true; } g_free (category); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (m_module_list_model), &parent)); } GtkWidget *cover; cover = create_setup_cover (module_category.c_str ()); gtk_box_pack_start (GTK_BOX (m_work_area), cover, TRUE, TRUE, 0); // No suitable category available, add one. gtk_tree_store_append (m_module_list_model, &parent, NULL); gtk_tree_store_set ( m_module_list_model, &parent, MODULE_LIST_LABEL, _(module_category.c_str ()), MODULE_LIST_CATEGORY, module_category.c_str (), MODULE_LIST_MODULE, NULL, MODULE_LIST_WIDGET, cover, -1); gtk_tree_store_append (m_module_list_model, &iter, &parent); gtk_tree_store_set ( m_module_list_model, &iter, MODULE_LIST_LABEL, module_label.c_str (), MODULE_LIST_CATEGORY, NULL, MODULE_LIST_MODULE, module, MODULE_LIST_WIDGET, module_widget, -1); gtk_tree_view_expand_all (GTK_TREE_VIEW (m_module_list_view)); return true; } void SetupUI::run () { SCIM_DEBUG_MAIN(1) << "SetupUI::run ()\n"; if (m_main_window) { gtk_widget_show (m_main_window); gtk_main (); } if (m_changes_applied) { // Flush the global config before sending reload config event. scim_global_config_flush (); m_helper_agent.reload_config (); } SCIM_DEBUG_MAIN(1) << "exit SetupUI::run ()\n"; } void SetupUI::create_main_ui () { GtkWidget *hpaned1; GtkWidget *scrolledwindow1; GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *frame1; GtkWidget *hbox1; GtkWidget *ok_button; GtkWidget *exit_button; GtkWidget *vseparator1; GdkPixbuf *icon; GtkCellRenderer *module_list_cell; GtkTreeViewColumn *module_list_column; // Create main window. m_main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (m_main_window), _("SCIM Input Method Setup")); gtk_window_set_position (GTK_WINDOW (m_main_window), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (m_main_window), TRUE); gtk_window_set_destroy_with_parent (GTK_WINDOW (m_main_window), TRUE); gtk_window_set_resizable (GTK_WINDOW (m_main_window), TRUE); // Set the window icon icon = gdk_pixbuf_new_from_file (SCIM_TRADEMARK_ICON_FILE, NULL); if (icon) { gtk_window_set_icon (GTK_WINDOW (m_main_window), icon); g_object_unref (icon); } #if GTK_CHECK_VERSION(3, 2, 0) vbox1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else vbox1 = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (m_main_window), vbox1); // Create paned window. #if GTK_CHECK_VERSION(3, 2, 0) hpaned1 = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); #else hpaned1 = gtk_hpaned_new (); #endif gtk_widget_show (hpaned1); gtk_box_pack_start (GTK_BOX (vbox1), hpaned1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hpaned1), 4); // Create statusbar. m_status_bar = gtk_statusbar_new (); #if GTK_CHECK_VERSION(3, 14, 0) // resize_grip is removed in gtk+-3.14.0 #elif GTK_CHECK_VERSION(3, 0, 0) gtk_window_set_has_resize_grip (GTK_WINDOW(m_main_window), TRUE); #else gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (m_status_bar), TRUE); #endif gtk_widget_show (m_status_bar); gtk_box_pack_start (GTK_BOX (vbox1), m_status_bar, FALSE, FALSE, 0); // Create scrollwindow for module list. scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow1); gtk_paned_pack1 (GTK_PANED (hpaned1), scrolledwindow1, FALSE, FALSE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_ETCHED_IN); // Create module list view. m_module_list_view = gtk_tree_view_new (); gtk_widget_show (m_module_list_view); gtk_container_add (GTK_CONTAINER (scrolledwindow1), m_module_list_view); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (m_module_list_view), FALSE); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (m_module_list_view), FALSE); // Get module list selection. m_module_list_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_module_list_view)); gtk_tree_selection_set_mode (m_module_list_selection, GTK_SELECTION_BROWSE); // Create module list column. module_list_cell = gtk_cell_renderer_text_new (); module_list_column = gtk_tree_view_column_new_with_attributes ( NULL, module_list_cell, "text", MODULE_LIST_LABEL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (m_module_list_view), module_list_column); // Create vbox for work area and button area. #if GTK_CHECK_VERSION(3, 2, 0) vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else vbox2 = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (vbox2); gtk_paned_pack2 (GTK_PANED (hpaned1), vbox2, TRUE, FALSE); // Create frame for work area. frame1 = gtk_frame_new (NULL); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox2), frame1, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(3, 2, 0) m_work_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else m_work_area = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (m_work_area); gtk_container_add (GTK_CONTAINER (frame1), m_work_area); // Create hbox for button area. #if GTK_CHECK_VERSION(3, 2, 0) hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox1 = gtk_hbox_new (FALSE, 0); #endif gtk_widget_show (hbox1); gtk_box_pack_end (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 8); #if GTK_CHECK_VERSION(3, 14, 0) ok_button = gtk_button_new_from_icon_name ("gtk-ok", GTK_ICON_SIZE_BUTTON); #else ok_button = gtk_button_new_from_stock ("gtk-ok"); #endif gtk_widget_show (ok_button); gtk_box_pack_end (GTK_BOX (hbox1), ok_button, FALSE, FALSE, 4); #if GTK_CHECK_VERSION(3, 14, 0) exit_button = gtk_button_new_from_icon_name ("gtk-cancel", GTK_ICON_SIZE_BUTTON); #else exit_button = gtk_button_new_from_stock ("gtk-cancel"); #endif gtk_widget_show (exit_button); gtk_box_pack_end (GTK_BOX (hbox1), exit_button, FALSE, FALSE, 4); #if GTK_CHECK_VERSION(3, 2, 0) vseparator1 = gtk_separator_new (GTK_ORIENTATION_VERTICAL); #else vseparator1 = gtk_vseparator_new (); #endif gtk_widget_show (vseparator1); gtk_box_pack_end (GTK_BOX (hbox1), vseparator1, FALSE, FALSE, 4); #if GTK_CHECK_VERSION(3, 14, 0) m_apply_button = gtk_button_new_from_icon_name ("gtk-apply", GTK_ICON_SIZE_BUTTON); #else m_apply_button = gtk_button_new_from_stock ("gtk-apply"); #endif gtk_widget_show (m_apply_button); gtk_box_pack_end (GTK_BOX (hbox1), m_apply_button, FALSE, FALSE, 4); #if GTK_CHECK_VERSION(2, 18, 0) gtk_widget_set_can_default (m_apply_button, TRUE); #else GTK_WIDGET_SET_FLAGS (m_apply_button, GTK_CAN_DEFAULT); #endif gtk_widget_set_sensitive (m_apply_button, FALSE); #if GTK_CHECK_VERSION(3, 14, 0) m_restore_button = gtk_button_new_from_icon_name ("gtk-revert-to-saved", GTK_ICON_SIZE_BUTTON); #else m_restore_button = gtk_button_new_from_stock ("gtk-revert-to-saved"); #endif gtk_widget_show (m_restore_button); gtk_box_pack_end (GTK_BOX (hbox1), m_restore_button, FALSE, FALSE, 4); gtk_widget_set_sensitive (m_restore_button, FALSE); g_signal_connect ((gpointer) ok_button, "clicked", G_CALLBACK (SetupUI::ok_button_clicked_callback), this); g_signal_connect ((gpointer) exit_button, "clicked", G_CALLBACK (SetupUI::exit_button_clicked_callback), this); g_signal_connect ((gpointer) m_apply_button, "clicked", G_CALLBACK (SetupUI::apply_button_clicked_callback), this); g_signal_connect ((gpointer) m_restore_button, "clicked", G_CALLBACK (SetupUI::restore_button_clicked_callback), this); g_signal_connect (G_OBJECT (m_main_window), "delete_event", G_CALLBACK (main_window_delete_callback), this); g_signal_connect (G_OBJECT (m_module_list_selection), "changed", G_CALLBACK (module_list_selection_changed_callback), this); gtk_widget_grab_default (m_apply_button); } GtkWidget * SetupUI::create_splash_view () { GtkRequisition size; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *view; GtkWidget *combo; GtkWidget *label; GtkWidget *separator; #if GTK_CHECK_VERSION(3, 2, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else vbox = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (vbox); view = gtk_label_new (NULL); gtk_widget_show (view); gtk_label_set_justify (GTK_LABEL (view), GTK_JUSTIFY_CENTER); gtk_label_set_markup (GTK_LABEL (view), _( " Smart Common Input Method platform \n\n" "GUI Setup Utility\n\n\n\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org.cn>")); gtk_box_pack_start (GTK_BOX (vbox), view, TRUE, TRUE, 4); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size(vbox, &size, NULL); #else gtk_widget_size_request (vbox, &size); #endif if (size.width < 320) size.width = 320; if (size.height < 240) size.height = 240; gtk_widget_set_size_request (vbox, size.width, size.height); gtk_widget_hide (vbox); return vbox; } GtkWidget * SetupUI::create_setup_cover (const char *category) { GtkRequisition size; GtkWidget *cover; char buf [128]; snprintf (buf, 127, _("The Setup for %s modules."), _(category)); cover = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (cover), buf); gtk_label_set_justify (GTK_LABEL (cover), GTK_JUSTIFY_CENTER); gtk_widget_show (cover); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_get_preferred_size(cover, &size, NULL); #else gtk_widget_size_request (cover, &size); #endif if (size.width < 320) size.width = 320; if (size.height < 240) size.height = 240; gtk_widget_set_size_request (cover, size.width, size.height); gtk_widget_hide (cover); return cover; } void SetupUI::create_module_list_model () { GtkTreeIter iter; GtkWidget *widget; widget = create_splash_view (); gtk_box_pack_start (GTK_BOX (m_work_area), widget, TRUE, TRUE, 0); m_module_list_model = gtk_tree_store_new ( MODULE_LIST_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, GTK_TYPE_WIDGET); gtk_tree_store_append (m_module_list_model, &iter, NULL); gtk_tree_store_set (m_module_list_model, &iter, MODULE_LIST_LABEL, _(scim_setup_module_categories [0]), MODULE_LIST_CATEGORY, scim_setup_module_categories [0], MODULE_LIST_MODULE, NULL, MODULE_LIST_WIDGET, widget, -1); gtk_tree_view_set_model (GTK_TREE_VIEW (m_module_list_view), GTK_TREE_MODEL (m_module_list_model)); } gboolean SetupUI::module_list_hide_widget_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { GtkWidget *widget; gtk_tree_model_get (model, iter, MODULE_LIST_WIDGET, &widget, -1); if (widget) gtk_widget_hide (widget); g_object_unref (widget); return FALSE; } void SetupUI::module_list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data) { GtkTreeModel *model; GtkTreeIter iter; GtkWidget *widget; SetupModule *module; gchar *label; gchar *category; SetupUI * ui = (SetupUI *) user_data; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, MODULE_LIST_LABEL, &label, MODULE_LIST_CATEGORY, &category, MODULE_LIST_MODULE, &module, MODULE_LIST_WIDGET, &widget, -1); if (widget != ui->m_current_widget) { //Hide all other widgets gtk_tree_model_foreach (model, module_list_hide_widget_iter_func, NULL); gtk_widget_show (widget); ui->m_current_widget = widget; } if (module != ui->m_current_module || !module) { gtk_statusbar_pop (GTK_STATUSBAR (ui->m_status_bar), 1); gtk_widget_set_sensitive (ui->m_apply_button, FALSE); gtk_widget_set_sensitive (ui->m_restore_button, FALSE); if (module) { String desc = module->get_description (); if (desc.length ()) gtk_statusbar_push (GTK_STATUSBAR (ui->m_status_bar), 1, desc.c_str ()); if (module->query_changed () && !ui->m_config.null ()) { gtk_widget_set_sensitive (ui->m_apply_button, TRUE); gtk_widget_set_sensitive (ui->m_restore_button, TRUE); } } ui->m_current_module = module; } g_free (label); if (category) g_free (category); g_object_unref (widget); } } void SetupUI::restore_button_clicked_callback (GtkButton *button, gpointer user_data) { SetupUI *ui = (SetupUI*) user_data; if (ui->m_config.null ()) return; if (ui->m_current_module) { ui->m_current_module->load_config (ui->m_config); gtk_widget_set_sensitive (ui->m_apply_button, FALSE); gtk_widget_set_sensitive (ui->m_restore_button, FALSE); } } void SetupUI::apply_button_clicked_callback (GtkButton *button, gpointer user_data) { SetupUI *ui = (SetupUI*) user_data; if (ui->m_config.null ()) return; if (ui->m_current_module) { ui->m_current_module->save_config (ui->m_config); ui->m_config->flush (); ui->m_changes_applied = true; gtk_widget_set_sensitive (ui->m_apply_button, FALSE); gtk_widget_set_sensitive (ui->m_restore_button, FALSE); } } gboolean SetupUI::module_list_save_config_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { SetupModule *module; SetupUI *ui = (SetupUI *) data; gtk_tree_model_get (model, iter, MODULE_LIST_MODULE, &module, -1); if (module && module->query_changed () && ui && !ui->m_config.null ()) { module->save_config (ui->m_config); ui->m_changes_applied = true; } return FALSE; } gboolean SetupUI::module_list_load_config_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { SetupModule *module; SetupUI *ui = (SetupUI *) data; gtk_tree_model_get (model, iter, MODULE_LIST_MODULE, &module, -1); if (module && ui && !ui->m_config.null ()) module->load_config (ui->m_config); return FALSE; } void SetupUI::ok_button_clicked_callback (GtkButton *button, gpointer user_data) { SetupUI *ui = (SetupUI *) user_data; if (!ui->m_config.null ()) { gtk_tree_model_foreach (GTK_TREE_MODEL (ui->m_module_list_model), module_list_save_config_iter_func, user_data); ui->m_config->flush (); if (ui->m_changes_applied) ui->show_restart_hint (); } gtk_main_quit (); } void SetupUI::exit_button_clicked_callback (GtkButton *button, gpointer user_data) { SetupUI *ui = (SetupUI*) user_data; if (ui->m_changes_applied) ui->show_restart_hint (); gtk_main_quit (); } gboolean SetupUI::main_window_delete_callback (GtkWidget *widget, GdkEvent *event, gpointer user_data) { SetupUI *ui = (SetupUI*) user_data; if (ui->m_changes_applied) ui->show_restart_hint (); gtk_main_quit (); return TRUE; } gboolean SetupUI::query_changed_timeout_cb (gpointer data) { SetupUI *ui = (SetupUI *) data; if (ui->m_helper_agent.has_pending_event ()) ui->m_helper_agent.filter_event (); bool modified = false; if (!ui->m_config.null () && ui->m_config->valid () && ui->m_current_module && ui->m_current_module->query_changed ()) modified = true; #if GTK_CHECK_VERSION(2, 18, 0) if (gtk_widget_get_sensitive (ui->m_apply_button) != modified) #else if (GTK_WIDGET_SENSITIVE (ui->m_apply_button) != modified) #endif gtk_widget_set_sensitive (ui->m_apply_button, modified); #if GTK_CHECK_VERSION(2, 18, 0) if (gtk_widget_get_sensitive (ui->m_restore_button) != modified) #else if (GTK_WIDGET_SENSITIVE (ui->m_restore_button) != modified) #endif gtk_widget_set_sensitive (ui->m_restore_button, modified); return TRUE; } void SetupUI::show_restart_hint () const { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (m_main_window), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("Not all configuration can be reloaded on the fly. " "Don't forget to restart SCIM in order to let all of " "the new configuration take effect.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /* vi:ts=4:nowrap:ai:expandtab */ scim-master/extras/setup/scim_setup_ui.h000066400000000000000000000063721415264260100210020ustar00rootroot00000000000000/** @file scim_setup_ui.h */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_setup_ui.h,v 1.23 2005/01/10 08:30:45 suzhe Exp $ */ #if !defined (__SCIM_SETUP_UI_H) #define __SCIM_SETUP_UI_H #include using namespace scim; class SetupUI { GtkWidget *m_main_window; GtkWidget *m_work_area; GtkWidget *m_apply_button; GtkWidget *m_restore_button; GtkWidget *m_status_bar; GtkWidget *m_module_list_view; GtkTreeSelection *m_module_list_selection; GtkTreeStore *m_module_list_model; GtkWidget *m_current_widget; SetupModule *m_current_module; ConfigPointer m_config; guint m_query_changed_timeout; bool m_changes_applied; HelperAgent m_helper_agent; SetupUI (const SetupUI &); SetupUI & operator= (const SetupUI &); public: SetupUI (const ConfigPointer &config, const String &display, const HelperInfo &helper_info); ~SetupUI (); bool add_module (SetupModule *module); // Return true if the changes have been applied. void run (); private: void create_main_ui (); void create_module_list_model (); GtkWidget * create_splash_view (); GtkWidget * create_setup_cover (const char *category); void show_restart_hint () const; static void module_list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data); static void apply_button_clicked_callback (GtkButton *button, gpointer user_data); static void restore_button_clicked_callback (GtkButton *button, gpointer user_data); static void ok_button_clicked_callback (GtkButton *button, gpointer user_data); static void exit_button_clicked_callback (GtkButton *button, gpointer user_data); static void config_changed_callback (GtkEditable *editable, gpointer user_data); static gboolean main_window_delete_callback (GtkWidget *widget, GdkEvent *event, gpointer user_data); static gboolean query_changed_timeout_cb (gpointer data); static gboolean module_list_hide_widget_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean module_list_save_config_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean module_list_load_config_iter_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); }; #endif // __SCIM_SETUP_UI_H /* vi:ts=4:ai:nowrap:expandtab */ scim-master/future-plan.txt000066400000000000000000000062651415264260100163170ustar00rootroot00000000000000Future development plan for SCIM ================================ I. Plan for SCIM Core: ====================== 1. Unified GUI framework for Setup UI and Helper module. * Current status: Currently there are two independent UIs for SCIM, one is gtk based (shipped in SCIM package), another is KDE based (skim). Each UI has its own Setup UI framework, then each IMEngine must provide two different Setup modules for these two UI frameworks. It's UGLY! * Plan: Implement an Unified GUI framework for Setup UI and Helper module. So that IMEngine developers could use this framework to write Setup UI modules and Helper modules to make their IMEngines being totally independent from Window systems and widget libraries. * Possible way: 1) Implement a XML based GUI framework Good: Easy to use. Bad: Not flexible enough, hard to implement. Too complex, think about XUL. 2) Implement a generic GUI widget API set Good: Could be flexible enough. Bad: Hard to use, hard to implement too. 2. Modulize client site architecture. * Current status: Currently, on the client side, an independent Panel process is in charge of providing default UI components and managing Helper modules. Two different Panel programs are available now, scim-panel-gtk and scim-panel-kde (skim). * Plan: Implement a client manager which is independent from Window system, which is in charge of any other client components, including default UI components, Helper modules, etc. Client manager and client components communicate with each other via socket. Client manager acts like a hub. And further more, default UI components and Helper modules could be unified into a same interface, so that all client components could be managed in the same way. * Possible way: 1) Implement own communication protocol based on scim::Transaction. 2) Use D-BUS as the communication infrastructure. 3. Load and initialize IMEngine modules on demand (Lazy loading). 4. Multi-user enabled Socket FrontEnd and Socket IMEngine/Config, based on multi-processes. 5. Encryption support in Socket communication. 6. Refactory scim::FrontEndBase to make it into a generic SCIM Client interface, to make it easier to implement SCIM support in client applications. 7. Port SCIM to other system, like MacOS, Windows etc. II. Plan for SCIM based components: =================================== 1. Implement UTF-8 console FrontEnd So that we could use SCIM in any UTF-8 console, like fbiterm etc. 2. Port kanjipad (or other similar application) to scim Helper API So that we could use kanjipad to input in any applications directly. 3. Implement scim-iiimf, an IMEngine which makes use of IIIMF service. So that we could use IIIMF LEs via SCIM. 4. Implement some useful Filter modules, for example: 1) Word based Simplified Chinese <-> Traditional Chinese translation filter. 2) Generic dictionary filter to display various explaination for selected candidates or preedit string. For example Unicode definition lookup etc. 5. Implement some common Helper module, for example: 1) Virtual Keyboard Helper module 2) Generic information display Helper module, to display some information (HTML based). scim-master/modules/000077500000000000000000000000001415264260100147535ustar00rootroot00000000000000scim-master/modules/Config/000077500000000000000000000000001415264260100161605ustar00rootroot00000000000000scim-master/modules/Config/Makefile.am000066400000000000000000000044331415264260100202200ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak EXTRA_DIST = config.version-script AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" moduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/Config noinst_HEADERS = scim_simple_config.h \ scim_socket_config.h if SCIM_BUILD_CONFIG_SIMPLE CONFIG_SIMPLE_MODULE = simple.la endif if SCIM_BUILD_CONFIG_SOCKET CONFIG_SOCKET_MODULE = socket.la endif if SCIM_LD_VERSION_SCRIPT LD_VERSION_SCRIPT_OPTION="-Wl,--version-script=$(srcdir)/config.version-script" endif module_LTLIBRARIES = \ $(CONFIG_SIMPLE_MODULE) \ $(CONFIG_SOCKET_MODULE) simple_la_SOURCES = scim_simple_config.cpp simple_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ $(LD_VERSION_SCRIPT_OPTION) \ @LIBTOOL_EXPORT_OPTIONS@ \ @LTLIBINTL@ simple_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la socket_la_SOURCES = scim_socket_config.cpp socket_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ $(LD_VERSION_SCRIPT_OPTION) \ @LIBTOOL_EXPORT_OPTIONS@ \ @LTLIBINTL@ socket_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la scim-master/modules/Config/config.version-script000066400000000000000000000005111415264260100223330ustar00rootroot00000000000000SCIM_CONFIG_1.0 { global: extern "C" { *scim_config_module_create_config*; *scim_config_module_init*; *scim_module_exit*; *scim_module_init*; }; local: extern "C++" { scim::*; std::*; __gnu_cxx::*; }; }; scim-master/modules/Config/scim_simple_config.cpp000066400000000000000000000365271415264260100225320ustar00rootroot00000000000000/** @file scim_simple_config.cpp * implementation of SimpleConfig class. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_simple_config.cpp,v 1.35 2005/07/06 03:57:04 suzhe Exp $ */ #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #define Uses_STL_IOSTREAM #define Uses_STL_FSTREAM #define Uses_C_STDIO #include #include #include #include #include "scim_private.h" #include "scim.h" #include "scim_simple_config.h" #ifndef SCIM_SYSCONFDIR #define SCIM_SYSCONFDIR "/etc" #endif #define scim_module_init simple_LTX_scim_module_init #define scim_module_exit simple_LTX_scim_module_exit #define scim_config_module_init simple_LTX_scim_config_module_init #define scim_config_module_create_config simple_LTX_scim_config_module_create_config using namespace scim; extern "C" { void scim_module_init (void) { SCIM_DEBUG_CONFIG(1) << "Initializing Simple Config module...\n"; } void scim_module_exit (void) { SCIM_DEBUG_CONFIG(1) << "Exiting Simple Config module...\n"; } void scim_config_module_init () { SCIM_DEBUG_CONFIG(1) << "Initializing Simple Config module (more)...\n"; } ConfigPointer scim_config_module_create_config () { SCIM_DEBUG_CONFIG(1) << "Creating a Simple Config instance...\n"; return new SimpleConfig (); } } namespace scim { SimpleConfig::SimpleConfig () : m_need_reload (false) { m_update_timestamp.tv_sec = 0; m_update_timestamp.tv_usec = 0; load_all_config (); } SimpleConfig::~SimpleConfig () { flush (); } bool SimpleConfig::valid () const { return ConfigBase::valid(); } String SimpleConfig::get_name () const { return "simple"; } // String bool SimpleConfig::read (const String& key, String *pStr) const { if (!valid () || !pStr || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end) { i = m_config.find (key); end = m_config.end (); } if (i != end) { *pStr = i->second; return true; } *pStr = String (""); return false; } // int bool SimpleConfig::read (const String& key, int *pl) const { if (!valid () || !pl || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end || !i->second.length ()) { i = m_config.find (key); end = m_config.end (); } if (i != end && i->second.length ()) { *pl = strtol (i->second.c_str (), (char**) NULL, 10); return true; } *pl = 0; return false; } // double bool SimpleConfig::read (const String& key, double* val) const { if (!valid () || !val || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end || !i->second.length ()) { i = m_config.find (key); end = m_config.end (); } if (i != end && i->second.length ()) { *val = strtod (i->second.c_str (), (char**) NULL); return true; } *val = 0; return false; } // bool bool SimpleConfig::read (const String& key, bool* val) const { if (!valid () || !val || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end || !i->second.length ()) { i = m_config.find (key); end = m_config.end (); } if (i != end && i->second.length ()) { if (i->second == "true" || i->second == "TRUE" || i->second == "True" || i->second == "1") { *val = true; return true; } else if (i->second == "false" || i->second == "FALSE" || i->second == "False" || i->second == "0") { *val = false; return true; } } *val = false; return false; } //String list bool SimpleConfig::read (const String& key, std::vector * val) const { if (!valid () || !val || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end) { i = m_config.find (key); end = m_config.end (); } val->clear (); if (i != end) { scim_split_string_list (*val, i->second, ','); return true; } return false; } //int list bool SimpleConfig::read (const String& key, std::vector * val) const { if (!valid () || !val || key.empty()) return false; KeyValueRepository::const_iterator i = m_new_config.find (key); KeyValueRepository::const_iterator end = m_new_config.end (); if (i == end) { i = m_config.find (key); end = m_config.end (); } val->clear(); if (i != end) { std::vector vec; scim_split_string_list (vec, i->second, ','); for (std::vector ::iterator j = vec.begin (); j != vec.end (); ++j) { int result = strtol (j->c_str (), (char**)NULL, 10); val->push_back (result); } return true; } return false; } // write the value (return true on success) bool SimpleConfig::write (const String& key, const String& value) { if (!valid () || key.empty()) return false; m_new_config [key] = value; remove_key_from_erased_list (key); m_need_reload = true; return true; } bool SimpleConfig::write (const String& key, int value) { if (!valid () || key.empty()) return false; char buf [256]; snprintf (buf, 255, "%d", value); m_new_config [key] = String (buf); remove_key_from_erased_list (key); m_need_reload = true; return true; } bool SimpleConfig::write (const String& key, double value) { if (!valid () || key.empty()) return false; char buf [256]; snprintf (buf, 255, "%lf", value); m_new_config [key] = String (buf); remove_key_from_erased_list (key); m_need_reload = true; return true; } bool SimpleConfig::write (const String& key, bool value) { if (!valid () || key.empty()) return false; if (value) m_new_config [key] = String ("true"); else m_new_config [key] = String ("false"); remove_key_from_erased_list (key); m_need_reload = true; return true; } bool SimpleConfig::write (const String& key, const std::vector & value) { if (!valid () || key.empty()) return false; m_new_config [key] = scim_combine_string_list (value, ','); remove_key_from_erased_list (key); m_need_reload = true; return true; } bool SimpleConfig::write (const String& key, const std::vector & value) { if (!valid () || key.empty()) return false; std::vector vec; char buf [256]; for (std::vector ::const_iterator i = value.begin (); i != value.end (); ++i) { snprintf (buf, 255, "%d", *i); vec.push_back (String (buf)); } m_new_config [key] = scim_combine_string_list (vec, ','); remove_key_from_erased_list (key); m_need_reload = true; return true; } // permanently writes all changes bool SimpleConfig::flush() { if (!valid ()) return false; // If no config has been modified, then just return. if (!m_new_config.size () && !m_erased_keys.size ()) return true; String userconf = get_userconf_filename (); String userconf_dir = get_userconf_dir (); if (access (userconf_dir.c_str (), R_OK | W_OK) != 0) { mkdir (userconf_dir.c_str (), S_IRUSR | S_IWUSR | S_IXUSR); if (access (userconf_dir.c_str (), R_OK | W_OK) != 0) return false; } if (userconf.length ()) { // Reload config to ensure user made modification won't lost. load_all_config (); KeyValueRepository::iterator i; std::vector::iterator j; // Merge new config with old ones. for (i = m_new_config.begin (); i != m_new_config.end (); ++i) m_config [i->first] = i->second; // Remove all erased keys. for (j = m_erased_keys.begin (); j != m_erased_keys.end (); ++j) { if ((i = m_config.find (*j)) != m_config.end ()) m_config.erase (i); } m_new_config.clear (); m_erased_keys.clear (); gettimeofday (&m_update_timestamp, 0); char buf [128]; snprintf (buf, 128, "%lu:%lu", m_update_timestamp.tv_sec, m_update_timestamp.tv_usec); m_config [String (SCIM_CONFIG_UPDATE_TIMESTAMP)] = String (buf); std::ofstream os (userconf.c_str ()); if (!os) return false; save_config (os); return true; } return false; } // delete entries bool SimpleConfig::erase (const String& key) { if (!valid ()) return false; KeyValueRepository::iterator i = m_new_config.find(key); KeyValueRepository::iterator j = m_config.find(key); bool ok = false; if (i != m_new_config.end ()) { m_new_config.erase (i); ok = true; } if (j != m_config.end ()) { m_config.erase (j); ok = true; } if (ok && std::find (m_erased_keys.begin (), m_erased_keys.end (), key) == m_erased_keys.end ()) m_erased_keys.push_back (key); m_need_reload = true; return ok; } bool SimpleConfig::reload () { if (!valid ()) return false; if (load_all_config ()) { m_new_config.clear (); m_erased_keys.clear (); m_need_reload = true; } if (m_need_reload) { m_need_reload = false; return ConfigBase::reload (); } return false; } String SimpleConfig::get_sysconf_dir () { return String (SCIM_SYSCONFDIR) + String (SCIM_PATH_DELIM_STRING) + String ("scim"); } String SimpleConfig::get_userconf_dir () { return scim_get_user_data_dir (); } String SimpleConfig::get_sysconf_filename () { return get_sysconf_dir () + String (SCIM_PATH_DELIM_STRING) + String ("config"); } String SimpleConfig::get_userconf_filename () { return get_userconf_dir () + String (SCIM_PATH_DELIM_STRING) + String ("config"); } String SimpleConfig::trim_blank (const String &str) { String::size_type begin, len; begin = str.find_first_not_of (" \t\n\v"); if (begin == String::npos) return String (); len = str.find_last_not_of (" \t\n\v") - begin + 1; return str.substr (begin, len); } String SimpleConfig::get_param_portion (const String &str) { String::size_type begin = str.find_first_of (" \t\n\v="); if (begin == String::npos) return str; return str.substr (0, begin); } String SimpleConfig::get_value_portion (const String &str) { String::size_type begin = str.find_first_of ("="); if (begin == String::npos || (begin + 1) == str.length ()) return String (""); return trim_blank (str.substr (begin + 1, String::npos)); } void SimpleConfig::parse_config (std::istream &is, KeyValueRepository &config) { char *conf_line = new char [SCIM_MAX_CONFIG_LINE_LENGTH]; while (!is.eof()) { is.getline(conf_line, SCIM_MAX_CONFIG_LINE_LENGTH); if (!is.eof()) { String normalized_line = trim_blank(conf_line); if ((normalized_line.find_first_of("#") > 0) && (normalized_line.length() != 0)) { if (normalized_line.find_first_of("=") == String::npos) { SCIM_DEBUG_CONFIG(2) << " Invalid config line : " << normalized_line << "\n"; continue; } if (normalized_line[0] == '=') { SCIM_DEBUG_CONFIG(2) << " Invalid config line : " << normalized_line << "\n"; continue; } String param = get_param_portion(normalized_line); KeyValueRepository::iterator i = config.find(param); if (i != config.end()) { SCIM_DEBUG_CONFIG(2) << " Config entry " << normalized_line << " has been read.\n"; } else { String value = get_value_portion (normalized_line); config [param] = value; SCIM_DEBUG_CONFIG(2) << " Config entry " << param << "=" << value << " is successfully read.\n"; } } } } delete [] conf_line; } void SimpleConfig::save_config (std::ostream &os) { KeyValueRepository::iterator i; for (i = m_config.begin (); i != m_config.end (); ++i) { os << i->first << " = " << i->second << "\n"; } } bool SimpleConfig::load_all_config () { String sysconf = get_sysconf_filename (); String userconf = get_userconf_filename (); KeyValueRepository config; if (userconf.length ()) { std::ifstream is (userconf.c_str ()); if (is) { SCIM_DEBUG_CONFIG(1) << "Parsing user config file: " << userconf << "\n"; parse_config (is, config); } } if (sysconf.length ()) { std::ifstream is (sysconf.c_str ()); if (is) { SCIM_DEBUG_CONFIG(1) << "Parsing system config file: " << sysconf << "\n"; parse_config (is, config); } } if (!m_config.size () || (m_update_timestamp.tv_sec == 0 && m_update_timestamp.tv_usec == 0)) { m_config.swap (config); gettimeofday (&m_update_timestamp, 0); return true; } KeyValueRepository::iterator it = config.find (String (SCIM_CONFIG_UPDATE_TIMESTAMP)); if (it != config.end ()) { std::vector strs; if (scim_split_string_list (strs, it->second, ':') == 2) { time_t sec = (time_t) strtol (strs [0].c_str (), 0, 10); suseconds_t usec = (suseconds_t) strtol (strs [1].c_str (), 0, 10); // The config file is newer, so load it. if (m_update_timestamp.tv_sec < sec || (m_update_timestamp.tv_sec == sec && m_update_timestamp.tv_usec < usec)) { m_config.swap (config); m_update_timestamp.tv_sec = (time_t) sec; m_update_timestamp.tv_usec = (suseconds_t) usec; return true; } } } return false; } void SimpleConfig::remove_key_from_erased_list (const String &key) { std::vector ::iterator it = std::find (m_erased_keys.begin (), m_erased_keys.end (), key); if (it != m_erased_keys.end ()) m_erased_keys.erase (it); } } // namespace scim /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Config/scim_simple_config.h000066400000000000000000000067131415264260100221710ustar00rootroot00000000000000/** @file scim_simple_config.h * definition of SimpleConfig class. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_simple_config.h,v 1.22 2005/07/06 03:57:04 suzhe Exp $ */ #if !defined (__SCIM_SIMPLE_CONFIG_H) #define __SCIM_SIMPLE_CONFIG_H #include #include "scim_stl_map.h" namespace scim { const int SCIM_MAX_CONFIG_LINE_LENGTH = 16384; class SimpleConfig : public ConfigBase { #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map KeyValueRepository; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map KeyValueRepository; #else typedef std::map KeyValueRepository; #endif KeyValueRepository m_config; KeyValueRepository m_new_config; std::vector m_erased_keys; timeval m_update_timestamp; bool m_need_reload; public: SimpleConfig (); virtual ~SimpleConfig (); virtual bool valid () const; virtual String get_name () const; // String virtual bool read (const String& key, String *pStr) const; // int virtual bool read (const String& key, int *pl) const; // double virtual bool read (const String& key, double* val) const; // bool virtual bool read (const String& key, bool* val) const; //String list virtual bool read (const String& key, std::vector * val) const; //int list virtual bool read (const String& key, std::vector * val) const; // write the value (return true on success) virtual bool write (const String& key, const String& value); virtual bool write (const String& key, int value); virtual bool write (const String& key, double value); virtual bool write (const String& key, bool value); virtual bool write (const String& key, const std::vector & value); virtual bool write (const String& key, const std::vector & value); // permanently writes all changes virtual bool flush(); // delete entries virtual bool erase (const String& key ); // reload the configurations. virtual bool reload (); private: String get_sysconf_dir (); String get_userconf_dir (); String get_sysconf_filename (); String get_userconf_filename (); String trim_blank (const String &str); String get_param_portion (const String &str); String get_value_portion (const String &str); void parse_config (std::istream &is, KeyValueRepository &config); void save_config (std::ostream &os); bool load_all_config (); void remove_key_from_erased_list (const String &key); }; } // namespace scim #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Config/scim_socket_config.cpp000066400000000000000000000426771415264260100225340ustar00rootroot00000000000000/** @file scim_socket_config.cpp * implementation of SocketConfig class. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_config.cpp,v 1.23 2005/12/16 11:12:26 suzhe Exp $ */ #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_C_STDIO #define Uses_C_STDLIB #include "scim_private.h" #include "scim.h" #include "scim_socket_config.h" #define scim_module_init socket_LTX_scim_module_init #define scim_module_exit socket_LTX_scim_module_exit #define scim_config_module_init socket_LTX_scim_config_module_init #define scim_config_module_create_config socket_LTX_scim_config_module_create_config using namespace scim; extern "C" { void scim_module_init (void) { SCIM_DEBUG_CONFIG(1) << "Initializing Socket Config module...\n"; } void scim_module_exit (void) { SCIM_DEBUG_CONFIG(1) << "Exiting Socket Config module...\n"; } void scim_config_module_init () { SCIM_DEBUG_CONFIG(1) << "Initializing Socket Config module (more)...\n"; } ConfigPointer scim_config_module_create_config () { SCIM_DEBUG_CONFIG(1) << "Creating a Socket Config instance...\n"; return new SocketConfig (); } } namespace scim { SocketConfig::SocketConfig () : m_valid (false), m_socket_address (scim_get_default_socket_config_address ()), m_socket_timeout (scim_get_default_socket_timeout ()), m_connected (false) { SCIM_DEBUG_CONFIG (2) << " Construct SocketConfig object.\n"; m_valid = open_connection (); } SocketConfig::~SocketConfig () { m_socket_client.close (); } bool SocketConfig::valid () const { return ConfigBase::valid() && m_valid; } String SocketConfig::get_name () const { return "socket"; } // String bool SocketConfig::read (const String& key, String *pStr) const { if (!valid () || !pStr || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_STRING); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (*pStr) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } *pStr = String (""); return false; } // int bool SocketConfig::read (const String& key, int *pl) const { if (!valid () || !pl || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_INT); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { uint32 val; if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (val) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { *pl = val; return true; } break; } if (!open_connection ()) break; } *pl = 0; return false; } // double bool SocketConfig::read (const String& key, double* val) const { if (!valid () || !val || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_DOUBLE); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { String str; if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (str) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { sscanf (str.c_str (), "%lE", val); return true; } break; } if (!open_connection ()) break; } *val = 0; return false; } // bool bool SocketConfig::read (const String& key, bool* val) const { if (!valid () || !val || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_BOOL); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { uint32 tmp; if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (tmp) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { *val = (bool)tmp; return true; } break; } if (!open_connection ()) break; } *val = false; return false; } //String list bool SocketConfig::read (const String& key, std::vector * val) const { if (!valid () || !val || key.empty()) return false; if (!m_connected && !open_connection ()) return false; val->clear (); Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_VECTOR_STRING); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (*val) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { return true; } break; } if (!open_connection ()) break; } return false; } //int list bool SocketConfig::read (const String& key, std::vector * val) const { if (!valid () || !val || key.empty()) return false; if (!m_connected && !open_connection ()) return false; val->clear(); Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_CONFIG_VECTOR_INT); trans.put_data (key); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { std::vector vec; if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (vec) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { for (uint32 i=0; ipush_back ((int) vec[i]); return true; } break; } if (!open_connection ()) break; } return false; } // write the value (return true on success) bool SocketConfig::write (const String& key, const String& value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_SET_CONFIG_STRING); trans.put_data (key); trans.put_data (value); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } return false; } bool SocketConfig::write (const String& key, int value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_SET_CONFIG_INT); trans.put_data (key); trans.put_data ((uint32)value); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } return false; } bool SocketConfig::write (const String& key, double value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; char buf [256]; snprintf (buf, 255, "%lE", value); Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_SET_CONFIG_DOUBLE); trans.put_data (key); trans.put_data (String (buf)); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } return false; } bool SocketConfig::write (const String& key, bool value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_SET_CONFIG_BOOL); trans.put_data (key); trans.put_data ((uint32)value); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } return false; } bool SocketConfig::write (const String& key, const std::vector & value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; Transaction trans; int cmd; for (int retry = 0; retry < 3; ++retry) { init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_SET_CONFIG_VECTOR_STRING); trans.put_data (key); trans.put_data (value); if (trans.write_to_socket (m_socket_client) && trans.read_from_socket (m_socket_client, m_socket_timeout)) { if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; break; } if (!open_connection ()) break; } return false; } bool SocketConfig::write (const String& key, const std::vector & value) { if (!valid () || key.empty()) return false; if (!m_connected && !open_connection ()) return false; std::vector vec; for (uint32 i=0; i strs; if (scim_split_string_list (strs, str, ':') == 2) { time_t sec = (time_t) strtol (strs [0].c_str (), 0, 10); suseconds_t usec = (suseconds_t) strtol (strs [1].c_str (), 0, 10); // The config file is newer, so load it. if (m_update_timestamp.tv_sec < sec || (m_update_timestamp.tv_sec == sec && m_update_timestamp.tv_usec < usec)) { m_update_timestamp.tv_sec = sec; m_update_timestamp.tv_usec = usec; return ConfigBase::reload (); } } } } break; } if (!open_connection ()) break; } return false; } void SocketConfig::init_transaction (Transaction &trans) const { trans.clear (); trans.put_command (SCIM_TRANS_CMD_REQUEST); trans.put_data (m_socket_magic_key); } bool SocketConfig::open_connection () const { SocketAddress socket_address (m_socket_address); m_connected = false; // Connect to SocketFrontEnd. if (!m_socket_client.connect (socket_address)) { SCIM_DEBUG_CONFIG (2) << " Cannot connect to SocketFrontEnd (" << m_socket_address << ").\n"; return false; } // Init the connection, if (!scim_socket_open_connection (m_socket_magic_key, String ("SocketConfig"), String ("SocketFrontEnd"), m_socket_client, m_socket_timeout)) { m_socket_client.close (); return false; } m_connected = true; gettimeofday (&m_update_timestamp, 0); return true; } } // namespace scim /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Config/scim_socket_config.h000066400000000000000000000054411415264260100221650ustar00rootroot00000000000000/** @file scim_socket_config.h * definition of SocketConfig class. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_config.h,v 1.11 2005/07/06 03:57:04 suzhe Exp $ */ #if !defined (__SCIM_SOCKET_CONFIG_H) #define __SCIM_SOCKET_CONFIG_H #include namespace scim { class SocketConfig : public ConfigBase { String m_socket_address; int m_socket_timeout; bool m_valid; mutable SocketClient m_socket_client; mutable uint32 m_socket_magic_key; mutable bool m_connected; mutable timeval m_update_timestamp; public: SocketConfig (); virtual ~SocketConfig (); virtual bool valid () const; virtual String get_name () const; // String virtual bool read (const String& key, String *pStr) const; // int virtual bool read (const String& key, int *pl) const; // double virtual bool read (const String& key, double* val) const; // bool virtual bool read (const String& key, bool* val) const; //String list virtual bool read (const String& key, std::vector * val) const; //int list virtual bool read (const String& key, std::vector * val) const; // write the value (return true on success) virtual bool write (const String& key, const String& value); virtual bool write (const String& key, int value); virtual bool write (const String& key, double value); virtual bool write (const String& key, bool value); virtual bool write (const String& key, const std::vector & value); virtual bool write (const String& key, const std::vector & value); // permanently writes all changes virtual bool flush(); // delete entries virtual bool erase (const String& key ); // reload the configurations. virtual bool reload (); private: void init_transaction (Transaction &trans) const; bool open_connection () const; }; } // namespace scim #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Filter/000077500000000000000000000000001415264260100162005ustar00rootroot00000000000000scim-master/modules/Filter/Makefile.am000066400000000000000000000034211415264260100202340ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/utils \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" if SCIM_BUILD_FILTER_SCTC CONFIG_FILTER_SCTC = sctc.la endif noinst_HEADERS = scim_sctc_filter.h \ scim_sctc_filter_data.h moduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/Filter module_LTLIBRARIES = $(CONFIG_FILTER_SCTC) sctc_la_SOURCES = scim_sctc_filter.cpp sctc_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @LTLIBINTL@ sctc_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la scim-master/modules/Filter/scim_sctc_filter.cpp000066400000000000000000000502371415264260100222270ustar00rootroot00000000000000/** @file scim_sctc_filter.cpp */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_sctc_filter.cpp,v 1.7.2.1 2006/01/09 13:37:25 suzhe Exp $ * */ #define Uses_SCIM_FILTER #define Uses_SCIM_FILTER_MODULE #define Uses_SCIM_CONFIG_BASE #include "scim_private.h" #include "scim.h" #include "scim_stl_map.h" #include "scim_sctc_filter.h" #include "scim_sctc_filter_data.h" #define scim_module_init sctc_LTX_scim_module_init #define scim_module_exit sctc_LTX_scim_module_exit #define scim_filter_module_init sctc_LTX_scim_filter_module_init #define scim_filter_module_create_filter sctc_LTX_scim_filter_module_create_filter #define scim_filter_module_get_filter_info sctc_LTX_scim_filter_module_get_filter_info using namespace scim; // Private datatype definition. #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map > UUMap; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map > UUMap; #else typedef std::map UUMap; #endif // Private data definition. static FilterInfo __filter_info (String ("adb861a9-76da-454c-941b-1957e644a94e"), String (_("Simplified-Traditional Chinese Conversion")), String ("zh_CN,zh_TW,zh_SG,zh_HK"), String (SCIM_ICONDIR "/sctc.png"), String (_("Convert between Simplified Chinese and Traditional Chinese"))); static std::vector __sc_encodings; static std::vector __tc_encodings; static UUMap __sc_to_tc_map; static UUMap __tc_to_sc_map; static bool __sc_to_tc_initialized = false; static bool __tc_to_sc_initialized = false; static Property __prop_root (String ("/Filter/SCTC"), String (_("SC-TC")), String (SCIM_ICONDIR "/sctc.png"), String (_("Simplified-Traditional Chinese conversion"))); static Property __prop_off (String ("/Filter/SCTC/Off"), String (_("No Conversion")), String (SCIM_ICONDIR "/sctc.png"), String (_("Simplified-Traditional Chinese conversion"))); static Property __prop_sc_to_tc (String ("/Filter/SCTC/SC-TC"), String (_("Simplified to Traditional")), String (SCIM_ICONDIR "/sctc-sc-to-tc.png"), String (_("Convert Simplified Chinese to Traditional Chinese"))); static Property __prop_tc_to_sc (String ("/Filter/SCTC/TC-SC"), String (_("Traditional to Simplified")), String (SCIM_ICONDIR "/sctc-tc-to-sc.png"), String (_("Convert Traditional Chinese to Simplified Chinese"))); //Private functions definition. static void __init_sc_to_tc (); static void __init_tc_to_sc (); static bool __is_sc_encoding (const String &encoding); static bool __is_tc_encoding (const String &encoding); static WideString __sc_to_tc (const WideString &sc); static WideString __tc_to_sc (const WideString &tc); //Module Interface extern "C" { void scim_module_init (void) { //Initialize encoding information. __sc_encodings.push_back ("GB2312"); __sc_encodings.push_back ("GBK"); __sc_encodings.push_back ("GB18030"); __sc_encodings.push_back ("EUC-CN"); __tc_encodings.push_back ("BIG5"); __tc_encodings.push_back ("BIG5-HKSCS"); __tc_encodings.push_back ("EUC-TW"); } void scim_module_exit (void) { } unsigned int scim_filter_module_init (const ConfigPointer &config) { return 1; } FilterFactoryPointer scim_filter_module_create_filter (unsigned int index) { if (index == 0) return new SCTCFilterFactory (); return FilterFactoryPointer (0); } bool scim_filter_module_get_filter_info (unsigned int index, FilterInfo &info) { if (index == 0) { info = __filter_info; return true; } return false; } } //Implementation of private functions static void __init_sc_to_tc () { if (__sc_to_tc_initialized) return; __sc_to_tc_map.clear (); for (size_t i = 0; __sc_to_tc_table [i].first; ++i) __sc_to_tc_map [__sc_to_tc_table [i].first] = __sc_to_tc_table [i].second; __sc_to_tc_initialized = true; } static void __init_tc_to_sc () { if (__tc_to_sc_initialized) return; __tc_to_sc_map.clear (); for (size_t i = 0; __tc_to_sc_table [i].first; ++i) __tc_to_sc_map [__tc_to_sc_table [i].first] = __tc_to_sc_table [i].second; __tc_to_sc_initialized = true; } static WideString __sc_to_tc (const WideString &sc) { WideString tc; if (!__sc_to_tc_initialized) __init_sc_to_tc (); UUMap::const_iterator mapit; WideString::const_iterator sit; for (sit = sc.begin (); sit != sc.end (); ++sit) { if (*sit <= 0xFFFF) { mapit = __sc_to_tc_map.find ((unsigned short) (*sit)); if (mapit != __sc_to_tc_map.end ()) { tc.push_back (static_cast (mapit->second)); } else { tc.push_back (*sit); } } else { tc.push_back (*sit); } } return tc; } static WideString __tc_to_sc (const WideString &tc) { WideString sc; if (!__tc_to_sc_initialized) __init_tc_to_sc (); UUMap::const_iterator mapit; WideString::const_iterator sit; for (sit = tc.begin (); sit != tc.end (); ++sit) { if (*sit <= 0xFFFF) { mapit = __tc_to_sc_map.find ((unsigned short) (*sit)); if (mapit != __tc_to_sc_map.end ()) { sc.push_back (static_cast (mapit->second)); } else { sc.push_back (*sit); } } else { sc.push_back (*sit); } } return sc; } static bool __is_sc_encoding (const String &encoding) { return std::find (__sc_encodings.begin (), __sc_encodings.end (), encoding) != __sc_encodings.end (); } static bool __is_tc_encoding (const String &encoding) { return std::find (__tc_encodings.begin (), __tc_encodings.end (), encoding) != __tc_encodings.end (); } //Implementation of SCTCFilterFactory. SCTCFilterFactory::SCTCFilterFactory () : m_sc_ok(false), m_tc_ok(false) { } void SCTCFilterFactory::attach_imengine_factory (const IMEngineFactoryPointer &orig) { size_t i; FilterFactoryBase::attach_imengine_factory (orig); for (i = 0; i < __sc_encodings.size (); ++i) { if (orig->validate_encoding (__sc_encodings [i])) { m_sc_ok = true; if (orig->validate_encoding ("GB18030")) m_sc_encoding = "GB18030"; else m_sc_encoding = __sc_encodings [i]; break; } } for (i = 0; i < __tc_encodings.size (); ++i) { if (orig->validate_encoding (__tc_encodings [i])) { m_tc_ok = true; if (orig->validate_encoding ("BIG5")) m_tc_encoding = "BIG5"; else m_tc_encoding = __tc_encodings [i]; break; } } if (m_sc_ok || m_tc_ok) { String locales = orig->get_locales (); locales = locales + String (",") + scim_get_language_locales ("zh_CN"); locales = locales + String (",") + scim_get_language_locales ("zh_TW"); locales = locales + String (",") + scim_get_language_locales ("zh_SG"); locales = locales + String (",") + scim_get_language_locales ("zh_HK"); set_locales (locales); } } WideString SCTCFilterFactory::get_name () const { WideString name = FilterFactoryBase::get_name (); return name.length () ? name : utf8_mbstowcs (__filter_info.name); } String SCTCFilterFactory::get_uuid () const { String uuid = FilterFactoryBase::get_uuid (); return uuid.length () ? uuid : __filter_info.uuid; } String SCTCFilterFactory::get_icon_file () const { String icon = FilterFactoryBase::get_icon_file (); return icon.length () ? icon : __filter_info.icon; } WideString SCTCFilterFactory::get_authors () const { WideString authors = FilterFactoryBase::get_authors (); return authors.length () ? authors : utf8_mbstowcs (_("James Su ")); } WideString SCTCFilterFactory::get_help () const { // No help yet. WideString help = FilterFactoryBase::get_help (); return help; } bool SCTCFilterFactory::validate_encoding (const String& encoding) const { // Bypass the original IMEngineFactory. return IMEngineFactoryBase::validate_encoding (encoding); } bool SCTCFilterFactory::validate_locale (const String& locale) const { // Bypass the original IMEngineFactory. return IMEngineFactoryBase::validate_locale (locale); } IMEngineInstancePointer SCTCFilterFactory::create_instance (const String& encoding, int id) { if (m_sc_ok || m_tc_ok) { SCTCWorkMode mode = SCTC_MODE_OFF; String orig_encoding = encoding; // If the original IMEngineFactory doesn't support this encoding, // then we must use another encoding to create the original IMEngineInstance. // It means we must use a conversion mode. if (!FilterFactoryBase::validate_encoding (encoding)) { // The client encoding is Simplified Chinese encoding, but is not supported by the IMEngine. // So use Traditional Chinese encoding instead. if (__is_sc_encoding (encoding)) { if (FilterFactoryBase::validate_encoding (m_sc_encoding)) { orig_encoding = m_sc_encoding; } else { orig_encoding = m_tc_encoding; mode = SCTC_MODE_FORCE_TC_TO_SC; } } else if (__is_tc_encoding (encoding)) { if (FilterFactoryBase::validate_encoding (m_tc_encoding)) { orig_encoding = m_tc_encoding; } else { orig_encoding = m_sc_encoding; mode = SCTC_MODE_FORCE_SC_TO_TC; } } } else if ((__is_sc_encoding (encoding) && !FilterFactoryBase::validate_encoding (m_tc_encoding)) || (__is_tc_encoding (encoding) && !FilterFactoryBase::validate_encoding (m_sc_encoding))) { mode = SCTC_MODE_FORCE_OFF; } return new SCTCFilterInstance (this, mode, encoding, FilterFactoryBase::create_instance (orig_encoding, id)); } return FilterFactoryBase::create_instance (encoding, id); } //Implementation of SCTCFilterInstance SCTCFilterInstance::SCTCFilterInstance (SCTCFilterFactory *factory, const SCTCWorkMode &mode, const String &client_encoding, const IMEngineInstancePointer &orig_inst) : FilterInstanceBase (factory, orig_inst), m_factory (factory), m_props_registered (false), m_work_mode (mode) { IMEngineInstanceBase::set_encoding (client_encoding); } bool SCTCFilterInstance::set_encoding (const String &encoding) { if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) { if (__is_tc_encoding (encoding)) FilterInstanceBase::set_encoding (m_factory->m_sc_encoding); } else if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) { if (__is_sc_encoding (encoding)) FilterInstanceBase::set_encoding (m_factory->m_tc_encoding); } else { FilterInstanceBase::set_encoding (encoding); } reset (); return IMEngineInstanceBase::set_encoding (encoding); } void SCTCFilterInstance::focus_in () { m_props_registered = false; FilterInstanceBase::focus_in (); if (!m_props_registered) { PropertyList props; filter_register_properties (props); } } void SCTCFilterInstance::trigger_property (const String &property) { if (property != __prop_off.get_key () && property != __prop_sc_to_tc.get_key () && property != __prop_tc_to_sc.get_key ()) { FilterInstanceBase::trigger_property (property); return; } if (m_work_mode == SCTC_MODE_FORCE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_OFF) return; Property prop = __prop_root; bool changed = false; if (property == __prop_off.get_key () && (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_TC_TO_SC)) { m_work_mode = SCTC_MODE_OFF; changed = true; } else if (property == __prop_sc_to_tc.get_key () && m_factory->m_sc_ok && !__is_sc_encoding (get_encoding ()) && (m_work_mode == SCTC_MODE_OFF || m_work_mode == SCTC_MODE_TC_TO_SC)) { m_work_mode = SCTC_MODE_SC_TO_TC; prop.set_icon (__prop_sc_to_tc.get_icon ()); prop.set_label (_("SC->TC")); changed = true; } else if (property == __prop_tc_to_sc.get_key () && m_factory->m_tc_ok && !__is_tc_encoding (get_encoding ()) && (m_work_mode == SCTC_MODE_OFF || m_work_mode == SCTC_MODE_SC_TO_TC)) { m_work_mode = SCTC_MODE_TC_TO_SC; prop.set_icon (__prop_tc_to_sc.get_icon ()); prop.set_label (_("TC->SC")); changed = true; } if (changed) { set_encoding (get_encoding ()); update_property (prop); } } void SCTCFilterInstance::filter_update_preedit_string (const WideString &str, const AttributeList &attrs) { WideString nstr = str; if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) nstr = __sc_to_tc (str); if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) nstr = __tc_to_sc (str); update_preedit_string (nstr, attrs); } void SCTCFilterInstance::filter_update_aux_string (const WideString &str, const AttributeList &attrs) { WideString nstr = str; if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) nstr = __sc_to_tc (str); if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) nstr = __tc_to_sc (str); update_aux_string (nstr, attrs); } void SCTCFilterInstance::filter_update_lookup_table (const LookupTable &table) { if (m_work_mode == SCTC_MODE_OFF) { update_lookup_table (table); } else { CommonLookupTable ntable; std::vector labels; size_t i; // Can be paged up. if (table.get_current_page_start ()) ntable.append_candidate (0x3400); if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) { for (i = 0; i < table.get_current_page_size (); ++i) { ntable.append_candidate (__sc_to_tc (table.get_candidate_in_current_page (i)), table.get_attributes_in_current_page (i)); labels.push_back (__sc_to_tc (table.get_candidate_label (i))); } } else { for (i = 0; i < table.get_current_page_size (); ++i) { ntable.append_candidate (__tc_to_sc (table.get_candidate_in_current_page (i)), table.get_attributes_in_current_page (i)); labels.push_back (__tc_to_sc (table.get_candidate_label (i))); } } if (table.get_current_page_start () + table.get_current_page_size () < table.number_of_candidates ()) ntable.append_candidate (0x3400); if (table.get_current_page_start ()) { ntable.set_page_size (1); ntable.page_down (); } ntable.set_page_size (table.get_current_page_size ()); ntable.set_cursor_pos_in_current_page (table.get_cursor_pos_in_current_page ()); ntable.show_cursor (table.is_cursor_visible ()); ntable.fix_page_size (table.is_page_size_fixed ()); ntable.set_candidate_labels (labels); update_lookup_table (ntable); } } void SCTCFilterInstance::filter_commit_string (const WideString &str) { WideString nstr = str; if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) nstr = __sc_to_tc (str); if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) nstr = __tc_to_sc (str); commit_string (nstr); } void SCTCFilterInstance::filter_register_properties (const PropertyList &properties) { PropertyList props; if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) { for (size_t i = 0; i < properties.size (); ++i) { Property prop = properties [i]; prop.set_label (utf8_wcstombs (__sc_to_tc (utf8_mbstowcs (prop.get_label ())))); prop.set_tip (utf8_wcstombs (__sc_to_tc (utf8_mbstowcs (prop.get_tip ())))); props.push_back (prop); } } else if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) { for (size_t i = 0; i < properties.size (); ++i) { Property prop = properties [i]; prop.set_label (utf8_wcstombs (__tc_to_sc (utf8_mbstowcs (prop.get_label ())))); prop.set_tip (utf8_wcstombs (__tc_to_sc (utf8_mbstowcs (prop.get_tip ())))); props.push_back (prop); } } else { props = properties; } if (m_work_mode == SCTC_MODE_OFF || m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_TC_TO_SC) { Property root = __prop_root; if (m_work_mode == SCTC_MODE_SC_TO_TC) { root.set_icon (__prop_sc_to_tc.get_icon ()); root.set_tip (__prop_sc_to_tc.get_tip ()); root.set_label (_("SC->TC")); } else if (m_work_mode == SCTC_MODE_TC_TO_SC) { root.set_icon (__prop_tc_to_sc.get_icon ()); root.set_tip (__prop_tc_to_sc.get_tip ()); root.set_label (_("TC->SC")); } props.push_back (root); props.push_back (__prop_off); if (!__is_sc_encoding (get_encoding ()) && m_factory->m_sc_ok) props.push_back (__prop_sc_to_tc); if (!__is_tc_encoding (get_encoding ()) && m_factory->m_tc_ok) props.push_back (__prop_tc_to_sc); } else if (m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) { Property root = __prop_sc_to_tc; root.set_label (_("SC->TC")); props.push_back (root); } else if (m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) { Property root = __prop_tc_to_sc; root.set_label (_("TC->SC")); props.push_back (root); } register_properties (props); m_props_registered = true; } void SCTCFilterInstance::filter_update_property (const Property &property) { Property prop = property; if (m_work_mode == SCTC_MODE_SC_TO_TC || m_work_mode == SCTC_MODE_FORCE_SC_TO_TC) { prop.set_label (utf8_wcstombs (__sc_to_tc (utf8_mbstowcs (prop.get_label ())))); prop.set_tip (utf8_wcstombs (__sc_to_tc (utf8_mbstowcs (prop.get_tip ())))); } else if (m_work_mode == SCTC_MODE_TC_TO_SC || m_work_mode == SCTC_MODE_FORCE_TC_TO_SC) { prop.set_label (utf8_wcstombs (__tc_to_sc (utf8_mbstowcs (prop.get_label ())))); prop.set_tip (utf8_wcstombs (__tc_to_sc (utf8_mbstowcs (prop.get_tip ())))); } update_property (prop); } /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Filter/scim_sctc_filter.h000066400000000000000000000063401415264260100216700ustar00rootroot00000000000000/** @file scim_sctc_filter.h * definition of SCTCFilter (Simplified Chinese <-> Traditional Chinese Filter) related classes. */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_sctc_filter.h,v 1.2 2005/05/17 14:56:39 suzhe Exp $ */ #if !defined (__SCIM_SCTC_FILTER_H) #define __SCIM_SCTC_FILTER_H using namespace scim; enum SCTCWorkMode { SCTC_MODE_OFF = 0, SCTC_MODE_SC_TO_TC, SCTC_MODE_TC_TO_SC, SCTC_MODE_FORCE_OFF, SCTC_MODE_FORCE_SC_TO_TC, SCTC_MODE_FORCE_TC_TO_SC }; class SCTCFilterFactory : public FilterFactoryBase { bool m_sc_ok; String m_sc_encoding; bool m_tc_ok; String m_tc_encoding; friend class SCTCFilterInstance; public: SCTCFilterFactory (); virtual void attach_imengine_factory (const IMEngineFactoryPointer &orig); virtual WideString get_name () const; virtual String get_uuid () const; virtual String get_icon_file () const; virtual WideString get_authors () const; virtual WideString get_help () const; virtual bool validate_encoding (const String& encoding) const; virtual bool validate_locale (const String& locale) const; virtual IMEngineInstancePointer create_instance (const String& encoding, int id = -1); }; class SCTCFilterInstance : public FilterInstanceBase { SCTCFilterFactory *m_factory; bool m_props_registered; SCTCWorkMode m_work_mode; public: SCTCFilterInstance (SCTCFilterFactory *factory, const SCTCWorkMode &mode, const String &client_encoding, const IMEngineInstancePointer &orig_inst); virtual bool set_encoding (const String &encoding); public: virtual void focus_in (); virtual void trigger_property (const String &property); protected: virtual void filter_update_preedit_string (const WideString &str, const AttributeList &attrs = AttributeList ()); virtual void filter_update_aux_string (const WideString &str, const AttributeList &attrs = AttributeList ()); virtual void filter_update_lookup_table (const LookupTable &table); virtual void filter_commit_string (const WideString &str); virtual void filter_register_properties (const PropertyList &properties); virtual void filter_update_property (const Property &property); }; #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Filter/scim_sctc_filter_data.h000066400000000000000000003047711415264260100226720ustar00rootroot00000000000000/** @file scim_sctc_filter_data.h */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_sctc_filter_data.h,v 1.1 2005/05/16 05:22:49 suzhe Exp $ */ #if !defined (__SCIM_SCTC_FILTER_DATA_H) #define __SCIM_SCTC_FILTER_DATA_H struct UShortPair { unsigned short first; unsigned short second; }; static UShortPair __sc_to_tc_table [] = { { 0x00a8, 0x2025 },{ 0x2015, 0x2500 },{ 0x2016, 0x2225 },{ 0x2033, 0x301e }, { 0x220f, 0x03a0 },{ 0x2211, 0x03a3 },{ 0x2227, 0xfe3f },{ 0x2228, 0xfe40 }, { 0x2236, 0xfe30 },{ 0x2248, 0x2252 },{ 0x2264, 0x2266 },{ 0x2265, 0x2267 }, { 0x2501, 0x2500 },{ 0x2503, 0x2502 },{ 0x250f, 0x250c },{ 0x2513, 0x2510 }, { 0x2517, 0x2514 },{ 0x251b, 0x2518 },{ 0x2523, 0x251c },{ 0x252b, 0x2524 }, { 0x2533, 0x252c },{ 0x253b, 0x2534 },{ 0x254b, 0x253c },{ 0x30fb, 0x00b7 }, { 0x4e07, 0x842c },{ 0x4e0e, 0x8207 },{ 0x4e11, 0x919c },{ 0x4e13, 0x5c08 }, { 0x4e1a, 0x696d },{ 0x4e1b, 0x53e2 },{ 0x4e1c, 0x6771 },{ 0x4e1d, 0x7d72 }, { 0x4e22, 0x4e1f },{ 0x4e24, 0x5169 },{ 0x4e25, 0x56b4 },{ 0x4e27, 0x55aa }, { 0x4e2a, 0x500b },{ 0x4e2c, 0x723f },{ 0x4e30, 0x8c50 },{ 0x4e34, 0x81e8 }, { 0x4e3a, 0x70ba },{ 0x4e3d, 0x9e97 },{ 0x4e3e, 0x8209 },{ 0x4e48, 0x9ebc }, { 0x4e49, 0x7fa9 },{ 0x4e4c, 0x70cf },{ 0x4e50, 0x6a02 },{ 0x4e54, 0x55ac }, { 0x4e60, 0x7fd2 },{ 0x4e61, 0x9109 },{ 0x4e66, 0x66f8 },{ 0x4e70, 0x8cb7 }, { 0x4e71, 0x4e82 },{ 0x4e89, 0x722d },{ 0x4e8f, 0x8667 },{ 0x4e91, 0x96f2 }, { 0x4e98, 0x4e99 },{ 0x4e9a, 0x4e9e },{ 0x4ea7, 0x7522 },{ 0x4ea9, 0x755d }, { 0x4eb2, 0x89aa },{ 0x4eb5, 0x893b },{ 0x4ebb, 0x4eba },{ 0x4ebf, 0x5104 }, { 0x4ec5, 0x50c5 },{ 0x4ec6, 0x50d5 },{ 0x4ece, 0x5f9e },{ 0x4ed1, 0x4f96 }, { 0x4ed3, 0x5009 },{ 0x4eea, 0x5100 },{ 0x4eec, 0x5011 },{ 0x4ef7, 0x50f9 }, { 0x4f17, 0x773e },{ 0x4f18, 0x512a },{ 0x4f1a, 0x6703 },{ 0x4f1b, 0x50b4 }, { 0x4f1e, 0x5098 },{ 0x4f1f, 0x5049 },{ 0x4f20, 0x50b3 },{ 0x4f24, 0x50b7 }, { 0x4f25, 0x5000 },{ 0x4f26, 0x502b },{ 0x4f27, 0x5096 },{ 0x4f2a, 0x507d }, { 0x4f2b, 0x4f47 },{ 0x4f32, 0x4f60 },{ 0x4f53, 0x9ad4 },{ 0x4f59, 0x9918 }, { 0x4f63, 0x50ad },{ 0x4f65, 0x50c9 },{ 0x4f84, 0x59ea },{ 0x4fa0, 0x4fe0 }, { 0x4fa3, 0x4fb6 },{ 0x4fa5, 0x50e5 },{ 0x4fa6, 0x5075 },{ 0x4fa7, 0x5074 }, { 0x4fa8, 0x50d1 },{ 0x4fa9, 0x5108 },{ 0x4faa, 0x5115 },{ 0x4fac, 0x5102 }, { 0x4fe3, 0x4fc1 },{ 0x4fe6, 0x5114 },{ 0x4fe8, 0x513c },{ 0x4fe9, 0x5006 }, { 0x4fea, 0x5137 },{ 0x4fed, 0x5109 },{ 0x502e, 0x88f8 },{ 0x503a, 0x50b5 }, { 0x503e, 0x50be },{ 0x506c, 0x50af },{ 0x507b, 0x50c2 },{ 0x507e, 0x50e8 }, { 0x507f, 0x511f },{ 0x50a5, 0x513b },{ 0x50a7, 0x5110 },{ 0x50a8, 0x5132 }, { 0x50a9, 0x513a },{ 0x513f, 0x5152 },{ 0x5151, 0x514c },{ 0x5156, 0x5157 }, { 0x515a, 0x9ee8 },{ 0x5170, 0x862d },{ 0x5173, 0x95dc },{ 0x5174, 0x8208 }, { 0x5179, 0x8332 },{ 0x517b, 0x990a },{ 0x517d, 0x7378 },{ 0x5181, 0x56c5 }, { 0x5185, 0x5167 },{ 0x5188, 0x5ca1 },{ 0x518c, 0x518a },{ 0x5199, 0x5beb }, { 0x519b, 0x8ecd },{ 0x519c, 0x8fb2 },{ 0x51a2, 0x585a },{ 0x51af, 0x99ae }, { 0x51b2, 0x885d },{ 0x51b3, 0x6c7a },{ 0x51b5, 0x6cc1 },{ 0x51bb, 0x51cd }, { 0x51c0, 0x6de8 },{ 0x51c4, 0x6dd2 },{ 0x51c6, 0x6e96 },{ 0x51c7, 0x6dde }, { 0x51c9, 0x6dbc },{ 0x51cf, 0x6e1b },{ 0x51d1, 0x6e4a },{ 0x51db, 0x51dc }, { 0x51e0, 0x5e7e },{ 0x51e4, 0x9cf3 },{ 0x51eb, 0x9ce7 },{ 0x51ed, 0x6191 }, { 0x51ef, 0x51f1 },{ 0x51f6, 0x5147 },{ 0x51fb, 0x64ca },{ 0x51fc, 0x5e7d }, { 0x51ff, 0x947f },{ 0x5202, 0x5200 },{ 0x520d, 0x82bb },{ 0x5212, 0x5283 }, { 0x5218, 0x5289 },{ 0x5219, 0x5247 },{ 0x521a, 0x525b },{ 0x521b, 0x5275 }, { 0x5220, 0x522a },{ 0x522b, 0x5225 },{ 0x522d, 0x5244 },{ 0x5239, 0x524e }, { 0x523d, 0x528a },{ 0x523f, 0x528c },{ 0x5240, 0x5274 },{ 0x5242, 0x5291 }, { 0x5250, 0x526e },{ 0x5251, 0x528d },{ 0x5265, 0x525d },{ 0x5267, 0x5287 }, { 0x527f, 0x52e6 },{ 0x529d, 0x52f8 },{ 0x529e, 0x8fa6 },{ 0x52a1, 0x52d9 }, { 0x52a2, 0x52f1 },{ 0x52a8, 0x52d5 },{ 0x52b1, 0x52f5 },{ 0x52b2, 0x52c1 }, { 0x52b3, 0x52de },{ 0x52bf, 0x52e2 },{ 0x52cb, 0x52f3 },{ 0x52d6, 0x52d7 }, { 0x5300, 0x52fb },{ 0x5326, 0x532d },{ 0x532e, 0x5331 },{ 0x533a, 0x5340 }, { 0x533b, 0x91ab },{ 0x534e, 0x83ef },{ 0x534f, 0x5354 },{ 0x5355, 0x55ae }, { 0x5356, 0x8ce3 },{ 0x5360, 0x4f54 },{ 0x5362, 0x76e7 },{ 0x5364, 0x6ef7 }, { 0x5367, 0x81e5 },{ 0x5369, 0x90e8 },{ 0x536b, 0x885b },{ 0x5374, 0x537b }, { 0x537a, 0x5df9 },{ 0x5382, 0x5ee0 },{ 0x5385, 0x5ef3 },{ 0x5386, 0x6b77 }, { 0x5389, 0x53b2 },{ 0x538b, 0x58d3 },{ 0x538c, 0x53ad },{ 0x538d, 0x5399 }, { 0x5395, 0x5ec1 },{ 0x5398, 0x91d0 },{ 0x53a2, 0x5ec2 },{ 0x53a3, 0x53b4 }, { 0x53a6, 0x5ec8 },{ 0x53a8, 0x5eda },{ 0x53a9, 0x5ec4 },{ 0x53ae, 0x5edd }, { 0x53b6, 0x79c1 },{ 0x53bf, 0x7e23 },{ 0x53c1, 0x53c3 },{ 0x53c2, 0x53c3 }, { 0x53cc, 0x96d9 },{ 0x53d1, 0x767c },{ 0x53d8, 0x8b8a },{ 0x53d9, 0x6558 }, { 0x53e0, 0x758a },{ 0x53f6, 0x8449 },{ 0x53f7, 0x865f },{ 0x53f9, 0x5606 }, { 0x53fd, 0x5630 },{ 0x5401, 0x7c72 },{ 0x540e, 0x5f8c },{ 0x5413, 0x5687 }, { 0x5415, 0x5442 },{ 0x5417, 0x55ce },{ 0x5428, 0x5678 },{ 0x542c, 0x807d }, { 0x542f, 0x555f },{ 0x5434, 0x5433 },{ 0x5450, 0x5436 },{ 0x5452, 0x5638 }, { 0x5453, 0x56c8 },{ 0x5455, 0x5614 },{ 0x5456, 0x56a6 },{ 0x5457, 0x5504 }, { 0x5458, 0x54e1 },{ 0x5459, 0x54bc },{ 0x545b, 0x55c6 },{ 0x545c, 0x55da }, { 0x5468, 0x9031 },{ 0x548f, 0x8a60 },{ 0x5499, 0x56a8 },{ 0x549b, 0x5680 }, { 0x54b8, 0x9e79 },{ 0x54cc, 0x5471 },{ 0x54cd, 0x97ff },{ 0x54d1, 0x555e }, { 0x54d2, 0x5660 },{ 0x54d3, 0x5635 },{ 0x54d4, 0x55f6 },{ 0x54d5, 0x5666 }, { 0x54d7, 0x5629 },{ 0x54d9, 0x5672 },{ 0x54dc, 0x568c },{ 0x54dd, 0x5665 }, { 0x54df, 0x55b2 },{ 0x551b, 0x561c },{ 0x5520, 0x562e },{ 0x5522, 0x55e9 }, { 0x5524, 0x559a },{ 0x5567, 0x5616 },{ 0x556c, 0x55c7 },{ 0x556d, 0x56c0 }, { 0x556e, 0x56d3 },{ 0x5578, 0x562f },{ 0x55b7, 0x5674 },{ 0x55bd, 0x560d }, { 0x55be, 0x56b3 },{ 0x55eb, 0x56c1 },{ 0x55ec, 0x5475 },{ 0x55f3, 0x566f }, { 0x5618, 0x5653 },{ 0x5624, 0x56b6 },{ 0x5631, 0x56d1 },{ 0x565c, 0x5695 }, { 0x56a3, 0x56c2 },{ 0x56e2, 0x5718 },{ 0x56ed, 0x5712 },{ 0x56f1, 0x56ea }, { 0x56f4, 0x570d },{ 0x56f5, 0x5707 },{ 0x56fd, 0x570b },{ 0x56fe, 0x5716 }, { 0x5706, 0x5713 },{ 0x5723, 0x8056 },{ 0x5739, 0x58d9 },{ 0x573a, 0x5834 }, { 0x5742, 0x962a },{ 0x574f, 0x58de },{ 0x5757, 0x584a },{ 0x575a, 0x5805 }, { 0x575b, 0x58c7 },{ 0x575c, 0x58e2 },{ 0x575d, 0x58e9 },{ 0x575e, 0x5862 }, { 0x575f, 0x58b3 },{ 0x5760, 0x589c },{ 0x5784, 0x58df },{ 0x5785, 0x58df }, { 0x5786, 0x58da },{ 0x5792, 0x58d8 },{ 0x57a6, 0x58be },{ 0x57a9, 0x580a }, { 0x57ab, 0x588a },{ 0x57ad, 0x57e1 },{ 0x57b2, 0x584f },{ 0x57d8, 0x5852 }, { 0x57d9, 0x58ce },{ 0x57da, 0x581d },{ 0x5811, 0x5879 },{ 0x5815, 0x58ae }, { 0x5892, 0x5891 },{ 0x5899, 0x7246 },{ 0x58ee, 0x58ef },{ 0x58f0, 0x8072 }, { 0x58f3, 0x6bbc },{ 0x58f6, 0x58fa },{ 0x5904, 0x8655 },{ 0x5907, 0x5099 }, { 0x590d, 0x5fa9 },{ 0x591f, 0x5920 },{ 0x5934, 0x982d },{ 0x5938, 0x8a87 }, { 0x5939, 0x593e },{ 0x593a, 0x596a },{ 0x5941, 0x5969 },{ 0x5942, 0x5950 }, { 0x594b, 0x596e },{ 0x5956, 0x734e },{ 0x5965, 0x5967 },{ 0x5986, 0x599d }, { 0x5987, 0x5a66 },{ 0x5988, 0x5abd },{ 0x59a9, 0x5af5 },{ 0x59aa, 0x5ad7 }, { 0x59ab, 0x5aaf },{ 0x59d7, 0x59cd },{ 0x5a04, 0x5a41 },{ 0x5a05, 0x5a6d }, { 0x5a06, 0x5b08 },{ 0x5a07, 0x5b0c },{ 0x5a08, 0x5b4c },{ 0x5a31, 0x5a1b }, { 0x5a32, 0x5aa7 },{ 0x5a34, 0x5afb },{ 0x5a74, 0x5b30 },{ 0x5a75, 0x5b0b }, { 0x5a76, 0x5b38 },{ 0x5aaa, 0x5abc },{ 0x5ad2, 0x5b21 },{ 0x5ad4, 0x5b2a }, { 0x5af1, 0x5b19 },{ 0x5b37, 0x5b24 },{ 0x5b59, 0x5b6b },{ 0x5b66, 0x5b78 }, { 0x5b6a, 0x5b7f },{ 0x5b81, 0x5be7 },{ 0x5b9d, 0x5bf6 },{ 0x5b9e, 0x5be6 }, { 0x5ba0, 0x5bf5 },{ 0x5ba1, 0x5be9 },{ 0x5baa, 0x61b2 },{ 0x5bab, 0x5bae }, { 0x5bbd, 0x5bec },{ 0x5bbe, 0x8cd3 },{ 0x5bdd, 0x5be2 },{ 0x5bf9, 0x5c0d }, { 0x5bfb, 0x5c0b },{ 0x5bfc, 0x5c0e },{ 0x5bff, 0x58fd },{ 0x5c06, 0x5c07 }, { 0x5c14, 0x723e },{ 0x5c18, 0x5875 },{ 0x5c1c, 0x560e },{ 0x5c1d, 0x5617 }, { 0x5c27, 0x582f },{ 0x5c34, 0x5c37 },{ 0x5c38, 0x5c4d },{ 0x5c3d, 0x76e1 }, { 0x5c42, 0x5c64 },{ 0x5c49, 0x5c5c },{ 0x5c4a, 0x5c46 },{ 0x5c5e, 0x5c6c }, { 0x5c61, 0x5c62 },{ 0x5c66, 0x5c68 },{ 0x5c7f, 0x5dbc },{ 0x5c81, 0x6b72 }, { 0x5c82, 0x8c48 },{ 0x5c96, 0x5d87 },{ 0x5c97, 0x5d17 },{ 0x5c98, 0x5cf4 }, { 0x5c9a, 0x5d50 },{ 0x5c9b, 0x5cf6 },{ 0x5cad, 0x5dba },{ 0x5cbd, 0x5d20 }, { 0x5cbf, 0x5dcb },{ 0x5cc4, 0x5da7 },{ 0x5ce1, 0x5cfd },{ 0x5ce4, 0x5da0 }, { 0x5ce5, 0x5d22 },{ 0x5ce6, 0x5dd2 },{ 0x5d02, 0x5d97 },{ 0x5d03, 0x5d0d }, { 0x5d2d, 0x5d84 },{ 0x5d58, 0x5db8 },{ 0x5d5b, 0x5d33 },{ 0x5d5d, 0x5d81 }, { 0x5dc5, 0x5dd4 },{ 0x5de9, 0x978f },{ 0x5def, 0x5df0 },{ 0x5e01, 0x5e63 }, { 0x5e05, 0x5e25 },{ 0x5e08, 0x5e2b },{ 0x5e0f, 0x5e43 },{ 0x5e10, 0x5e33 }, { 0x5e18, 0x7c3e },{ 0x5e1c, 0x5e5f },{ 0x5e26, 0x5e36 },{ 0x5e27, 0x5e40 }, { 0x5e2e, 0x5e6b },{ 0x5e31, 0x5e6c },{ 0x5e3b, 0x5e58 },{ 0x5e3c, 0x5e57 }, { 0x5e42, 0x51aa },{ 0x5e72, 0x5e79 },{ 0x5e76, 0x4e26 },{ 0x5e7a, 0x4e48 }, { 0x5e7f, 0x5ee3 },{ 0x5e84, 0x838a },{ 0x5e86, 0x6176 },{ 0x5e90, 0x5eec }, { 0x5e91, 0x5ee1 },{ 0x5e93, 0x5eab },{ 0x5e94, 0x61c9 },{ 0x5e99, 0x5edf }, { 0x5e9e, 0x9f90 },{ 0x5e9f, 0x5ee2 },{ 0x5eea, 0x5ee9 },{ 0x5f00, 0x958b }, { 0x5f02, 0x7570 },{ 0x5f03, 0x68c4 },{ 0x5f11, 0x5f12 },{ 0x5f20, 0x5f35 }, { 0x5f25, 0x5f4c },{ 0x5f2a, 0x5f33 },{ 0x5f2f, 0x5f4e },{ 0x5f39, 0x5f48 }, { 0x5f3a, 0x5f37 },{ 0x5f52, 0x6b78 },{ 0x5f53, 0x7576 },{ 0x5f55, 0x9304 }, { 0x5f66, 0x5f65 },{ 0x5f7b, 0x5fb9 },{ 0x5f84, 0x5f91 },{ 0x5f95, 0x5fa0 }, { 0x5fa1, 0x79a6 },{ 0x5fc4, 0x5fc3 },{ 0x5fc6, 0x61b6 },{ 0x5fcf, 0x61fa }, { 0x5fe7, 0x6182 },{ 0x5ffe, 0x613e },{ 0x6000, 0x61f7 },{ 0x6001, 0x614b }, { 0x6002, 0x616b },{ 0x6003, 0x61ae },{ 0x6004, 0x616a },{ 0x6005, 0x60b5 }, { 0x6006, 0x6134 },{ 0x601c, 0x6190 },{ 0x603b, 0x7e3d },{ 0x603c, 0x61df }, { 0x603f, 0x61cc },{ 0x604b, 0x6200 },{ 0x6052, 0x6046 },{ 0x6073, 0x61c7 }, { 0x6076, 0x60e1 },{ 0x6078, 0x615f },{ 0x6079, 0x61e8 },{ 0x607a, 0x6137 }, { 0x607b, 0x60fb },{ 0x607c, 0x60f1 },{ 0x607d, 0x60f2 },{ 0x60a6, 0x6085 }, { 0x60ab, 0x6128 },{ 0x60ac, 0x61f8 },{ 0x60ad, 0x6173 },{ 0x60af, 0x61ab }, { 0x60ca, 0x9a5a },{ 0x60e7, 0x61fc },{ 0x60e8, 0x6158 },{ 0x60e9, 0x61f2 }, { 0x60eb, 0x618a },{ 0x60ec, 0x611c },{ 0x60ed, 0x615a },{ 0x60ee, 0x619a }, { 0x60ef, 0x6163 },{ 0x6120, 0x614d },{ 0x6124, 0x61a4 },{ 0x6126, 0x6192 }, { 0x613f, 0x9858 },{ 0x6151, 0x61fe },{ 0x61d1, 0x61e3 },{ 0x61d2, 0x61f6 }, { 0x61d4, 0x61cd },{ 0x6206, 0x6207 },{ 0x620b, 0x6214 },{ 0x620f, 0x6232 }, { 0x6217, 0x6227 },{ 0x6218, 0x6230 },{ 0x622c, 0x6229 },{ 0x6237, 0x6236 }, { 0x624c, 0x624b },{ 0x6251, 0x64b2 },{ 0x6258, 0x8a17 },{ 0x6267, 0x57f7 }, { 0x6269, 0x64f4 },{ 0x626a, 0x636b },{ 0x626b, 0x6383 },{ 0x626c, 0x63da }, { 0x6270, 0x64fe },{ 0x629a, 0x64ab },{ 0x629b, 0x62cb },{ 0x629f, 0x6476 }, { 0x62a0, 0x6473 },{ 0x62a1, 0x6384 },{ 0x62a2, 0x6436 },{ 0x62a4, 0x8b77 }, { 0x62a5, 0x5831 },{ 0x62c5, 0x64d4 },{ 0x62df, 0x64ec },{ 0x62e2, 0x650f }, { 0x62e3, 0x63c0 },{ 0x62e5, 0x64c1 },{ 0x62e6, 0x6514 },{ 0x62e7, 0x64f0 }, { 0x62e8, 0x64a5 },{ 0x62e9, 0x64c7 },{ 0x6302, 0x639b },{ 0x631a, 0x646f }, { 0x631b, 0x6523 },{ 0x631d, 0x64be },{ 0x631e, 0x64bb },{ 0x631f, 0x633e }, { 0x6320, 0x6493 },{ 0x6321, 0x64cb },{ 0x6322, 0x649f },{ 0x6323, 0x6399 }, { 0x6324, 0x64e0 },{ 0x6325, 0x63ee },{ 0x6342, 0x6440 },{ 0x635e, 0x6488 }, { 0x635f, 0x640d },{ 0x6361, 0x64bf },{ 0x6362, 0x63db },{ 0x6363, 0x6417 }, { 0x636e, 0x64da },{ 0x63b3, 0x64c4 },{ 0x63b4, 0x6451 },{ 0x63b7, 0x64f2 }, { 0x63b8, 0x64a2 },{ 0x63ba, 0x647b },{ 0x63bc, 0x645c },{ 0x63fd, 0x652c }, { 0x63ff, 0x64b3 },{ 0x6400, 0x6519 },{ 0x6401, 0x64f1 },{ 0x6402, 0x645f }, { 0x6405, 0x652a },{ 0x643a, 0x651c },{ 0x6444, 0x651d },{ 0x6445, 0x6504 }, { 0x6446, 0x64fa },{ 0x6447, 0x6416 },{ 0x6448, 0x64ef },{ 0x644a, 0x6524 }, { 0x6484, 0x6516 },{ 0x6491, 0x6490 },{ 0x64b5, 0x6506 },{ 0x64b7, 0x64f7 }, { 0x64b8, 0x64fc },{ 0x64ba, 0x651b },{ 0x64c0, 0x641f },{ 0x64de, 0x64fb }, { 0x6512, 0x6522 },{ 0x6534, 0x64b2 },{ 0x654c, 0x6575 },{ 0x655b, 0x6582 }, { 0x6570, 0x6578 },{ 0x658b, 0x9f4b },{ 0x6593, 0x6595 },{ 0x6597, 0x9b25 }, { 0x65a9, 0x65ac },{ 0x65ad, 0x65b7 },{ 0x65e0, 0x7121 },{ 0x65e7, 0x820a }, { 0x65f6, 0x6642 },{ 0x65f7, 0x66e0 },{ 0x6619, 0x66c7 },{ 0x6635, 0x66b1 }, { 0x663c, 0x665d },{ 0x663e, 0x986f },{ 0x664b, 0x6649 },{ 0x6652, 0x66ec }, { 0x6653, 0x66c9 },{ 0x6654, 0x66c4 },{ 0x6655, 0x6688 },{ 0x6656, 0x6689 }, { 0x6682, 0x66ab },{ 0x66a7, 0x66d6 },{ 0x6710, 0x80ca },{ 0x672f, 0x8853 }, { 0x6734, 0x6a38 },{ 0x673a, 0x6a5f },{ 0x6740, 0x6bba },{ 0x6742, 0x96dc }, { 0x6743, 0x6b0a },{ 0x6746, 0x687f },{ 0x6760, 0x69d3 },{ 0x6761, 0x689d }, { 0x6765, 0x4f86 },{ 0x6768, 0x694a },{ 0x6769, 0x69aa },{ 0x6770, 0x5091 }, { 0x677e, 0x9b06 },{ 0x6781, 0x6975 },{ 0x6784, 0x69cb },{ 0x679e, 0x6a05 }, { 0x67a2, 0x6a1e },{ 0x67a3, 0x68d7 },{ 0x67a5, 0x6aea },{ 0x67a8, 0x68d6 }, { 0x67aa, 0x69cd },{ 0x67ab, 0x6953 },{ 0x67ad, 0x689f },{ 0x67dc, 0x6ac3 }, { 0x67e0, 0x6ab8 },{ 0x67fd, 0x6a89 },{ 0x6800, 0x6894 },{ 0x6805, 0x67f5 }, { 0x6807, 0x6a19 },{ 0x6808, 0x68e7 },{ 0x6809, 0x6adb },{ 0x680a, 0x6af3 }, { 0x680b, 0x68df },{ 0x680c, 0x6ae8 },{ 0x680e, 0x6adf },{ 0x680f, 0x6b04 }, { 0x6811, 0x6a39 },{ 0x6816, 0x68f2 },{ 0x6837, 0x6a23 },{ 0x683e, 0x6b12 }, { 0x6860, 0x690f },{ 0x6861, 0x6a48 },{ 0x6862, 0x6968 },{ 0x6863, 0x6a94 }, { 0x6864, 0x69bf },{ 0x6865, 0x6a4b },{ 0x6866, 0x6a3a },{ 0x6867, 0x6a9c }, { 0x6868, 0x69f3 },{ 0x6869, 0x6a01 },{ 0x68a6, 0x5922 },{ 0x68c0, 0x6aa2 }, { 0x68c2, 0x6afa },{ 0x68f0, 0x7ba0 },{ 0x68f1, 0x7a1c },{ 0x6901, 0x69e8 }, { 0x691f, 0x6add },{ 0x6920, 0x69e7 },{ 0x6924, 0x6b0f },{ 0x692d, 0x6a62 }, { 0x697c, 0x6a13 },{ 0x6984, 0x6b16 },{ 0x6987, 0x6aec },{ 0x6988, 0x6ada }, { 0x6989, 0x6af8 },{ 0x6998, 0x77e9 },{ 0x69db, 0x6abb },{ 0x69df, 0x6ab3 }, { 0x69e0, 0x6ae7 },{ 0x6a2a, 0x6a6b },{ 0x6a2f, 0x6aa3 },{ 0x6a31, 0x6afb }, { 0x6a65, 0x6aeb },{ 0x6a71, 0x6ae5 },{ 0x6a79, 0x6ad3 },{ 0x6a7c, 0x6ade }, { 0x6a90, 0x7c37 },{ 0x6aa9, 0x6a81 },{ 0x6b22, 0x6b61 },{ 0x6b24, 0x6b5f }, { 0x6b27, 0x6b50 },{ 0x6b7c, 0x6bb2 },{ 0x6b81, 0x6b7f },{ 0x6b87, 0x6ba4 }, { 0x6b8b, 0x6b98 },{ 0x6b92, 0x6b9e },{ 0x6b93, 0x6bae },{ 0x6b9a, 0x6bab }, { 0x6ba1, 0x6baf },{ 0x6bb4, 0x6bc6 },{ 0x6bc1, 0x6bc0 },{ 0x6bc2, 0x8f42 }, { 0x6bd5, 0x7562 },{ 0x6bd9, 0x6583 },{ 0x6be1, 0x6c08 },{ 0x6bf5, 0x6bff }, { 0x6c07, 0x6c0c },{ 0x6c14, 0x6c23 },{ 0x6c22, 0x6c2b },{ 0x6c29, 0x6c2c }, { 0x6c32, 0x6c33 },{ 0x6c35, 0x6c34 },{ 0x6c3d, 0x6c46 },{ 0x6c47, 0x532f }, { 0x6c49, 0x6f22 },{ 0x6c64, 0x6e6f },{ 0x6c79, 0x6d36 },{ 0x6c9f, 0x6e9d }, { 0x6ca1, 0x6c92 },{ 0x6ca3, 0x7043 },{ 0x6ca4, 0x6f1a },{ 0x6ca5, 0x701d }, { 0x6ca6, 0x6dea },{ 0x6ca7, 0x6ec4 },{ 0x6ca9, 0x6e88 },{ 0x6caa, 0x6eec }, { 0x6cb2, 0x6cb1 },{ 0x6cc4, 0x6d29 },{ 0x6cde, 0x6fd8 },{ 0x6cea, 0x6dda }, { 0x6cf6, 0x6fa9 },{ 0x6cf7, 0x7027 },{ 0x6cf8, 0x7018 },{ 0x6cfa, 0x6ffc }, { 0x6cfb, 0x7009 },{ 0x6cfc, 0x6f51 },{ 0x6cfd, 0x6fa4 },{ 0x6cfe, 0x6d87 }, { 0x6d01, 0x6f54 },{ 0x6d12, 0x7051 },{ 0x6d3c, 0x7aaa },{ 0x6d43, 0x6d79 }, { 0x6d45, 0x6dfa },{ 0x6d46, 0x6f3f },{ 0x6d47, 0x6f86 },{ 0x6d48, 0x6e5e }, { 0x6d4a, 0x6fc1 },{ 0x6d4b, 0x6e2c },{ 0x6d4d, 0x6fae },{ 0x6d4e, 0x6fdf }, { 0x6d4f, 0x700f },{ 0x6d51, 0x6e3e },{ 0x6d52, 0x6ef8 },{ 0x6d53, 0x6fc3 }, { 0x6d54, 0x6f6f },{ 0x6d5c, 0x6ff1 },{ 0x6d82, 0x5857 },{ 0x6d8c, 0x6e67 }, { 0x6d9b, 0x6fe4 },{ 0x6d9d, 0x6f87 },{ 0x6d9e, 0x6df6 },{ 0x6d9f, 0x6f23 }, { 0x6da0, 0x6f7f },{ 0x6da1, 0x6e26 },{ 0x6da3, 0x6e19 },{ 0x6da4, 0x6ecc }, { 0x6da6, 0x6f64 },{ 0x6da7, 0x6f97 },{ 0x6da8, 0x6f32 },{ 0x6da9, 0x6f80 }, { 0x6dc0, 0x6fb1 },{ 0x6e0a, 0x6df5 },{ 0x6e0c, 0x6de5 },{ 0x6e0d, 0x6f2c }, { 0x6e0e, 0x7006 },{ 0x6e10, 0x6f38 },{ 0x6e11, 0x6fa0 },{ 0x6e14, 0x6f01 }, { 0x6e16, 0x700b },{ 0x6e17, 0x6ef2 },{ 0x6e29, 0x6eab },{ 0x6e38, 0x904a }, { 0x6e7e, 0x7063 },{ 0x6e7f, 0x6fd5 },{ 0x6e83, 0x6f70 },{ 0x6e85, 0x6ffa }, { 0x6e86, 0x6f35 },{ 0x6ed7, 0x6f77 },{ 0x6eda, 0x6efe },{ 0x6ede, 0x6eef }, { 0x6edf, 0x7069 },{ 0x6ee0, 0x7044 },{ 0x6ee1, 0x6eff },{ 0x6ee2, 0x7005 }, { 0x6ee4, 0x6ffe },{ 0x6ee5, 0x6feb },{ 0x6ee6, 0x7064 },{ 0x6ee8, 0x6ff1 }, { 0x6ee9, 0x7058 },{ 0x6f46, 0x7020 },{ 0x6f47, 0x701f },{ 0x6f4b, 0x7032 }, { 0x6f4d, 0x6ff0 },{ 0x6f5c, 0x6f5b },{ 0x6f74, 0x7026 },{ 0x6f9c, 0x703e }, { 0x6fd1, 0x7028 },{ 0x6fd2, 0x7015 },{ 0x704f, 0x705d },{ 0x706c, 0x706b }, { 0x706d, 0x6ec5 },{ 0x706f, 0x71c8 },{ 0x7075, 0x9748 },{ 0x707e, 0x707d }, { 0x707f, 0x71e6 },{ 0x7080, 0x716c },{ 0x7089, 0x7210 },{ 0x7096, 0x71c9 }, { 0x709c, 0x7152 },{ 0x709d, 0x7197 },{ 0x70ae, 0x7832 },{ 0x70b9, 0x9ede }, { 0x70bc, 0x934a },{ 0x70bd, 0x71be },{ 0x70c1, 0x720d },{ 0x70c2, 0x721b }, { 0x70c3, 0x70f4 },{ 0x70db, 0x71ed },{ 0x70df, 0x7159 },{ 0x70e6, 0x7169 }, { 0x70e7, 0x71d2 },{ 0x70e8, 0x71c1 },{ 0x70e9, 0x71f4 },{ 0x70eb, 0x71d9 }, { 0x70ec, 0x71fc },{ 0x70ed, 0x71b1 },{ 0x7115, 0x7165 },{ 0x7116, 0x71dc }, { 0x7118, 0x71fe },{ 0x7130, 0x71c4 },{ 0x7145, 0x935b },{ 0x718f, 0x71fb }, { 0x7231, 0x611b },{ 0x7237, 0x723a },{ 0x724d, 0x7258 },{ 0x7266, 0x729b }, { 0x7275, 0x727d },{ 0x727a, 0x72a7 },{ 0x728a, 0x72a2 },{ 0x72ad, 0x72ac }, { 0x72b6, 0x72c0 },{ 0x72b7, 0x7377 },{ 0x72b9, 0x7336 },{ 0x72c8, 0x72fd }, { 0x72de, 0x7370 },{ 0x72ec, 0x7368 },{ 0x72ed, 0x72f9 },{ 0x72ee, 0x7345 }, { 0x72ef, 0x736a },{ 0x72f0, 0x7319 },{ 0x72f1, 0x7344 },{ 0x72f2, 0x733b }, { 0x7303, 0x736b },{ 0x730e, 0x7375 },{ 0x7315, 0x737c },{ 0x7321, 0x7380 }, { 0x732a, 0x8c6c },{ 0x732b, 0x8c93 },{ 0x732c, 0x875f },{ 0x732e, 0x737b }, { 0x736d, 0x737a },{ 0x7391, 0x74a3 },{ 0x739b, 0x746a },{ 0x73ae, 0x744b }, { 0x73af, 0x74b0 },{ 0x73b0, 0x73fe },{ 0x73ba, 0x74bd },{ 0x73c9, 0x739f }, { 0x73cf, 0x73a8 },{ 0x73d0, 0x743a },{ 0x73d1, 0x74cf },{ 0x73f2, 0x743f }, { 0x740f, 0x7489 },{ 0x7410, 0x7463 },{ 0x743c, 0x74ca },{ 0x7476, 0x7464 }, { 0x7477, 0x74a6 },{ 0x748e, 0x74d4 },{ 0x74d2, 0x74da },{ 0x74ee, 0x7515 }, { 0x74ef, 0x750c },{ 0x7535, 0x96fb },{ 0x753b, 0x756b },{ 0x7545, 0x66a2 }, { 0x7572, 0x756c },{ 0x7574, 0x7587 },{ 0x7596, 0x7664 },{ 0x7597, 0x7642 }, { 0x759f, 0x7627 },{ 0x75a0, 0x7658 },{ 0x75a1, 0x760d },{ 0x75ae, 0x7621 }, { 0x75af, 0x760b },{ 0x75b1, 0x76b0 },{ 0x75b4, 0x75fe },{ 0x75c8, 0x7670 }, { 0x75c9, 0x75d9 },{ 0x75d2, 0x7662 },{ 0x75e8, 0x7646 },{ 0x75ea, 0x7613 }, { 0x75eb, 0x7647 },{ 0x75f4, 0x7661 },{ 0x75f9, 0x75fa },{ 0x7605, 0x7649 }, { 0x7617, 0x761e },{ 0x7618, 0x763a },{ 0x762a, 0x765f },{ 0x762b, 0x7671 }, { 0x763e, 0x766e },{ 0x763f, 0x766d },{ 0x765e, 0x7669 },{ 0x7663, 0x766c }, { 0x766b, 0x7672 },{ 0x7691, 0x769a },{ 0x76b1, 0x76ba },{ 0x76b2, 0x76b8 }, { 0x76cf, 0x76de },{ 0x76d0, 0x9e7d },{ 0x76d1, 0x76e3 },{ 0x76d6, 0x84cb }, { 0x76d7, 0x76dc },{ 0x76d8, 0x76e4 },{ 0x7726, 0x7725 },{ 0x772f, 0x7787 }, { 0x7740, 0x8457 },{ 0x7741, 0x775c },{ 0x7750, 0x775e },{ 0x7751, 0x77bc }, { 0x777e, 0x776a },{ 0x777f, 0x53e1 },{ 0x7792, 0x779e },{ 0x77a9, 0x77da }, { 0x77eb, 0x77ef },{ 0x77f6, 0x78ef },{ 0x77fe, 0x792c },{ 0x77ff, 0x7926 }, { 0x7800, 0x78ad },{ 0x7801, 0x78bc },{ 0x7816, 0x78da },{ 0x7817, 0x7868 }, { 0x781a, 0x786f },{ 0x783a, 0x792a },{ 0x783b, 0x7931 },{ 0x783e, 0x792b }, { 0x7840, 0x790e },{ 0x7855, 0x78a9 },{ 0x7856, 0x7864 },{ 0x7857, 0x78fd }, { 0x786e, 0x78ba },{ 0x7877, 0x9e7c },{ 0x788d, 0x7919 },{ 0x789b, 0x78e7 }, { 0x789c, 0x78e3 },{ 0x78b1, 0x583f },{ 0x7934, 0x7921 },{ 0x793b, 0x793a }, { 0x793c, 0x79ae },{ 0x795b, 0x88aa },{ 0x7962, 0x79b0 },{ 0x796f, 0x798e }, { 0x7977, 0x79b1 },{ 0x7978, 0x798d },{ 0x7980, 0x7a1f },{ 0x7984, 0x797f }, { 0x7985, 0x79aa },{ 0x79bb, 0x96e2 },{ 0x79c3, 0x79bf },{ 0x79c6, 0x7a08 }, { 0x79cd, 0x7a2e },{ 0x79ef, 0x7a4d },{ 0x79f0, 0x7a31 },{ 0x79fd, 0x7a62 }, { 0x7a0e, 0x7a05 },{ 0x7a23, 0x7a4c },{ 0x7a33, 0x7a69 },{ 0x7a51, 0x7a61 }, { 0x7a77, 0x7aae },{ 0x7a83, 0x7aca },{ 0x7a8d, 0x7ac5 },{ 0x7a91, 0x7aaf }, { 0x7a9c, 0x7ac4 },{ 0x7a9d, 0x7aa9 },{ 0x7aa5, 0x7aba },{ 0x7aa6, 0x7ac7 }, { 0x7aad, 0x7ab6 },{ 0x7ad6, 0x8c4e },{ 0x7ade, 0x7af6 },{ 0x7b03, 0x7be4 }, { 0x7b0b, 0x7b4d },{ 0x7b14, 0x7b46 },{ 0x7b15, 0x7b67 },{ 0x7b3a, 0x7b8b }, { 0x7b3c, 0x7c60 },{ 0x7b3e, 0x7c69 },{ 0x7b47, 0x7b3b },{ 0x7b51, 0x7bc9 }, { 0x7b5a, 0x7bf3 },{ 0x7b5b, 0x7be9 },{ 0x7b5d, 0x7b8f },{ 0x7b71, 0x7be0 }, { 0x7b79, 0x7c4c },{ 0x7b7e, 0x7c3d },{ 0x7b80, 0x7c21 },{ 0x7ba6, 0x7c00 }, { 0x7ba7, 0x7bcb },{ 0x7ba8, 0x7c5c },{ 0x7ba9, 0x7c6e },{ 0x7baa, 0x7c1e }, { 0x7bab, 0x7c2b },{ 0x7bd1, 0x7c23 },{ 0x7bd3, 0x7c0d },{ 0x7bee, 0x7c43 }, { 0x7bf1, 0x7c6c },{ 0x7c16, 0x7c6a },{ 0x7c41, 0x7c5f },{ 0x7c74, 0x7cf4 }, { 0x7c7b, 0x985e },{ 0x7c7c, 0x79c8 },{ 0x7c9c, 0x7cf6 },{ 0x7c9d, 0x7cf2 }, { 0x7ca4, 0x7cb5 },{ 0x7caa, 0x7cde },{ 0x7cae, 0x7ce7 },{ 0x7cc1, 0x7cdd }, { 0x7cc7, 0x9931 },{ 0x7ccd, 0x9908 },{ 0x7d27, 0x7dca },{ 0x7d77, 0x7e36 }, { 0x7e9f, 0x7d72 },{ 0x7ea0, 0x7cfe },{ 0x7ea1, 0x7d06 },{ 0x7ea2, 0x7d05 }, { 0x7ea3, 0x7d02 },{ 0x7ea4, 0x7e96 },{ 0x7ea5, 0x7d07 },{ 0x7ea6, 0x7d04 }, { 0x7ea7, 0x7d1a },{ 0x7ea8, 0x7d08 },{ 0x7ea9, 0x7e8a },{ 0x7eaa, 0x7d00 }, { 0x7eab, 0x7d09 },{ 0x7eac, 0x7def },{ 0x7ead, 0x7d1c },{ 0x7eaf, 0x7d14 }, { 0x7eb0, 0x7d15 },{ 0x7eb1, 0x7d17 },{ 0x7eb2, 0x7db1 },{ 0x7eb3, 0x7d0d }, { 0x7eb5, 0x7e31 },{ 0x7eb6, 0x7db8 },{ 0x7eb7, 0x7d1b },{ 0x7eb8, 0x7d19 }, { 0x7eb9, 0x7d0b },{ 0x7eba, 0x7d21 },{ 0x7ebd, 0x7d10 },{ 0x7ebe, 0x7d13 }, { 0x7ebf, 0x7dda },{ 0x7ec0, 0x7d3a },{ 0x7ec1, 0x7d32 },{ 0x7ec2, 0x7d31 }, { 0x7ec3, 0x7df4 },{ 0x7ec4, 0x7d44 },{ 0x7ec5, 0x7d33 },{ 0x7ec6, 0x7d30 }, { 0x7ec7, 0x7e54 },{ 0x7ec8, 0x7d42 },{ 0x7ec9, 0x7e10 },{ 0x7eca, 0x7d46 }, { 0x7ecb, 0x7d3c },{ 0x7ecc, 0x7d40 },{ 0x7ecd, 0x7d39 },{ 0x7ece, 0x7e79 }, { 0x7ecf, 0x7d93 },{ 0x7ed0, 0x7d3f },{ 0x7ed1, 0x7d81 },{ 0x7ed2, 0x7d68 }, { 0x7ed3, 0x7d50 },{ 0x7ed4, 0x8932 },{ 0x7ed5, 0x7e5e },{ 0x7ed7, 0x7d4e }, { 0x7ed8, 0x7e6a },{ 0x7ed9, 0x7d66 },{ 0x7eda, 0x7d62 },{ 0x7edb, 0x7d73 }, { 0x7edc, 0x7d61 },{ 0x7edd, 0x7d55 },{ 0x7ede, 0x7d5e },{ 0x7edf, 0x7d71 }, { 0x7ee0, 0x7d86 },{ 0x7ee1, 0x7d83 },{ 0x7ee2, 0x7d79 },{ 0x7ee3, 0x7e61 }, { 0x7ee5, 0x7d8f },{ 0x7ee6, 0x7d5b },{ 0x7ee7, 0x7e7c },{ 0x7ee8, 0x7d88 }, { 0x7ee9, 0x7e3e },{ 0x7eea, 0x7dd2 },{ 0x7eeb, 0x7dbe },{ 0x7eed, 0x7e8c }, { 0x7eee, 0x7dba },{ 0x7eef, 0x7dcb },{ 0x7ef0, 0x7dbd },{ 0x7ef2, 0x7dc4 }, { 0x7ef3, 0x7e69 },{ 0x7ef4, 0x7dad },{ 0x7ef5, 0x7dbf },{ 0x7ef6, 0x7dac }, { 0x7ef7, 0x7e43 },{ 0x7ef8, 0x7da2 },{ 0x7efa, 0x7db9 },{ 0x7efb, 0x7da3 }, { 0x7efc, 0x7d9c },{ 0x7efd, 0x7dbb },{ 0x7efe, 0x7db0 },{ 0x7eff, 0x7da0 }, { 0x7f00, 0x7db4 },{ 0x7f01, 0x7dc7 },{ 0x7f02, 0x7dd9 },{ 0x7f03, 0x7dd7 }, { 0x7f04, 0x7dd8 },{ 0x7f05, 0x7dec },{ 0x7f06, 0x7e9c },{ 0x7f07, 0x7df9 }, { 0x7f08, 0x7df2 },{ 0x7f09, 0x7ddd },{ 0x7f0b, 0x7e62 },{ 0x7f0c, 0x7de6 }, { 0x7f0d, 0x7d9e },{ 0x7f0e, 0x7dde },{ 0x7f0f, 0x7df6 },{ 0x7f11, 0x7df1 }, { 0x7f12, 0x7e0b },{ 0x7f13, 0x7de9 },{ 0x7f14, 0x7de0 },{ 0x7f15, 0x7e37 }, { 0x7f16, 0x7de8 },{ 0x7f17, 0x7de1 },{ 0x7f18, 0x7de3 },{ 0x7f19, 0x7e09 }, { 0x7f1a, 0x7e1b },{ 0x7f1b, 0x7e1f },{ 0x7f1c, 0x7e1d },{ 0x7f1d, 0x7e2b }, { 0x7f1f, 0x7e1e },{ 0x7f20, 0x7e8f },{ 0x7f21, 0x7e2d },{ 0x7f22, 0x7e0a }, { 0x7f23, 0x7e11 },{ 0x7f24, 0x7e7d },{ 0x7f25, 0x7e39 },{ 0x7f26, 0x7e35 }, { 0x7f27, 0x7e32 },{ 0x7f28, 0x7e93 },{ 0x7f29, 0x7e2e },{ 0x7f2a, 0x7e46 }, { 0x7f2b, 0x7e45 },{ 0x7f2c, 0x7e88 },{ 0x7f2d, 0x7e5a },{ 0x7f2e, 0x7e55 }, { 0x7f2f, 0x7e52 },{ 0x7f30, 0x97c1 },{ 0x7f31, 0x7e7e },{ 0x7f32, 0x7e70 }, { 0x7f33, 0x7e6f },{ 0x7f34, 0x7e73 },{ 0x7f35, 0x7e98 },{ 0x7f42, 0x7f4c }, { 0x7f51, 0x7db2 },{ 0x7f57, 0x7f85 },{ 0x7f5a, 0x7f70 },{ 0x7f62, 0x7f77 }, { 0x7f74, 0x7f86 },{ 0x7f81, 0x7f88 },{ 0x7f9f, 0x7fa5 },{ 0x7fa1, 0x7fa8 }, { 0x7fd8, 0x7ff9 },{ 0x8027, 0x802c },{ 0x8038, 0x8073 },{ 0x803b, 0x6065 }, { 0x8042, 0x8076 },{ 0x804b, 0x807e },{ 0x804c, 0x8077 },{ 0x804d, 0x8079 }, { 0x8054, 0x806f },{ 0x8069, 0x8075 },{ 0x806a, 0x8070 },{ 0x8080, 0x807f }, { 0x8083, 0x8085 },{ 0x80a0, 0x8178 },{ 0x80a4, 0x819a },{ 0x80ae, 0x9aaf }, { 0x80b4, 0x991a },{ 0x80be, 0x814e },{ 0x80bf, 0x816b },{ 0x80c0, 0x8139 }, { 0x80c1, 0x8105 },{ 0x80c4, 0x5191 },{ 0x80c6, 0x81bd },{ 0x80dc, 0x52dd }, { 0x80e7, 0x6727 },{ 0x80ea, 0x81da },{ 0x80eb, 0x811b },{ 0x80f6, 0x81a0 }, { 0x8109, 0x8108 },{ 0x810d, 0x81be },{ 0x810f, 0x9ad2 },{ 0x8110, 0x81cd }, { 0x8111, 0x8166 },{ 0x8113, 0x81bf },{ 0x8114, 0x81e0 },{ 0x811a, 0x8173 }, { 0x8131, 0x812b },{ 0x8132, 0x5c3f },{ 0x8136, 0x8161 },{ 0x8138, 0x81c9 }, { 0x814a, 0x81d8 },{ 0x814c, 0x9183 },{ 0x816d, 0x9f76 },{ 0x817b, 0x81a9 }, { 0x817c, 0x9766 },{ 0x817d, 0x8183 },{ 0x817e, 0x9a30 },{ 0x8191, 0x81cf }, { 0x8206, 0x8f3f },{ 0x8223, 0x8264 },{ 0x8230, 0x8266 },{ 0x8231, 0x8259 }, { 0x823b, 0x826b },{ 0x8270, 0x8271 },{ 0x8273, 0x8c54 },{ 0x8279, 0x8278 }, { 0x827a, 0x85dd },{ 0x8282, 0x7bc0 },{ 0x8288, 0x7f8b },{ 0x8297, 0x858c }, { 0x829c, 0x856a },{ 0x82a6, 0x8606 },{ 0x82c1, 0x84ef },{ 0x82c7, 0x8466 }, { 0x82c8, 0x85f6 },{ 0x82cb, 0x83a7 },{ 0x82cc, 0x8407 },{ 0x82cd, 0x84bc }, { 0x82ce, 0x82e7 },{ 0x82cf, 0x8607 },{ 0x82f9, 0x860b },{ 0x8303, 0x7bc4 }, { 0x830e, 0x8396 },{ 0x830f, 0x8622 },{ 0x8311, 0x8526 },{ 0x8314, 0x584b }, { 0x8315, 0x7162 },{ 0x8327, 0x7e6d },{ 0x8346, 0x834a },{ 0x8350, 0x85a6 }, { 0x835a, 0x83a2 },{ 0x835b, 0x8558 },{ 0x835c, 0x84fd },{ 0x835e, 0x854e }, { 0x835f, 0x8588 },{ 0x8360, 0x85ba },{ 0x8361, 0x8569 },{ 0x8363, 0x69ae }, { 0x8364, 0x8477 },{ 0x8365, 0x6ece },{ 0x8366, 0x7296 },{ 0x8367, 0x7192 }, { 0x8368, 0x8541 },{ 0x8369, 0x85ce },{ 0x836a, 0x84c0 },{ 0x836b, 0x852d }, { 0x836c, 0x85da },{ 0x836d, 0x8452 },{ 0x836f, 0x85e5 },{ 0x8385, 0x849e }, { 0x83b1, 0x840a },{ 0x83b2, 0x84ee },{ 0x83b3, 0x8494 },{ 0x83b4, 0x8435 }, { 0x83b6, 0x859f },{ 0x83b7, 0x7372 },{ 0x83b8, 0x8555 },{ 0x83b9, 0x7469 }, { 0x83ba, 0x9daf },{ 0x83bc, 0x84f4 },{ 0x841d, 0x863f },{ 0x8424, 0x87a2 }, { 0x8425, 0x71df },{ 0x8426, 0x7e08 },{ 0x8427, 0x856d },{ 0x8428, 0x85a9 }, { 0x8471, 0x8525 },{ 0x8487, 0x8546 },{ 0x8489, 0x8562 },{ 0x848b, 0x8523 }, { 0x848c, 0x851e },{ 0x84d1, 0x7c11 },{ 0x84dd, 0x85cd },{ 0x84df, 0x858a }, { 0x84e0, 0x863a },{ 0x84e3, 0x8577 },{ 0x84e5, 0x93a3 },{ 0x84e6, 0x9a40 }, { 0x8537, 0x8594 },{ 0x8539, 0x861e },{ 0x853a, 0x85fa },{ 0x853c, 0x85f9 }, { 0x8572, 0x8604 },{ 0x8574, 0x860a },{ 0x85ae, 0x85ea },{ 0x85d3, 0x861a }, { 0x8616, 0x8617 },{ 0x864f, 0x865c },{ 0x8651, 0x616e },{ 0x865a, 0x865b }, { 0x866b, 0x87f2 },{ 0x866c, 0x866f },{ 0x866e, 0x87e3 },{ 0x867d, 0x96d6 }, { 0x867e, 0x8766 },{ 0x867f, 0x8806 },{ 0x8680, 0x8755 },{ 0x8681, 0x87fb }, { 0x8682, 0x879e },{ 0x8695, 0x8836 },{ 0x869d, 0x8814 },{ 0x86ac, 0x8706 }, { 0x86ca, 0x8831 },{ 0x86ce, 0x8823 },{ 0x86cf, 0x87f6 },{ 0x86ee, 0x883b }, { 0x86f0, 0x87c4 },{ 0x86f1, 0x86fa },{ 0x86f2, 0x87ef },{ 0x86f3, 0x8784 }, { 0x86f4, 0x8810 },{ 0x8715, 0x86fb },{ 0x8717, 0x8778 },{ 0x8721, 0x881f }, { 0x8747, 0x8805 },{ 0x8748, 0x87c8 },{ 0x8749, 0x87ec },{ 0x874e, 0x880d }, { 0x8770, 0x867a },{ 0x877c, 0x87bb },{ 0x877e, 0x8811 },{ 0x87ee, 0x87fa }, { 0x8845, 0x91c1 },{ 0x8854, 0x929c },{ 0x8864, 0x8863 },{ 0x8865, 0x88dc }, { 0x886c, 0x896f },{ 0x886e, 0x889e },{ 0x8884, 0x8956 },{ 0x8885, 0x88ca }, { 0x889c, 0x896a },{ 0x88ad, 0x8972 },{ 0x88c5, 0x88dd },{ 0x88c6, 0x8960 }, { 0x88e2, 0x8933 },{ 0x88e3, 0x895d },{ 0x88e4, 0x8932 },{ 0x88e5, 0x8949 }, { 0x891b, 0x8938 },{ 0x8934, 0x8964 },{ 0x89c1, 0x898b },{ 0x89c2, 0x89c0 }, { 0x89c4, 0x898f },{ 0x89c5, 0x8993 },{ 0x89c6, 0x8996 },{ 0x89c7, 0x8998 }, { 0x89c8, 0x89bd },{ 0x89c9, 0x89ba },{ 0x89ca, 0x89ac },{ 0x89cb, 0x89a1 }, { 0x89cc, 0x89bf },{ 0x89ce, 0x89a6 },{ 0x89cf, 0x89af },{ 0x89d0, 0x89b2 }, { 0x89d1, 0x89b7 },{ 0x89de, 0x89f4 },{ 0x89e6, 0x89f8 },{ 0x89ef, 0x89f6 }, { 0x8a89, 0x8b7d },{ 0x8a8a, 0x8b04 },{ 0x8ba0, 0x8a00 },{ 0x8ba1, 0x8a08 }, { 0x8ba2, 0x8a02 },{ 0x8ba3, 0x8a03 },{ 0x8ba4, 0x8a8d },{ 0x8ba5, 0x8b4f }, { 0x8ba6, 0x8a10 },{ 0x8ba7, 0x8a0c },{ 0x8ba8, 0x8a0e },{ 0x8ba9, 0x8b93 }, { 0x8baa, 0x8a15 },{ 0x8bab, 0x8a16 },{ 0x8bad, 0x8a13 },{ 0x8bae, 0x8b70 }, { 0x8baf, 0x8a0a },{ 0x8bb0, 0x8a18 },{ 0x8bb2, 0x8b1b },{ 0x8bb3, 0x8af1 }, { 0x8bb4, 0x8b33 },{ 0x8bb5, 0x8a4e },{ 0x8bb6, 0x8a1d },{ 0x8bb7, 0x8a25 }, { 0x8bb8, 0x8a31 },{ 0x8bb9, 0x8a1b },{ 0x8bba, 0x8ad6 },{ 0x8bbc, 0x8a1f }, { 0x8bbd, 0x8af7 },{ 0x8bbe, 0x8a2d },{ 0x8bbf, 0x8a2a },{ 0x8bc0, 0x8a23 }, { 0x8bc1, 0x8b49 },{ 0x8bc2, 0x8a41 },{ 0x8bc3, 0x8a36 },{ 0x8bc4, 0x8a55 }, { 0x8bc5, 0x8a5b },{ 0x8bc6, 0x8b58 },{ 0x8bc8, 0x8a50 },{ 0x8bc9, 0x8a34 }, { 0x8bca, 0x8a3a },{ 0x8bcb, 0x8a46 },{ 0x8bcc, 0x8b05 },{ 0x8bcd, 0x8a5e }, { 0x8bce, 0x8a58 },{ 0x8bcf, 0x8a54 },{ 0x8bd1, 0x8b6f },{ 0x8bd2, 0x8a52 }, { 0x8bd3, 0x8a86 },{ 0x8bd4, 0x8a84 },{ 0x8bd5, 0x8a66 },{ 0x8bd6, 0x8a7f }, { 0x8bd7, 0x8a69 },{ 0x8bd8, 0x8a70 },{ 0x8bd9, 0x8a7c },{ 0x8bda, 0x8aa0 }, { 0x8bdb, 0x8a85 },{ 0x8bdc, 0x8a75 },{ 0x8bdd, 0x8a71 },{ 0x8bde, 0x8a95 }, { 0x8bdf, 0x8a6c },{ 0x8be0, 0x8a6e },{ 0x8be1, 0x8a6d },{ 0x8be2, 0x8a62 }, { 0x8be3, 0x8a63 },{ 0x8be4, 0x8acd },{ 0x8be5, 0x8a72 },{ 0x8be6, 0x8a73 }, { 0x8be7, 0x8a6b },{ 0x8be8, 0x8ae2 },{ 0x8be9, 0x8a61 },{ 0x8beb, 0x8aa1 }, { 0x8bec, 0x8aa3 },{ 0x8bed, 0x8a9e },{ 0x8bee, 0x8a9a },{ 0x8bef, 0x8aa4 }, { 0x8bf0, 0x8aa5 },{ 0x8bf1, 0x8a98 },{ 0x8bf2, 0x8aa8 },{ 0x8bf3, 0x8a91 }, { 0x8bf4, 0x8aaa },{ 0x8bf5, 0x8aa6 },{ 0x8bf6, 0x8a92 },{ 0x8bf7, 0x8acb }, { 0x8bf8, 0x8af8 },{ 0x8bf9, 0x8acf },{ 0x8bfa, 0x8afe },{ 0x8bfb, 0x8b80 }, { 0x8bfc, 0x8ad1 },{ 0x8bfd, 0x8ab9 },{ 0x8bfe, 0x8ab2 },{ 0x8bff, 0x8ac9 }, { 0x8c00, 0x8adb },{ 0x8c01, 0x8ab0 },{ 0x8c02, 0x8ad7 },{ 0x8c03, 0x8abf }, { 0x8c04, 0x8ac2 },{ 0x8c05, 0x8ad2 },{ 0x8c06, 0x8ac4 },{ 0x8c07, 0x8ab6 }, { 0x8c08, 0x8ac7 },{ 0x8c0a, 0x8abc },{ 0x8c0b, 0x8b00 },{ 0x8c0c, 0x8af6 }, { 0x8c0d, 0x8adc },{ 0x8c0e, 0x8b0a },{ 0x8c0f, 0x8aeb },{ 0x8c10, 0x8ae7 }, { 0x8c11, 0x8b14 },{ 0x8c12, 0x8b01 },{ 0x8c13, 0x8b02 },{ 0x8c14, 0x8ae4 }, { 0x8c15, 0x8aed },{ 0x8c16, 0x8afc },{ 0x8c17, 0x8b92 },{ 0x8c18, 0x8aee }, { 0x8c19, 0x8af3 },{ 0x8c1a, 0x8afa },{ 0x8c1b, 0x8ae6 },{ 0x8c1c, 0x8b0e }, { 0x8c1d, 0x8ade },{ 0x8c1f, 0x8b28 },{ 0x8c20, 0x8b9c },{ 0x8c21, 0x8b16 }, { 0x8c22, 0x8b1d },{ 0x8c23, 0x8b20 },{ 0x8c24, 0x8b17 },{ 0x8c25, 0x8b1a }, { 0x8c26, 0x8b19 },{ 0x8c27, 0x8b10 },{ 0x8c28, 0x8b39 },{ 0x8c29, 0x8b3e }, { 0x8c2a, 0x8b2b },{ 0x8c2b, 0x8b7e },{ 0x8c2c, 0x8b2c },{ 0x8c2d, 0x8b5a }, { 0x8c2e, 0x8b56 },{ 0x8c2f, 0x8b59 },{ 0x8c30, 0x8b95 },{ 0x8c31, 0x8b5c }, { 0x8c32, 0x8b4e },{ 0x8c33, 0x8b9e },{ 0x8c34, 0x8b74 },{ 0x8c35, 0x8b6b }, { 0x8c36, 0x8b96 },{ 0x8d1d, 0x8c9d },{ 0x8d1e, 0x8c9e },{ 0x8d1f, 0x8ca0 }, { 0x8d21, 0x8ca2 },{ 0x8d22, 0x8ca1 },{ 0x8d23, 0x8cac },{ 0x8d24, 0x8ce2 }, { 0x8d25, 0x6557 },{ 0x8d26, 0x8cec },{ 0x8d27, 0x8ca8 },{ 0x8d28, 0x8cea }, { 0x8d29, 0x8ca9 },{ 0x8d2a, 0x8caa },{ 0x8d2b, 0x8ca7 },{ 0x8d2c, 0x8cb6 }, { 0x8d2d, 0x8cfc },{ 0x8d2e, 0x8caf },{ 0x8d2f, 0x8cab },{ 0x8d30, 0x8cb3 }, { 0x8d31, 0x8ce4 },{ 0x8d32, 0x8cc1 },{ 0x8d33, 0x8cb0 },{ 0x8d34, 0x8cbc }, { 0x8d35, 0x8cb4 },{ 0x8d36, 0x8cba },{ 0x8d37, 0x8cb8 },{ 0x8d38, 0x8cbf }, { 0x8d39, 0x8cbb },{ 0x8d3a, 0x8cc0 },{ 0x8d3b, 0x8cbd },{ 0x8d3c, 0x8cca }, { 0x8d3d, 0x8d04 },{ 0x8d3e, 0x8cc8 },{ 0x8d3f, 0x8cc4 },{ 0x8d40, 0x8cb2 }, { 0x8d41, 0x8cc3 },{ 0x8d42, 0x8cc2 },{ 0x8d43, 0x8d13 },{ 0x8d44, 0x8cc7 }, { 0x8d45, 0x8cc5 },{ 0x8d46, 0x8d10 },{ 0x8d47, 0x8cd5 },{ 0x8d48, 0x8cd1 }, { 0x8d49, 0x8cda },{ 0x8d4a, 0x8cd2 },{ 0x8d4b, 0x8ce6 },{ 0x8d4c, 0x8ced }, { 0x8d4d, 0x9f4e },{ 0x8d4e, 0x8d16 },{ 0x8d4f, 0x8cde },{ 0x8d50, 0x8cdc }, { 0x8d53, 0x8ce1 },{ 0x8d54, 0x8ce0 },{ 0x8d55, 0x8ce7 },{ 0x8d56, 0x8cf4 }, { 0x8d58, 0x8d05 },{ 0x8d59, 0x8cfb },{ 0x8d5a, 0x8cfa },{ 0x8d5b, 0x8cfd }, { 0x8d5c, 0x8cfe },{ 0x8d5d, 0x8d17 },{ 0x8d5e, 0x8d0a },{ 0x8d60, 0x8d08 }, { 0x8d61, 0x8d0d },{ 0x8d62, 0x8d0f },{ 0x8d63, 0x8d1b },{ 0x8d75, 0x8d99 }, { 0x8d76, 0x8d95 },{ 0x8d8b, 0x8da8 },{ 0x8db1, 0x8db2 },{ 0x8db8, 0x8e89 }, { 0x8dc3, 0x8e8d },{ 0x8dc4, 0x8e4c },{ 0x8dde, 0x8e92 },{ 0x8df5, 0x8e10 }, { 0x8df7, 0x8e7a },{ 0x8df8, 0x8e55 },{ 0x8df9, 0x8e9a },{ 0x8dfb, 0x8e8b }, { 0x8e0a, 0x8e34 },{ 0x8e0c, 0x8e8a },{ 0x8e2a, 0x8e64 },{ 0x8e2c, 0x8e93 }, { 0x8e2f, 0x8e91 },{ 0x8e51, 0x8ea1 },{ 0x8e52, 0x8e63 },{ 0x8e70, 0x8e95 }, { 0x8e7f, 0x8ea5 },{ 0x8e8f, 0x8eaa },{ 0x8e9c, 0x8ea6 },{ 0x8eaf, 0x8ec0 }, { 0x8f66, 0x8eca },{ 0x8f67, 0x8ecb },{ 0x8f68, 0x8ecc },{ 0x8f69, 0x8ed2 }, { 0x8f6b, 0x8ed4 },{ 0x8f6c, 0x8f49 },{ 0x8f6d, 0x8edb },{ 0x8f6e, 0x8f2a }, { 0x8f6f, 0x8edf },{ 0x8f70, 0x8f5f },{ 0x8f72, 0x8efb },{ 0x8f73, 0x8f64 }, { 0x8f74, 0x8ef8 },{ 0x8f75, 0x8ef9 },{ 0x8f76, 0x8efc },{ 0x8f78, 0x8eeb }, { 0x8f79, 0x8f62 },{ 0x8f7a, 0x8efa },{ 0x8f7b, 0x8f15 },{ 0x8f7c, 0x8efe }, { 0x8f7d, 0x8f09 },{ 0x8f7e, 0x8f0a },{ 0x8f7f, 0x8f4e },{ 0x8f81, 0x8f07 }, { 0x8f82, 0x8f05 },{ 0x8f83, 0x8f03 },{ 0x8f84, 0x8f12 },{ 0x8f85, 0x8f14 }, { 0x8f86, 0x8f1b },{ 0x8f87, 0x8f26 },{ 0x8f88, 0x8f29 },{ 0x8f89, 0x8f1d }, { 0x8f8a, 0x8f25 },{ 0x8f8b, 0x8f1e },{ 0x8f8d, 0x8f1f },{ 0x8f8e, 0x8f1c }, { 0x8f8f, 0x8f33 },{ 0x8f90, 0x8f3b },{ 0x8f91, 0x8f2f },{ 0x8f93, 0x8f38 }, { 0x8f94, 0x8f61 },{ 0x8f95, 0x8f45 },{ 0x8f96, 0x8f44 },{ 0x8f97, 0x8f3e }, { 0x8f98, 0x8f46 },{ 0x8f99, 0x8f4d },{ 0x8f9a, 0x8f54 },{ 0x8f9e, 0x8fad }, { 0x8f9f, 0x95e2 },{ 0x8fa9, 0x8faf },{ 0x8fab, 0x8fae },{ 0x8fb9, 0x908a }, { 0x8fbd, 0x907c },{ 0x8fbe, 0x9054 },{ 0x8fc1, 0x9077 },{ 0x8fc7, 0x904e }, { 0x8fc8, 0x9081 },{ 0x8fd0, 0x904b },{ 0x8fd8, 0x9084 },{ 0x8fd9, 0x9019 }, { 0x8fdb, 0x9032 },{ 0x8fdc, 0x9060 },{ 0x8fdd, 0x9055 },{ 0x8fde, 0x9023 }, { 0x8fdf, 0x9072 },{ 0x8fe9, 0x9087 },{ 0x8ff3, 0x9015 },{ 0x8ff9, 0x8e5f }, { 0x9002, 0x9069 },{ 0x9009, 0x9078 },{ 0x900a, 0x905c },{ 0x9012, 0x905e }, { 0x9026, 0x9090 },{ 0x903b, 0x908f },{ 0x9057, 0x907a },{ 0x9065, 0x9059 }, { 0x9093, 0x9127 },{ 0x909d, 0x913a },{ 0x90ac, 0x9114 },{ 0x90ae, 0x90f5 }, { 0x90b9, 0x9112 },{ 0x90ba, 0x9134 },{ 0x90bb, 0x9130 },{ 0x90c1, 0x9b31 }, { 0x90c4, 0x9699 },{ 0x90cf, 0x90df },{ 0x90d0, 0x9136 },{ 0x90d1, 0x912d }, { 0x90d3, 0x9106 },{ 0x90e6, 0x9148 },{ 0x90e7, 0x9116 },{ 0x90f8, 0x9132 }, { 0x915d, 0x919e },{ 0x9171, 0x91ac },{ 0x917d, 0x91c5 },{ 0x917e, 0x91c3 }, { 0x917f, 0x91c0 },{ 0x91c7, 0x63a1 },{ 0x91ca, 0x91cb },{ 0x91cc, 0x88e1 }, { 0x9274, 0x9451 },{ 0x92ae, 0x947e },{ 0x933e, 0x93e8 },{ 0x9485, 0x91d1 }, { 0x9486, 0x91d3 },{ 0x9487, 0x91d4 },{ 0x9488, 0x91dd },{ 0x9489, 0x91d8 }, { 0x948a, 0x91d7 },{ 0x948b, 0x91d9 },{ 0x948c, 0x91d5 },{ 0x948d, 0x91f7 }, { 0x948e, 0x91ec },{ 0x948f, 0x91e7 },{ 0x9490, 0x91e4 },{ 0x9492, 0x91e9 }, { 0x9493, 0x91e3 },{ 0x9494, 0x9346 },{ 0x9495, 0x91f9 },{ 0x9497, 0x91f5 }, { 0x9499, 0x9223 },{ 0x949b, 0x9226 },{ 0x949c, 0x9245 },{ 0x949d, 0x920d }, { 0x949e, 0x9214 },{ 0x949f, 0x9418 },{ 0x94a0, 0x9209 },{ 0x94a1, 0x92c7 }, { 0x94a2, 0x92fc },{ 0x94a3, 0x9211 },{ 0x94a4, 0x9210 },{ 0x94a5, 0x9470 }, { 0x94a6, 0x6b3d },{ 0x94a7, 0x921e },{ 0x94a8, 0x93a2 },{ 0x94a9, 0x9264 }, { 0x94aa, 0x9227 },{ 0x94ab, 0x9201 },{ 0x94ac, 0x9225 },{ 0x94ad, 0x9204 }, { 0x94ae, 0x9215 },{ 0x94af, 0x9200 },{ 0x94b0, 0x923a },{ 0x94b1, 0x9322 }, { 0x94b2, 0x9266 },{ 0x94b3, 0x9257 },{ 0x94b4, 0x9237 },{ 0x94b5, 0x7f3d }, { 0x94b6, 0x9233 },{ 0x94b8, 0x923d },{ 0x94b9, 0x9238 },{ 0x94ba, 0x925e }, { 0x94bb, 0x947d },{ 0x94bc, 0x926c },{ 0x94bd, 0x926d },{ 0x94be, 0x9240 }, { 0x94bf, 0x923f },{ 0x94c0, 0x923e },{ 0x94c1, 0x9435 },{ 0x94c2, 0x9251 }, { 0x94c3, 0x9234 },{ 0x94c4, 0x9460 },{ 0x94c5, 0x925b },{ 0x94c6, 0x925a }, { 0x94c8, 0x9230 },{ 0x94c9, 0x9249 },{ 0x94ca, 0x9248 },{ 0x94cb, 0x924d }, { 0x94cc, 0x922e },{ 0x94cd, 0x9239 },{ 0x94ce, 0x9438 },{ 0x94d0, 0x92ac }, { 0x94d1, 0x92a0 },{ 0x94d2, 0x927a },{ 0x94d5, 0x92aa },{ 0x94d6, 0x92ee }, { 0x94d7, 0x92cf },{ 0x94d9, 0x9403 },{ 0x94db, 0x943a },{ 0x94dc, 0x9285 }, { 0x94dd, 0x92c1 },{ 0x94df, 0x92a6 },{ 0x94e0, 0x93a7 },{ 0x94e1, 0x9358 }, { 0x94e2, 0x9296 },{ 0x94e3, 0x9291 },{ 0x94e4, 0x92cc },{ 0x94e5, 0x92a9 }, { 0x94e7, 0x93f5 },{ 0x94e8, 0x9293 },{ 0x94e9, 0x93a9 },{ 0x94ea, 0x927f }, { 0x94eb, 0x929a },{ 0x94ec, 0x927b },{ 0x94ed, 0x9298 },{ 0x94ee, 0x931a }, { 0x94ef, 0x92ab },{ 0x94f0, 0x9278 },{ 0x94f1, 0x92a5 },{ 0x94f2, 0x93df }, { 0x94f3, 0x9283 },{ 0x94f4, 0x940b },{ 0x94f5, 0x92a8 },{ 0x94f6, 0x9280 }, { 0x94f7, 0x92a3 },{ 0x94f8, 0x9444 },{ 0x94f9, 0x9412 },{ 0x94fa, 0x92ea }, { 0x94fc, 0x9338 },{ 0x94fd, 0x92f1 },{ 0x94fe, 0x93c8 },{ 0x94ff, 0x93d7 }, { 0x9500, 0x92b7 },{ 0x9501, 0x9396 },{ 0x9502, 0x92f0 },{ 0x9504, 0x92e4 }, { 0x9505, 0x934b },{ 0x9506, 0x92ef },{ 0x9507, 0x92e8 },{ 0x9508, 0x93fd }, { 0x9509, 0x92bc },{ 0x950a, 0x92dd },{ 0x950b, 0x92d2 },{ 0x950c, 0x92c5 }, { 0x9510, 0x92b3 },{ 0x9511, 0x92bb },{ 0x9512, 0x92c3 },{ 0x9513, 0x92df }, { 0x9514, 0x92e6 },{ 0x9515, 0x9312 },{ 0x9516, 0x9306 },{ 0x9517, 0x937a }, { 0x9519, 0x932f },{ 0x951a, 0x9328 },{ 0x951b, 0x931b },{ 0x951e, 0x9301 }, { 0x951f, 0x9315 },{ 0x9521, 0x932b },{ 0x9522, 0x932e },{ 0x9523, 0x947c }, { 0x9524, 0x939a },{ 0x9525, 0x9310 },{ 0x9526, 0x9326 },{ 0x9529, 0x9308 }, { 0x952c, 0x931f },{ 0x952d, 0x9320 },{ 0x952e, 0x9375 },{ 0x952f, 0x92f8 }, { 0x9530, 0x9333 },{ 0x9531, 0x9319 },{ 0x9532, 0x9365 },{ 0x9534, 0x9347 }, { 0x9535, 0x93d8 },{ 0x9536, 0x9376 },{ 0x9537, 0x9354 },{ 0x9538, 0x9364 }, { 0x9539, 0x936c },{ 0x953a, 0x937e },{ 0x953b, 0x935b },{ 0x953c, 0x93aa }, { 0x953e, 0x9370 },{ 0x9540, 0x934d },{ 0x9541, 0x9382 },{ 0x9542, 0x93e4 }, { 0x9544, 0x9428 },{ 0x9546, 0x93cc },{ 0x9547, 0x93ae },{ 0x9549, 0x9398 }, { 0x954a, 0x9477 },{ 0x954c, 0x942b },{ 0x954d, 0x93b3 },{ 0x954f, 0x93a6 }, { 0x9550, 0x93ac },{ 0x9551, 0x938a },{ 0x9552, 0x93b0 },{ 0x9553, 0x93b5 }, { 0x9554, 0x944c },{ 0x9556, 0x93e2 },{ 0x9557, 0x93dc },{ 0x9558, 0x93dd }, { 0x9559, 0x93cd },{ 0x955b, 0x93de },{ 0x955c, 0x93e1 },{ 0x955d, 0x93d1 }, { 0x955e, 0x93c3 },{ 0x955f, 0x93c7 },{ 0x9561, 0x9414 },{ 0x9563, 0x9410 }, { 0x9564, 0x93f7 },{ 0x9566, 0x9413 },{ 0x9567, 0x946d },{ 0x9568, 0x9420 }, { 0x956a, 0x93f9 },{ 0x956b, 0x9419 },{ 0x956c, 0x944a },{ 0x956d, 0x9433 }, { 0x956f, 0x9432 },{ 0x9570, 0x942e },{ 0x9571, 0x943f },{ 0x9573, 0x9463 }, { 0x9576, 0x9472 },{ 0x957f, 0x9577 },{ 0x95e8, 0x9580 },{ 0x95e9, 0x9582 }, { 0x95ea, 0x9583 },{ 0x95eb, 0x9586 },{ 0x95ed, 0x9589 },{ 0x95ee, 0x554f }, { 0x95ef, 0x95d6 },{ 0x95f0, 0x958f },{ 0x95f1, 0x95c8 },{ 0x95f2, 0x9592 }, { 0x95f3, 0x958e },{ 0x95f4, 0x9593 },{ 0x95f5, 0x9594 },{ 0x95f6, 0x958c }, { 0x95f7, 0x60b6 },{ 0x95f8, 0x9598 },{ 0x95f9, 0x9b27 },{ 0x95fa, 0x95a8 }, { 0x95fb, 0x805e },{ 0x95fc, 0x95e5 },{ 0x95fd, 0x95a9 },{ 0x95fe, 0x95ad }, { 0x9600, 0x95a5 },{ 0x9601, 0x95a3 },{ 0x9602, 0x95a1 },{ 0x9603, 0x95ab }, { 0x9604, 0x9b2e },{ 0x9605, 0x95b1 },{ 0x9606, 0x95ac },{ 0x9608, 0x95be }, { 0x9609, 0x95b9 },{ 0x960a, 0x95b6 },{ 0x960b, 0x9b29 },{ 0x960c, 0x95bf }, { 0x960d, 0x95bd },{ 0x960e, 0x95bb },{ 0x960f, 0x95bc },{ 0x9610, 0x95e1 }, { 0x9611, 0x95cc },{ 0x9612, 0x95c3 },{ 0x9614, 0x95ca },{ 0x9615, 0x95cb }, { 0x9616, 0x95d4 },{ 0x9617, 0x95d0 },{ 0x9619, 0x95d5 },{ 0x961a, 0x95de }, { 0x961d, 0x961c },{ 0x961f, 0x968a },{ 0x9633, 0x967d },{ 0x9634, 0x9670 }, { 0x9635, 0x9663 },{ 0x9636, 0x968e },{ 0x9645, 0x969b },{ 0x9646, 0x9678 }, { 0x9647, 0x96b4 },{ 0x9648, 0x9673 },{ 0x9649, 0x9658 },{ 0x9655, 0x965d }, { 0x9667, 0x9689 },{ 0x9668, 0x9695 },{ 0x9669, 0x96aa },{ 0x968f, 0x96a8 }, { 0x9690, 0x96b1 },{ 0x96b6, 0x96b8 },{ 0x96bd, 0x96cb },{ 0x96be, 0x96e3 }, { 0x96cf, 0x96db },{ 0x96e0, 0x8b8e },{ 0x96f3, 0x9742 },{ 0x96fe, 0x9727 }, { 0x9701, 0x973d },{ 0x972d, 0x9744 },{ 0x9753, 0x975a },{ 0x9759, 0x975c }, { 0x9765, 0x9768 },{ 0x9791, 0x97c3 },{ 0x9792, 0x6a47 },{ 0x97af, 0x97c9 }, { 0x97e6, 0x97cb },{ 0x97e7, 0x97cc },{ 0x97e9, 0x97d3 },{ 0x97ea, 0x97d9 }, { 0x97eb, 0x97de },{ 0x97ec, 0x97dc },{ 0x97f5, 0x97fb },{ 0x9875, 0x9801 }, { 0x9876, 0x9802 },{ 0x9877, 0x9803 },{ 0x9878, 0x9807 },{ 0x9879, 0x9805 }, { 0x987a, 0x9806 },{ 0x987b, 0x9808 },{ 0x987c, 0x980a },{ 0x987d, 0x9811 }, { 0x987e, 0x9867 },{ 0x987f, 0x9813 },{ 0x9880, 0x980e },{ 0x9881, 0x9812 }, { 0x9882, 0x980c },{ 0x9883, 0x980f },{ 0x9884, 0x9810 },{ 0x9885, 0x9871 }, { 0x9886, 0x9818 },{ 0x9887, 0x9817 },{ 0x9888, 0x9838 },{ 0x9889, 0x9821 }, { 0x988a, 0x9830 },{ 0x988c, 0x981c },{ 0x988d, 0x6f41 },{ 0x988f, 0x9826 }, { 0x9890, 0x9824 },{ 0x9891, 0x983b },{ 0x9893, 0x9839 },{ 0x9894, 0x9837 }, { 0x9896, 0x7a4e },{ 0x9897, 0x9846 },{ 0x9898, 0x984c },{ 0x989a, 0x984e }, { 0x989b, 0x9853 },{ 0x989c, 0x984f },{ 0x989d, 0x984d },{ 0x989e, 0x9873 }, { 0x989f, 0x9862 },{ 0x98a0, 0x985b },{ 0x98a1, 0x9859 },{ 0x98a2, 0x9865 }, { 0x98a4, 0x986b },{ 0x98a6, 0x9870 },{ 0x98a7, 0x9874 },{ 0x98ce, 0x98a8 }, { 0x98d1, 0x98ae },{ 0x98d2, 0x98af },{ 0x98d3, 0x98b6 },{ 0x98d5, 0x98bc }, { 0x98d8, 0x98c4 },{ 0x98d9, 0x98c6 },{ 0x98de, 0x98db },{ 0x98e8, 0x9957 }, { 0x990d, 0x995c },{ 0x9963, 0x98df },{ 0x9965, 0x98e2 },{ 0x9967, 0x9933 }, { 0x9968, 0x98e9 },{ 0x9969, 0x993c },{ 0x996a, 0x98ea },{ 0x996b, 0x98eb }, { 0x996c, 0x98ed },{ 0x996d, 0x98ef },{ 0x996e, 0x98f2 },{ 0x996f, 0x991e }, { 0x9970, 0x98fe },{ 0x9971, 0x98fd },{ 0x9972, 0x98fc },{ 0x9974, 0x98f4 }, { 0x9975, 0x990c },{ 0x9976, 0x9952 },{ 0x9977, 0x9909 },{ 0x997a, 0x9903 }, { 0x997c, 0x9905 },{ 0x997d, 0x9911 },{ 0x997f, 0x9913 },{ 0x9980, 0x9918 }, { 0x9981, 0x9912 },{ 0x9984, 0x991b },{ 0x9985, 0x9921 },{ 0x9986, 0x9928 }, { 0x9988, 0x994b },{ 0x998a, 0x993f },{ 0x998b, 0x995e },{ 0x998d, 0x7ce2 }, { 0x998f, 0x993e },{ 0x9990, 0x9948 },{ 0x9991, 0x9949 },{ 0x9992, 0x9945 }, { 0x9994, 0x994c },{ 0x9a6c, 0x99ac },{ 0x9a6d, 0x99ad },{ 0x9a6e, 0x99b1 }, { 0x9a6f, 0x99b4 },{ 0x9a70, 0x99b3 },{ 0x9a71, 0x9a45 },{ 0x9a73, 0x99c1 }, { 0x9a74, 0x9a62 },{ 0x9a75, 0x99d4 },{ 0x9a76, 0x99db },{ 0x9a77, 0x99df }, { 0x9a78, 0x99d9 },{ 0x9a79, 0x99d2 },{ 0x9a7a, 0x9a36 },{ 0x9a7b, 0x99d0 }, { 0x9a7c, 0x99dd },{ 0x9a7d, 0x99d1 },{ 0x9a7e, 0x99d5 },{ 0x9a7f, 0x9a5b }, { 0x9a80, 0x99d8 },{ 0x9a81, 0x9a4d },{ 0x9a82, 0x7f75 },{ 0x9a84, 0x9a55 }, { 0x9a85, 0x9a4a },{ 0x9a86, 0x99f1 },{ 0x9a87, 0x99ed },{ 0x9a88, 0x99e2 }, { 0x9a8a, 0x9a6a },{ 0x9a8b, 0x9a01 },{ 0x9a8c, 0x9a57 },{ 0x9a8f, 0x99ff }, { 0x9a90, 0x9a0f },{ 0x9a91, 0x9a0e },{ 0x9a92, 0x9a0d },{ 0x9a93, 0x9a05 }, { 0x9a96, 0x9a42 },{ 0x9a97, 0x9a19 },{ 0x9a98, 0x9a2d },{ 0x9a9a, 0x9a37 }, { 0x9a9b, 0x9a16 },{ 0x9a9c, 0x9a41 },{ 0x9a9d, 0x9a2e },{ 0x9a9e, 0x9a2b }, { 0x9a9f, 0x9a38 },{ 0x9aa0, 0x9a43 },{ 0x9aa1, 0x9a3e },{ 0x9aa2, 0x9a44 }, { 0x9aa3, 0x9a4f },{ 0x9aa4, 0x9a5f },{ 0x9aa5, 0x9a65 },{ 0x9aa7, 0x9a64 }, { 0x9ac5, 0x9acf },{ 0x9acb, 0x9ad6 },{ 0x9acc, 0x9ad5 },{ 0x9b13, 0x9b22 }, { 0x9b47, 0x9b58 },{ 0x9b49, 0x9b4e },{ 0x9c7c, 0x9b5a },{ 0x9c7f, 0x9b77 }, { 0x9c81, 0x9b6f },{ 0x9c82, 0x9b74 },{ 0x9c87, 0x9bf0 },{ 0x9c88, 0x9c78 }, { 0x9c8b, 0x9b92 },{ 0x9c8d, 0x9b91 },{ 0x9c8e, 0x9c5f },{ 0x9c90, 0x9b90 }, { 0x9c91, 0x9bad },{ 0x9c92, 0x9b9a },{ 0x9c94, 0x9baa },{ 0x9c95, 0x9b9e }, { 0x9c9a, 0x9c6d },{ 0x9c9b, 0x9bab },{ 0x9c9c, 0x9bae },{ 0x9c9e, 0x9bd7 }, { 0x9c9f, 0x9c58 },{ 0x9ca0, 0x9bc1 },{ 0x9ca1, 0x9c7a },{ 0x9ca2, 0x9c31 }, { 0x9ca3, 0x9c39 },{ 0x9ca4, 0x9bc9 },{ 0x9ca5, 0x9c23 },{ 0x9ca6, 0x9c37 }, { 0x9ca7, 0x9bc0 },{ 0x9ca8, 0x9bca },{ 0x9ca9, 0x9bc7 },{ 0x9cab, 0x9bfd }, { 0x9cad, 0x9bd6 },{ 0x9cae, 0x9bea },{ 0x9cb0, 0x9beb },{ 0x9cb1, 0x9be1 }, { 0x9cb2, 0x9be4 },{ 0x9cb3, 0x9be7 },{ 0x9cb5, 0x9be2 },{ 0x9cb6, 0x9bf0 }, { 0x9cb7, 0x9bdb },{ 0x9cb8, 0x9be8 },{ 0x9cbb, 0x9bd4 },{ 0x9cbd, 0x9c08 }, { 0x9cc3, 0x9c13 },{ 0x9cc4, 0x9c77 },{ 0x9cc5, 0x9c0d },{ 0x9cc6, 0x9c12 }, { 0x9cc7, 0x9c09 },{ 0x9ccc, 0x9c32 },{ 0x9ccd, 0x9c2d },{ 0x9cce, 0x9c28 }, { 0x9ccf, 0x9c25 },{ 0x9cd0, 0x9c29 },{ 0x9cd3, 0x9c33 },{ 0x9cd4, 0x9c3e }, { 0x9cd5, 0x9c48 },{ 0x9cd6, 0x9c49 },{ 0x9cd7, 0x9c3b },{ 0x9cdc, 0x9c56 }, { 0x9cdd, 0x9c54 },{ 0x9cde, 0x9c57 },{ 0x9cdf, 0x9c52 },{ 0x9ce2, 0x9c67 }, { 0x9e1f, 0x9ce5 },{ 0x9e20, 0x9ce9 },{ 0x9e21, 0x96de },{ 0x9e22, 0x9cf6 }, { 0x9e23, 0x9cf4 },{ 0x9e25, 0x9dd7 },{ 0x9e26, 0x9d09 },{ 0x9e28, 0x9d07 }, { 0x9e29, 0x9d06 },{ 0x9e2a, 0x9d23 },{ 0x9e2b, 0x9d87 },{ 0x9e2c, 0x9e15 }, { 0x9e2d, 0x9d28 },{ 0x9e2f, 0x9d26 },{ 0x9e31, 0x9d1f },{ 0x9e32, 0x9d1d }, { 0x9e33, 0x9d1b },{ 0x9e35, 0x9d15 },{ 0x9e36, 0x9de5 },{ 0x9e37, 0x9dd9 }, { 0x9e38, 0x9d2f },{ 0x9e39, 0x9d30 },{ 0x9e3a, 0x9d42 },{ 0x9e3d, 0x9d3f }, { 0x9e3e, 0x9e1e },{ 0x9e3f, 0x9d3b },{ 0x9e41, 0x9d53 },{ 0x9e42, 0x9e1d }, { 0x9e43, 0x9d51 },{ 0x9e44, 0x9d60 },{ 0x9e45, 0x9d5d },{ 0x9e46, 0x9d52 }, { 0x9e47, 0x9df4 },{ 0x9e48, 0x9d5c },{ 0x9e49, 0x9d61 },{ 0x9e4a, 0x9d72 }, { 0x9e4c, 0x9d6a },{ 0x9e4e, 0x9d6f },{ 0x9e4f, 0x9d6c },{ 0x9e51, 0x9d89 }, { 0x9e55, 0x9d98 },{ 0x9e57, 0x9d9a },{ 0x9e58, 0x9dbb },{ 0x9e5a, 0x9dbf }, { 0x9e5c, 0x9da9 },{ 0x9e5e, 0x9dc2 },{ 0x9e63, 0x9dbc },{ 0x9e64, 0x9db4 }, { 0x9e66, 0x9e1a },{ 0x9e67, 0x9dd3 },{ 0x9e68, 0x9dda },{ 0x9e69, 0x9def }, { 0x9e6a, 0x9de6 },{ 0x9e6b, 0x9df2 },{ 0x9e6c, 0x9df8 },{ 0x9e6d, 0x9dfa }, { 0x9e70, 0x9df9 },{ 0x9e73, 0x9e1b },{ 0x9e7e, 0x9e7a },{ 0x9ea6, 0x9ea5 }, { 0x9eb8, 0x9ea9 },{ 0x9ebd, 0x9ebc },{ 0x9ec4, 0x9ec3 },{ 0x9ec9, 0x9ecc }, { 0x9ee9, 0x9ef7 },{ 0x9eea, 0x9ef2 },{ 0x9efe, 0x9efd },{ 0x9f0b, 0x9eff }, { 0x9f0d, 0x9f09 },{ 0x9f39, 0x9f34 },{ 0x9f50, 0x9f4a },{ 0x9f51, 0x9f4f }, { 0x9f7f, 0x9f52 },{ 0x9f80, 0x9f54 },{ 0x9f83, 0x9f5f },{ 0x9f84, 0x9f61 }, { 0x9f85, 0x9f59 },{ 0x9f86, 0x9f60 },{ 0x9f87, 0x9f5c },{ 0x9f88, 0x9f66 }, { 0x9f89, 0x9f6c },{ 0x9f8a, 0x9f6a },{ 0x9f8b, 0x9f72 },{ 0x9f8c, 0x9f77 }, { 0x9f99, 0x9f8d },{ 0x9f9a, 0x9f94 },{ 0x9f9b, 0x9f95 },{ 0x9f9f, 0x9f9c }, { 0xff02, 0x301e },{ 0xff3b, 0xfe5d },{ 0xff3d, 0xfe5e },{ 0xff40, 0x2035 }, { 0, 0 } }; static UShortPair __tc_to_sc_table [] = { { 0x00af, 0x02c9 },{ 0x00b7, 0x30fb },{ 0x03a0, 0x220f },{ 0x03a3, 0x2211 }, { 0x2025, 0x00a8 },{ 0x2027, 0x30fb },{ 0x2035, 0xff40 },{ 0x2225, 0x2016 }, { 0x2252, 0x2248 },{ 0x2266, 0x2264 },{ 0x2267, 0x2265 },{ 0x2500, 0x2015 }, { 0x2571, 0xff0f },{ 0x2572, 0xff3c },{ 0x2574, 0xff3f },{ 0x301d, 0xff02 }, { 0x301e, 0x2033 },{ 0x4e1f, 0x4e22 },{ 0x4e26, 0x5e76 },{ 0x4e3c, 0x4e95 }, { 0x4e7e, 0x5e72 },{ 0x4e82, 0x4e71 },{ 0x4e99, 0x4e98 },{ 0x4e9e, 0x4e9a }, { 0x4f15, 0x592b },{ 0x4f47, 0x4f2b },{ 0x4f48, 0x5e03 },{ 0x4f54, 0x5360 }, { 0x4f6a, 0x5f8a },{ 0x4f75, 0x5e76 },{ 0x4f86, 0x6765 },{ 0x4f96, 0x4ed1 }, { 0x4f9a, 0x5f87 },{ 0x4fb6, 0x4fa3 },{ 0x4fb7, 0x5c40 },{ 0x4fc1, 0x4fe3 }, { 0x4fc2, 0x7cfb },{ 0x4fe0, 0x4fa0 },{ 0x5000, 0x4f25 },{ 0x5006, 0x4fe9 }, { 0x5009, 0x4ed3 },{ 0x500b, 0x4e2a },{ 0x5011, 0x4eec },{ 0x5016, 0x5e78 }, { 0x5023, 0x4eff },{ 0x502b, 0x4f26 },{ 0x5049, 0x4f1f },{ 0x506a, 0x903c }, { 0x5074, 0x4fa7 },{ 0x5075, 0x4fa6 },{ 0x507a, 0x54b1 },{ 0x507d, 0x4f2a }, { 0x5091, 0x6770 },{ 0x5096, 0x4f27 },{ 0x5098, 0x4f1e },{ 0x5099, 0x5907 }, { 0x509a, 0x6548 },{ 0x50a2, 0x5bb6 },{ 0x50ad, 0x4f63 },{ 0x50af, 0x506c }, { 0x50b3, 0x4f20 },{ 0x50b4, 0x4f1b },{ 0x50b5, 0x503a },{ 0x50b7, 0x4f24 }, { 0x50be, 0x503e },{ 0x50c2, 0x507b },{ 0x50c5, 0x4ec5 },{ 0x50c9, 0x4f65 }, { 0x50ca, 0x4ed9 },{ 0x50d1, 0x4fa8 },{ 0x50d5, 0x4ec6 },{ 0x50e3, 0x50ed }, { 0x50e5, 0x4fa5 },{ 0x50e8, 0x507e },{ 0x50f1, 0x96c7 },{ 0x50f9, 0x4ef7 }, { 0x5100, 0x4eea },{ 0x5102, 0x4fac },{ 0x5104, 0x4ebf },{ 0x5105, 0x5f53 }, { 0x5108, 0x4fa9 },{ 0x5109, 0x4fed },{ 0x5110, 0x50a7 },{ 0x5114, 0x4fe6 }, { 0x5115, 0x4faa },{ 0x5118, 0x5c3d },{ 0x511f, 0x507f },{ 0x512a, 0x4f18 }, { 0x5132, 0x50a8 },{ 0x5137, 0x4fea },{ 0x5138, 0x7f57 },{ 0x513a, 0x50a9 }, { 0x513b, 0x50a5 },{ 0x513c, 0x4fe8 },{ 0x5147, 0x51f6 },{ 0x514c, 0x5151 }, { 0x5152, 0x513f },{ 0x5157, 0x5156 },{ 0x5167, 0x5185 },{ 0x5169, 0x4e24 }, { 0x518a, 0x518c },{ 0x5191, 0x80c4 },{ 0x51aa, 0x5e42 },{ 0x51c5, 0x6db8 }, { 0x51c8, 0x51c0 },{ 0x51cd, 0x51bb },{ 0x51dc, 0x51db },{ 0x51f1, 0x51ef }, { 0x5225, 0x522b },{ 0x522a, 0x5220 },{ 0x5244, 0x522d },{ 0x5247, 0x5219 }, { 0x5249, 0x9509 },{ 0x524b, 0x514b },{ 0x524e, 0x5239 },{ 0x525b, 0x521a }, { 0x525d, 0x5265 },{ 0x526e, 0x5250 },{ 0x5274, 0x5240 },{ 0x5275, 0x521b }, { 0x5277, 0x94f2 },{ 0x5283, 0x5212 },{ 0x5284, 0x672d },{ 0x5287, 0x5267 }, { 0x5289, 0x5218 },{ 0x528a, 0x523d },{ 0x528c, 0x523f },{ 0x528d, 0x5251 }, { 0x5291, 0x5242 },{ 0x52bb, 0x5321 },{ 0x52c1, 0x52b2 },{ 0x52d5, 0x52a8 }, { 0x52d7, 0x52d6 },{ 0x52d9, 0x52a1 },{ 0x52db, 0x52cb },{ 0x52dd, 0x80dc }, { 0x52de, 0x52b3 },{ 0x52e2, 0x52bf },{ 0x52e3, 0x7ee9 },{ 0x52e6, 0x527f }, { 0x52f1, 0x52a2 },{ 0x52f3, 0x52cb },{ 0x52f5, 0x52b1 },{ 0x52f8, 0x529d }, { 0x52fb, 0x5300 },{ 0x530b, 0x9676 },{ 0x532d, 0x5326 },{ 0x532f, 0x6c47 }, { 0x5331, 0x532e },{ 0x5340, 0x533a },{ 0x5344, 0x5eff },{ 0x5354, 0x534f }, { 0x536c, 0x6602 },{ 0x5379, 0x6064 },{ 0x537b, 0x5374 },{ 0x5399, 0x538d }, { 0x53ad, 0x538c },{ 0x53b2, 0x5389 },{ 0x53b4, 0x53a3 },{ 0x53c3, 0x53c2 }, { 0x53e1, 0x777f },{ 0x53e2, 0x4e1b },{ 0x540b, 0x5bf8 },{ 0x5433, 0x5434 }, { 0x5436, 0x5450 },{ 0x5442, 0x5415 },{ 0x544e, 0x5c3a },{ 0x54b7, 0x5555 }, { 0x54bc, 0x5459 },{ 0x54e1, 0x5458 },{ 0x5504, 0x5457 },{ 0x5538, 0x5ff5 }, { 0x554f, 0x95ee },{ 0x5557, 0x5556 },{ 0x555e, 0x54d1 },{ 0x555f, 0x542f }, { 0x5563, 0x8854 },{ 0x559a, 0x5524 },{ 0x55aa, 0x4e27 },{ 0x55ab, 0x5403 }, { 0x55ac, 0x4e54 },{ 0x55ae, 0x5355 },{ 0x55b2, 0x54df },{ 0x55c6, 0x545b }, { 0x55c7, 0x556c },{ 0x55ce, 0x5417 },{ 0x55da, 0x545c },{ 0x55e9, 0x5522 }, { 0x55f6, 0x54d4 },{ 0x5606, 0x53f9 },{ 0x560d, 0x55bd },{ 0x5614, 0x5455 }, { 0x5616, 0x5567 },{ 0x5617, 0x5c1d },{ 0x561c, 0x551b },{ 0x5629, 0x54d7 }, { 0x562e, 0x5520 },{ 0x562f, 0x5578 },{ 0x5630, 0x53fd },{ 0x5635, 0x54d3 }, { 0x5638, 0x5452 },{ 0x5641, 0x6076 },{ 0x5653, 0x5618 },{ 0x5660, 0x54d2 }, { 0x5665, 0x54dd },{ 0x5666, 0x54d5 },{ 0x566f, 0x55f3 },{ 0x5672, 0x54d9 }, { 0x5674, 0x55b7 },{ 0x5678, 0x5428 },{ 0x5679, 0x5f53 },{ 0x5680, 0x549b }, { 0x5687, 0x5413 },{ 0x568c, 0x54dc },{ 0x5690, 0x5c1d },{ 0x5695, 0x565c }, { 0x5699, 0x556e },{ 0x56a5, 0x54bd },{ 0x56a6, 0x5456 },{ 0x56a8, 0x5499 }, { 0x56ae, 0x5411 },{ 0x56b3, 0x55be },{ 0x56b4, 0x4e25 },{ 0x56b6, 0x5624 }, { 0x56c0, 0x556d },{ 0x56c1, 0x55eb },{ 0x56c2, 0x56a3 },{ 0x56c5, 0x5181 }, { 0x56c8, 0x5453 },{ 0x56c9, 0x7f57 },{ 0x56cc, 0x82cf },{ 0x56d1, 0x5631 }, { 0x56d3, 0x556e },{ 0x56ea, 0x56f1 },{ 0x5707, 0x56f5 },{ 0x570b, 0x56fd }, { 0x570d, 0x56f4 },{ 0x5712, 0x56ed },{ 0x5713, 0x5706 },{ 0x5716, 0x56fe }, { 0x5718, 0x56e2 },{ 0x5775, 0x4e18 },{ 0x57dc, 0x91ce },{ 0x57e1, 0x57ad }, { 0x57f7, 0x6267 },{ 0x57fc, 0x5d0e },{ 0x5805, 0x575a },{ 0x580a, 0x57a9 }, { 0x581d, 0x57da },{ 0x582f, 0x5c27 },{ 0x5831, 0x62a5 },{ 0x5834, 0x573a }, { 0x583f, 0x78b1 },{ 0x584a, 0x5757 },{ 0x584b, 0x8314 },{ 0x584f, 0x57b2 }, { 0x5852, 0x57d8 },{ 0x5857, 0x6d82 },{ 0x585a, 0x51a2 },{ 0x5862, 0x575e }, { 0x5864, 0x57d9 },{ 0x5875, 0x5c18 },{ 0x5879, 0x5811 },{ 0x588a, 0x57ab }, { 0x5891, 0x5892 },{ 0x589c, 0x5760 },{ 0x58ab, 0x6a3d },{ 0x58ae, 0x5815 }, { 0x58b3, 0x575f },{ 0x58bb, 0x5899 },{ 0x58be, 0x57a6 },{ 0x58c7, 0x575b }, { 0x58ce, 0x57d9 },{ 0x58d3, 0x538b },{ 0x58d8, 0x5792 },{ 0x58d9, 0x5739 }, { 0x58da, 0x5786 },{ 0x58de, 0x574f },{ 0x58df, 0x5784 },{ 0x58e2, 0x575c }, { 0x58e9, 0x575d },{ 0x58ef, 0x58ee },{ 0x58fa, 0x58f6 },{ 0x58fd, 0x5bff }, { 0x5920, 0x591f },{ 0x5922, 0x68a6 },{ 0x5925, 0x4f19 },{ 0x593e, 0x5939 }, { 0x5950, 0x5942 },{ 0x5967, 0x5965 },{ 0x5969, 0x5941 },{ 0x596a, 0x593a }, { 0x596e, 0x594b },{ 0x599d, 0x5986 },{ 0x59b3, 0x4f60 },{ 0x59cd, 0x59d7 }, { 0x59e6, 0x5978 },{ 0x59ea, 0x4f84 },{ 0x5a1b, 0x5a31 },{ 0x5a41, 0x5a04 }, { 0x5a66, 0x5987 },{ 0x5a6c, 0x6deb },{ 0x5a6d, 0x5a05 },{ 0x5aa7, 0x5a32 }, { 0x5aae, 0x5077 },{ 0x5aaf, 0x59ab },{ 0x5abc, 0x5aaa },{ 0x5abd, 0x5988 }, { 0x5abf, 0x6127 },{ 0x5acb, 0x8885 },{ 0x5ad7, 0x59aa },{ 0x5af5, 0x59a9 }, { 0x5afb, 0x5a34 },{ 0x5b08, 0x5a06 },{ 0x5b0b, 0x5a75 },{ 0x5b0c, 0x5a07 }, { 0x5b19, 0x5af1 },{ 0x5b1d, 0x8885 },{ 0x5b21, 0x5ad2 },{ 0x5b24, 0x5b37 }, { 0x5b2a, 0x5ad4 },{ 0x5b2d, 0x5976 },{ 0x5b30, 0x5a74 },{ 0x5b38, 0x5a76 }, { 0x5b43, 0x5a18 },{ 0x5b4c, 0x5a08 },{ 0x5b6b, 0x5b59 },{ 0x5b78, 0x5b66 }, { 0x5b7f, 0x5b6a },{ 0x5bae, 0x5bab },{ 0x5bd8, 0x7f6e },{ 0x5be2, 0x5bdd }, { 0x5be6, 0x5b9e },{ 0x5be7, 0x5b81 },{ 0x5be9, 0x5ba1 },{ 0x5beb, 0x5199 }, { 0x5bec, 0x5bbd },{ 0x5bf5, 0x5ba0 },{ 0x5bf6, 0x5b9d },{ 0x5c07, 0x5c06 }, { 0x5c08, 0x4e13 },{ 0x5c0b, 0x5bfb },{ 0x5c0d, 0x5bf9 },{ 0x5c0e, 0x5bfc }, { 0x5c37, 0x5c34 },{ 0x5c46, 0x5c4a },{ 0x5c4d, 0x5c38 },{ 0x5c5c, 0x5c49 }, { 0x5c5d, 0x6249 },{ 0x5c62, 0x5c61 },{ 0x5c64, 0x5c42 },{ 0x5c68, 0x5c66 }, { 0x5c6c, 0x5c5e },{ 0x5ca1, 0x5188 },{ 0x5cf4, 0x5c98 },{ 0x5cf6, 0x5c9b }, { 0x5cfd, 0x5ce1 },{ 0x5d0d, 0x5d03 },{ 0x5d11, 0x6606 },{ 0x5d17, 0x5c97 }, { 0x5d19, 0x4ed1 },{ 0x5d20, 0x5cbd },{ 0x5d22, 0x5ce5 },{ 0x5d33, 0x5d5b }, { 0x5d50, 0x5c9a },{ 0x5d52, 0x5ca9 },{ 0x5d81, 0x5d5d },{ 0x5d84, 0x5d2d }, { 0x5d87, 0x5c96 },{ 0x5d97, 0x5d02 },{ 0x5da0, 0x5ce4 },{ 0x5da7, 0x5cc4 }, { 0x5db8, 0x5d58 },{ 0x5dba, 0x5cad },{ 0x5dbc, 0x5c7f },{ 0x5dbd, 0x5cb3 }, { 0x5dcb, 0x5cbf },{ 0x5dd2, 0x5ce6 },{ 0x5dd4, 0x5dc5 },{ 0x5dd6, 0x5ca9 }, { 0x5df0, 0x5def },{ 0x5df9, 0x537a },{ 0x5e25, 0x5e05 },{ 0x5e2b, 0x5e08 }, { 0x5e33, 0x5e10 },{ 0x5e36, 0x5e26 },{ 0x5e40, 0x5e27 },{ 0x5e43, 0x5e0f }, { 0x5e57, 0x5e3c },{ 0x5e58, 0x5e3b },{ 0x5e5f, 0x5e1c },{ 0x5e63, 0x5e01 }, { 0x5e6b, 0x5e2e },{ 0x5e6c, 0x5e31 },{ 0x5e75, 0x5f00 },{ 0x5e79, 0x5e72 }, { 0x5e7e, 0x51e0 },{ 0x5e82, 0x4ec4 },{ 0x5eab, 0x5e93 },{ 0x5ec1, 0x5395 }, { 0x5ec2, 0x53a2 },{ 0x5ec4, 0x53a9 },{ 0x5ec8, 0x53a6 },{ 0x5eda, 0x53a8 }, { 0x5edd, 0x53ae },{ 0x5edf, 0x5e99 },{ 0x5ee0, 0x5382 },{ 0x5ee1, 0x5e91 }, { 0x5ee2, 0x5e9f },{ 0x5ee3, 0x5e7f },{ 0x5ee9, 0x5eea },{ 0x5eec, 0x5e90 }, { 0x5ef1, 0x75c8 },{ 0x5ef3, 0x5385 },{ 0x5f12, 0x5f11 },{ 0x5f14, 0x540a }, { 0x5f33, 0x5f2a },{ 0x5f35, 0x5f20 },{ 0x5f37, 0x5f3a },{ 0x5f46, 0x522b }, { 0x5f48, 0x5f39 },{ 0x5f4a, 0x5f3a },{ 0x5f4c, 0x5f25 },{ 0x5f4e, 0x5f2f }, { 0x5f59, 0x6c47 },{ 0x5f65, 0x5f66 },{ 0x5f6b, 0x96d5 },{ 0x5f7f, 0x4f5b }, { 0x5f8c, 0x540e },{ 0x5f91, 0x5f84 },{ 0x5f9e, 0x4ece },{ 0x5fa0, 0x5f95 }, { 0x5fa9, 0x590d },{ 0x5fac, 0x65c1 },{ 0x5fb9, 0x5f7b },{ 0x6046, 0x6052 }, { 0x6065, 0x803b },{ 0x6085, 0x60a6 },{ 0x60b5, 0x6005 },{ 0x60b6, 0x95f7 }, { 0x60bd, 0x51c4 },{ 0x60c7, 0x6566 },{ 0x60e1, 0x6076 },{ 0x60f1, 0x607c }, { 0x60f2, 0x607d },{ 0x60f7, 0x8822 },{ 0x60fb, 0x607b },{ 0x611b, 0x7231 }, { 0x611c, 0x60ec },{ 0x6128, 0x60ab },{ 0x6134, 0x6006 },{ 0x6137, 0x607a }, { 0x613e, 0x5ffe },{ 0x6144, 0x6817 },{ 0x6147, 0x6bb7 },{ 0x614b, 0x6001 }, { 0x614d, 0x6120 },{ 0x6158, 0x60e8 },{ 0x615a, 0x60ed },{ 0x615f, 0x6078 }, { 0x6163, 0x60ef },{ 0x616a, 0x6004 },{ 0x616b, 0x6002 },{ 0x616e, 0x8651 }, { 0x6173, 0x60ad },{ 0x6176, 0x5e86 },{ 0x617c, 0x621a },{ 0x617e, 0x6b32 }, { 0x6182, 0x5fe7 },{ 0x618a, 0x60eb },{ 0x6190, 0x601c },{ 0x6191, 0x51ed }, { 0x6192, 0x6126 },{ 0x619a, 0x60ee },{ 0x61a4, 0x6124 },{ 0x61ab, 0x60af }, { 0x61ae, 0x6003 },{ 0x61b2, 0x5baa },{ 0x61b6, 0x5fc6 },{ 0x61c3, 0x52e4 }, { 0x61c7, 0x6073 },{ 0x61c9, 0x5e94 },{ 0x61cc, 0x603f },{ 0x61cd, 0x61d4 }, { 0x61de, 0x8499 },{ 0x61df, 0x603c },{ 0x61e3, 0x61d1 },{ 0x61e8, 0x6079 }, { 0x61f2, 0x60e9 },{ 0x61f6, 0x61d2 },{ 0x61f7, 0x6000 },{ 0x61f8, 0x60ac }, { 0x61fa, 0x5fcf },{ 0x61fc, 0x60e7 },{ 0x61fe, 0x6151 },{ 0x6200, 0x604b }, { 0x6207, 0x6206 },{ 0x6209, 0x94ba },{ 0x6214, 0x620b },{ 0x6227, 0x6217 }, { 0x6229, 0x622c },{ 0x6230, 0x6218 },{ 0x6232, 0x620f },{ 0x6236, 0x6237 }, { 0x6250, 0x4ec2 },{ 0x625e, 0x634d },{ 0x6271, 0x63d2 },{ 0x627a, 0x62b5 }, { 0x6283, 0x62da },{ 0x6294, 0x62b1 },{ 0x62b4, 0x66f3 },{ 0x62cb, 0x629b }, { 0x62d1, 0x94b3 },{ 0x630c, 0x683c },{ 0x6336, 0x5c40 },{ 0x633e, 0x631f }, { 0x6368, 0x820d },{ 0x636b, 0x626a },{ 0x6372, 0x5377 },{ 0x6383, 0x626b }, { 0x6384, 0x62a1 },{ 0x6399, 0x6323 },{ 0x639b, 0x6302 },{ 0x63a1, 0x91c7 }, { 0x63c0, 0x62e3 },{ 0x63da, 0x626c },{ 0x63db, 0x6362 },{ 0x63ee, 0x6325 }, { 0x63f9, 0x80cc },{ 0x6406, 0x6784 },{ 0x640d, 0x635f },{ 0x6416, 0x6447 }, { 0x6417, 0x6363 },{ 0x641f, 0x64c0 },{ 0x6425, 0x6376 },{ 0x6428, 0x6253 }, { 0x642f, 0x638f },{ 0x6436, 0x62a2 },{ 0x643e, 0x69a8 },{ 0x6440, 0x6342 }, { 0x6443, 0x625b },{ 0x6451, 0x63b4 },{ 0x645c, 0x63bc },{ 0x645f, 0x6402 }, { 0x646f, 0x631a },{ 0x6473, 0x62a0 },{ 0x6476, 0x629f },{ 0x647b, 0x63ba }, { 0x6488, 0x635e },{ 0x6490, 0x6491 },{ 0x6493, 0x6320 },{ 0x649a, 0x637b }, { 0x649f, 0x6322 },{ 0x64a2, 0x63b8 },{ 0x64a3, 0x63b8 },{ 0x64a5, 0x62e8 }, { 0x64a6, 0x626f },{ 0x64ab, 0x629a },{ 0x64b2, 0x6251 },{ 0x64b3, 0x63ff }, { 0x64bb, 0x631e },{ 0x64be, 0x631d },{ 0x64bf, 0x6361 },{ 0x64c1, 0x62e5 }, { 0x64c4, 0x63b3 },{ 0x64c7, 0x62e9 },{ 0x64ca, 0x51fb },{ 0x64cb, 0x6321 }, { 0x64d4, 0x62c5 },{ 0x64da, 0x636e },{ 0x64e0, 0x6324 },{ 0x64e3, 0x6363 }, { 0x64ec, 0x62df },{ 0x64ef, 0x6448 },{ 0x64f0, 0x62e7 },{ 0x64f1, 0x6401 }, { 0x64f2, 0x63b7 },{ 0x64f4, 0x6269 },{ 0x64f7, 0x64b7 },{ 0x64fa, 0x6446 }, { 0x64fb, 0x64de },{ 0x64fc, 0x64b8 },{ 0x64fe, 0x6270 },{ 0x6504, 0x6445 }, { 0x6506, 0x64b5 },{ 0x650f, 0x62e2 },{ 0x6514, 0x62e6 },{ 0x6516, 0x6484 }, { 0x6519, 0x6400 },{ 0x651b, 0x64ba },{ 0x651c, 0x643a },{ 0x651d, 0x6444 }, { 0x6522, 0x6512 },{ 0x6523, 0x631b },{ 0x6524, 0x644a },{ 0x652a, 0x6405 }, { 0x652c, 0x63fd },{ 0x6537, 0x8003 },{ 0x6557, 0x8d25 },{ 0x6558, 0x53d9 }, { 0x6575, 0x654c },{ 0x6578, 0x6570 },{ 0x6582, 0x655b },{ 0x6583, 0x6bd9 }, { 0x6595, 0x6593 },{ 0x65ac, 0x65a9 },{ 0x65b7, 0x65ad },{ 0x65c2, 0x65d7 }, { 0x65db, 0x5e61 },{ 0x6607, 0x5347 },{ 0x6642, 0x65f6 },{ 0x6649, 0x664b }, { 0x665d, 0x663c },{ 0x665e, 0x66e6 },{ 0x6662, 0x6670 },{ 0x667b, 0x6697 }, { 0x6688, 0x6655 },{ 0x6689, 0x6656 },{ 0x6698, 0x9633 },{ 0x66a2, 0x7545 }, { 0x66ab, 0x6682 },{ 0x66b1, 0x6635 },{ 0x66b8, 0x4e86 },{ 0x66c4, 0x6654 }, { 0x66c6, 0x5386 },{ 0x66c7, 0x6619 },{ 0x66c9, 0x6653 },{ 0x66cf, 0x5411 }, { 0x66d6, 0x66a7 },{ 0x66e0, 0x65f7 },{ 0x66ec, 0x6652 },{ 0x66f8, 0x4e66 }, { 0x6703, 0x4f1a },{ 0x6722, 0x671b },{ 0x6727, 0x80e7 },{ 0x672e, 0x672f }, { 0x6747, 0x572c },{ 0x6771, 0x4e1c },{ 0x67b4, 0x62d0 },{ 0x67f5, 0x6805 }, { 0x67fa, 0x62d0 },{ 0x6812, 0x65ec },{ 0x686e, 0x676f },{ 0x687f, 0x6746 }, { 0x6894, 0x6800 },{ 0x689d, 0x6761 },{ 0x689f, 0x67ad },{ 0x68b1, 0x6346 }, { 0x68c4, 0x5f03 },{ 0x68d6, 0x67a8 },{ 0x68d7, 0x67a3 },{ 0x68df, 0x680b }, { 0x68e7, 0x6808 },{ 0x68f2, 0x6816 },{ 0x690f, 0x6860 },{ 0x6944, 0x533e }, { 0x694a, 0x6768 },{ 0x6953, 0x67ab },{ 0x6959, 0x8302 },{ 0x695c, 0x80e1 }, { 0x6968, 0x6862 },{ 0x696d, 0x4e1a },{ 0x6975, 0x6781 },{ 0x69a6, 0x5e72 }, { 0x69aa, 0x6769 },{ 0x69ae, 0x8363 },{ 0x69bf, 0x6864 },{ 0x69c3, 0x76d8 }, { 0x69cb, 0x6784 },{ 0x69cd, 0x67aa },{ 0x69d3, 0x6760 },{ 0x69e7, 0x6920 }, { 0x69e8, 0x6901 },{ 0x69f3, 0x6868 },{ 0x6a01, 0x6869 },{ 0x6a02, 0x4e50 }, { 0x6a05, 0x679e },{ 0x6a11, 0x6881 },{ 0x6a13, 0x697c },{ 0x6a19, 0x6807 }, { 0x6a1e, 0x67a2 },{ 0x6a23, 0x6837 },{ 0x6a38, 0x6734 },{ 0x6a39, 0x6811 }, { 0x6a3a, 0x6866 },{ 0x6a48, 0x6861 },{ 0x6a4b, 0x6865 },{ 0x6a5f, 0x673a }, { 0x6a62, 0x692d },{ 0x6a66, 0x5e62 },{ 0x6a6b, 0x6a2a },{ 0x6a81, 0x6aa9 }, { 0x6a89, 0x67fd },{ 0x6a94, 0x6863 },{ 0x6a9c, 0x6867 },{ 0x6aa2, 0x68c0 }, { 0x6aa3, 0x6a2f },{ 0x6aaf, 0x53f0 },{ 0x6ab3, 0x69df },{ 0x6ab8, 0x67e0 }, { 0x6abb, 0x69db },{ 0x6ac2, 0x68f9 },{ 0x6ac3, 0x67dc },{ 0x6ad0, 0x7d2f }, { 0x6ad3, 0x6a79 },{ 0x6ada, 0x6988 },{ 0x6adb, 0x6809 },{ 0x6add, 0x691f }, { 0x6ade, 0x6a7c },{ 0x6adf, 0x680e },{ 0x6ae5, 0x6a71 },{ 0x6ae7, 0x69e0 }, { 0x6ae8, 0x680c },{ 0x6aea, 0x67a5 },{ 0x6aeb, 0x6a65 },{ 0x6aec, 0x6987 }, { 0x6af3, 0x680a },{ 0x6af8, 0x6989 },{ 0x6afa, 0x68c2 },{ 0x6afb, 0x6a31 }, { 0x6b04, 0x680f },{ 0x6b0a, 0x6743 },{ 0x6b0f, 0x6924 },{ 0x6b12, 0x683e }, { 0x6b16, 0x6984 },{ 0x6b1e, 0x68c2 },{ 0x6b38, 0x5509 },{ 0x6b3d, 0x94a6 }, { 0x6b4e, 0x53f9 },{ 0x6b50, 0x6b27 },{ 0x6b5f, 0x6b24 },{ 0x6b61, 0x6b22 }, { 0x6b72, 0x5c81 },{ 0x6b77, 0x5386 },{ 0x6b78, 0x5f52 },{ 0x6b7f, 0x6b81 }, { 0x6b80, 0x592d },{ 0x6b98, 0x6b8b },{ 0x6b9e, 0x6b92 },{ 0x6ba4, 0x6b87 }, { 0x6bab, 0x6b9a },{ 0x6bad, 0x50f5 },{ 0x6bae, 0x6b93 },{ 0x6baf, 0x6ba1 }, { 0x6bb2, 0x6b7c },{ 0x6bba, 0x6740 },{ 0x6bbc, 0x58f3 },{ 0x6bbd, 0x80b4 }, { 0x6bc0, 0x6bc1 },{ 0x6bc6, 0x6bb4 },{ 0x6bcc, 0x6bcb },{ 0x6bd8, 0x6bd7 }, { 0x6bec, 0x7403 },{ 0x6bff, 0x6bf5 },{ 0x6c08, 0x6be1 },{ 0x6c0c, 0x6c07 }, { 0x6c23, 0x6c14 },{ 0x6c2b, 0x6c22 },{ 0x6c2c, 0x6c29 },{ 0x6c33, 0x6c32 }, { 0x6c3e, 0x6cdb },{ 0x6c46, 0x6c3d },{ 0x6c4d, 0x4e38 },{ 0x6c4e, 0x6cdb }, { 0x6c59, 0x6c61 },{ 0x6c7a, 0x51b3 },{ 0x6c8d, 0x51b1 },{ 0x6c92, 0x6ca1 }, { 0x6c96, 0x51b2 },{ 0x6cc1, 0x51b5 },{ 0x6cdd, 0x6eaf },{ 0x6d1f, 0x6d95 }, { 0x6d29, 0x6cc4 },{ 0x6d36, 0x6c79 },{ 0x6d6c, 0x91cc },{ 0x6d79, 0x6d43 }, { 0x6d87, 0x6cfe },{ 0x6dbc, 0x51c9 },{ 0x6dd2, 0x51c4 },{ 0x6dda, 0x6cea }, { 0x6de5, 0x6e0c },{ 0x6de8, 0x51c0 },{ 0x6dea, 0x6ca6 },{ 0x6df5, 0x6e0a }, { 0x6df6, 0x6d9e },{ 0x6dfa, 0x6d45 },{ 0x6e19, 0x6da3 },{ 0x6e1b, 0x51cf }, { 0x6e26, 0x6da1 },{ 0x6e2c, 0x6d4b },{ 0x6e3e, 0x6d51 },{ 0x6e4a, 0x51d1 }, { 0x6e5e, 0x6d48 },{ 0x6e63, 0x95f5 },{ 0x6e67, 0x6d8c },{ 0x6e6f, 0x6c64 }, { 0x6e88, 0x6ca9 },{ 0x6e96, 0x51c6 },{ 0x6e9d, 0x6c9f },{ 0x6eab, 0x6e29 }, { 0x6ebc, 0x6e7f },{ 0x6ec4, 0x6ca7 },{ 0x6ec5, 0x706d },{ 0x6ecc, 0x6da4 }, { 0x6ece, 0x8365 },{ 0x6eec, 0x6caa },{ 0x6eef, 0x6ede },{ 0x6ef2, 0x6e17 }, { 0x6ef7, 0x5364 },{ 0x6ef8, 0x6d52 },{ 0x6efe, 0x6eda },{ 0x6eff, 0x6ee1 }, { 0x6f01, 0x6e14 },{ 0x6f1a, 0x6ca4 },{ 0x6f22, 0x6c49 },{ 0x6f23, 0x6d9f }, { 0x6f2c, 0x6e0d },{ 0x6f32, 0x6da8 },{ 0x6f35, 0x6e86 },{ 0x6f38, 0x6e10 }, { 0x6f3f, 0x6d46 },{ 0x6f41, 0x988d },{ 0x6f51, 0x6cfc },{ 0x6f54, 0x6d01 }, { 0x6f5b, 0x6f5c },{ 0x6f5f, 0x8204 },{ 0x6f64, 0x6da6 },{ 0x6f6f, 0x6d54 }, { 0x6f70, 0x6e83 },{ 0x6f77, 0x6ed7 },{ 0x6f7f, 0x6da0 },{ 0x6f80, 0x6da9 }, { 0x6f82, 0x6f84 },{ 0x6f86, 0x6d47 },{ 0x6f87, 0x6d9d },{ 0x6f94, 0x6d69 }, { 0x6f97, 0x6da7 },{ 0x6fa0, 0x6e11 },{ 0x6fa4, 0x6cfd },{ 0x6fa9, 0x6cf6 }, { 0x6fae, 0x6d4d },{ 0x6fb1, 0x6dc0 },{ 0x6fc1, 0x6d4a },{ 0x6fc3, 0x6d53 }, { 0x6fd5, 0x6e7f },{ 0x6fd8, 0x6cde },{ 0x6fdb, 0x8499 },{ 0x6fdf, 0x6d4e }, { 0x6fe4, 0x6d9b },{ 0x6feb, 0x6ee5 },{ 0x6fec, 0x6d5a },{ 0x6ff0, 0x6f4d }, { 0x6ff1, 0x6ee8 },{ 0x6ffa, 0x6e85 },{ 0x6ffc, 0x6cfa },{ 0x6ffe, 0x6ee4 }, { 0x7001, 0x6f3e },{ 0x7005, 0x6ee2 },{ 0x7006, 0x6e0e },{ 0x7009, 0x6cfb }, { 0x700b, 0x6c88 },{ 0x700f, 0x6d4f },{ 0x7015, 0x6fd2 },{ 0x7018, 0x6cf8 }, { 0x701d, 0x6ca5 },{ 0x701f, 0x6f47 },{ 0x7020, 0x6f46 },{ 0x7026, 0x6f74 }, { 0x7027, 0x6cf7 },{ 0x7028, 0x6fd1 },{ 0x7030, 0x5f25 },{ 0x7032, 0x6f4b }, { 0x703e, 0x6f9c },{ 0x7043, 0x6ca3 },{ 0x7044, 0x6ee0 },{ 0x7051, 0x6d12 }, { 0x7055, 0x6f13 },{ 0x7058, 0x6ee9 },{ 0x705d, 0x704f },{ 0x7063, 0x6e7e }, { 0x7064, 0x6ee6 },{ 0x7069, 0x6edf },{ 0x707d, 0x707e },{ 0x70a4, 0x7167 }, { 0x70b0, 0x70ae },{ 0x70ba, 0x4e3a },{ 0x70cf, 0x4e4c },{ 0x70f4, 0x70c3 }, { 0x7121, 0x65e0 },{ 0x7149, 0x70bc },{ 0x7152, 0x709c },{ 0x7156, 0x6696 }, { 0x7159, 0x70df },{ 0x7162, 0x8315 },{ 0x7165, 0x7115 },{ 0x7169, 0x70e6 }, { 0x716c, 0x7080 },{ 0x7192, 0x8367 },{ 0x7197, 0x709d },{ 0x71b1, 0x70ed }, { 0x71be, 0x70bd },{ 0x71c1, 0x70e8 },{ 0x71c4, 0x7130 },{ 0x71c8, 0x706f }, { 0x71c9, 0x7096 },{ 0x71d0, 0x78f7 },{ 0x71d2, 0x70e7 },{ 0x71d9, 0x70eb }, { 0x71dc, 0x7116 },{ 0x71df, 0x8425 },{ 0x71e6, 0x707f },{ 0x71ec, 0x6bc1 }, { 0x71ed, 0x70db },{ 0x71f4, 0x70e9 },{ 0x71fb, 0x718f },{ 0x71fc, 0x70ec }, { 0x71fe, 0x7118 },{ 0x71ff, 0x8000 },{ 0x720d, 0x70c1 },{ 0x7210, 0x7089 }, { 0x721b, 0x70c2 },{ 0x722d, 0x4e89 },{ 0x723a, 0x7237 },{ 0x723e, 0x5c14 }, { 0x7246, 0x5899 },{ 0x7258, 0x724d },{ 0x7260, 0x5b83 },{ 0x7274, 0x62b5 }, { 0x727d, 0x7275 },{ 0x7296, 0x8366 },{ 0x729b, 0x7266 },{ 0x72a2, 0x728a }, { 0x72a7, 0x727a },{ 0x72c0, 0x72b6 },{ 0x72da, 0x65e6 },{ 0x72f9, 0x72ed }, { 0x72fd, 0x72c8 },{ 0x7319, 0x72f0 },{ 0x7336, 0x72b9 },{ 0x733b, 0x72f2 }, { 0x7343, 0x5446 },{ 0x7344, 0x72f1 },{ 0x7345, 0x72ee },{ 0x734e, 0x5956 }, { 0x7368, 0x72ec },{ 0x736a, 0x72ef },{ 0x736b, 0x7303 },{ 0x7370, 0x72de }, { 0x7372, 0x83b7 },{ 0x7375, 0x730e },{ 0x7377, 0x72b7 },{ 0x7378, 0x517d }, { 0x737a, 0x736d },{ 0x737b, 0x732e },{ 0x737c, 0x7315 },{ 0x7380, 0x7321 }, { 0x7385, 0x5999 },{ 0x7386, 0x5179 },{ 0x73a8, 0x73cf },{ 0x73ea, 0x572d }, { 0x73ee, 0x4f69 },{ 0x73fe, 0x73b0 },{ 0x7431, 0x96d5 },{ 0x743a, 0x73d0 }, { 0x743f, 0x73f2 },{ 0x744b, 0x73ae },{ 0x7463, 0x7410 },{ 0x7464, 0x7476 }, { 0x7469, 0x83b9 },{ 0x746a, 0x739b },{ 0x746f, 0x7405 },{ 0x7489, 0x740f }, { 0x74a3, 0x7391 },{ 0x74a6, 0x7477 },{ 0x74b0, 0x73af },{ 0x74bd, 0x73ba }, { 0x74bf, 0x7487 },{ 0x74ca, 0x743c },{ 0x74cf, 0x73d1 },{ 0x74d4, 0x748e }, { 0x74d6, 0x9576 },{ 0x74da, 0x74d2 },{ 0x750c, 0x74ef },{ 0x7515, 0x74ee }, { 0x7522, 0x4ea7 },{ 0x7526, 0x82cf },{ 0x752a, 0x89d2 },{ 0x752f, 0x5b81 }, { 0x755d, 0x4ea9 },{ 0x7562, 0x6bd5 },{ 0x756b, 0x753b },{ 0x756c, 0x7572 }, { 0x7570, 0x5f02 },{ 0x7576, 0x5f53 },{ 0x7587, 0x7574 },{ 0x758a, 0x53e0 }, { 0x75bf, 0x75f1 },{ 0x75d9, 0x75c9 },{ 0x75e0, 0x9178 },{ 0x75f2, 0x9ebb }, { 0x75f3, 0x9ebb },{ 0x75fa, 0x75f9 },{ 0x75fe, 0x75b4 },{ 0x7609, 0x6108 }, { 0x760b, 0x75af },{ 0x760d, 0x75a1 },{ 0x7613, 0x75ea },{ 0x761e, 0x7617 }, { 0x7621, 0x75ae },{ 0x7627, 0x759f },{ 0x763a, 0x7618 },{ 0x7642, 0x7597 }, { 0x7646, 0x75e8 },{ 0x7647, 0x75eb },{ 0x7649, 0x7605 },{ 0x7652, 0x6108 }, { 0x7658, 0x75a0 },{ 0x765f, 0x762a },{ 0x7661, 0x75f4 },{ 0x7662, 0x75d2 }, { 0x7664, 0x7596 },{ 0x7665, 0x75c7 },{ 0x7669, 0x765e },{ 0x766c, 0x7663 }, { 0x766d, 0x763f },{ 0x766e, 0x763e },{ 0x7670, 0x75c8 },{ 0x7671, 0x762b }, { 0x7672, 0x766b },{ 0x767c, 0x53d1 },{ 0x7681, 0x7682 },{ 0x769a, 0x7691 }, { 0x76b0, 0x75b1 },{ 0x76b8, 0x76b2 },{ 0x76ba, 0x76b1 },{ 0x76c3, 0x676f }, { 0x76dc, 0x76d7 },{ 0x76de, 0x76cf },{ 0x76e1, 0x5c3d },{ 0x76e3, 0x76d1 }, { 0x76e4, 0x76d8 },{ 0x76e7, 0x5362 },{ 0x76ea, 0x8361 },{ 0x7725, 0x7726 }, { 0x773e, 0x4f17 },{ 0x774f, 0x56f0 },{ 0x775c, 0x7741 },{ 0x775e, 0x7750 }, { 0x776a, 0x777e },{ 0x7787, 0x772f },{ 0x779e, 0x7792 },{ 0x77ad, 0x4e86 }, { 0x77bc, 0x7751 },{ 0x77c7, 0x8499 },{ 0x77d3, 0x80e7 },{ 0x77da, 0x77a9 }, { 0x77ef, 0x77eb },{ 0x7832, 0x70ae },{ 0x7843, 0x6731 },{ 0x7864, 0x7856 }, { 0x7868, 0x7817 },{ 0x786f, 0x781a },{ 0x7881, 0x68cb },{ 0x7895, 0x5d0e }, { 0x78a9, 0x7855 },{ 0x78aa, 0x7827 },{ 0x78ad, 0x7800 },{ 0x78ba, 0x786e }, { 0x78bc, 0x7801 },{ 0x78da, 0x7816 },{ 0x78e3, 0x789c },{ 0x78e7, 0x789b }, { 0x78ef, 0x77f6 },{ 0x78fd, 0x7857 },{ 0x790e, 0x7840 },{ 0x7919, 0x788d }, { 0x7921, 0x7934 },{ 0x7926, 0x77ff },{ 0x792a, 0x783a },{ 0x792b, 0x783e }, { 0x792c, 0x77fe },{ 0x7931, 0x783b },{ 0x7942, 0x4ed6 },{ 0x7945, 0x7946 }, { 0x7947, 0x53ea },{ 0x7950, 0x4f51 },{ 0x7955, 0x79d8 },{ 0x797c, 0x88f8 }, { 0x797f, 0x7984 },{ 0x798d, 0x7978 },{ 0x798e, 0x796f },{ 0x79a6, 0x5fa1 }, { 0x79aa, 0x7985 },{ 0x79ae, 0x793c },{ 0x79b0, 0x7962 },{ 0x79b1, 0x7977 }, { 0x79bf, 0x79c3 },{ 0x79c8, 0x7c7c },{ 0x79cf, 0x8017 },{ 0x7a05, 0x7a0e }, { 0x7a08, 0x79c6 },{ 0x7a1c, 0x68f1 },{ 0x7a1f, 0x7980 },{ 0x7a28, 0x6241 }, { 0x7a2e, 0x79cd },{ 0x7a31, 0x79f0 },{ 0x7a40, 0x8c37 },{ 0x7a4c, 0x7a23 }, { 0x7a4d, 0x79ef },{ 0x7a4e, 0x9896 },{ 0x7a61, 0x7a51 },{ 0x7a62, 0x79fd }, { 0x7a68, 0x9893 },{ 0x7a69, 0x7a33 },{ 0x7a6b, 0x83b7 },{ 0x7aa9, 0x7a9d }, { 0x7aaa, 0x6d3c },{ 0x7aae, 0x7a77 },{ 0x7aaf, 0x7a91 },{ 0x7ab6, 0x7aad }, { 0x7aba, 0x7aa5 },{ 0x7ac4, 0x7a9c },{ 0x7ac5, 0x7a8d },{ 0x7ac7, 0x7aa6 }, { 0x7aca, 0x7a83 },{ 0x7af6, 0x7ade },{ 0x7b3b, 0x7b47 },{ 0x7b46, 0x7b14 }, { 0x7b4d, 0x7b0b },{ 0x7b67, 0x7b15 },{ 0x7b74, 0x7b56 },{ 0x7b84, 0x7b85 }, { 0x7b87, 0x4e2a },{ 0x7b8b, 0x7b3a },{ 0x7b8f, 0x7b5d },{ 0x7ba0, 0x68f0 }, { 0x7bc0, 0x8282 },{ 0x7bc4, 0x8303 },{ 0x7bc9, 0x7b51 },{ 0x7bcb, 0x7ba7 }, { 0x7bdb, 0x7bac },{ 0x7be0, 0x7b71 },{ 0x7be4, 0x7b03 },{ 0x7be9, 0x7b5b }, { 0x7bf2, 0x5f57 },{ 0x7bf3, 0x7b5a },{ 0x7c00, 0x7ba6 },{ 0x7c0d, 0x7bd3 }, { 0x7c11, 0x84d1 },{ 0x7c1e, 0x7baa },{ 0x7c21, 0x7b80 },{ 0x7c23, 0x7bd1 }, { 0x7c2b, 0x7bab },{ 0x7c37, 0x6a90 },{ 0x7c3d, 0x7b7e },{ 0x7c3e, 0x5e18 }, { 0x7c43, 0x7bee },{ 0x7c4c, 0x7b79 },{ 0x7c50, 0x85e4 },{ 0x7c5c, 0x7ba8 }, { 0x7c5f, 0x7c41 },{ 0x7c60, 0x7b3c },{ 0x7c64, 0x7b7e },{ 0x7c65, 0x9fa0 }, { 0x7c69, 0x7b3e },{ 0x7c6a, 0x7c16 },{ 0x7c6c, 0x7bf1 },{ 0x7c6e, 0x7ba9 }, { 0x7c72, 0x5401 },{ 0x7ca7, 0x5986 },{ 0x7cb5, 0x7ca4 },{ 0x7cdd, 0x7cc1 }, { 0x7cde, 0x7caa },{ 0x7ce2, 0x998d },{ 0x7ce7, 0x7cae },{ 0x7cf0, 0x56e2 }, { 0x7cf2, 0x7c9d },{ 0x7cf4, 0x7c74 },{ 0x7cf6, 0x7c9c },{ 0x7cfe, 0x7ea0 }, { 0x7d00, 0x7eaa },{ 0x7d02, 0x7ea3 },{ 0x7d04, 0x7ea6 },{ 0x7d05, 0x7ea2 }, { 0x7d06, 0x7ea1 },{ 0x7d07, 0x7ea5 },{ 0x7d08, 0x7ea8 },{ 0x7d09, 0x7eab }, { 0x7d0b, 0x7eb9 },{ 0x7d0d, 0x7eb3 },{ 0x7d10, 0x7ebd },{ 0x7d13, 0x7ebe }, { 0x7d14, 0x7eaf },{ 0x7d15, 0x7eb0 },{ 0x7d17, 0x7eb1 },{ 0x7d19, 0x7eb8 }, { 0x7d1a, 0x7ea7 },{ 0x7d1b, 0x7eb7 },{ 0x7d1c, 0x7ead },{ 0x7d21, 0x7eba }, { 0x7d2e, 0x624e },{ 0x7d30, 0x7ec6 },{ 0x7d31, 0x7ec2 },{ 0x7d32, 0x7ec1 }, { 0x7d33, 0x7ec5 },{ 0x7d39, 0x7ecd },{ 0x7d3a, 0x7ec0 },{ 0x7d3c, 0x7ecb }, { 0x7d3f, 0x7ed0 },{ 0x7d40, 0x7ecc },{ 0x7d42, 0x7ec8 },{ 0x7d43, 0x5f26 }, { 0x7d44, 0x7ec4 },{ 0x7d46, 0x7eca },{ 0x7d4e, 0x7ed7 },{ 0x7d50, 0x7ed3 }, { 0x7d55, 0x7edd },{ 0x7d5b, 0x7ee6 },{ 0x7d5e, 0x7ede },{ 0x7d61, 0x7edc }, { 0x7d62, 0x7eda },{ 0x7d66, 0x7ed9 },{ 0x7d68, 0x7ed2 },{ 0x7d71, 0x7edf }, { 0x7d72, 0x4e1d },{ 0x7d73, 0x7edb },{ 0x7d79, 0x7ee2 },{ 0x7d81, 0x7ed1 }, { 0x7d83, 0x7ee1 },{ 0x7d86, 0x7ee0 },{ 0x7d88, 0x7ee8 },{ 0x7d8f, 0x7ee5 }, { 0x7d91, 0x6346 },{ 0x7d93, 0x7ecf },{ 0x7d9c, 0x7efc },{ 0x7d9e, 0x7f0d }, { 0x7da0, 0x7eff },{ 0x7da2, 0x7ef8 },{ 0x7da3, 0x7efb },{ 0x7dac, 0x7ef6 }, { 0x7dad, 0x7ef4 },{ 0x7db0, 0x7efe },{ 0x7db1, 0x7eb2 },{ 0x7db2, 0x7f51 }, { 0x7db4, 0x7f00 },{ 0x7db5, 0x5f69 },{ 0x7db8, 0x7eb6 },{ 0x7db9, 0x7efa }, { 0x7dba, 0x7eee },{ 0x7dbb, 0x7efd },{ 0x7dbd, 0x7ef0 },{ 0x7dbe, 0x7eeb }, { 0x7dbf, 0x7ef5 },{ 0x7dc4, 0x7ef2 },{ 0x7dc7, 0x7f01 },{ 0x7dca, 0x7d27 }, { 0x7dcb, 0x7eef },{ 0x7dd2, 0x7eea },{ 0x7dd7, 0x7f03 },{ 0x7dd8, 0x7f04 }, { 0x7dd9, 0x7f02 },{ 0x7dda, 0x7ebf },{ 0x7ddd, 0x7f09 },{ 0x7dde, 0x7f0e }, { 0x7de0, 0x7f14 },{ 0x7de1, 0x7f17 },{ 0x7de3, 0x7f18 },{ 0x7de6, 0x7f0c }, { 0x7de8, 0x7f16 },{ 0x7de9, 0x7f13 },{ 0x7dec, 0x7f05 },{ 0x7def, 0x7eac }, { 0x7df1, 0x7f11 },{ 0x7df2, 0x7f08 },{ 0x7df4, 0x7ec3 },{ 0x7df6, 0x7f0f }, { 0x7df9, 0x7f07 },{ 0x7dfb, 0x81f4 },{ 0x7e08, 0x8426 },{ 0x7e09, 0x7f19 }, { 0x7e0a, 0x7f22 },{ 0x7e0b, 0x7f12 },{ 0x7e10, 0x7ec9 },{ 0x7e11, 0x7f23 }, { 0x7e1a, 0x7ee6 },{ 0x7e1b, 0x7f1a },{ 0x7e1d, 0x7f1c },{ 0x7e1e, 0x7f1f }, { 0x7e1f, 0x7f1b },{ 0x7e23, 0x53bf },{ 0x7e2b, 0x7f1d },{ 0x7e2d, 0x7f21 }, { 0x7e2e, 0x7f29 },{ 0x7e2f, 0x6f14 },{ 0x7e31, 0x7eb5 },{ 0x7e32, 0x7f27 }, { 0x7e33, 0x7f1a },{ 0x7e34, 0x7ea4 },{ 0x7e35, 0x7f26 },{ 0x7e36, 0x7d77 }, { 0x7e37, 0x7f15 },{ 0x7e39, 0x7f25 },{ 0x7e3d, 0x603b },{ 0x7e3e, 0x7ee9 }, { 0x7e43, 0x7ef7 },{ 0x7e45, 0x7f2b },{ 0x7e46, 0x7f2a },{ 0x7e48, 0x8941 }, { 0x7e52, 0x7f2f },{ 0x7e54, 0x7ec7 },{ 0x7e55, 0x7f2e },{ 0x7e59, 0x7ffb }, { 0x7e5a, 0x7f2d },{ 0x7e5e, 0x7ed5 },{ 0x7e61, 0x7ee3 },{ 0x7e62, 0x7f0b }, { 0x7e69, 0x7ef3 },{ 0x7e6a, 0x7ed8 },{ 0x7e6b, 0x7cfb },{ 0x7e6d, 0x8327 }, { 0x7e6f, 0x7f33 },{ 0x7e70, 0x7f32 },{ 0x7e73, 0x7f34 },{ 0x7e79, 0x7ece }, { 0x7e7c, 0x7ee7 },{ 0x7e7d, 0x7f24 },{ 0x7e7e, 0x7f31 },{ 0x7e88, 0x7f2c }, { 0x7e8a, 0x7ea9 },{ 0x7e8c, 0x7eed },{ 0x7e8d, 0x7d2f },{ 0x7e8f, 0x7f20 }, { 0x7e93, 0x7f28 },{ 0x7e94, 0x624d },{ 0x7e96, 0x7ea4 },{ 0x7e98, 0x7f35 }, { 0x7e9c, 0x7f06 },{ 0x7f3d, 0x94b5 },{ 0x7f3e, 0x74f6 },{ 0x7f48, 0x575b }, { 0x7f4c, 0x7f42 },{ 0x7f66, 0x7f58 },{ 0x7f70, 0x7f5a },{ 0x7f75, 0x9a82 }, { 0x7f77, 0x7f62 },{ 0x7f85, 0x7f57 },{ 0x7f86, 0x7f74 },{ 0x7f88, 0x7f81 }, { 0x7f8b, 0x8288 },{ 0x7fa5, 0x7f9f },{ 0x7fa8, 0x7fa1 },{ 0x7fa9, 0x4e49 }, { 0x7fb6, 0x81bb },{ 0x7fd2, 0x4e60 },{ 0x7ff9, 0x7fd8 },{ 0x8011, 0x7aef }, { 0x8021, 0x52a9 },{ 0x8024, 0x85c9 },{ 0x802c, 0x8027 },{ 0x8056, 0x5723 }, { 0x805e, 0x95fb },{ 0x806f, 0x8054 },{ 0x8070, 0x806a },{ 0x8072, 0x58f0 }, { 0x8073, 0x8038 },{ 0x8075, 0x8069 },{ 0x8076, 0x8042 },{ 0x8077, 0x804c }, { 0x8079, 0x804d },{ 0x807d, 0x542c },{ 0x807e, 0x804b },{ 0x8085, 0x8083 }, { 0x808f, 0x64cd },{ 0x8090, 0x80f3 },{ 0x80c7, 0x80ba },{ 0x80ca, 0x6710 }, { 0x8105, 0x80c1 },{ 0x8108, 0x8109 },{ 0x811b, 0x80eb },{ 0x8123, 0x5507 }, { 0x8129, 0x4fee },{ 0x812b, 0x8131 },{ 0x8139, 0x80c0 },{ 0x814e, 0x80be }, { 0x8161, 0x8136 },{ 0x8166, 0x8111 },{ 0x816b, 0x80bf },{ 0x8173, 0x811a }, { 0x8178, 0x80a0 },{ 0x8183, 0x817d },{ 0x8186, 0x55c9 },{ 0x819a, 0x80a4 }, { 0x81a0, 0x80f6 },{ 0x81a9, 0x817b },{ 0x81bd, 0x80c6 },{ 0x81be, 0x810d }, { 0x81bf, 0x8113 },{ 0x81c9, 0x8138 },{ 0x81cd, 0x8110 },{ 0x81cf, 0x8191 }, { 0x81d5, 0x8198 },{ 0x81d8, 0x814a },{ 0x81d9, 0x80ed },{ 0x81da, 0x80ea }, { 0x81df, 0x810f },{ 0x81e0, 0x8114 },{ 0x81e5, 0x5367 },{ 0x81e8, 0x4e34 }, { 0x81fa, 0x53f0 },{ 0x8207, 0x4e0e },{ 0x8208, 0x5174 },{ 0x8209, 0x4e3e }, { 0x820a, 0x65e7 },{ 0x820b, 0x8845 },{ 0x8216, 0x94fa },{ 0x8259, 0x8231 }, { 0x8263, 0x6a79 },{ 0x8264, 0x8223 },{ 0x8266, 0x8230 },{ 0x826b, 0x823b }, { 0x8271, 0x8270 },{ 0x8277, 0x8273 },{ 0x8278, 0x8279 },{ 0x82bb, 0x520d }, { 0x82e7, 0x82ce },{ 0x82fa, 0x8393 },{ 0x830d, 0x82df },{ 0x8332, 0x5179 }, { 0x8345, 0x7b54 },{ 0x834a, 0x8346 },{ 0x8373, 0x8c46 },{ 0x838a, 0x5e84 }, { 0x8396, 0x830e },{ 0x83a2, 0x835a },{ 0x83a7, 0x82cb },{ 0x83eb, 0x5807 }, { 0x83ef, 0x534e },{ 0x83f4, 0x5eb5 },{ 0x8407, 0x82cc },{ 0x840a, 0x83b1 }, { 0x842c, 0x4e07 },{ 0x8435, 0x83b4 },{ 0x8449, 0x53f6 },{ 0x8452, 0x836d }, { 0x8466, 0x82c7 },{ 0x846f, 0x836f },{ 0x8477, 0x8364 },{ 0x8490, 0x641c }, { 0x8494, 0x83b3 },{ 0x849e, 0x8385 },{ 0x84bc, 0x82cd },{ 0x84c0, 0x836a }, { 0x84c6, 0x5e2d },{ 0x84cb, 0x76d6 },{ 0x84ee, 0x83b2 },{ 0x84ef, 0x82c1 }, { 0x84f4, 0x83bc },{ 0x84fd, 0x835c },{ 0x8506, 0x83f1 },{ 0x8514, 0x535c }, { 0x851e, 0x848c },{ 0x8523, 0x848b },{ 0x8525, 0x8471 },{ 0x8526, 0x8311 }, { 0x852d, 0x836b },{ 0x8541, 0x8368 },{ 0x8546, 0x8487 },{ 0x854e, 0x835e }, { 0x8553, 0x82b8 },{ 0x8555, 0x83b8 },{ 0x8558, 0x835b },{ 0x8562, 0x8489 }, { 0x8569, 0x8361 },{ 0x856a, 0x829c },{ 0x856d, 0x8427 },{ 0x8577, 0x84e3 }, { 0x8588, 0x835f },{ 0x858a, 0x84df },{ 0x858c, 0x8297 },{ 0x8591, 0x59dc }, { 0x8594, 0x8537 },{ 0x8599, 0x5243 },{ 0x859f, 0x83b6 },{ 0x85a6, 0x8350 }, { 0x85a9, 0x8428 },{ 0x85ba, 0x8360 },{ 0x85cd, 0x84dd },{ 0x85ce, 0x8369 }, { 0x85da, 0x836c },{ 0x85dd, 0x827a },{ 0x85e5, 0x836f },{ 0x85ea, 0x85ae }, { 0x85f6, 0x82c8 },{ 0x85f7, 0x85af },{ 0x85f9, 0x853c },{ 0x85fa, 0x853a }, { 0x8604, 0x8572 },{ 0x8606, 0x82a6 },{ 0x8607, 0x82cf },{ 0x860a, 0x8574 }, { 0x860b, 0x82f9 },{ 0x8617, 0x8616 },{ 0x861a, 0x85d3 },{ 0x861e, 0x8539 }, { 0x8622, 0x830f },{ 0x862d, 0x5170 },{ 0x863a, 0x84e0 },{ 0x863f, 0x841d }, { 0x8655, 0x5904 },{ 0x8656, 0x547c },{ 0x865b, 0x865a },{ 0x865c, 0x864f }, { 0x865f, 0x53f7 },{ 0x8667, 0x4e8f },{ 0x866f, 0x866c },{ 0x86fa, 0x86f1 }, { 0x86fb, 0x8715 },{ 0x8706, 0x86ac },{ 0x873a, 0x9713 },{ 0x8755, 0x8680 }, { 0x875f, 0x732c },{ 0x8766, 0x867e },{ 0x8768, 0x8671 },{ 0x8778, 0x8717 }, { 0x8784, 0x86f3 },{ 0x879e, 0x8682 },{ 0x87a2, 0x8424 },{ 0x87bb, 0x877c }, { 0x87c4, 0x86f0 },{ 0x87c8, 0x8748 },{ 0x87e3, 0x866e },{ 0x87ec, 0x8749 }, { 0x87ef, 0x86f2 },{ 0x87f2, 0x866b },{ 0x87f6, 0x86cf },{ 0x87fa, 0x87ee }, { 0x87fb, 0x8681 },{ 0x8805, 0x8747 },{ 0x8806, 0x867f },{ 0x880d, 0x874e }, { 0x8810, 0x86f4 },{ 0x8811, 0x877e },{ 0x8814, 0x869d },{ 0x881f, 0x8721 }, { 0x8823, 0x86ce },{ 0x8831, 0x86ca },{ 0x8836, 0x8695 },{ 0x8837, 0x883c }, { 0x883b, 0x86ee },{ 0x884a, 0x8511 },{ 0x8852, 0x70ab },{ 0x8853, 0x672f }, { 0x885a, 0x80e1 },{ 0x885b, 0x536b },{ 0x885d, 0x51b2 },{ 0x8879, 0x53ea }, { 0x889e, 0x886e },{ 0x88aa, 0x795b },{ 0x88ca, 0x8885 },{ 0x88cf, 0x91cc }, { 0x88dc, 0x8865 },{ 0x88dd, 0x88c5 },{ 0x88e1, 0x91cc },{ 0x88fd, 0x5236 }, { 0x8907, 0x590d },{ 0x890e, 0x8896 },{ 0x8932, 0x88e4 },{ 0x8933, 0x88e2 }, { 0x8938, 0x891b },{ 0x893b, 0x4eb5 },{ 0x8949, 0x88e5 },{ 0x8956, 0x8884 }, { 0x895d, 0x88e3 },{ 0x8960, 0x88c6 },{ 0x8964, 0x8934 },{ 0x896a, 0x889c }, { 0x896c, 0x6446 },{ 0x896f, 0x886c },{ 0x8972, 0x88ad },{ 0x897e, 0x897f }, { 0x8988, 0x6838 },{ 0x898b, 0x89c1 },{ 0x898f, 0x89c4 },{ 0x8993, 0x89c5 }, { 0x8996, 0x89c6 },{ 0x8998, 0x89c7 },{ 0x899c, 0x773a },{ 0x89a1, 0x89cb }, { 0x89a6, 0x89ce },{ 0x89aa, 0x4eb2 },{ 0x89ac, 0x89ca },{ 0x89af, 0x89cf }, { 0x89b2, 0x89d0 },{ 0x89b7, 0x89d1 },{ 0x89ba, 0x89c9 },{ 0x89bd, 0x89c8 }, { 0x89bf, 0x89cc },{ 0x89c0, 0x89c2 },{ 0x89d4, 0x7b4b },{ 0x89dd, 0x62b5 }, { 0x89f4, 0x89de },{ 0x89f6, 0x89ef },{ 0x89f8, 0x89e6 },{ 0x8a02, 0x8ba2 }, { 0x8a03, 0x8ba3 },{ 0x8a08, 0x8ba1 },{ 0x8a0a, 0x8baf },{ 0x8a0c, 0x8ba7 }, { 0x8a0e, 0x8ba8 },{ 0x8a10, 0x8ba6 },{ 0x8a13, 0x8bad },{ 0x8a15, 0x8baa }, { 0x8a16, 0x8bab },{ 0x8a17, 0x6258 },{ 0x8a18, 0x8bb0 },{ 0x8a1b, 0x8bb9 }, { 0x8a1d, 0x8bb6 },{ 0x8a1f, 0x8bbc },{ 0x8a22, 0x6b23 },{ 0x8a23, 0x8bc0 }, { 0x8a25, 0x8bb7 },{ 0x8a2a, 0x8bbf },{ 0x8a2d, 0x8bbe },{ 0x8a31, 0x8bb8 }, { 0x8a34, 0x8bc9 },{ 0x8a36, 0x8bc3 },{ 0x8a3a, 0x8bca },{ 0x8a3b, 0x6ce8 }, { 0x8a3c, 0x8bc1 },{ 0x8a41, 0x8bc2 },{ 0x8a46, 0x8bcb },{ 0x8a4e, 0x8bb5 }, { 0x8a50, 0x8bc8 },{ 0x8a52, 0x8bd2 },{ 0x8a54, 0x8bcf },{ 0x8a55, 0x8bc4 }, { 0x8a58, 0x8bce },{ 0x8a5b, 0x8bc5 },{ 0x8a5e, 0x8bcd },{ 0x8a60, 0x548f }, { 0x8a61, 0x8be9 },{ 0x8a62, 0x8be2 },{ 0x8a63, 0x8be3 },{ 0x8a66, 0x8bd5 }, { 0x8a69, 0x8bd7 },{ 0x8a6b, 0x8be7 },{ 0x8a6c, 0x8bdf },{ 0x8a6d, 0x8be1 }, { 0x8a6e, 0x8be0 },{ 0x8a70, 0x8bd8 },{ 0x8a71, 0x8bdd },{ 0x8a72, 0x8be5 }, { 0x8a73, 0x8be6 },{ 0x8a75, 0x8bdc },{ 0x8a76, 0x916c },{ 0x8a7b, 0x54af }, { 0x8a7c, 0x8bd9 },{ 0x8a7f, 0x8bd6 },{ 0x8a84, 0x8bd4 },{ 0x8a85, 0x8bdb }, { 0x8a86, 0x8bd3 },{ 0x8a87, 0x5938 },{ 0x8a8c, 0x5fd7 },{ 0x8a8d, 0x8ba4 }, { 0x8a91, 0x8bf3 },{ 0x8a92, 0x8bf6 },{ 0x8a95, 0x8bde },{ 0x8a98, 0x8bf1 }, { 0x8a9a, 0x8bee },{ 0x8a9e, 0x8bed },{ 0x8aa0, 0x8bda },{ 0x8aa1, 0x8beb }, { 0x8aa3, 0x8bec },{ 0x8aa4, 0x8bef },{ 0x8aa5, 0x8bf0 },{ 0x8aa6, 0x8bf5 }, { 0x8aa8, 0x8bf2 },{ 0x8aaa, 0x8bf4 },{ 0x8ab0, 0x8c01 },{ 0x8ab2, 0x8bfe }, { 0x8ab6, 0x8c07 },{ 0x8ab9, 0x8bfd },{ 0x8abc, 0x8c0a },{ 0x8abf, 0x8c03 }, { 0x8ac2, 0x8c04 },{ 0x8ac4, 0x8c06 },{ 0x8ac7, 0x8c08 },{ 0x8ac9, 0x8bff }, { 0x8acb, 0x8bf7 },{ 0x8acd, 0x8be4 },{ 0x8acf, 0x8bf9 },{ 0x8ad1, 0x8bfc }, { 0x8ad2, 0x8c05 },{ 0x8ad6, 0x8bba },{ 0x8ad7, 0x8c02 },{ 0x8adb, 0x8c00 }, { 0x8adc, 0x8c0d },{ 0x8ade, 0x8c1d },{ 0x8ae0, 0x55a7 },{ 0x8ae2, 0x8be8 }, { 0x8ae4, 0x8c14 },{ 0x8ae6, 0x8c1b },{ 0x8ae7, 0x8c10 },{ 0x8aeb, 0x8c0f }, { 0x8aed, 0x8c15 },{ 0x8aee, 0x8c18 },{ 0x8af1, 0x8bb3 },{ 0x8af3, 0x8c19 }, { 0x8af6, 0x8c0c },{ 0x8af7, 0x8bbd },{ 0x8af8, 0x8bf8 },{ 0x8afa, 0x8c1a }, { 0x8afc, 0x8c16 },{ 0x8afe, 0x8bfa },{ 0x8b00, 0x8c0b },{ 0x8b01, 0x8c12 }, { 0x8b02, 0x8c13 },{ 0x8b04, 0x8a8a },{ 0x8b05, 0x8bcc },{ 0x8b0a, 0x8c0e }, { 0x8b0e, 0x8c1c },{ 0x8b10, 0x8c27 },{ 0x8b14, 0x8c11 },{ 0x8b16, 0x8c21 }, { 0x8b17, 0x8c24 },{ 0x8b19, 0x8c26 },{ 0x8b1a, 0x8c25 },{ 0x8b1b, 0x8bb2 }, { 0x8b1d, 0x8c22 },{ 0x8b20, 0x8c23 },{ 0x8b28, 0x8c1f },{ 0x8b2b, 0x8c2a }, { 0x8b2c, 0x8c2c },{ 0x8b33, 0x8bb4 },{ 0x8b39, 0x8c28 },{ 0x8b3c, 0x547c }, { 0x8b3e, 0x8c29 },{ 0x8b41, 0x54d7 },{ 0x8b46, 0x563b },{ 0x8b49, 0x8bc1 }, { 0x8b4e, 0x8c32 },{ 0x8b4f, 0x8ba5 },{ 0x8b54, 0x64b0 },{ 0x8b56, 0x8c2e }, { 0x8b58, 0x8bc6 },{ 0x8b59, 0x8c2f },{ 0x8b5a, 0x8c2d },{ 0x8b5c, 0x8c31 }, { 0x8b5f, 0x566a },{ 0x8b6b, 0x8c35 },{ 0x8b6d, 0x6bc1 },{ 0x8b6f, 0x8bd1 }, { 0x8b70, 0x8bae },{ 0x8b74, 0x8c34 },{ 0x8b77, 0x62a4 },{ 0x8b7d, 0x8a89 }, { 0x8b7e, 0x8c2b },{ 0x8b80, 0x8bfb },{ 0x8b8a, 0x53d8 },{ 0x8b8c, 0x5bb4 }, { 0x8b8e, 0x96e0 },{ 0x8b92, 0x8c17 },{ 0x8b93, 0x8ba9 },{ 0x8b95, 0x8c30 }, { 0x8b96, 0x8c36 },{ 0x8b9a, 0x8d5e },{ 0x8b9c, 0x8c20 },{ 0x8b9e, 0x8c33 }, { 0x8c3f, 0x6eaa },{ 0x8c48, 0x5c82 },{ 0x8c4e, 0x7ad6 },{ 0x8c50, 0x4e30 }, { 0x8c54, 0x8273 },{ 0x8c56, 0x4e8d },{ 0x8c6c, 0x732a },{ 0x8c8d, 0x72f8 }, { 0x8c93, 0x732b },{ 0x8c9d, 0x8d1d },{ 0x8c9e, 0x8d1e },{ 0x8ca0, 0x8d1f }, { 0x8ca1, 0x8d22 },{ 0x8ca2, 0x8d21 },{ 0x8ca7, 0x8d2b },{ 0x8ca8, 0x8d27 }, { 0x8ca9, 0x8d29 },{ 0x8caa, 0x8d2a },{ 0x8cab, 0x8d2f },{ 0x8cac, 0x8d23 }, { 0x8caf, 0x8d2e },{ 0x8cb0, 0x8d33 },{ 0x8cb2, 0x8d40 },{ 0x8cb3, 0x8d30 }, { 0x8cb4, 0x8d35 },{ 0x8cb6, 0x8d2c },{ 0x8cb7, 0x4e70 },{ 0x8cb8, 0x8d37 }, { 0x8cba, 0x8d36 },{ 0x8cbb, 0x8d39 },{ 0x8cbc, 0x8d34 },{ 0x8cbd, 0x8d3b }, { 0x8cbf, 0x8d38 },{ 0x8cc0, 0x8d3a },{ 0x8cc1, 0x8d32 },{ 0x8cc2, 0x8d42 }, { 0x8cc3, 0x8d41 },{ 0x8cc4, 0x8d3f },{ 0x8cc5, 0x8d45 },{ 0x8cc7, 0x8d44 }, { 0x8cc8, 0x8d3e },{ 0x8cca, 0x8d3c },{ 0x8cd1, 0x8d48 },{ 0x8cd2, 0x8d4a }, { 0x8cd3, 0x5bbe },{ 0x8cd5, 0x8d47 },{ 0x8cd9, 0x5468 },{ 0x8cda, 0x8d49 }, { 0x8cdc, 0x8d50 },{ 0x8cde, 0x8d4f },{ 0x8ce0, 0x8d54 },{ 0x8ce1, 0x8d53 }, { 0x8ce2, 0x8d24 },{ 0x8ce3, 0x5356 },{ 0x8ce4, 0x8d31 },{ 0x8ce6, 0x8d4b }, { 0x8ce7, 0x8d55 },{ 0x8cea, 0x8d28 },{ 0x8cec, 0x8d26 },{ 0x8ced, 0x8d4c }, { 0x8cf4, 0x8d56 },{ 0x8cf8, 0x5269 },{ 0x8cfa, 0x8d5a },{ 0x8cfb, 0x8d59 }, { 0x8cfc, 0x8d2d },{ 0x8cfd, 0x8d5b },{ 0x8cfe, 0x8d5c },{ 0x8d04, 0x8d3d }, { 0x8d05, 0x8d58 },{ 0x8d08, 0x8d60 },{ 0x8d0a, 0x8d5e },{ 0x8d0d, 0x8d61 }, { 0x8d0f, 0x8d62 },{ 0x8d10, 0x8d46 },{ 0x8d13, 0x8d43 },{ 0x8d16, 0x8d4e }, { 0x8d17, 0x8d5d },{ 0x8d1b, 0x8d63 },{ 0x8d95, 0x8d76 },{ 0x8d99, 0x8d75 }, { 0x8da8, 0x8d8b },{ 0x8db2, 0x8db1 },{ 0x8de1, 0x8ff9 },{ 0x8dfc, 0x5c40 }, { 0x8e10, 0x8df5 },{ 0x8e21, 0x8737 },{ 0x8e2b, 0x78b0 },{ 0x8e30, 0x903e }, { 0x8e34, 0x8e0a },{ 0x8e4c, 0x8dc4 },{ 0x8e55, 0x8df8 },{ 0x8e5f, 0x8ff9 }, { 0x8e60, 0x8dd6 },{ 0x8e63, 0x8e52 },{ 0x8e64, 0x8e2a },{ 0x8e67, 0x7cdf }, { 0x8e7a, 0x8df7 },{ 0x8e89, 0x8db8 },{ 0x8e8a, 0x8e0c },{ 0x8e8b, 0x8dfb }, { 0x8e8d, 0x8dc3 },{ 0x8e91, 0x8e2f },{ 0x8e92, 0x8dde },{ 0x8e93, 0x8e2c }, { 0x8e95, 0x8e70 },{ 0x8e9a, 0x8df9 },{ 0x8ea1, 0x8e51 },{ 0x8ea5, 0x8e7f }, { 0x8ea6, 0x8e9c },{ 0x8eaa, 0x8e8f },{ 0x8ec0, 0x8eaf },{ 0x8eca, 0x8f66 }, { 0x8ecb, 0x8f67 },{ 0x8ecc, 0x8f68 },{ 0x8ecd, 0x519b },{ 0x8ed2, 0x8f69 }, { 0x8ed4, 0x8f6b },{ 0x8edb, 0x8f6d },{ 0x8edf, 0x8f6f },{ 0x8eeb, 0x8f78 }, { 0x8ef8, 0x8f74 },{ 0x8ef9, 0x8f75 },{ 0x8efa, 0x8f7a },{ 0x8efb, 0x8f72 }, { 0x8efc, 0x8f76 },{ 0x8efe, 0x8f7c },{ 0x8f03, 0x8f83 },{ 0x8f05, 0x8f82 }, { 0x8f07, 0x8f81 },{ 0x8f09, 0x8f7d },{ 0x8f0a, 0x8f7e },{ 0x8f12, 0x8f84 }, { 0x8f13, 0x633d },{ 0x8f14, 0x8f85 },{ 0x8f15, 0x8f7b },{ 0x8f1b, 0x8f86 }, { 0x8f1c, 0x8f8e },{ 0x8f1d, 0x8f89 },{ 0x8f1e, 0x8f8b },{ 0x8f1f, 0x8f8d }, { 0x8f25, 0x8f8a },{ 0x8f26, 0x8f87 },{ 0x8f29, 0x8f88 },{ 0x8f2a, 0x8f6e }, { 0x8f2f, 0x8f91 },{ 0x8f33, 0x8f8f },{ 0x8f38, 0x8f93 },{ 0x8f3b, 0x8f90 }, { 0x8f3e, 0x8f97 },{ 0x8f3f, 0x8206 },{ 0x8f42, 0x6bc2 },{ 0x8f44, 0x8f96 }, { 0x8f45, 0x8f95 },{ 0x8f46, 0x8f98 },{ 0x8f49, 0x8f6c },{ 0x8f4d, 0x8f99 }, { 0x8f4e, 0x8f7f },{ 0x8f54, 0x8f9a },{ 0x8f5f, 0x8f70 },{ 0x8f61, 0x8f94 }, { 0x8f62, 0x8f79 },{ 0x8f64, 0x8f73 },{ 0x8fa6, 0x529e },{ 0x8fad, 0x8f9e }, { 0x8fae, 0x8fab },{ 0x8faf, 0x8fa9 },{ 0x8fb2, 0x519c },{ 0x8fc6, 0x8fe4 }, { 0x8ff4, 0x56de },{ 0x8ffa, 0x4e43 },{ 0x9015, 0x8ff3 },{ 0x9019, 0x8fd9 }, { 0x9023, 0x8fde },{ 0x9031, 0x5468 },{ 0x9032, 0x8fdb },{ 0x904a, 0x6e38 }, { 0x904b, 0x8fd0 },{ 0x904e, 0x8fc7 },{ 0x9054, 0x8fbe },{ 0x9055, 0x8fdd }, { 0x9059, 0x9065 },{ 0x905c, 0x900a },{ 0x905e, 0x9012 },{ 0x9060, 0x8fdc }, { 0x9069, 0x9002 },{ 0x9072, 0x8fdf },{ 0x9077, 0x8fc1 },{ 0x9078, 0x9009 }, { 0x907a, 0x9057 },{ 0x907c, 0x8fbd },{ 0x9081, 0x8fc8 },{ 0x9084, 0x8fd8 }, { 0x9087, 0x8fe9 },{ 0x908a, 0x8fb9 },{ 0x908f, 0x903b },{ 0x9090, 0x9026 }, { 0x90df, 0x90cf },{ 0x90f5, 0x90ae },{ 0x9106, 0x90d3 },{ 0x9109, 0x4e61 }, { 0x9112, 0x90b9 },{ 0x9114, 0x90ac },{ 0x9116, 0x90e7 },{ 0x9127, 0x9093 }, { 0x912d, 0x90d1 },{ 0x9130, 0x90bb },{ 0x9132, 0x90f8 },{ 0x9134, 0x90ba }, { 0x9136, 0x90d0 },{ 0x913a, 0x909d },{ 0x9148, 0x90e6 },{ 0x9156, 0x9e29 }, { 0x9183, 0x814c },{ 0x9186, 0x76cf },{ 0x919c, 0x4e11 },{ 0x919e, 0x915d }, { 0x91ab, 0x533b },{ 0x91ac, 0x9171 },{ 0x91b1, 0x53d1 },{ 0x91bc, 0x5bb4 }, { 0x91c0, 0x917f },{ 0x91c1, 0x8845 },{ 0x91c3, 0x917e },{ 0x91c5, 0x917d }, { 0x91c6, 0x91c7 },{ 0x91cb, 0x91ca },{ 0x91d0, 0x5398 },{ 0x91d3, 0x9486 }, { 0x91d4, 0x9487 },{ 0x91d5, 0x948c },{ 0x91d7, 0x948a },{ 0x91d8, 0x9489 }, { 0x91d9, 0x948b },{ 0x91dd, 0x9488 },{ 0x91e3, 0x9493 },{ 0x91e4, 0x9490 }, { 0x91e6, 0x6263 },{ 0x91e7, 0x948f },{ 0x91e9, 0x9492 },{ 0x91ec, 0x948e }, { 0x91f5, 0x9497 },{ 0x91f7, 0x948d },{ 0x91f9, 0x9495 },{ 0x9200, 0x94af }, { 0x9201, 0x94ab },{ 0x9204, 0x94ad },{ 0x9209, 0x94a0 },{ 0x920d, 0x949d }, { 0x9210, 0x94a4 },{ 0x9211, 0x94a3 },{ 0x9214, 0x949e },{ 0x9215, 0x94ae }, { 0x921e, 0x94a7 },{ 0x9223, 0x9499 },{ 0x9225, 0x94ac },{ 0x9226, 0x949b }, { 0x9227, 0x94aa },{ 0x922e, 0x94cc },{ 0x9230, 0x94c8 },{ 0x9233, 0x94b6 }, { 0x9234, 0x94c3 },{ 0x9237, 0x94b4 },{ 0x9238, 0x94b9 },{ 0x9239, 0x94cd }, { 0x923a, 0x94b0 },{ 0x923d, 0x94b8 },{ 0x923e, 0x94c0 },{ 0x923f, 0x94bf }, { 0x9240, 0x94be },{ 0x9245, 0x5de8 },{ 0x9246, 0x94bb },{ 0x9248, 0x94ca }, { 0x9249, 0x94c9 },{ 0x924b, 0x5228 },{ 0x924d, 0x94cb },{ 0x9251, 0x94c2 }, { 0x9257, 0x94b3 },{ 0x925a, 0x94c6 },{ 0x925b, 0x94c5 },{ 0x925e, 0x94ba }, { 0x9264, 0x94a9 },{ 0x9266, 0x94b2 },{ 0x926c, 0x94bc },{ 0x926d, 0x94bd }, { 0x9278, 0x94f0 },{ 0x927a, 0x94d2 },{ 0x927b, 0x94ec },{ 0x927f, 0x94ea }, { 0x9280, 0x94f6 },{ 0x9283, 0x94f3 },{ 0x9285, 0x94dc },{ 0x9291, 0x94e3 }, { 0x9293, 0x94e8 },{ 0x9296, 0x94e2 },{ 0x9298, 0x94ed },{ 0x929a, 0x94eb }, { 0x929c, 0x8854 },{ 0x92a0, 0x94d1 },{ 0x92a3, 0x94f7 },{ 0x92a5, 0x94f1 }, { 0x92a6, 0x94df },{ 0x92a8, 0x94f5 },{ 0x92a9, 0x94e5 },{ 0x92aa, 0x94d5 }, { 0x92ab, 0x94ef },{ 0x92ac, 0x94d0 },{ 0x92b2, 0x710a },{ 0x92b3, 0x9510 }, { 0x92b7, 0x9500 },{ 0x92b9, 0x9508 },{ 0x92bb, 0x9511 },{ 0x92bc, 0x9509 }, { 0x92c1, 0x94dd },{ 0x92c3, 0x9512 },{ 0x92c5, 0x950c },{ 0x92c7, 0x94a1 }, { 0x92cc, 0x94e4 },{ 0x92cf, 0x94d7 },{ 0x92d2, 0x950b },{ 0x92dd, 0x950a }, { 0x92df, 0x9513 },{ 0x92e4, 0x9504 },{ 0x92e6, 0x9514 },{ 0x92e8, 0x9507 }, { 0x92ea, 0x94fa },{ 0x92ee, 0x94d6 },{ 0x92ef, 0x9506 },{ 0x92f0, 0x9502 }, { 0x92f1, 0x94fd },{ 0x92f8, 0x952f },{ 0x92fb, 0x9274 },{ 0x92fc, 0x94a2 }, { 0x9301, 0x951e },{ 0x9304, 0x5f55 },{ 0x9306, 0x9516 },{ 0x9308, 0x9529 }, { 0x9310, 0x9525 },{ 0x9312, 0x9515 },{ 0x9315, 0x951f },{ 0x9318, 0x9524 }, { 0x9319, 0x9531 },{ 0x931a, 0x94ee },{ 0x931b, 0x951b },{ 0x931f, 0x952c }, { 0x9320, 0x952d },{ 0x9322, 0x94b1 },{ 0x9326, 0x9526 },{ 0x9328, 0x951a }, { 0x932b, 0x9521 },{ 0x932e, 0x9522 },{ 0x932f, 0x9519 },{ 0x9333, 0x9530 }, { 0x9336, 0x8868 },{ 0x9338, 0x94fc },{ 0x9346, 0x9494 },{ 0x9347, 0x9534 }, { 0x934a, 0x70bc },{ 0x934b, 0x9505 },{ 0x934d, 0x9540 },{ 0x9354, 0x9537 }, { 0x9358, 0x94e1 },{ 0x935b, 0x953b },{ 0x9364, 0x9538 },{ 0x9365, 0x9532 }, { 0x936c, 0x9539 },{ 0x9370, 0x953e },{ 0x9375, 0x952e },{ 0x9376, 0x9536 }, { 0x937a, 0x9517 },{ 0x937c, 0x9488 },{ 0x937e, 0x949f },{ 0x9382, 0x9541 }, { 0x938a, 0x9551 },{ 0x938c, 0x9570 },{ 0x9394, 0x7194 },{ 0x9396, 0x9501 }, { 0x9397, 0x67aa },{ 0x9398, 0x9549 },{ 0x939a, 0x9524 },{ 0x93a2, 0x94a8 }, { 0x93a3, 0x84e5 },{ 0x93a6, 0x954f },{ 0x93a7, 0x94e0 },{ 0x93a9, 0x94e9 }, { 0x93aa, 0x953c },{ 0x93ac, 0x9550 },{ 0x93ae, 0x9547 },{ 0x93b0, 0x9552 }, { 0x93b3, 0x954d },{ 0x93b5, 0x9553 },{ 0x93c3, 0x955e },{ 0x93c7, 0x955f }, { 0x93c8, 0x94fe },{ 0x93cc, 0x9546 },{ 0x93cd, 0x9559 },{ 0x93d1, 0x955d }, { 0x93d7, 0x94ff },{ 0x93d8, 0x9535 },{ 0x93dc, 0x9557 },{ 0x93dd, 0x9558 }, { 0x93de, 0x955b },{ 0x93df, 0x94f2 },{ 0x93e1, 0x955c },{ 0x93e2, 0x9556 }, { 0x93e4, 0x9542 },{ 0x93e8, 0x933e },{ 0x93f5, 0x94e7 },{ 0x93f7, 0x9564 }, { 0x93f9, 0x956a },{ 0x93fd, 0x9508 },{ 0x9403, 0x94d9 },{ 0x9409, 0x94e3 }, { 0x940b, 0x94f4 },{ 0x9410, 0x9563 },{ 0x9412, 0x94f9 },{ 0x9413, 0x9566 }, { 0x9414, 0x9561 },{ 0x9418, 0x949f },{ 0x9419, 0x956b },{ 0x9420, 0x9568 }, { 0x9428, 0x9544 },{ 0x942b, 0x954c },{ 0x942e, 0x9570 },{ 0x9432, 0x956f }, { 0x9433, 0x956d },{ 0x9435, 0x94c1 },{ 0x9436, 0x73af },{ 0x9438, 0x94ce }, { 0x943a, 0x94db },{ 0x943f, 0x9571 },{ 0x9444, 0x94f8 },{ 0x944a, 0x956c }, { 0x944c, 0x9554 },{ 0x9451, 0x9274 },{ 0x9452, 0x9274 },{ 0x9460, 0x94c4 }, { 0x9463, 0x9573 },{ 0x9464, 0x5228 },{ 0x946a, 0x7089 },{ 0x946d, 0x9567 }, { 0x9470, 0x94a5 },{ 0x9472, 0x9576 },{ 0x9475, 0x7f50 },{ 0x9477, 0x954a }, { 0x947c, 0x9523 },{ 0x947d, 0x94bb },{ 0x947e, 0x92ae },{ 0x947f, 0x51ff }, { 0x9577, 0x957f },{ 0x9580, 0x95e8 },{ 0x9582, 0x95e9 },{ 0x9583, 0x95ea }, { 0x9586, 0x95eb },{ 0x9589, 0x95ed },{ 0x958b, 0x5f00 },{ 0x958c, 0x95f6 }, { 0x958e, 0x95f3 },{ 0x958f, 0x95f0 },{ 0x9591, 0x95f2 },{ 0x9592, 0x95f2 }, { 0x9593, 0x95f4 },{ 0x9594, 0x95f5 },{ 0x9598, 0x95f8 },{ 0x95a1, 0x9602 }, { 0x95a3, 0x9601 },{ 0x95a4, 0x5408 },{ 0x95a5, 0x9600 },{ 0x95a8, 0x95fa }, { 0x95a9, 0x95fd },{ 0x95ab, 0x9603 },{ 0x95ac, 0x9606 },{ 0x95ad, 0x95fe }, { 0x95b1, 0x9605 },{ 0x95b6, 0x960a },{ 0x95b9, 0x9609 },{ 0x95bb, 0x960e }, { 0x95bc, 0x960f },{ 0x95bd, 0x960d },{ 0x95be, 0x9608 },{ 0x95bf, 0x960c }, { 0x95c3, 0x9612 },{ 0x95c6, 0x677f },{ 0x95c7, 0x6697 },{ 0x95c8, 0x95f1 }, { 0x95ca, 0x9614 },{ 0x95cb, 0x9615 },{ 0x95cc, 0x9611 },{ 0x95d0, 0x9617 }, { 0x95d4, 0x9616 },{ 0x95d5, 0x9619 },{ 0x95d6, 0x95ef },{ 0x95dc, 0x5173 }, { 0x95de, 0x961a },{ 0x95e1, 0x9610 },{ 0x95e2, 0x8f9f },{ 0x95e5, 0x95fc }, { 0x9628, 0x5384 },{ 0x962c, 0x5751 },{ 0x962f, 0x5740 },{ 0x964f, 0x968b }, { 0x9658, 0x9649 },{ 0x965d, 0x9655 },{ 0x965e, 0x5347 },{ 0x9663, 0x9635 }, { 0x9670, 0x9634 },{ 0x9673, 0x9648 },{ 0x9678, 0x9646 },{ 0x967d, 0x9633 }, { 0x9684, 0x5824 },{ 0x9689, 0x9667 },{ 0x968a, 0x961f },{ 0x968e, 0x9636 }, { 0x9695, 0x9668 },{ 0x969b, 0x9645 },{ 0x96a4, 0x9893 },{ 0x96a8, 0x968f }, { 0x96aa, 0x9669 },{ 0x96b1, 0x9690 },{ 0x96b4, 0x9647 },{ 0x96b8, 0x96b6 }, { 0x96bb, 0x53ea },{ 0x96cb, 0x96bd },{ 0x96d6, 0x867d },{ 0x96d9, 0x53cc }, { 0x96db, 0x96cf },{ 0x96dc, 0x6742 },{ 0x96de, 0x9e21 },{ 0x96e2, 0x79bb }, { 0x96e3, 0x96be },{ 0x96f2, 0x4e91 },{ 0x96fb, 0x7535 },{ 0x9711, 0x6cbe }, { 0x9724, 0x6e9c },{ 0x9727, 0x96fe },{ 0x973d, 0x9701 },{ 0x9742, 0x96f3 }, { 0x9744, 0x972d },{ 0x9748, 0x7075 },{ 0x975a, 0x9753 },{ 0x975c, 0x9759 }, { 0x9766, 0x817c },{ 0x9768, 0x9765 },{ 0x978f, 0x5de9 },{ 0x97a6, 0x79cb }, { 0x97c1, 0x7f30 },{ 0x97c3, 0x9791 },{ 0x97c6, 0x5343 },{ 0x97c9, 0x97af }, { 0x97cb, 0x97e6 },{ 0x97cc, 0x97e7 },{ 0x97d3, 0x97e9 },{ 0x97d9, 0x97ea }, { 0x97dc, 0x97ec },{ 0x97de, 0x97eb },{ 0x97fb, 0x97f5 },{ 0x97ff, 0x54cd }, { 0x9801, 0x9875 },{ 0x9802, 0x9876 },{ 0x9803, 0x9877 },{ 0x9805, 0x9879 }, { 0x9806, 0x987a },{ 0x9807, 0x9878 },{ 0x9808, 0x987b },{ 0x980a, 0x987c }, { 0x980c, 0x9882 },{ 0x980e, 0x9880 },{ 0x980f, 0x9883 },{ 0x9810, 0x9884 }, { 0x9811, 0x987d },{ 0x9812, 0x9881 },{ 0x9813, 0x987f },{ 0x9817, 0x9887 }, { 0x9818, 0x9886 },{ 0x981c, 0x988c },{ 0x9821, 0x9889 },{ 0x9824, 0x9890 }, { 0x9826, 0x988f },{ 0x982b, 0x4fef },{ 0x982d, 0x5934 },{ 0x9830, 0x988a }, { 0x9837, 0x9894 },{ 0x9838, 0x9888 },{ 0x9839, 0x9893 },{ 0x983b, 0x9891 }, { 0x9846, 0x9897 },{ 0x984c, 0x9898 },{ 0x984d, 0x989d },{ 0x984e, 0x989a }, { 0x984f, 0x989c },{ 0x9853, 0x989b },{ 0x9858, 0x613f },{ 0x9859, 0x98a1 }, { 0x985b, 0x98a0 },{ 0x985e, 0x7c7b },{ 0x9862, 0x989f },{ 0x9865, 0x98a2 }, { 0x9867, 0x987e },{ 0x986b, 0x98a4 },{ 0x986f, 0x663e },{ 0x9870, 0x98a6 }, { 0x9871, 0x9885 },{ 0x9873, 0x989e },{ 0x9874, 0x98a7 },{ 0x98a8, 0x98ce }, { 0x98ae, 0x98d1 },{ 0x98af, 0x98d2 },{ 0x98b1, 0x53f0 },{ 0x98b3, 0x522e }, { 0x98b6, 0x98d3 },{ 0x98ba, 0x626c },{ 0x98bc, 0x98d5 },{ 0x98c4, 0x98d8 }, { 0x98c6, 0x98d9 },{ 0x98db, 0x98de },{ 0x98e2, 0x9965 },{ 0x98e9, 0x9968 }, { 0x98ea, 0x996a },{ 0x98eb, 0x996b },{ 0x98ed, 0x996c },{ 0x98ef, 0x996d }, { 0x98f2, 0x996e },{ 0x98f4, 0x9974 },{ 0x98fc, 0x9972 },{ 0x98fd, 0x9971 }, { 0x98fe, 0x9970 },{ 0x9903, 0x997a },{ 0x9905, 0x997c },{ 0x9908, 0x7ccd }, { 0x9909, 0x9977 },{ 0x990a, 0x517b },{ 0x990c, 0x9975 },{ 0x9911, 0x997d }, { 0x9912, 0x9981 },{ 0x9913, 0x997f },{ 0x9914, 0x54fa },{ 0x9918, 0x4f59 }, { 0x991a, 0x80b4 },{ 0x991b, 0x9984 },{ 0x991e, 0x996f },{ 0x9921, 0x9985 }, { 0x9928, 0x9986 },{ 0x992c, 0x7cca },{ 0x9931, 0x7cc7 },{ 0x9933, 0x9967 }, { 0x9935, 0x5582 },{ 0x993c, 0x9969 },{ 0x993d, 0x9988 },{ 0x993e, 0x998f }, { 0x993f, 0x998a },{ 0x9943, 0x998d },{ 0x9945, 0x9992 },{ 0x9948, 0x9990 }, { 0x9949, 0x9991 },{ 0x994b, 0x9988 },{ 0x994c, 0x9994 },{ 0x9951, 0x9965 }, { 0x9952, 0x9976 },{ 0x9957, 0x98e8 },{ 0x995c, 0x990d },{ 0x995e, 0x998b }, { 0x995f, 0x9977 },{ 0x99ac, 0x9a6c },{ 0x99ad, 0x9a6d },{ 0x99ae, 0x51af }, { 0x99b1, 0x9a6e },{ 0x99b3, 0x9a70 },{ 0x99b4, 0x9a6f },{ 0x99c1, 0x9a73 }, { 0x99d0, 0x9a7b },{ 0x99d1, 0x9a7d },{ 0x99d2, 0x9a79 },{ 0x99d4, 0x9a75 }, { 0x99d5, 0x9a7e },{ 0x99d8, 0x9a80 },{ 0x99d9, 0x9a78 },{ 0x99db, 0x9a76 }, { 0x99dd, 0x9a7c },{ 0x99df, 0x9a77 },{ 0x99e2, 0x9a88 },{ 0x99ed, 0x9a87 }, { 0x99ee, 0x9a73 },{ 0x99f1, 0x9a86 },{ 0x99ff, 0x9a8f },{ 0x9a01, 0x9a8b }, { 0x9a03, 0x5446 },{ 0x9a05, 0x9a93 },{ 0x9a0d, 0x9a92 },{ 0x9a0e, 0x9a91 }, { 0x9a0f, 0x9a90 },{ 0x9a16, 0x9a9b },{ 0x9a19, 0x9a97 },{ 0x9a23, 0x9b03 }, { 0x9a2b, 0x9a9e },{ 0x9a2d, 0x9a98 },{ 0x9a2e, 0x9a9d },{ 0x9a30, 0x817e }, { 0x9a36, 0x9a7a },{ 0x9a37, 0x9a9a },{ 0x9a38, 0x9a9f },{ 0x9a3e, 0x9aa1 }, { 0x9a40, 0x84e6 },{ 0x9a41, 0x9a9c },{ 0x9a42, 0x9a96 },{ 0x9a43, 0x9aa0 }, { 0x9a44, 0x9aa2 },{ 0x9a45, 0x9a71 },{ 0x9a4a, 0x9a85 },{ 0x9a4d, 0x9a81 }, { 0x9a4f, 0x9aa3 },{ 0x9a55, 0x9a84 },{ 0x9a57, 0x9a8c },{ 0x9a5a, 0x60ca }, { 0x9a5b, 0x9a7f },{ 0x9a5f, 0x9aa4 },{ 0x9a62, 0x9a74 },{ 0x9a64, 0x9aa7 }, { 0x9a65, 0x9aa5 },{ 0x9a6a, 0x9a8a },{ 0x9aaf, 0x80ae },{ 0x9acf, 0x9ac5 }, { 0x9ad2, 0x810f },{ 0x9ad4, 0x4f53 },{ 0x9ad5, 0x9acc },{ 0x9ad6, 0x9acb }, { 0x9ae3, 0x4eff },{ 0x9aee, 0x53d1 },{ 0x9b06, 0x677e },{ 0x9b0d, 0x80e1 }, { 0x9b1a, 0x987b },{ 0x9b22, 0x9b13 },{ 0x9b25, 0x6597 },{ 0x9b27, 0x95f9 }, { 0x9b28, 0x54c4 },{ 0x9b29, 0x960b },{ 0x9b2e, 0x9604 },{ 0x9b31, 0x90c1 }, { 0x9b4e, 0x9b49 },{ 0x9b58, 0x9b47 },{ 0x9b5a, 0x9c7c },{ 0x9b68, 0x8c5a }, { 0x9b6f, 0x9c81 },{ 0x9b74, 0x9c82 },{ 0x9b77, 0x9c7f },{ 0x9b90, 0x9c90 }, { 0x9b91, 0x9c8d },{ 0x9b92, 0x9c8b },{ 0x9b9a, 0x9c92 },{ 0x9b9e, 0x9c95 }, { 0x9baa, 0x9c94 },{ 0x9bab, 0x9c9b },{ 0x9bad, 0x9c91 },{ 0x9bae, 0x9c9c }, { 0x9bc0, 0x9ca7 },{ 0x9bc1, 0x9ca0 },{ 0x9bc7, 0x9ca9 },{ 0x9bc9, 0x9ca4 }, { 0x9bca, 0x9ca8 },{ 0x9bd4, 0x9cbb },{ 0x9bd6, 0x9cad },{ 0x9bd7, 0x9c9e }, { 0x9bdb, 0x9cb7 },{ 0x9be1, 0x9cb1 },{ 0x9be2, 0x9cb5 },{ 0x9be4, 0x9cb2 }, { 0x9be7, 0x9cb3 },{ 0x9be8, 0x9cb8 },{ 0x9bea, 0x9cae },{ 0x9beb, 0x9cb0 }, { 0x9bf0, 0x9c87 },{ 0x9bfd, 0x9cab },{ 0x9c08, 0x9cbd },{ 0x9c09, 0x9cc7 }, { 0x9c0d, 0x9cc5 },{ 0x9c12, 0x9cc6 },{ 0x9c13, 0x9cc3 },{ 0x9c23, 0x9ca5 }, { 0x9c25, 0x9ccf },{ 0x9c28, 0x9cce },{ 0x9c29, 0x9cd0 },{ 0x9c2d, 0x9ccd }, { 0x9c31, 0x9ca2 },{ 0x9c32, 0x9ccc },{ 0x9c33, 0x9cd3 },{ 0x9c37, 0x9ca6 }, { 0x9c39, 0x9ca3 },{ 0x9c3b, 0x9cd7 },{ 0x9c3e, 0x9cd4 },{ 0x9c48, 0x9cd5 }, { 0x9c49, 0x9cd6 },{ 0x9c52, 0x9cdf },{ 0x9c54, 0x9cdd },{ 0x9c56, 0x9cdc }, { 0x9c57, 0x9cde },{ 0x9c58, 0x9c9f },{ 0x9c5f, 0x9c8e },{ 0x9c67, 0x9ce2 }, { 0x9c6d, 0x9c9a },{ 0x9c77, 0x9cc4 },{ 0x9c78, 0x9c88 },{ 0x9c7a, 0x9ca1 }, { 0x9ce5, 0x9e1f },{ 0x9ce7, 0x51eb },{ 0x9ce9, 0x9e20 },{ 0x9cf3, 0x51e4 }, { 0x9cf4, 0x9e23 },{ 0x9cf6, 0x9e22 },{ 0x9d06, 0x9e29 },{ 0x9d07, 0x9e28 }, { 0x9d08, 0x96c1 },{ 0x9d09, 0x9e26 },{ 0x9d15, 0x9e35 },{ 0x9d1b, 0x9e33 }, { 0x9d1d, 0x9e32 },{ 0x9d1f, 0x9e31 },{ 0x9d23, 0x9e2a },{ 0x9d26, 0x9e2f }, { 0x9d28, 0x9e2d },{ 0x9d2f, 0x9e38 },{ 0x9d30, 0x9e39 },{ 0x9d3b, 0x9e3f }, { 0x9d3f, 0x9e3d },{ 0x9d42, 0x9e3a },{ 0x9d51, 0x9e43 },{ 0x9d52, 0x9e46 }, { 0x9d53, 0x9e41 },{ 0x9d5c, 0x9e48 },{ 0x9d5d, 0x9e45 },{ 0x9d60, 0x9e44 }, { 0x9d61, 0x9e49 },{ 0x9d6a, 0x9e4c },{ 0x9d6c, 0x9e4f },{ 0x9d6f, 0x9e4e }, { 0x9d70, 0x96d5 },{ 0x9d72, 0x9e4a },{ 0x9d87, 0x9e2b },{ 0x9d89, 0x9e51 }, { 0x9d98, 0x9e55 },{ 0x9d9a, 0x9e57 },{ 0x9da9, 0x9e5c },{ 0x9daf, 0x83ba }, { 0x9db1, 0x9a9e },{ 0x9db4, 0x9e64 },{ 0x9dbb, 0x9e58 },{ 0x9dbc, 0x9e63 }, { 0x9dbf, 0x9e5a },{ 0x9dc2, 0x9e5e },{ 0x9dd3, 0x9e67 },{ 0x9dd7, 0x9e25 }, { 0x9dd9, 0x9e37 },{ 0x9dda, 0x9e68 },{ 0x9de5, 0x9e36 },{ 0x9de6, 0x9e6a }, { 0x9def, 0x9e69 },{ 0x9df0, 0x71d5 },{ 0x9df2, 0x9e6b },{ 0x9df3, 0x9e47 }, { 0x9df4, 0x9e47 },{ 0x9df8, 0x9e6c },{ 0x9df9, 0x9e70 },{ 0x9dfa, 0x9e6d }, { 0x9e15, 0x9e2c },{ 0x9e1a, 0x9e66 },{ 0x9e1b, 0x9e73 },{ 0x9e1d, 0x9e42 }, { 0x9e1e, 0x9e3e },{ 0x9e75, 0x5364 },{ 0x9e79, 0x54b8 },{ 0x9e7a, 0x9e7e }, { 0x9e7c, 0x7877 },{ 0x9e7d, 0x76d0 },{ 0x9e97, 0x4e3d },{ 0x9ea5, 0x9ea6 }, { 0x9ea9, 0x9eb8 },{ 0x9eb5, 0x9762 },{ 0x9ebc, 0x4e48 },{ 0x9ec3, 0x9ec4 }, { 0x9ecc, 0x9ec9 },{ 0x9ede, 0x70b9 },{ 0x9ee8, 0x515a },{ 0x9ef2, 0x9eea }, { 0x9ef4, 0x9709 },{ 0x9ef7, 0x9ee9 },{ 0x9efd, 0x9efe },{ 0x9eff, 0x9f0b }, { 0x9f07, 0x9ccc },{ 0x9f09, 0x9f0d },{ 0x9f15, 0x51ac },{ 0x9f34, 0x9f39 }, { 0x9f4a, 0x9f50 },{ 0x9f4b, 0x658b },{ 0x9f4e, 0x8d4d },{ 0x9f4f, 0x9f51 }, { 0x9f52, 0x9f7f },{ 0x9f54, 0x9f80 },{ 0x9f59, 0x9f85 },{ 0x9f5c, 0x9f87 }, { 0x9f5f, 0x9f83 },{ 0x9f60, 0x9f86 },{ 0x9f61, 0x9f84 },{ 0x9f63, 0x51fa }, { 0x9f66, 0x9f88 },{ 0x9f67, 0x556e },{ 0x9f6a, 0x9f8a },{ 0x9f6c, 0x9f89 }, { 0x9f72, 0x9f8b },{ 0x9f76, 0x816d },{ 0x9f77, 0x9f8c },{ 0x9f8d, 0x9f99 }, { 0x9f90, 0x5e9e },{ 0x9f94, 0x9f9a },{ 0x9f95, 0x9f9b },{ 0x9f9c, 0x9f9f }, { 0x9fa2, 0x548c },{ 0xfa0c, 0x5140 },{ 0xfe30, 0x2236 },{ 0xfe31, 0xff5c }, { 0xfe33, 0xff5c },{ 0xfe3f, 0x2227 },{ 0xfe40, 0x2228 },{ 0xfe50, 0xff0c }, { 0xfe51, 0x3001 },{ 0xfe52, 0xff0e },{ 0xfe54, 0xff1b },{ 0xfe55, 0xff1a }, { 0xfe56, 0xff1f },{ 0xfe57, 0xff01 },{ 0xfe59, 0xff08 },{ 0xfe5a, 0xff09 }, { 0xfe5b, 0xff5b },{ 0xfe5c, 0xff5d },{ 0xfe5d, 0xff3b },{ 0xfe5e, 0xff3d }, { 0xfe5f, 0xff03 },{ 0xfe60, 0xff06 },{ 0xfe61, 0xff0a },{ 0xfe62, 0xff0b }, { 0xfe63, 0xff0d },{ 0xfe64, 0xff1c },{ 0xfe65, 0xff1e },{ 0xfe66, 0xff1d }, { 0xfe69, 0xff04 },{ 0xfe6a, 0xff05 },{ 0xfe6b, 0xff20 },{ 0, 0} }; #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/FrontEnd/000077500000000000000000000000001415264260100164725ustar00rootroot00000000000000scim-master/modules/FrontEnd/IMdkit/000077500000000000000000000000001415264260100176535ustar00rootroot00000000000000scim-master/modules/FrontEnd/IMdkit/FrameMgr.c000066400000000000000000001671171415264260100215340ustar00rootroot00000000000000/****************************************************************** Copyright 1993, 1994 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hiroyuki Miyamoto Digital Equipment Corporation miyamoto@jrd.dec.com This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include "FrameMgr.h" /* Convenient macro */ #define _UNIT(n) ((int)(n) & 0xFF) #define _NUMBER(n) (((int)(n) >> 8) & 0xFF) /* For byte swapping */ #define Swap16(p, n) ((p)->byte_swap ? \ (((n) << 8 & 0xFF00) | \ ((n) >> 8 & 0xFF) \ ) : n) #define Swap32(p, n) ((p)->byte_swap ? \ (((n) << 24 & 0xFF000000) | \ ((n) << 8 & 0xFF0000) | \ ((n) >> 8 & 0xFF00) | \ ((n) >> 24 & 0xFF) \ ) : n) #define Swap64(p, n) ((p)->byte_swap ? \ (((n) << 56 & 0xFF00000000000000) | \ ((n) << 40 & 0xFF000000000000) | \ ((n) << 24 & 0xFF0000000000) | \ ((n) << 8 & 0xFF00000000) | \ ((n) >> 8 & 0xFF000000) | \ ((n) >> 24 & 0xFF0000) | \ ((n) >> 40 & 0xFF00) | \ ((n) >> 56 & 0xFF) \ ) : n) /* Type definition */ typedef struct _Iter *Iter; typedef struct _FrameInst *FrameInst; typedef union { int num; /* For BARRAY */ FrameInst fi; /* For POINTER */ Iter iter; /* For ITER */ } ExtraDataRec, *ExtraData; typedef struct _Chain { ExtraDataRec d; int frame_no; struct _Chain *next; } ChainRec, *Chain; typedef struct _ChainMgr { Chain top; Chain tail; } ChainMgrRec, *ChainMgr; typedef struct _ChainIter { Chain cur; } ChainIterRec, *ChainIter; typedef struct _FrameIter { Iter iter; Bool counting; unsigned int counter; int end; struct _FrameIter* next; } FrameIterRec, *FrameIter; typedef struct _FrameInst { XimFrame template; ChainMgrRec cm; int cur_no; } FrameInstRec; typedef void (*IterStartWatchProc) (Iter it, void *client_data); typedef struct _Iter { XimFrame template; int max_count; Bool allow_expansion; ChainMgrRec cm; int cur_no; IterStartWatchProc start_watch_proc; void *client_data; Bool start_counter; } IterRec; typedef struct _FrameMgr { XimFrame frame; FrameInst fi; char *area; int idx; Bool byte_swap; int total_size; FrameIter iters; } FrameMgrRec; typedef union { int num; /* For BARRAY and PAD */ struct { /* For COUNTER_* */ Iter iter; Bool is_byte_len; } counter; } XimFrameTypeInfoRec, *XimFrameTypeInfo; /* Special values */ #define NO_VALUE -1 #define NO_VALID_FIELD -2 static FrameInst FrameInstInit(XimFrame frame); static void FrameInstFree(FrameInst fi); static XimFrameType FrameInstGetNextType(FrameInst fi, XimFrameTypeInfo info); static XimFrameType FrameInstPeekNextType(FrameInst fi, XimFrameTypeInfo info); static FmStatus FrameInstSetSize(FrameInst fi, int num); static FmStatus FrameInstSetIterCount(FrameInst fi, int num); static int FrameInstGetTotalSize(FrameInst fi); static void FrameInstReset(FrameInst fi); static Iter IterInit(XimFrame frame, int count); static void IterFree(Iter it); static int FrameInstGetSize(FrameInst fi); static int IterGetSize(Iter it); static XimFrameType IterGetNextType(Iter it, XimFrameTypeInfo info); static XimFrameType IterPeekNextType(Iter it, XimFrameTypeInfo info); static FmStatus IterSetSize(Iter it, int num); static FmStatus IterSetIterCount(Iter it, int num); static int IterGetTotalSize(Iter it); static void IterReset(Iter it); static Bool IterIsLoopEnd(Iter it, Bool* myself); static void IterSetStartWatch(Iter it, IterStartWatchProc proc, void* client_data); static void _IterStartWatch(Iter it, void* client_data); static ExtraData ChainMgrGetExtraData(ChainMgr cm, int frame_no); static ExtraData ChainMgrSetData(ChainMgr cm, int frame_no, ExtraDataRec data); static Bool ChainIterGetNext(ChainIter ci, int* frame_no, ExtraData d); static int _FrameInstIncrement(XimFrame frame, int count); static int _FrameInstDecrement(XimFrame frame, int count); static int _FrameInstGetItemSize(FrameInst fi, int cur_no); static Bool FrameInstIsIterLoopEnd(FrameInst fi); static FrameIter _FrameMgrAppendIter(FrameMgr fm, Iter it, int end); static FrameIter _FrameIterCounterIncr(FrameIter fitr, int i); static void _FrameMgrRemoveIter(FrameMgr fm, FrameIter it); static Bool _FrameMgrIsIterLoopEnd(FrameMgr fm); static Bool _FrameMgrProcessPadding(FrameMgr fm, FmStatus* status); #define IterGetIterCount(it) ((it)->allow_expansion ? \ NO_VALUE : (it)->max_count) #define IterFixIteration(it) ((it)->allow_expansion = False) #define IterSetStarter(it) ((it)->start_counter = True) #define ChainMgrInit(cm) (cm)->top = (cm)->tail = NULL #define ChainMgrFree(cm) \ { \ Chain tmp; \ Chain cur = (cm)->top; \ \ while (cur) \ { \ tmp = cur->next; \ Xfree (cur); \ cur = tmp; \ } \ } #define ChainIterInit(ci, cm) \ { \ (ci)->cur = (cm)->top; \ } /* ChainIterFree has nothing to do. */ #define ChainIterFree(ci) #define FrameInstIsEnd(fi) ((fi)->template[(fi)->cur_no].type == EOL) FrameMgr FrameMgrInit (XimFrame frame, char* area, Bool byte_swap) { FrameMgr fm; fm = (FrameMgr) Xmalloc (sizeof (FrameMgrRec)); fm->frame = frame; fm->fi = FrameInstInit (frame); fm->area = (char *) area; fm->idx = 0; fm->byte_swap = byte_swap; fm->total_size = NO_VALUE; fm->iters = NULL; return fm; } void FrameMgrInitWithData (FrameMgr fm, XimFrame frame, void * area, Bool byte_swap) { fm->frame = frame; fm->fi = FrameInstInit (frame); fm->area = (char *) area; fm->idx = 0; fm->byte_swap = byte_swap; fm->total_size = NO_VALUE; } void FrameMgrFree (FrameMgr fm) { FrameIter p, cur; p = fm->iters; cur = p; while (p) { p = p->next; Xfree (cur); cur = p; } /*endwhile*/ FrameInstFree (fm->fi); Xfree (fm); } FmStatus FrameMgrSetBuffer (FrameMgr fm, void* area) { if (fm->area) return FmBufExist; fm->area = (char *) area; return FmSuccess; } FmStatus _FrameMgrPutToken (FrameMgr fm, void *data, int data_size) { XimFrameType type; XimFrameTypeInfoRec info; if (fm->total_size != NO_VALUE && fm->idx >= fm->total_size) return FmNoMoreData; /*endif*/ type = FrameInstGetNextType(fm->fi, &info); if (type & COUNTER_MASK) { unsigned long input_length; if (info.counter.is_byte_len) { if ((input_length = IterGetTotalSize (info.counter.iter)) == NO_VALUE) { return FmCannotCalc; } /*endif*/ } else { if ((input_length = IterGetIterCount (info.counter.iter)) == NO_VALUE) { return FmCannotCalc; } /*endif*/ } /*endif*/ switch (type) { case COUNTER_BIT8: *(CARD8 *) (fm->area + fm->idx) = input_length; fm->idx++; break; case COUNTER_BIT16: *(CARD16 *) (fm->area + fm->idx) = Swap16 (fm, input_length); fm->idx += 2; break; case COUNTER_BIT32: *(CARD32 *) (fm->area + fm->idx) = Swap32 (fm, input_length); fm->idx += 4; break; #if defined(_NEED64BIT) case COUNTER_BIT64: *(CARD64 *) (fm->area + fm->idx) = Swap64 (fm, input_length); fm->idx += 8; break; #endif default: break; } /*endswitch*/ _FrameMgrPutToken(fm, data, data_size); return FmSuccess; } /*endif*/ switch (type) { case BIT8: if (data_size == sizeof (unsigned char)) { unsigned long num = *(unsigned char *) data; *(CARD8 *) (fm->area + fm->idx) = num; } else if (data_size == sizeof (unsigned short)) { unsigned long num = *(unsigned short *) data; *(CARD8 *) (fm->area + fm->idx) = num; } else if (data_size == sizeof (unsigned int)) { unsigned long num = *(unsigned int *) data; *(CARD8 *) (fm->area + fm->idx) = num; } else if (data_size == sizeof (unsigned long)) { unsigned long num = *(unsigned long *) data; *(CARD8 *) (fm->area + fm->idx) = num; } else { ; /* Should never be reached */ } /*endif*/ fm->idx++; return FmSuccess; case BIT16: if (data_size == sizeof (unsigned char)) { unsigned long num = *(unsigned char *) data; *(CARD16*)(fm->area + fm->idx) = Swap16 (fm, num); } else if (data_size == sizeof (unsigned short)) { unsigned long num = *(unsigned short *) data; *(CARD16 *) (fm->area + fm->idx) = Swap16 (fm, num); } else if (data_size == sizeof (unsigned int)) { unsigned long num = *(unsigned int *) data; *(CARD16 *) (fm->area + fm->idx) = Swap16 (fm, num); } else if (data_size == sizeof (unsigned long)) { unsigned long num = *(unsigned long *) data; *(CARD16 *) (fm->area + fm->idx) = Swap16 (fm, num); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 2; return FmSuccess; case BIT32: if (data_size == sizeof (unsigned char)) { unsigned long num = *(unsigned char *) data; *(CARD32 *) (fm->area + fm->idx) = Swap32 (fm, num); } else if (data_size == sizeof (unsigned short)) { unsigned long num = *(unsigned short *) data; *(CARD32 *) (fm->area + fm->idx) = Swap32 (fm, num); } else if (data_size == sizeof (unsigned int)) { unsigned long num = *(unsigned int *) data; *(CARD32 *) (fm->area + fm->idx) = Swap32 (fm, num); } else if (data_size == sizeof (unsigned long)) { unsigned long num = *(unsigned long *) data; *(CARD32 *) (fm->area + fm->idx) = Swap32 (fm, num); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 4; return FmSuccess; #if defined(_NEED64BIT) case BIT64: if (data_size == sizeof (unsigned char)) { unsigned long num = *(unsigned char *) data; *(CARD64 *) (fm->area + fm->idx) = Swap64 (fm, num); } else if (data_size == sizeof (unsigned short)) { unsigned long num = *(unsigned short *) data; *(CARD64 *) (fm->area + fm->idx) = Swap64 (fm, num); } else if (data_size == sizeof (unsigned int)) { unsigned long num = *(unsigned int *) data; *(CARD64 *) (fm->area + fm->idx) = Swap64 (fm, num); } else if (data_size == sizeof (unsigned long)) { unsigned long num = *(unsigned long *) data; *(CARD64 *) (fm->area + fm->idx) = Swap64 (fm, num); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 4; return FmSuccess; #endif case BARRAY: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ if (info.num > 0) { bcopy (*(char **) data, fm->area + fm->idx, info.num); fm->idx += info.num; } /*endif*/ return FmSuccess; case PADDING: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ fm->idx += info.num; return _FrameMgrPutToken(fm, data, data_size); case ITER: return FmInvalidCall; case EOL: return FmEOD; default: break; } /*endswitch*/ return (FmStatus) NULL; /* Should never be reached */ } FmStatus _FrameMgrGetToken (FrameMgr fm , void* data, int data_size) { XimFrameType type; static XimFrameTypeInfoRec info; /* memory */ FrameIter fitr; if (fm->total_size != NO_VALUE && fm->idx >= fm->total_size) return FmNoMoreData; /*endif*/ type = FrameInstGetNextType(fm->fi, &info); if (type & COUNTER_MASK) { int end=0; FrameIter client_data; type &= ~COUNTER_MASK; switch (type) { case BIT8: end = *(CARD8 *) (fm->area + fm->idx); break; case BIT16: end = Swap16 (fm, *(CARD16 *) (fm->area + fm->idx)); break; case BIT32: end = Swap32 (fm, *(CARD32 *) (fm->area + fm->idx)); break; #if defined(_NEED64BIT) case BIT64: end = Swap64 (fm, *(CARD64 *) (fm->area + fm->idx)); break; #endif default: break; } /*endswitch*/ if ((client_data = _FrameMgrAppendIter (fm, info.counter.iter, end))) { IterSetStarter (info.counter.iter); IterSetStartWatch (info.counter.iter, _IterStartWatch, (void *) client_data); } /*endif*/ } /*endif*/ type &= ~COUNTER_MASK; switch (type) { case BIT8: if (data_size == sizeof (unsigned char)) { *(unsigned char*) data = *(CARD8 *) (fm->area + fm->idx); } else if (data_size == sizeof (unsigned short)) { *(unsigned short *) data = *(CARD8 *) (fm->area + fm->idx); } else if (data_size == sizeof (unsigned int)) { *(unsigned int *) data = *(CARD8 *) (fm->area + fm->idx); } else if (data_size == sizeof (unsigned long)) { *(unsigned long *) data = *(CARD8 *) (fm->area + fm->idx); } else { ; /* Should never reached */ } /*endif*/ fm->idx++; if ((fitr = _FrameIterCounterIncr (fm->iters, 1/*BIT8*/))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ return FmSuccess; case BIT16: if (data_size == sizeof (unsigned char)) { *(unsigned char *) data = Swap16 (fm, *(CARD16 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned short)) { *(unsigned short *) data = Swap16 (fm, *(CARD16 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned int)) { *(unsigned int *) data = Swap16 (fm, *(CARD16 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned long)) { *(unsigned long *) data = Swap16 (fm, *(CARD16 *) (fm->area + fm->idx)); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 2; if ((fitr = _FrameIterCounterIncr (fm->iters, 2/*BIT16*/))) _FrameMgrRemoveIter(fm, fitr); /*endif*/ return FmSuccess; case BIT32: if (data_size == sizeof (unsigned char)) { *(unsigned char *) data = Swap32 (fm, *(CARD32 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned short)) { *(unsigned short *) data = Swap32 (fm, *(CARD32 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned int)) { *(unsigned int *) data = Swap32 (fm, *(CARD32 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned long)) { *(unsigned long *) data = Swap32 (fm, *(CARD32 *) (fm->area + fm->idx)); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 4; if ((fitr = _FrameIterCounterIncr (fm->iters, 4/*BIT32*/))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ return FmSuccess; #if defined(_NEED64BIT) case BIT64: if (data_size == sizeof (unsigned char)) { *(unsigned char *) data = Swap64 (fm, *(CARD64 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned short)) { *(unsigned short *) data = Swap64 (fm, *(CARD64 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned int)) { *(unsigned int *) data = Swap64 (fm, *(CARD64 *) (fm->area + fm->idx)); } else if (data_size == sizeof (unsigned long)) { *(unsigned long *) data = Swap64 (fm, *(CARD64 *) (fm->area + fm->idx)); } else { ; /* Should never reached */ } /*endif*/ fm->idx += 8; if ((fitr = _FrameIterCounterIncr (fm->iters, 8/*BIT64*/))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ return FmSuccess; #endif case BARRAY: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ if (info.num > 0) { *(char **) data = fm->area + fm->idx; fm->idx += info.num; if ((fitr = _FrameIterCounterIncr (fm->iters, info.num))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ } else { *(char **) data = NULL; } /*endif*/ return FmSuccess; case PADDING: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ fm->idx += info.num; if ((fitr = _FrameIterCounterIncr (fm->iters, info.num))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ return _FrameMgrGetToken (fm, data, data_size); case ITER: return FmInvalidCall; /* if comes here, it's a bug! */ case EOL: return FmEOD; default: break; } /*endswitch*/ return (FmStatus) NULL; /* Should never be reached */ } FmStatus FrameMgrSetSize (FrameMgr fm, int barray_size) { if (FrameInstSetSize (fm->fi, barray_size) == FmSuccess) return FmSuccess; /*endif*/ return FmNoMoreData; } FmStatus FrameMgrSetIterCount (FrameMgr fm, int count) { if (FrameInstSetIterCount (fm->fi, count) == FmSuccess) return FmSuccess; /*endif*/ return FmNoMoreData; } FmStatus FrameMgrSetTotalSize (FrameMgr fm, int total_size) { fm->total_size = total_size; return FmSuccess; } int FrameMgrGetTotalSize (FrameMgr fm) { return FrameInstGetTotalSize (fm->fi); } int FrameMgrGetSize (FrameMgr fm) { register int ret_size; ret_size = FrameInstGetSize (fm->fi); if (ret_size == NO_VALID_FIELD) return NO_VALUE; /*endif*/ return ret_size; } FmStatus FrameMgrSkipToken (FrameMgr fm, int skip_count) { XimFrameType type; XimFrameTypeInfoRec info; register int i; if (fm->total_size != NO_VALUE && fm->idx >= fm->total_size) return FmNoMoreData; /*endif*/ for (i = 0; i < skip_count; i++) { type = FrameInstGetNextType (fm->fi, &info); type &= ~COUNTER_MASK; switch (type) { case BIT8: fm->idx++; break; case BIT16: fm->idx += 2; break; case BIT32: fm->idx += 4; break; case BIT64: fm->idx += 8; break; case BARRAY: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ fm->idx += info.num; break; case PADDING: if (info.num == NO_VALUE) return FmInvalidCall; /*endif*/ fm->idx += info.num; return FrameMgrSkipToken (fm, skip_count); case ITER: return FmInvalidCall; case EOL: return FmEOD; default: break; } /*endswitch*/ } /*endfor*/ return FmSuccess; } void FrameMgrReset (FrameMgr fm) { fm->idx = 0; FrameInstReset (fm->fi); } Bool FrameMgrIsIterLoopEnd (FrameMgr fm, FmStatus* status) { do { if (_FrameMgrIsIterLoopEnd (fm)) return True; /*endif*/ } while (_FrameMgrProcessPadding (fm, status)); return False; } /* Internal routines */ static Bool _FrameMgrIsIterLoopEnd (FrameMgr fm) { return FrameInstIsIterLoopEnd (fm->fi); } static Bool _FrameMgrProcessPadding (FrameMgr fm, FmStatus* status) { XimFrameTypeInfoRec info; XimFrameType next_type = FrameInstPeekNextType (fm->fi, &info); FrameIter fitr; if (next_type == PADDING) { if (info.num == NO_VALUE) { *status = FmInvalidCall; return True; } /*endif*/ next_type = FrameInstGetNextType (fm->fi, &info); fm->idx += info.num; if ((fitr = _FrameIterCounterIncr (fm->iters, info.num))) _FrameMgrRemoveIter (fm, fitr); /*endif*/ *status = FmSuccess; return True; } /*endif*/ *status = FmSuccess; return False; } static FrameInst FrameInstInit (XimFrame frame) { FrameInst fi; fi = (FrameInst) Xmalloc (sizeof (FrameInstRec)); fi->template = frame; fi->cur_no = 0; ChainMgrInit (&fi->cm); return fi; } static void FrameInstFree (FrameInst fi) { ChainIterRec ci; int frame_no; ExtraDataRec d; ChainIterInit (&ci, &fi->cm); while (ChainIterGetNext (&ci, &frame_no, &d)) { register XimFrameType type; type = fi->template[frame_no].type; if (type == ITER) { if (d.iter) IterFree (d.iter); /*endif*/ } else if (type == POINTER) { if (d.fi) FrameInstFree (d.fi); /*endif*/ } /*endif*/ } /*endwhile*/ ChainIterFree (&ci); ChainMgrFree (&fi->cm); Xfree (fi); } static XimFrameType FrameInstGetNextType(FrameInst fi, XimFrameTypeInfo info) { XimFrameType ret_type; ret_type = fi->template[fi->cur_no].type; switch (ret_type) { case BIT8: case BIT16: case BIT32: case BIT64: case EOL: fi->cur_no = _FrameInstIncrement(fi->template, fi->cur_no); break; case COUNTER_BIT8: case COUNTER_BIT16: case COUNTER_BIT32: case COUNTER_BIT64: if (info) { register int offset, iter_idx; info->counter.is_byte_len = (((long) fi->template[fi->cur_no].data & 0xFF)) == FmCounterByte; offset = ((long) fi->template[fi->cur_no].data) >> 8; iter_idx = fi->cur_no + offset; if (fi->template[iter_idx].type == ITER) { ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&fi->cm, iter_idx)) == NULL) { dr.iter = IterInit (&fi->template[iter_idx + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, iter_idx, dr); } /*endif*/ info->counter.iter = d->iter; } else { /* Should never reach here */ } /*endif*/ } /*endif*/ fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); break; case BARRAY: if (info) { ExtraData d; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) info->num = NO_VALUE; else info->num = d->num; /*endif*/ } /*endif*/ fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); break; case PADDING: if (info) { register int unit; register int number; register int size; register int i; unit = _UNIT ((long) fi->template[fi->cur_no].data); number = _NUMBER ((long) fi->template[fi->cur_no].data); i = fi->cur_no; size = 0; while (number > 0) { i = _FrameInstDecrement (fi->template, i); size += _FrameInstGetItemSize (fi, i); number--; } /*endwhile*/ info->num = (unit - (size%unit))%unit; } /*endif*/ fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); break; case ITER: { ExtraData d; ExtraDataRec dr; XimFrameType sub_type; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) { dr.iter = IterInit (&fi->template[fi->cur_no + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, fi->cur_no, dr); } /*endif*/ sub_type = IterGetNextType (d->iter, info); if (sub_type == EOL) { fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); ret_type = FrameInstGetNextType (fi, info); } else { ret_type = sub_type; } /*endif*/ } break; case POINTER: { ExtraData d; ExtraDataRec dr; XimFrameType sub_type; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) { dr.fi = FrameInstInit (fi->template[fi->cur_no + 1].data); d = ChainMgrSetData (&fi->cm, fi->cur_no, dr); } /*endif*/ sub_type = FrameInstGetNextType (d->fi, info); if (sub_type == EOL) { fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); ret_type = FrameInstGetNextType (fi, info); } else { ret_type = sub_type; } /*endif*/ } break; default: break; } /*endswitch*/ return ret_type; } static XimFrameType FrameInstPeekNextType (FrameInst fi, XimFrameTypeInfo info) { XimFrameType ret_type; ret_type = fi->template[fi->cur_no].type; switch (ret_type) { case BIT8: case BIT16: case BIT32: case BIT64: case EOL: break; case COUNTER_BIT8: case COUNTER_BIT16: case COUNTER_BIT32: case COUNTER_BIT64: if (info) { register int offset; register int iter_idx; info->counter.is_byte_len = (((long) fi->template[fi->cur_no].data) & 0xFF) == FmCounterByte; offset = ((long)fi->template[fi->cur_no].data) >> 8; iter_idx = fi->cur_no + offset; if (fi->template[iter_idx].type == ITER) { ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&fi->cm, iter_idx)) == NULL) { dr.iter = IterInit (&fi->template[iter_idx + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, iter_idx, dr); } /*endif*/ info->counter.iter = d->iter; } else { /* Should not be reached here */ } /*endif*/ } /*endif*/ break; case BARRAY: if (info) { ExtraData d; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) info->num = NO_VALUE; else info->num = d->num; /*endif*/ } /*endif*/ break; case PADDING: if (info) { register int unit; register int number; register int size; register int i; unit = _UNIT ((long) fi->template[fi->cur_no].data); number = _NUMBER ((long) fi->template[fi->cur_no].data); i = fi->cur_no; size = 0; while (number > 0) { i = _FrameInstDecrement (fi->template, i); size += _FrameInstGetItemSize (fi, i); number--; } /*endwhile*/ info->num = (unit - (size%unit))%unit; } /*endif*/ break; case ITER: { ExtraData d; ExtraDataRec dr; XimFrameType sub_type; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) { dr.iter = IterInit (&fi->template[fi->cur_no + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, fi->cur_no, dr); } /*endif*/ sub_type = IterPeekNextType (d->iter, info); if (sub_type == EOL) ret_type = FrameInstPeekNextType (fi, info); else ret_type = sub_type; /*endif*/ } break; case POINTER: { ExtraData d; ExtraDataRec dr; XimFrameType sub_type; if ((d = ChainMgrGetExtraData (&fi->cm, fi->cur_no)) == NULL) { dr.fi = FrameInstInit (fi->template[fi->cur_no + 1].data); d = ChainMgrSetData (&fi->cm, fi->cur_no, dr); } /*endif*/ sub_type = FrameInstPeekNextType (d->fi, info); if (sub_type == EOL) ret_type = FrameInstPeekNextType (fi, info); else ret_type = sub_type; /*endif*/ default: break; } break; } /*endswitch*/ return ret_type; } static Bool FrameInstIsIterLoopEnd (FrameInst fi) { Bool ret = False; if (fi->template[fi->cur_no].type == ITER) { ExtraData d = ChainMgrGetExtraData (&fi->cm, fi->cur_no); Bool yourself; if (d) { ret = IterIsLoopEnd (d->iter, &yourself); if (ret && yourself) fi->cur_no = _FrameInstIncrement (fi->template, fi->cur_no); /*endif*/ } /*endif*/ } /*endif*/ return (ret); } static FrameIter _FrameMgrAppendIter (FrameMgr fm, Iter it, int end) { FrameIter p = fm->iters; while (p && p->next) p = p->next; /*endwhile*/ if (!p) { fm->iters = p = (FrameIter) Xmalloc (sizeof (FrameIterRec)); } else { p->next = (FrameIter) Xmalloc (sizeof (FrameIterRec)); p = p->next; } /*endif*/ if (p) { p->iter = it; p->counting = False; p->counter = 0; p->end = end; p->next = NULL; } /*endif*/ return (p); } static void _FrameMgrRemoveIter (FrameMgr fm, FrameIter it) { FrameIter prev; FrameIter p; prev = NULL; p = fm->iters; while (p) { if (p == it) { if (prev) prev->next = p->next; else fm->iters = p->next; /*endif*/ Xfree (p); break; } /*endif*/ prev = p; p = p->next; } /*endwhile*/ } static FrameIter _FrameIterCounterIncr (FrameIter fitr, int i) { FrameIter p = fitr; while (p) { if (p->counting) { p->counter += i; if (p->counter >= p->end) { IterFixIteration (p->iter); return (p); } /*endif*/ } /*endif*/ p = p->next; } /*endwhile*/ return (NULL); } static void _IterStartWatch (Iter it, void *client_data) { FrameIter p = (FrameIter) client_data; p->counting = True; } static FmStatus FrameInstSetSize (FrameInst fi, int num) { ExtraData d; ExtraDataRec dr; XimFrameType type; register int i; i = 0; while ((type = fi->template[i].type) != EOL) { switch (type) { case BARRAY: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.num = -1; d = ChainMgrSetData (&fi->cm, i, dr); } /*endif*/ if (d->num == NO_VALUE) { d->num = num; return FmSuccess; } /*endif*/ break; case ITER: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.iter = IterInit (&fi->template[i + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, i, dr); } /*endif*/ if (IterSetSize (d->iter, num) == FmSuccess) return FmSuccess; /*endif*/ break; case POINTER: if ((d = ChainMgrGetExtraData(&fi->cm, i)) == NULL) { dr.fi = FrameInstInit(fi->template[i + 1].data); d = ChainMgrSetData(&fi->cm, i, dr); } /*endif*/ if (FrameInstSetSize(d->fi, num) == FmSuccess) return FmSuccess; /*endif*/ break; default: break; } /*endswitch*/ i = _FrameInstIncrement(fi->template, i); } /*endwhile*/ return FmNoMoreData; } static int FrameInstGetSize (FrameInst fi) { XimFrameType type; register int i; ExtraData d; ExtraDataRec dr; int ret_size; i = fi->cur_no; while ((type = fi->template[i].type) != EOL) { switch (type) { case BARRAY: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) return NO_VALUE; /*endif*/ return d->num; case ITER: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.iter = IterInit (&fi->template[i + 1], NO_VALUE); d = ChainMgrSetData (&fi->cm, i, dr); } /*endif*/ ret_size = IterGetSize(d->iter); if (ret_size != NO_VALID_FIELD) return ret_size; /*endif*/ break; case POINTER: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.fi = FrameInstInit (fi->template[i + 1].data); d = ChainMgrSetData (&fi->cm, i, dr); } /*endif*/ ret_size = FrameInstGetSize (d->fi); if (ret_size != NO_VALID_FIELD) return ret_size; /*endif*/ break; default: break; } /*endswitch*/ i = _FrameInstIncrement (fi->template, i); } /*endwhile*/ return NO_VALID_FIELD; } static FmStatus FrameInstSetIterCount (FrameInst fi, int num) { ExtraData d; ExtraDataRec dr; register int i; XimFrameType type; i = 0; while ((type = fi->template[i].type) != EOL) { switch (type) { case ITER: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.iter = IterInit (&fi->template[i + 1], num); (void)ChainMgrSetData (&fi->cm, i, dr); return FmSuccess; } /*endif*/ if (IterSetIterCount (d->iter, num) == FmSuccess) return FmSuccess; /*endif*/ break; case POINTER: if ((d = ChainMgrGetExtraData (&fi->cm, i)) == NULL) { dr.fi = FrameInstInit (fi->template[i + 1].data); d = ChainMgrSetData (&fi->cm, i, dr); } /*endif*/ if (FrameInstSetIterCount (d->fi, num) == FmSuccess) return FmSuccess; /*endif*/ break; default: break; } /*endswitch*/ i = _FrameInstIncrement (fi->template, i); } /*endwhile*/ return FmNoMoreData; } static int FrameInstGetTotalSize (FrameInst fi) { register int size; register int i; size = 0; i = 0; while (fi->template[i].type != EOL) { size += _FrameInstGetItemSize (fi, i); i = _FrameInstIncrement (fi->template, i); } /*endwhile*/ return size; } static void FrameInstReset (FrameInst fi) { ChainIterRec ci; int frame_no; ExtraDataRec d; ChainIterInit (&ci, &fi->cm); while (ChainIterGetNext (&ci, &frame_no, &d)) { register XimFrameType type; type = fi->template[frame_no].type; if (type == ITER) { if (d.iter) IterReset (d.iter); /*endif*/ } else if (type == POINTER) { if (d.fi) FrameInstReset (d.fi); /*endif*/ } /*endif*/ } /*endwhile*/ ChainIterFree (&ci); fi->cur_no = 0; } static Iter IterInit (XimFrame frame, int count) { Iter it; register XimFrameType type; it = (Iter) Xmalloc (sizeof (IterRec)); it->template = frame; it->max_count = (count == NO_VALUE) ? 0 : count; it->allow_expansion = (count == NO_VALUE); it->cur_no = 0; it->start_watch_proc = NULL; it->client_data = NULL; it->start_counter = False; type = frame->type; if (type & COUNTER_MASK) { /* COUNTER_XXX cannot be an item of a ITER */ Xfree (it); return NULL; } /*endif*/ switch (type) { case BIT8: case BIT16: case BIT32: case BIT64: /* Do nothing */ break; case BARRAY: case ITER: case POINTER: ChainMgrInit (&it->cm); break; default: Xfree (it); return NULL; /* This should never occur */ } /*endswitch*/ return it; } static void IterFree (Iter it) { switch (it->template->type) { case BARRAY: ChainMgrFree (&it->cm); break; case ITER: { ChainIterRec ci; int count; ExtraDataRec d; ChainIterInit (&ci, &it->cm); while (ChainIterGetNext (&ci, &count, &d)) IterFree (d.iter); /*endwhile*/ ChainIterFree (&ci); ChainMgrFree (&it->cm); } break; case POINTER: { ChainIterRec ci; int count; ExtraDataRec dr; ChainIterInit (&ci, &it->cm); while (ChainIterGetNext (&ci, &count, &dr)) FrameInstFree (dr.fi); /*endwhile*/ ChainIterFree (&ci); ChainMgrFree (&it->cm); } break; default: break; } /*endswitch*/ Xfree (it); } static Bool IterIsLoopEnd (Iter it, Bool *myself) { Bool ret = False; *myself = False; if (!it->allow_expansion && (it->cur_no == it->max_count)) { *myself = True; return True; } /*endif*/ if (it->template->type == POINTER) { ExtraData d = ChainMgrGetExtraData (&it->cm, it->cur_no); if (d) { if (FrameInstIsIterLoopEnd (d->fi)) { ret = True; } else { if (FrameInstIsEnd (d->fi)) { it->cur_no++; if (!it->allow_expansion && it->cur_no == it->max_count) { *myself = True; ret = True; } /*endif*/ } /*endif*/ } /*endif*/ } /*endif*/ } else if (it->template->type == ITER) { ExtraData d = ChainMgrGetExtraData (&it->cm, it->cur_no); if (d) { Bool yourself; if (IterIsLoopEnd (d->iter, &yourself)) ret = True; /*endif*/ } /*endif*/ } /*endif*/ return ret; } static XimFrameType IterGetNextType (Iter it, XimFrameTypeInfo info) { XimFrameType type = it->template->type; if (it->start_counter) { (*it->start_watch_proc) (it, it->client_data); it->start_counter = False; } /*endif*/ if (it->cur_no >= it->max_count) { if (it->allow_expansion) it->max_count = it->cur_no + 1; else return EOL; /*endif*/ } /*endif*/ switch (type) { case BIT8: case BIT16: case BIT32: case BIT64: it->cur_no++; return type; case BARRAY: if (info) { ExtraData d; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) info->num = NO_VALUE; else info->num = d->num; /*endif*/ } /*endif*/ it->cur_no++; return BARRAY; case ITER: { XimFrameType ret_type; ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) { dr.iter = IterInit (it->template + 1, NO_VALUE); d = ChainMgrSetData (&it->cm, it->cur_no, dr); } /*endif*/ ret_type = IterGetNextType (d->iter, info); if (ret_type == EOL) { it->cur_no++; ret_type = IterGetNextType (it, info); } /*endif*/ return ret_type; } case POINTER: { XimFrameType ret_type; ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, it->cur_no, dr); } /*endif*/ ret_type = FrameInstGetNextType (d->fi, info); if (ret_type == EOL) { it->cur_no++; ret_type = IterGetNextType (it, info); } /*endif*/ return ret_type; } default: return (XimFrameType) NULL; } /*endswitch*/ return (XimFrameType) NULL; /* This should never occur */ } static XimFrameType IterPeekNextType (Iter it, XimFrameTypeInfo info) { XimFrameType type = it->template->type; if (!it->allow_expansion && it->cur_no >= it->max_count) return (EOL); /*endif*/ switch (type) { case BIT8: case BIT16: case BIT32: case BIT64: return type; case BARRAY: if (info) { ExtraData d; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) info->num = NO_VALUE; else info->num = d->num; /*endif*/ } /*endif*/ return BARRAY; case ITER: { XimFrameType ret_type; ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) { dr.iter = IterInit (it->template + 1, NO_VALUE); d = ChainMgrSetData (&it->cm, it->cur_no, dr); } /*endif*/ ret_type = IterPeekNextType (d->iter, info); if (ret_type == EOL) ret_type = IterPeekNextType (it, info); /*endif*/ return ret_type; } case POINTER: { XimFrameType ret_type; ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, it->cur_no, dr); } /*endif*/ ret_type = FrameInstPeekNextType (d->fi, info); if (ret_type == EOL) ret_type = IterPeekNextType (it, info); /*endif*/ return (ret_type); } default: break; } /*endswitch*/ /* Reaching here is a bug! */ return (XimFrameType) NULL; } static FmStatus IterSetSize (Iter it, int num) { XimFrameType type; register int i; if (!it->allow_expansion && it->max_count == 0) return FmNoMoreData; /*endif*/ type = it->template->type; switch (type) { case BARRAY: { ExtraData d; ExtraDataRec dr; for (i = 0; i < it->max_count; i++) { if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.num = NO_VALUE; d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ if (d->num == NO_VALUE) { d->num = num; return FmSuccess; } /*endif*/ } /*endfor*/ if (it->allow_expansion) { ExtraDataRec dr; dr.num = num; ChainMgrSetData (&it->cm, it->max_count, dr); it->max_count++; return FmSuccess; } /*endif*/ } return FmNoMoreData; case ITER: { ExtraData d; ExtraDataRec dr; for (i = 0; i < it->max_count; i++) { if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.iter = IterInit (it->template + 1, NO_VALUE); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ if (IterSetSize (d->iter, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endfor*/ if (it->allow_expansion) { ExtraDataRec dr; dr.iter = IterInit (it->template + 1, NO_VALUE); ChainMgrSetData (&it->cm, it->max_count, dr); it->max_count++; if (IterSetSize(dr.iter, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endif*/ } return FmNoMoreData; case POINTER: { ExtraData d; ExtraDataRec dr; for (i = 0; i < it->max_count; i++) { if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ if (FrameInstSetSize (d->fi, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endfor*/ if (it->allow_expansion) { ExtraDataRec dr; dr.fi = FrameInstInit (it->template[1].data); ChainMgrSetData (&it->cm, it->max_count, dr); it->max_count++; if (FrameInstSetSize (dr.fi, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endif*/ } return FmNoMoreData; default: break; } /*endswitch*/ return FmNoMoreData; } static int IterGetSize (Iter it) { register int i; ExtraData d; ExtraDataRec dr; if (it->cur_no >= it->max_count) return NO_VALID_FIELD; /*endif*/ switch (it->template->type) { case BARRAY: if ((d = ChainMgrGetExtraData (&it->cm, it->cur_no)) == NULL) return NO_VALUE; /*endif*/ return d->num; case ITER: for (i = it->cur_no; i < it->max_count; i++) { int ret_size; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.iter = IterInit (it->template + 1, NO_VALUE); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ ret_size = IterGetSize (d->iter); if (ret_size != NO_VALID_FIELD) return ret_size; /*endif*/ } /*endfor*/ return NO_VALID_FIELD; case POINTER: for (i = it->cur_no; i < it->max_count; i++) { int ret_size; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ ret_size = FrameInstGetSize (d->fi); if (ret_size != NO_VALID_FIELD) return ret_size; /*endif*/ } /*endfor*/ return NO_VALID_FIELD; default: break; } /*endswitch*/ return NO_VALID_FIELD; } static FmStatus IterSetIterCount (Iter it, int num) { register int i; if (it->allow_expansion) { it->max_count = num; it->allow_expansion = False; return FmSuccess; } /*endif*/ if (it->max_count == 0) return FmNoMoreData; /*endif*/ switch (it->template->type) { case ITER: for (i = 0; i < it->max_count; i++) { ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData(&it->cm, i)) == NULL) { dr.iter = IterInit(it->template + 1, num); (void)ChainMgrSetData(&it->cm, i, dr); return FmSuccess; } /*endif*/ if (IterSetIterCount(d->iter, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endfor*/ if (it->allow_expansion) { ExtraDataRec dr; dr.iter = IterInit (it->template + 1, num); ChainMgrSetData (&it->cm, it->max_count, dr); it->max_count++; return FmSuccess; } /*endif*/ break; case POINTER: for (i = 0; i < it->max_count; i++) { ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ if (FrameInstSetIterCount (d->fi, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endfor*/ if (it->allow_expansion) { ExtraDataRec dr; dr.fi = FrameInstInit (it->template[1].data); ChainMgrSetData (&it->cm, it->max_count, dr); it->max_count++; if (FrameInstSetIterCount (dr.fi, num) == FmSuccess) return FmSuccess; /*endif*/ } /*endif*/ break; default: break; } /*endswitch*/ return FmNoMoreData; } static int IterGetTotalSize (Iter it) { register int size, i; XimFrameType type; if (it->allow_expansion) return NO_VALUE; /*endif*/ if (it->max_count == 0) return 0; /*endif*/ size = 0; type = it->template->type; switch (type) { case BIT8: size = it->max_count; break; case BIT16: size = it->max_count*2; break; case BIT32: size = it->max_count*4; break; case BIT64: size = it->max_count*8; break; case BARRAY: for (i = 0; i < it->max_count; i++) { register int num; ExtraData d; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) return NO_VALUE; /*endif*/ if ((num = d->num) == NO_VALUE) return NO_VALUE; /*endif*/ size += num; } /*endfor*/ break; case ITER: for (i = 0; i < it->max_count; i++) { register int num; ExtraData d; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) return NO_VALUE; /*endif*/ if ((num = IterGetTotalSize (d->iter)) == NO_VALUE) return NO_VALUE; /*endif*/ size += num; } /*endfor*/ break; case POINTER: for (i = 0; i < it->max_count; i++) { register int num; ExtraData d; ExtraDataRec dr; if ((d = ChainMgrGetExtraData (&it->cm, i)) == NULL) { dr.fi = FrameInstInit (it->template[1].data); d = ChainMgrSetData (&it->cm, i, dr); } /*endif*/ if ((num = FrameInstGetTotalSize (d->fi)) == NO_VALUE) return NO_VALUE; /*endif*/ size += num; } /*endfor*/ break; default: break; } /*endswitch*/ return size; } static void IterReset (Iter it) { ChainIterRec ci; int count; ExtraDataRec d; switch (it->template->type) { case ITER: ChainIterInit (&ci, &it->cm); while (ChainIterGetNext (&ci, &count, &d)) IterReset (d.iter); /*endwhile*/ ChainIterFree (&ci); break; case POINTER: ChainIterInit (&ci, &it->cm); while (ChainIterGetNext (&ci, &count, &d)) FrameInstReset (d.fi); /*endwhile*/ ChainIterFree (&ci); break; default: break; } /*endswitch*/ it->cur_no = 0; } static void IterSetStartWatch (Iter it, IterStartWatchProc proc, void *client_data) { it->start_watch_proc = proc; it->client_data = client_data; } static ExtraData ChainMgrSetData (ChainMgr cm, int frame_no, ExtraDataRec data) { Chain cur = (Chain) Xmalloc (sizeof (ChainRec)); cur->frame_no = frame_no; cur->d = data; cur->next = NULL; if (cm->top == NULL) { cm->top = cm->tail = cur; } else { cm->tail->next = cur; cm->tail = cur; } /*endif*/ return &cur->d; } static ExtraData ChainMgrGetExtraData (ChainMgr cm, int frame_no) { Chain cur; cur = cm->top; while (cur) { if (cur->frame_no == frame_no) return &cur->d; /*endif*/ cur = cur->next; } /*endwhile*/ return NULL; } static Bool ChainIterGetNext (ChainIter ci, int *frame_no, ExtraData d) { if (ci->cur == NULL) return False; /*endif*/ *frame_no = ci->cur->frame_no; *d = ci->cur->d; ci->cur = ci->cur->next; return True; } static int _FrameInstIncrement (XimFrame frame, int count) { XimFrameType type; type = frame[count].type; type &= ~COUNTER_MASK; switch (type) { case BIT8: case BIT16: case BIT32: case BIT64: case BARRAY: case PADDING: return count + 1; case POINTER: return count + 2; case ITER: return _FrameInstIncrement (frame, count + 1); default: break; } /*endswitch*/ return - 1; /* Error */ } static int _FrameInstDecrement (XimFrame frame, int count) { register int i; XimFrameType type; if (count == 0) return - 1; /* cannot decrement */ /*endif*/ if (count == 1) return 0; /* BOGUS - It should check the contents of data */ /*endif*/ type = frame[count - 2].type; type &= ~COUNTER_MASK; switch (type) { case BIT8: case BIT16: case BIT32: case BIT64: case BARRAY: case PADDING: case PTR_ITEM: return count - 1; case POINTER: case ITER: i = count - 3; while (i >= 0) { if (frame[i].type != ITER) return i + 1; /*endif*/ i--; } /*endwhile*/ return 0; default: break; } /*enswitch*/ return - 1; /* Error */ } static int _FrameInstGetItemSize (FrameInst fi, int cur_no) { XimFrameType type; type = fi->template[cur_no].type; type &= ~COUNTER_MASK; switch (type) { case BIT8: return 1; case BIT16: return 2; case BIT32: return 4; case BIT64: return 8; case BARRAY: { ExtraData d; if ((d = ChainMgrGetExtraData (&fi->cm, cur_no)) == NULL) return NO_VALUE; /*endif*/ if (d->num == NO_VALUE) return NO_VALUE; /*endif*/ return d->num; } case PADDING: { register int unit; register int number; register int size; register int i; unit = _UNIT ((long) fi->template[cur_no].data); number = _NUMBER ((long) fi->template[cur_no].data); i = cur_no; size = 0; while (number > 0) { i = _FrameInstDecrement (fi->template, i); size += _FrameInstGetItemSize (fi, i); number--; } /*endwhile*/ size = (unit - (size%unit))%unit; return size; } case ITER: { ExtraData d; int sub_size; if ((d = ChainMgrGetExtraData (&fi->cm, cur_no)) == NULL) return NO_VALUE; /*endif*/ sub_size = IterGetTotalSize (d->iter); if (sub_size == NO_VALUE) return NO_VALUE; /*endif*/ return sub_size; } case POINTER: { ExtraData d; int sub_size; if ((d = ChainMgrGetExtraData (&fi->cm, cur_no)) == NULL) return NO_VALUE; /*endif*/ sub_size = FrameInstGetTotalSize (d->fi); if (sub_size == NO_VALUE) return NO_VALUE; /*endif*/ return sub_size; } default: break; } /*endswitch*/ return NO_VALUE; } scim-master/modules/FrontEnd/IMdkit/FrameMgr.h000066400000000000000000000107271415264260100215330ustar00rootroot00000000000000/****************************************************************** Copyright 1993, 1994 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hiroyuki Miyamoto Digital Equipment Corporation miyamoto@jrd.dec.com This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef FRAMEMGR_H #define FRAMEMGR_H #include #include #include #if defined(VAXC) && !defined(__DECC) #define xim_externalref globalref #define xim_externaldef globaldef #else #define xim_externalref extern #define xim_externaldef #endif /* Definitions for FrameMgr */ #define COUNTER_MASK 0x10 typedef enum { BIT8 = 0x1, /* {CARD8* | INT8*} */ BIT16 = 0x2, /* {CARD16* | INT16*} */ BIT32 = 0x3, /* {CARD32* | INT32*} */ BIT64 = 0x4, /* {CARD64* | INT64*} */ BARRAY = 0x5, /* int*, void* */ ITER = 0x6, /* int* */ POINTER = 0x7, /* specifies next item is a PTR_ITEM */ PTR_ITEM = 0x8, /* specifies the item has a pointer */ /* BOGUS - POINTER and PTR_ITEM * In the current implementation, PTR_ITEM should be lead by * POINTER. But actually, it's just redundant logically. Someone * may remove this redundancy and POINTER from the enum member but he * should also modify the logic in FrameMgr program. */ PADDING = 0x9, /* specifies that a padding is needed. * This requires extra data in data field. */ EOL = 0xA, /* specifies the end of list */ COUNTER_BIT8 = COUNTER_MASK | 0x1, COUNTER_BIT16 = COUNTER_MASK | 0x2, COUNTER_BIT32 = COUNTER_MASK | 0x3, COUNTER_BIT64 = COUNTER_MASK | 0x4 } XimFrameType; /* Convenient macro */ #define _FRAME(a) {a, NULL} #define _PTR(p) {PTR_ITEM, (void *)p} /* PADDING's usage of data field * B15-B8 : Shows the number of effective items. * B7-B0 : Shows padding unit. ex) 04 shows 4 unit padding. */ #define _PAD2(n) {PADDING, (void*)((n)<<8|2)} #define _PAD4(n) {PADDING, (void*)((n)<<8|4)} #define FmCounterByte 0 #define FmCounterNumber 1 #define _BYTE_COUNTER(type, offset) \ {(COUNTER_MASK|type), (void*)((offset)<<8|FmCounterByte)} #define _NUMBER_COUNTER(type, offset) \ {(COUNTER_MASK|type), (void*)((offset)<<8|FmCounterNumber)} typedef struct _XimFrame { XimFrameType type; void* data; /* For PTR_ITEM and PADDING */ } XimFrameRec, *XimFrame; typedef enum { FmSuccess, FmEOD, FmInvalidCall, FmBufExist, FmCannotCalc, FmNoMoreData } FmStatus; typedef struct _FrameMgr *FrameMgr; FrameMgr FrameMgrInit(XimFrame frame, char* area, Bool byte_swap); void FrameMgrInitWithData(FrameMgr fm, XimFrame frame, void* area, Bool byte_swap); void FrameMgrFree(FrameMgr fm); FmStatus FrameMgrSetBuffer(FrameMgr, void*); FmStatus _FrameMgrPutToken(FrameMgr, void*, int); FmStatus _FrameMgrGetToken(FrameMgr, void*, int); FmStatus FrameMgrSetSize(FrameMgr, int); FmStatus FrameMgrSetIterCount(FrameMgr, int); FmStatus FrameMgrSetTotalSize(FrameMgr, int); int FrameMgrGetTotalSize(FrameMgr); int FrameMgrGetSize(FrameMgr); FmStatus FrameMgrSkipToken(FrameMgr, int); void FrameMgrReset(FrameMgr); Bool FrameMgrIsIterLoopEnd(FrameMgr, FmStatus*); #define FrameMgrPutToken(fm, obj) _FrameMgrPutToken((fm), &(obj), sizeof(obj)) #define FrameMgrGetToken(fm, obj) _FrameMgrGetToken((fm), &(obj), sizeof(obj)) #endif /* FRAMEMGR_H */ scim-master/modules/FrontEnd/IMdkit/IMConn.c000066400000000000000000000102021415264260100211350ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include #include "IMdkit.h" #include #define Va_start(a,b) va_start(a,b) static void _IMCountVaList(va_list var, int *total_count) { char *attr; *total_count = 0; for (attr = va_arg (var, char*); attr; attr = va_arg (var, char*)) { (void)va_arg (var, XIMArg *); ++(*total_count); } /*endfor*/ } static void _IMVaToNestedList(va_list var, int max_count, XIMArg **args_return) { XIMArg *args; char *attr; if (max_count <= 0) { *args_return = (XIMArg *) NULL; return; } /*endif*/ args = (XIMArg *) malloc ((unsigned) (max_count + 1)*sizeof (XIMArg)); *args_return = args; if (!args) return; /*endif*/ for (attr = va_arg (var, char*); attr; attr = va_arg (var, char *)) { args->name = attr; args->value = va_arg (var, XPointer); args++; } /*endfor*/ args->name = (char*)NULL; } static char *_FindModifiers (XIMArg *args) { char *modifiers; while (args->name) { if (strcmp (args->name, IMModifiers) == 0) { modifiers = args->value; return modifiers; } else { args++; } /*endif*/ } /*endwhile*/ return NULL; } XIMS _GetIMS (char *modifiers) { XIMS ims; extern IMMethodsRec Xi18n_im_methods; if ((ims = (XIMS) malloc (sizeof (XIMProtocolRec))) == (XIMS) NULL) return ((XIMS) NULL); /*endif*/ memset ((void *) ims, 0, sizeof (XIMProtocolRec)); if (modifiers == NULL || modifiers[0] == '\0' || strcmp (modifiers, "Xi18n") == 0) { ims->methods = &Xi18n_im_methods; return ims; } /*endif*/ XFree (ims); return (XIMS) NULL; } XIMS IMOpenIM (Display *display, ...) { va_list var; int total_count; XIMArg *args; XIMS ims; char *modifiers; Status ret; Va_start (var, display); _IMCountVaList (var, &total_count); va_end (var); Va_start (var, display); _IMVaToNestedList (var, total_count, &args); va_end (var); modifiers = _FindModifiers (args); ims = _GetIMS (modifiers); if (ims == (XIMS) NULL) return (XIMS) NULL; /*endif*/ ims->core.display = display; ims->protocol = (*ims->methods->setup) (display, args); XFree (args); if (ims->protocol == (void *) NULL) { XFree (ims); return (XIMS) NULL; } /*endif*/ ret = (ims->methods->openIM) (ims); if (ret == False) { XFree (ims); return (XIMS) NULL; } /*endif*/ return (XIMS) ims; } Status IMCloseIM (XIMS ims) { (ims->methods->closeIM) (ims); XFree (ims); return True; } scim-master/modules/FrontEnd/IMdkit/IMMethod.c000066400000000000000000000044301415264260100214660ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include "IMdkit.h" /* Public Function */ void IMForwardEvent (XIMS ims, XPointer call_data) { (ims->methods->forwardEvent) (ims, call_data); } void IMCommitString (XIMS ims, XPointer call_data) { (ims->methods->commitString) (ims, call_data); } int IMCallCallback (XIMS ims, XPointer call_data) { return (ims->methods->callCallback) (ims, call_data); } int IMPreeditStart (XIMS ims, XPointer call_data) { return (ims->methods->preeditStart) (ims, call_data); } int IMPreeditEnd (XIMS ims, XPointer call_data) { return (ims->methods->preeditEnd) (ims, call_data); } int IMSyncXlib(XIMS ims, XPointer call_data) { ims->sync = True; return (ims->methods->syncXlib) (ims, call_data); } scim-master/modules/FrontEnd/IMdkit/IMValues.c000066400000000000000000000064451415264260100215150ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include "IMdkit.h" #include #define Va_start(a,b) va_start(a,b) static void _IMCountVaList (va_list var, int *total_count) { char *attr; *total_count = 0; for (attr = va_arg (var, char *); attr; attr = va_arg (var, char *)) { (void)va_arg (var, XIMArg *); ++(*total_count); } /*endfor*/ } static void _IMVaToNestedList (va_list var, int max_count, XIMArg **args_return) { XIMArg *args; char *attr; if (max_count <= 0) { *args_return = (XIMArg *) NULL; return; } /*endif*/ args = (XIMArg *) malloc ((unsigned) (max_count + 1)*sizeof (XIMArg)); *args_return = args; if (!args) return; /*endif*/ for (attr = va_arg (var, char *); attr; attr = va_arg (var, char *)) { args->name = attr; args->value = va_arg (var, XPointer); args++; } /*endfor*/ args->name = (char *) NULL; } char *IMGetIMValues (XIMS ims, ...) { va_list var; int total_count; XIMArg *args; char *ret; Va_start (var, ims); _IMCountVaList (var, &total_count); va_end (var); Va_start (var, ims); _IMVaToNestedList (var, total_count, &args); va_end (var); ret = (*ims->methods->getIMValues) (ims, args); if (args) XFree ((char *) args); /*endif*/ return ret; } char *IMSetIMValues (XIMS ims, ...) { va_list var; int total_count; XIMArg *args; char *ret; Va_start (var, ims); _IMCountVaList (var, &total_count); va_end (var); Va_start (var, ims); _IMVaToNestedList (var, total_count, &args); va_end (var); ret = (*ims->methods->setIMValues) (ims, args); if (args) XFree ((char *) args); /*endif*/ return ret; } scim-master/modules/FrontEnd/IMdkit/IMdkit.h000066400000000000000000000103731415264260100212110ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef _IMdkit_h #define _IMdkit_h #include #ifdef __cplusplus extern "C" { #endif /* IM Attributes Name */ #define IMModifiers "modifiers" #define IMServerWindow "serverWindow" #define IMServerName "serverName" #define IMServerTransport "serverTransport" #define IMLocale "locale" #define IMInputStyles "inputStyles" #define IMProtocolHandler "protocolHandler" #define IMOnKeysList "onKeysList" #define IMOffKeysList "offKeysList" #define IMEncodingList "encodingList" #define IMFilterEventMask "filterEventMask" #define IMProtocolDepend "protocolDepend" /* Masks for IM Attributes Name */ #define I18N_IMSERVER_WIN 0x0001 /* IMServerWindow */ #define I18N_IM_NAME 0x0002 /* IMServerName */ #define I18N_IM_LOCALE 0x0004 /* IMLocale */ #define I18N_IM_ADDRESS 0x0008 /* IMServerTransport */ #define I18N_INPUT_STYLES 0x0010 /* IMInputStyles */ #define I18N_ON_KEYS 0x0020 /* IMOnKeysList */ #define I18N_OFF_KEYS 0x0040 /* IMOffKeysList */ #define I18N_IM_HANDLER 0x0080 /* IMProtocolHander */ #define I18N_ENCODINGS 0x0100 /* IMEncodingList */ #define I18N_FILTERMASK 0x0200 /* IMFilterEventMask */ #define I18N_PROTO_DEPEND 0x0400 /* IMProtoDepend */ typedef struct { char *name; XPointer value; } XIMArg; typedef struct { CARD32 keysym; CARD32 modifier; CARD32 modifier_mask; } XIMTriggerKey; typedef struct { unsigned short count_keys; XIMTriggerKey *keylist; } XIMTriggerKeys; typedef char *XIMEncoding; typedef struct { unsigned short count_encodings; XIMEncoding *supported_encodings; } XIMEncodings; typedef struct _XIMS *XIMS; typedef struct { void* (*setup) (Display *, XIMArg *); Status (*openIM) (XIMS); Status (*closeIM) (XIMS); char* (*setIMValues) (XIMS, XIMArg *); char* (*getIMValues) (XIMS, XIMArg *); Status (*forwardEvent) (XIMS, XPointer); Status (*commitString) (XIMS, XPointer); int (*callCallback) (XIMS, XPointer); int (*preeditStart) (XIMS, XPointer); int (*preeditEnd) (XIMS, XPointer); int (*syncXlib) (XIMS, XPointer); } IMMethodsRec, *IMMethods; typedef struct { Display *display; int screen; } IMCoreRec, *IMCore; typedef struct _XIMS { IMMethods methods; IMCoreRec core; Bool sync; void *protocol; } XIMProtocolRec; /* * X function declarations. */ extern XIMS IMOpenIM (Display *, ...); extern Status IMCloseIM (XIMS); extern char *IMSetIMValues (XIMS, ...); extern char *IMGetIMValues (XIMS, ...); void IMForwardEvent (XIMS, XPointer); void IMCommitString (XIMS, XPointer); int IMCallCallback (XIMS, XPointer); int IMPreeditStart (XIMS, XPointer); int IMPreeditEnd (XIMS, XPointer); int IMSyncXlib (XIMS, XPointer); #ifdef __cplusplus } #endif #endif /* IMdkit_h */ scim-master/modules/FrontEnd/IMdkit/Makefile.am000066400000000000000000000024431415264260100217120ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in noinst_HEADERS = FrameMgr.h \ Xi18n.h \ Xi18nX.h \ XimProto.h \ IMdkit.h \ XimFunc.h \ Xtrans.h noinst_LTLIBRARIES = libXimd.la libXimd_la_SOURCES = FrameMgr.c \ i18nIc.c \ i18nPtHdr.c \ i18nX.c \ IMValues.c \ i18nAttr.c \ i18nIMProto.c \ IMConn.c \ i18nClbk.c \ i18nMethod.c \ i18nOffsetCache.c \ i18nUtil.c \ IMMethod.c libXimd_la_CFLAGS = @X_CFLAGS@ libXimd_la_LDFLAGS = @X_LIBS@ scim-master/modules/FrontEnd/IMdkit/Xi18n.h000066400000000000000000000257441415264260100207470ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef _Xi18n_h #define _Xi18n_h #include #include #include #include "XimProto.h" /* * Minor Protocol Number for Extension Protocol */ #define XIM_EXTENSION 128 #define XIM_EXT_SET_EVENT_MASK (0x30) #define XIM_EXT_FORWARD_KEYEVENT (0x32) #define XIM_EXT_MOVE (0x33) #define COMMON_EXTENSIONS_NUM 3 #include #include #include "IMdkit.h" /* XI18N Valid Attribute Name Definition */ #define ExtForwardKeyEvent "extForwardKeyEvent" #define ExtMove "extMove" #define ExtSetEventMask "extSetEventMask" /* * Padding macro */ #define IMPAD(length) ((4 - ((length)%4))%4) /* * Target Atom for Transport Connection */ #define LOCALES "LOCALES" #define TRANSPORT "TRANSPORT" #define I18N_OPEN 0 #define I18N_SET 1 #define I18N_GET 2 typedef struct { char *transportname; int namelen; Bool (*checkAddr) (); } TransportSW; typedef struct _XIMPending { unsigned char *p; struct _XIMPending *next; } XIMPending; typedef struct _XimProtoHdr { CARD8 major_opcode; CARD8 minor_opcode; CARD16 length; } XimProtoHdr; typedef struct { CARD16 attribute_id; CARD16 type; CARD16 length; char *name; } XIMAttr; typedef struct { CARD16 attribute_id; CARD16 type; CARD16 length; char *name; } XICAttr; typedef struct { int attribute_id; CARD16 name_length; char *name; int value_length; void *value; int type; } XIMAttribute; typedef struct { int attribute_id; CARD16 name_length; char *name; int value_length; void *value; int type; } XICAttribute; typedef struct { int length; char *name; } XIMStr; typedef struct { CARD16 major_opcode; CARD16 minor_opcode; CARD16 length; char *name; } XIMExt; typedef struct { Atom key; unsigned long offset; } Xi18nAtomOffsetPair; typedef struct { size_t capacity; size_t size; Xi18nAtomOffsetPair *data; } Xi18nOffsetCache; typedef struct _Xi18nClient { int connect_id; CARD8 byte_order; /* '?': initial value 'B': for Big-Endian 'l': for little-endian */ int sync; XIMPending *pending; Xi18nOffsetCache offset_cache; void *trans_rec; /* contains transport specific data */ struct _Xi18nClient *next; } Xi18nClient; typedef struct _Xi18nCore *Xi18n; /* * Callback Struct for XIM Protocol */ typedef struct { int major_code; int minor_code; CARD16 connect_id; } IMAnyStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD8 byte_order; CARD16 major_version; CARD16 minor_version; } IMConnectStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; } IMDisConnectStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; XIMStr lang; } IMOpenStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; } IMCloseStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 number; XIMStr *extension; } IMQueryExtensionStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 number; char **im_attr_list; } IMGetIMValuesStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD16 preedit_attr_num; CARD16 status_attr_num; CARD16 ic_attr_num; XICAttribute *preedit_attr; XICAttribute *status_attr; XICAttribute *ic_attr; } IMChangeICStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; } IMDestroyICStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD16 length; char *commit_string; } IMResetICStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; } IMChangeFocusStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; BITMASK16 sync_bit; CARD16 serial_number; XEvent event; } IMForwardEventStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD16 flag; KeySym keysym; char *commit_string; } IMCommitStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD32 flag; CARD32 key_index; CARD32 event_mask; } IMTriggerNotifyStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 encoding_number; XIMStr *encoding; /* name information */ CARD16 encoding_info_number; XIMStr *encodinginfo; /* detailed information */ CARD16 category; /* #0 for name, #1 for detail */ INT16 enc_index; /* index of the encoding determined */ } IMEncodingNegotiationStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD32 flag; CARD32 forward_event_mask; CARD32 sync_event_mask; } IMSetEventMaskStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD32 filter_event_mask; CARD32 intercept_event_mask; CARD32 select_event_mask; CARD32 forward_event_mask; CARD32 sync_event_mask; } IMExtSetEventMaskStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; CARD16 x; CARD16 y; } IMMoveStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; BITMASK16 flag; CARD16 error_code; CARD16 str_length; CARD16 error_type; char *error_detail; } IMErrorStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; } IMPreeditStateStruct; /* Callbacks */ typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; } IMGeometryCBStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; union { int return_value; /* PreeditStart */ XIMPreeditDrawCallbackStruct draw; /* PreeditDraw */ XIMPreeditCaretCallbackStruct caret; /* PreeditCaret */ } todo; } IMPreeditCBStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; union { XIMStatusDrawCallbackStruct draw; /* StatusDraw */ } todo; } IMStatusCBStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; XIMStringConversionCallbackStruct strconv; } IMStrConvCBStruct; typedef struct { int major_code; int minor_code; CARD16 connect_id; CARD16 icid; } IMSyncXlibStruct; typedef union _IMProtocol { int major_code; IMAnyStruct any; IMConnectStruct imconnect; IMDisConnectStruct imdisconnect; IMOpenStruct imopen; IMCloseStruct imclose; IMQueryExtensionStruct queryext; IMGetIMValuesStruct getim; IMEncodingNegotiationStruct encodingnego; IMExtSetEventMaskStruct extsetevent; IMMoveStruct extmove; IMSetEventMaskStruct setevent; IMChangeICStruct changeic; IMDestroyICStruct destroyic; IMResetICStruct resetic; IMChangeFocusStruct changefocus; IMCommitStruct commitstring; IMForwardEventStruct forwardevent; IMTriggerNotifyStruct triggernotify; IMPreeditStateStruct preedit_state; IMErrorStruct imerror; IMGeometryCBStruct geometry_callback; IMPreeditCBStruct preedit_callback; IMStatusCBStruct status_callback; IMStrConvCBStruct strconv_callback; IMSyncXlibStruct sync_xlib; long pad[32]; } IMProtocol; typedef int (*IMProtoHandler) (XIMS, IMProtocol*); #define DEFAULT_FILTER_MASK (KeyPressMask) /* Xi18nAddressRec structure */ typedef struct _Xi18nAddressRec { Display *dpy; CARD8 im_byteOrder; /* byte order 'B' or 'l' */ /* IM Values */ long imvalue_mask; Window im_window; /* IMServerWindow */ char *im_name; /* IMServerName */ char *im_locale; /* IMLocale */ char *im_addr; /* IMServerTransport */ XIMStyles input_styles; /* IMInputStyles */ XIMTriggerKeys on_keys; /* IMOnKeysList */ XIMTriggerKeys off_keys; /* IMOffKeysList */ XIMEncodings encoding_list; /* IMEncodingList */ IMProtoHandler improto; /* IMProtocolHander */ long filterevent_mask; /* IMFilterEventMask */ /* XIM_SERVERS target Atoms */ Atom selection; Atom Localename; Atom Transportname; /* XIM/XIC Attr */ int im_attr_num; XIMAttr *xim_attr; int ic_attr_num; XICAttr *xic_attr; CARD16 preeditAttr_id; CARD16 statusAttr_id; CARD16 separatorAttr_id; /* XIMExtension List */ int ext_num; XIMExt extension[COMMON_EXTENSIONS_NUM]; /* transport specific connection address */ void *connect_addr; /* actual data is defined: XSpecRec in Xi18nX.h for X-based connection. TransSpecRec in Xi18nTr.h for Socket-based connection. */ /* clients table */ Xi18nClient *clients; Xi18nClient *free_clients; } Xi18nAddressRec; typedef struct _Xi18nMethodsRec { Bool (*begin) (XIMS); Bool (*end) (XIMS); Bool (*send) (XIMS, CARD16, unsigned char*, long); Bool (*wait) (XIMS, CARD16, CARD8, CARD8); Bool (*disconnect) (XIMS, CARD16); } Xi18nMethodsRec; typedef struct _Xi18nCore { Xi18nAddressRec address; Xi18nMethodsRec methods; } Xi18nCore; #endif scim-master/modules/FrontEnd/IMdkit/Xi18nX.h000066400000000000000000000036541415264260100210730ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef _Xi18nTrX_h #define _Xi18nTrX_h #define _XIM_PROTOCOL "_XIM_PROTOCOL" #define _XIM_XCONNECT "_XIM_XCONNECT" #define XCM_DATA_LIMIT 20 typedef struct _XClient { Window client_win; /* client window */ Window accept_win; /* accept window */ } XClient; typedef struct { Atom xim_request; Atom connect_request; } XSpecRec; #endif scim-master/modules/FrontEnd/IMdkit/XimFunc.h000066400000000000000000000065111415264260100214000ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef _XimFunc_h #define _XimFunc_h /* i18nAttr.c */ void _Xi18nInitAttrList (Xi18n i18n_core); void _Xi18nInitExtension(Xi18n i18n_core); /* i18nClbk.c */ int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data); int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data); int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data); int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data); int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data); int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data); int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data); int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data); int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data); /* i18nIc.c */ void _Xi18nChangeIC (XIMS ims, IMProtocol *call_data, unsigned char *p, int create_flag); void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p); /* i18nUtil.c */ int _Xi18nNeedSwap (Xi18n i18n_core, CARD16 connect_id); Xi18nClient *_Xi18nNewClient(Xi18n i18n_core); Xi18nClient *_Xi18nFindClient (Xi18n i18n_core, CARD16 connect_id); void _Xi18nDeleteClient (Xi18n i18n_core, CARD16 connect_id); void _Xi18nSendMessage (XIMS ims, CARD16 connect_id, CARD8 major_opcode, CARD8 minor_opcode, unsigned char *data, long length); void _Xi18nSendTriggerKey (XIMS ims, CARD16 connect_id); void _Xi18nSetEventMask (XIMS ims, CARD16 connect_id, CARD16 im_id, CARD16 ic_id, CARD32 forward_mask, CARD32 sync_mask); /* Xlib internal */ void _XRegisterFilterByType(Display*, Window, int, int, Bool (*filter)(Display*, Window, XEvent*, XPointer), XPointer); void _XUnregisterFilter(Display*, Window, Bool (*filter)(Display*, Window, XEvent*, XPointer), XPointer); #endif scim-master/modules/FrontEnd/IMdkit/XimProto.h000066400000000000000000000141611415264260100216100ustar00rootroot00000000000000/* $XConsortium: XimProto.h,v 1.2 94/01/20 18:02:24 rws Exp $ */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #ifndef _XIMPROTO_H #define _XIMPROTO_H /* * Default Preconnection selection target */ #define XIM_SERVERS "XIM_SERVERS" #define XIM_LOCALES "LOCALES" #define XIM_TRANSPORT "TRANSPORT" /* * categories in XIM_SERVERS */ #define XIM_SERVER_CATEGORY "@server=" #define XIM_LOCAL_CATEGORY "@locale=" #define XIM_TRANSPORT_CATEGORY "@transport=" /* * Xim implementation revision */ #define PROTOCOLMAJORVERSION 0 #define PROTOCOLMINORVERSION 0 /* * Major Protocol number */ #define XIM_CONNECT 1 #define XIM_CONNECT_REPLY 2 #define XIM_DISCONNECT 3 #define XIM_DISCONNECT_REPLY 4 #define XIM_AUTH_REQUIRED 10 #define XIM_AUTH_REPLY 11 #define XIM_AUTH_NEXT 12 #define XIM_AUTH_SETUP 13 #define XIM_AUTH_NG 14 #define XIM_ERROR 20 #define XIM_OPEN 30 #define XIM_OPEN_REPLY 31 #define XIM_CLOSE 32 #define XIM_CLOSE_REPLY 33 #define XIM_REGISTER_TRIGGERKEYS 34 #define XIM_TRIGGER_NOTIFY 35 #define XIM_TRIGGER_NOTIFY_REPLY 36 #define XIM_SET_EVENT_MASK 37 #define XIM_ENCODING_NEGOTIATION 38 #define XIM_ENCODING_NEGOTIATION_REPLY 39 #define XIM_QUERY_EXTENSION 40 #define XIM_QUERY_EXTENSION_REPLY 41 #define XIM_SET_IM_VALUES 42 #define XIM_SET_IM_VALUES_REPLY 43 #define XIM_GET_IM_VALUES 44 #define XIM_GET_IM_VALUES_REPLY 45 #define XIM_CREATE_IC 50 #define XIM_CREATE_IC_REPLY 51 #define XIM_DESTROY_IC 52 #define XIM_DESTROY_IC_REPLY 53 #define XIM_SET_IC_VALUES 54 #define XIM_SET_IC_VALUES_REPLY 55 #define XIM_GET_IC_VALUES 56 #define XIM_GET_IC_VALUES_REPLY 57 #define XIM_SET_IC_FOCUS 58 #define XIM_UNSET_IC_FOCUS 59 #define XIM_FORWARD_EVENT 60 #define XIM_SYNC 61 #define XIM_SYNC_REPLY 62 #define XIM_COMMIT 63 #define XIM_RESET_IC 64 #define XIM_RESET_IC_REPLY 65 #define XIM_GEOMETRY 70 #define XIM_STR_CONVERSION 71 #define XIM_STR_CONVERSION_REPLY 72 #define XIM_PREEDIT_START 73 #define XIM_PREEDIT_START_REPLY 74 #define XIM_PREEDIT_DRAW 75 #define XIM_PREEDIT_CARET 76 #define XIM_PREEDIT_CARET_REPLY 77 #define XIM_PREEDIT_DONE 78 #define XIM_STATUS_START 79 #define XIM_STATUS_DRAW 80 #define XIM_STATUS_DONE 81 /* * values for the flag of XIM_ERROR */ #define XIM_IMID_VALID 0x0001 #define XIM_ICID_VALID 0x0002 /* * XIM Error Code */ #define XIM_BadAlloc 1 #define XIM_BadStyle 2 #define XIM_BadClientWindow 3 #define XIM_BadFocusWindow 4 #define XIM_BadArea 5 #define XIM_BadSpotLocation 6 #define XIM_BadColormap 7 #define XIM_BadAtom 8 #define XIM_BadPixel 9 #define XIM_BadPixmap 10 #define XIM_BadName 11 #define XIM_BadCursor 12 #define XIM_BadProtocol 13 #define XIM_BadForeground 14 #define XIM_BadBackground 15 #define XIM_LocaleNotSupported 16 #define XIM_BadSomething 999 /* * byte order */ #define BIGENDIAN (CARD8) 0x42 /* MSB first */ #define LITTLEENDIAN (CARD8) 0x6c /* LSB first */ /* * values for the type of XIMATTR & XICATTR */ #define XimType_SeparatorOfNestedList 0 #define XimType_CARD8 1 #define XimType_CARD16 2 #define XimType_CARD32 3 #define XimType_STRING8 4 #define XimType_Window 5 #define XimType_XIMStyles 10 #define XimType_XRectangle 11 #define XimType_XPoint 12 #define XimType_XFontSet 13 #define XimType_XIMOptions 14 #define XimType_XIMHotKeyTriggers 15 #define XimType_XIMHotKeyState 16 #define XimType_XIMStringConversion 17 #define XimType_XIMValuesList 18 #define XimType_NEST 0x7FFF /* * values for the category of XIM_ENCODING_NEGOTIATON_REPLY */ #define XIM_Encoding_NameCategory 0 #define XIM_Encoding_DetailCategory 1 /* * value for the index of XIM_ENCODING_NEGOTIATON_REPLY */ #define XIM_Default_Encoding_IDX -1 /* * value for the flag of XIM_FORWARD_EVENT, XIM_COMMIT */ #define XimSYNCHRONUS 0x0001 #define XimLookupChars 0x0002 #define XimLookupKeySym 0x0004 #define XimLookupBoth 0x0006 /* * request packet header size */ #define XIM_HEADER_SIZE \ sizeof(CARD8) /* sizeof mejor-opcode */ \ + sizeof(CARD8) /* sizeof minor-opcode */ \ + sizeof(INT16) /* sizeof length */ /* * Client Message data size */ #define XIM_CM_DATA_SIZE 20 /* * XIM data structure */ typedef CARD16 BITMASK16; typedef CARD32 BITMASK32; typedef CARD32 EVENTMASK; typedef CARD16 XIMID; /* Input Method ID */ typedef CARD16 XICID; /* Input Context ID */ /* * Padding macro */ #define XIM_PAD(length) ((4 - ((length) % 4)) % 4) #define XIM_SET_PAD(ptr, length) \ { \ register int Counter = XIM_PAD((int)length); \ if (Counter) { \ register char *Ptr = (char *)(ptr) + (length); \ length += Counter; \ for (; Counter; --Counter, ++Ptr) \ *Ptr = '\0'; \ } \ } #endif scim-master/modules/FrontEnd/IMdkit/Xtrans.h000066400000000000000000000233661415264260100213150ustar00rootroot00000000000000/* $XConsortium: Xtrans.h,v 1.24 94/05/02 10:45:32 mor Exp $ */ /* Copyright (c) 1993, 1994 X Consortium Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. */ /* Copyright (c) 1993, 1994 NCR Corporation - Dayton, Ohio, USA * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name NCR not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. NCR makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * NCR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT SHALL NCR BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _XTRANS_H_ #define _XTRANS_H_ #include #include /* * Set the functions names according to where this code is being compiled. */ #ifdef X11_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _X11Trans##func #else #define TRANS(func) _X11Trans/**/func #endif #endif /* X11_t */ #ifdef XSERV_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _XSERVTrans##func #else #define TRANS(func) _XSERVTrans/**/func #endif #define X11_t #endif /* X11_t */ #ifdef XIM_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _XimdXTrans##func #else #define TRANS(func) _XimdXTrans/**/func #endif #endif /* XIM_t */ #ifdef FS_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _FSTrans##func #else #define TRANS(func) _FSTrans/**/func #endif #endif /* FS_t */ #ifdef FONT_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _FontTrans##func #else #define TRANS(func) _FontTrans/**/func #endif #endif /* FONT_t */ #ifdef ICE_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _IceTrans##func #else #define TRANS(func) _IceTrans/**/func #endif #endif /* ICE_t */ #ifdef TEST_t #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _TESTTrans##func #else #define TRANS(func) _TESTTrans/**/func #endif #endif /* TEST_t */ #if !defined(TRANS) #if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP) #define TRANS(func) _XTrans##func #else #define TRANS(func) _XTrans/**/func #endif #endif /* !TRANS */ /* * Create a single address structure that can be used wherever * an address structure is needed. struct sockaddr is not big enough * to hold a sockadd_un, so we create this definition to have a single * structure that is big enough for all the structures we might need. * * This structure needs to be independent of the socket/TLI interface used. */ #define XTRANS_MAX_ADDR_LEN 128 /* large enough to hold sun_path */ typedef struct { unsigned char addr[XTRANS_MAX_ADDR_LEN]; } Xtransaddr; #ifdef LONG64 typedef int BytesReadable_t; #else typedef long BytesReadable_t; #endif #if defined(WIN32) || (defined(USG) && !defined(CRAY) && !defined(umips) && !defined(MOTOROLA) && !defined(uniosu) && !defined(__sxg__)) /* * TRANS(Readv) and TRANS(Writev) use struct iovec, normally found * in Berkeley systems in . See the readv(2) and writev(2) * manual pages for details. */ struct iovec { caddr_t iov_base; int iov_len; }; #else #include #endif typedef struct _XtransConnInfo *XtransConnInfo; /* * Transport Option definitions */ #define TRANS_NONBLOCKING 1 #define TRANS_CLOSEONEXEC 2 /* * Return values of Connect (0 is success) */ #define TRANS_CONNECT_FAILED -1 #define TRANS_TRY_CONNECT_AGAIN -2 /* * Return values of Accept (0 is success) */ #define TRANS_ACCEPT_BAD_MALLOC -1 #define TRANS_ACCEPT_FAILED -2 #define TRANS_ACCEPT_MISC_ERROR -3 /* * ResetListener return values */ #define TRANS_RESET_NOOP 1 #define TRANS_RESET_NEW_FD 2 #define TRANS_RESET_FAILURE 3 /* * Function prototypes for the exposed interface */ #ifdef TRANS_CLIENT XtransConnInfo TRANS(OpenCOTSClient)( #if NeedFunctionPrototypes char * /* address */ #endif ); #endif /* TRANS_CLIENT */ #ifdef TRANS_SERVER XtransConnInfo TRANS(OpenCOTSServer)( #if NeedFunctionPrototypes char * /* address */ #endif ); #endif /* TRANS_SERVER */ #ifdef TRANS_CLIENT XtransConnInfo TRANS(OpenCLTSClient)( #if NeedFunctionPrototypes char * /* address */ #endif ); #endif /* TRANS_CLIENT */ #ifdef TRANS_SERVER XtransConnInfo TRANS(OpenCLTSServer)( #if NeedFunctionPrototypes char * /* address */ #endif ); #endif /* TRANS_SERVER */ #ifdef TRANS_REOPEN XtransConnInfo TRANS(ReopenCOTSServer)( #if NeedFunctionPrototypes int, /* trans_id */ int, /* fd */ char * /* port */ #endif ); XtransConnInfo TRANS(ReopenCLTSServer)( #if NeedFunctionPrototypes int, /* trans_id */ int, /* fd */ char * /* port */ #endif ); int TRANS(GetReopenInfo)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ int *, /* trans_id */ int *, /* fd */ char ** /* port */ #endif ); #endif /* TRANS_REOPEN */ int TRANS(SetOption)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ int, /* option */ int /* arg */ #endif ); #ifdef TRANS_SERVER int TRANS(CreateListener)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ char * /* port */ #endif ); int TRANS(ResetListener)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); XtransConnInfo TRANS(Accept)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ int * /* status */ #endif ); #endif /* TRANS_SERVER */ #ifdef TRANS_CLIENT int TRANS(Connect)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ char * /* address */ #endif ); #endif /* TRANS_CLIENT */ int TRANS(BytesReadable)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ BytesReadable_t * /* pend */ #endif ); int TRANS(Read)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ char *, /* buf */ int /* size */ #endif ); int TRANS(Write)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ char *, /* buf */ int /* size */ #endif ); int TRANS(Readv)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ struct iovec *, /* buf */ int /* size */ #endif ); int TRANS(Writev)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ struct iovec *, /* buf */ int /* size */ #endif ); int TRANS(Disconnect)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); int TRANS(Close)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); int TRANS(CloseForCloning)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); int TRANS(IsLocal)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); int TRANS(GetMyAddr)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ int *, /* familyp */ int *, /* addrlenp */ Xtransaddr ** /* addrp */ #endif ); int TRANS(GetPeerAddr)( #if NeedFunctionPrototypes XtransConnInfo, /* ciptr */ int *, /* familyp */ int *, /* addrlenp */ Xtransaddr ** /* addrp */ #endif ); int TRANS(GetConnectionNumber)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); #ifdef TRANS_SERVER int TRANS(MakeAllCOTSServerListeners)( #if NeedFunctionPrototypes char *, /* port */ int *, /* partial */ int *, /* count_ret */ XtransConnInfo ** /* ciptrs_ret */ #endif ); int TRANS(MakeAllCLTSServerListeners)( #if NeedFunctionPrototypes char *, /* port */ int *, /* partial */ int *, /* count_ret */ XtransConnInfo ** /* ciptrs_ret */ #endif ); #endif /* TRANS_SERVER */ /* * Function Prototypes for Utility Functions. */ #ifdef X11_t int TRANS(ConvertAddress)( #if NeedFunctionPrototypes int *, /* familyp */ int *, /* addrlenp */ Xtransaddr * /* addrp */ #endif ); #endif /* X11_t */ #ifdef ICE_t char * TRANS(GetMyNetworkId)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); char * TRANS(GetPeerNetworkId)( #if NeedFunctionPrototypes XtransConnInfo /* ciptr */ #endif ); #endif /* ICE_t */ #endif /* _XTRANS_H_ */ scim-master/modules/FrontEnd/IMdkit/i18nAttr.c000066400000000000000000000132451415264260100214360ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include "IMdkit.h" #include "Xi18n.h" #include "XimFunc.h" typedef struct { char *name; CARD16 type; } IMListOfAttr; typedef struct { char *name; CARD8 major_opcode; CARD8 minor_opcode; } IMExtList; IMListOfAttr Default_IMattr[] = { {XNQueryInputStyle, XimType_XIMStyles}, /* {XNQueryIMValuesList, XimType_XIMValuesList}, */ {(char *) NULL, (CARD16) 0} }; IMListOfAttr Default_ICattr[] = { {XNInputStyle, XimType_CARD32}, {XNClientWindow, XimType_Window}, {XNFocusWindow, XimType_Window}, {XNFilterEvents, XimType_CARD32}, {XNPreeditAttributes, XimType_NEST}, {XNStatusAttributes, XimType_NEST}, {XNFontSet, XimType_XFontSet}, {XNArea, XimType_XRectangle}, {XNAreaNeeded, XimType_XRectangle}, {XNColormap, XimType_CARD32}, {XNStdColormap, XimType_CARD32}, {XNForeground, XimType_CARD32}, {XNBackground, XimType_CARD32}, {XNBackgroundPixmap, XimType_CARD32}, {XNSpotLocation, XimType_XPoint}, {XNLineSpace, XimType_CARD32}, {XNPreeditState, XimType_CARD32}, {XNSeparatorofNestedList, XimType_SeparatorOfNestedList}, {(char *) NULL, 0} }; IMExtList Default_Extension[] = { {"XIM_EXT_MOVE", XIM_EXTENSION, XIM_EXT_MOVE}, {"XIM_EXT_SET_EVENT_MASK", XIM_EXTENSION, XIM_EXT_SET_EVENT_MASK}, {"XIM_EXT_FORWARD_KEYEVENT", XIM_EXTENSION, XIM_EXT_FORWARD_KEYEVENT}, {(char *) NULL, 0, 0} }; static void CountAttrList(IMListOfAttr *attr, int *total_count) { *total_count = 0; while (attr->name != NULL) { attr++; ++(*total_count); } } static XIMAttr *CreateAttrList (Xi18n i18n_core, IMListOfAttr *attr, int *total_count) { XIMAttr *args, *p; unsigned int buf_size; CountAttrList(attr, total_count); buf_size = (unsigned) (*total_count + 1)*sizeof (XIMAttr); args = (XIMAttr *) malloc (buf_size); if (!args) return (XIMAttr *) NULL; /*endif*/ memset (args, 0, buf_size); for (p = args; attr->name != NULL; attr++, p++) { p->name = attr->name; p->length = strlen (attr->name); p->type = (CARD16) attr->type; p->attribute_id = XrmStringToQuark (p->name); if (strcmp (p->name, XNPreeditAttributes) == 0) i18n_core->address.preeditAttr_id = p->attribute_id; else if (strcmp (p->name, XNStatusAttributes) == 0) i18n_core->address.statusAttr_id = p->attribute_id; else if (strcmp (p->name, XNSeparatorofNestedList) == 0) i18n_core->address.separatorAttr_id = p->attribute_id; /*endif*/ } /*endfor*/ p->name = (char *) NULL; return args; } void _Xi18nInitAttrList (Xi18n i18n_core) { XIMAttr *args; int total_count; /* init IMAttr list */ if (i18n_core->address.xim_attr) XFree ((char *)i18n_core->address.xim_attr); /*endif*/ args = CreateAttrList (i18n_core, Default_IMattr, &total_count); i18n_core->address.im_attr_num = total_count; i18n_core->address.xim_attr = (XIMAttr *)args; /* init ICAttr list */ if (i18n_core->address.xic_attr) XFree ((char *) i18n_core->address.xic_attr); /*endif*/ args = CreateAttrList (i18n_core, Default_ICattr, &total_count); i18n_core->address.ic_attr_num = total_count; i18n_core->address.xic_attr = (XICAttr *) args; } void _Xi18nInitExtension(Xi18n i18n_core) { register int i; IMExtList *extensions = (IMExtList *) Default_Extension; XIMExt *ext_list = (XIMExt *) i18n_core->address.extension; for (i = 0; extensions->name; i++, ext_list++, extensions++) { ext_list->major_opcode = extensions->major_opcode; ext_list->minor_opcode = extensions->minor_opcode; ext_list->name = extensions->name; ext_list->length = strlen(ext_list->name); } /*endfor*/ i18n_core->address.ext_num = i; } scim-master/modules/FrontEnd/IMdkit/i18nClbk.c000066400000000000000000000374641415264260100214100ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include "IMdkit.h" #include "Xi18n.h" #include "FrameMgr.h" #include "XimFunc.h" int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec geometry_fr[]; register int total_size; unsigned char *reply = NULL; IMGeometryCBStruct *geometry_CB = (IMGeometryCBStruct *) &call_data->geometry_callback; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (geometry_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, geometry_CB->icid); _Xi18nSendMessage (ims, connect_id, XIM_GEOMETRY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_GEOMETRY is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_start_fr[]; register int total_size; unsigned char *reply = NULL; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct*) &call_data->preedit_callback; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (preedit_start_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage(ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, preedit_CB->icid); _Xi18nSendMessage (ims, connect_id, XIM_PREEDIT_START, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); return True; } int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_draw_fr[]; register int total_size; unsigned char *reply = NULL; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct *) &call_data->preedit_callback; XIMPreeditDrawCallbackStruct *draw = (XIMPreeditDrawCallbackStruct *) &preedit_CB->todo.draw; CARD16 connect_id = call_data->any.connect_id; register int feedback_count; register int i; BITMASK32 status = 0x0; if (draw->text->length == 0) status = 0x00000001; else if (draw->text->feedback[0] == 0) status = 0x00000002; /*endif*/ fm = FrameMgrInit (preedit_draw_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set length of preedit string */ FrameMgrSetSize (fm, draw->text->length); /* set iteration count for list of feedback */ for (i = 0; draw->text->feedback[i] != 0; i++) ; /*endfor*/ feedback_count = i; FrameMgrSetIterCount (fm, feedback_count); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, preedit_CB->icid); FrameMgrPutToken (fm, draw->caret); FrameMgrPutToken (fm, draw->chg_first); FrameMgrPutToken (fm, draw->chg_length); FrameMgrPutToken (fm, status); FrameMgrPutToken (fm, draw->text->length); FrameMgrPutToken (fm, draw->text->string); for (i = 0; i < feedback_count; i++) FrameMgrPutToken (fm, draw->text->feedback[i]); /*endfor*/ _Xi18nSendMessage (ims, connect_id, XIM_PREEDIT_DRAW, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_PREEDIT_DRAW is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_caret_fr[]; register int total_size; unsigned char *reply = NULL; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct*) &call_data->preedit_callback; XIMPreeditCaretCallbackStruct *caret = (XIMPreeditCaretCallbackStruct *) &preedit_CB->todo.caret; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (preedit_caret_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, preedit_CB->icid); FrameMgrPutToken (fm, caret->position); FrameMgrPutToken (fm, caret->direction); FrameMgrPutToken (fm, caret->style); _Xi18nSendMessage (ims, connect_id, XIM_PREEDIT_CARET, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); return True; } int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_done_fr[]; register int total_size; unsigned char *reply = NULL; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct *) &call_data->preedit_callback; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (preedit_done_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, preedit_CB->icid); _Xi18nSendMessage (ims, connect_id, XIM_PREEDIT_DONE, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_PREEDIT_DONE is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec status_start_fr[]; register int total_size; unsigned char *reply = NULL; IMStatusCBStruct *status_CB = (IMStatusCBStruct*) &call_data->status_callback; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (status_start_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, status_CB->icid); _Xi18nSendMessage (ims, connect_id, XIM_STATUS_START, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_STATUS_START is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm = (FrameMgr)0; extern XimFrameRec status_draw_text_fr[]; extern XimFrameRec status_draw_bitmap_fr[]; register int total_size = 0; unsigned char *reply = NULL; IMStatusCBStruct *status_CB = (IMStatusCBStruct *) &call_data->status_callback; XIMStatusDrawCallbackStruct *draw = (XIMStatusDrawCallbackStruct *) &status_CB->todo.draw; CARD16 connect_id = call_data->any.connect_id; register int feedback_count; register int i; BITMASK32 status = 0x0; switch (draw->type) { case XIMTextType: fm = FrameMgrInit (status_draw_text_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); if (draw->data.text->length == 0) status = 0x00000001; else if (draw->data.text->feedback[0] == 0) status = 0x00000002; /*endif*/ /* set length of status string */ FrameMgrSetSize(fm, draw->data.text->length); /* set iteration count for list of feedback */ for (i = 0; draw->data.text->feedback[i] != 0; i++) ; /*endfor*/ feedback_count = i; FrameMgrSetIterCount (fm, feedback_count); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, status_CB->icid); FrameMgrPutToken (fm, draw->type); FrameMgrPutToken (fm, status); FrameMgrPutToken (fm, draw->data.text->length); FrameMgrPutToken (fm, draw->data.text->string); for (i = 0; i < feedback_count; i++) FrameMgrPutToken (fm, draw->data.text->feedback[i]); /*endfor*/ break; case XIMBitmapType: fm = FrameMgrInit (status_draw_bitmap_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, status_CB->icid); FrameMgrPutToken (fm, draw->data.bitmap); break; } /*endswitch*/ _Xi18nSendMessage (ims, connect_id, XIM_STATUS_DRAW, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_STATUS_DRAW is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec status_done_fr[]; register int total_size; unsigned char *reply = NULL; IMStatusCBStruct *status_CB = (IMStatusCBStruct *) &call_data->status_callback; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (status_done_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, status_CB->icid); _Xi18nSendMessage (ims, connect_id, XIM_STATUS_DONE, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_STATUS_DONE is an asyncronous protocol, so return immediately. */ return True; } int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec str_conversion_fr[]; register int total_size; unsigned char *reply = NULL; IMStrConvCBStruct *call_back = (IMStrConvCBStruct *) &call_data->strconv_callback; XIMStringConversionCallbackStruct *strconv = (XIMStringConversionCallbackStruct *) &call_back->strconv; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (str_conversion_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, connect_id); FrameMgrPutToken (fm, call_back->icid); FrameMgrPutToken (fm, strconv->position); FrameMgrPutToken (fm, strconv->direction); FrameMgrPutToken (fm, strconv->operation); _Xi18nSendMessage (ims, connect_id, XIM_STR_CONVERSION, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); /* XIM_STR_CONVERSION is a syncronous protocol, so should wait here for XIM_STR_CONVERSION_REPLY. */ if (i18n_core->methods.wait (ims, connect_id, XIM_STR_CONVERSION_REPLY, 0) == False) { return False; } /*endif*/ return True; } scim-master/modules/FrontEnd/IMdkit/i18nIMProto.c000066400000000000000000000476201415264260100220610ustar00rootroot00000000000000/****************************************************************** Copyright 1993, 1994 by Digital Equipment Corporation, Maynard, Massachusetts, Copyright 1993, 1994 by Hewlett-Packard Company Copyright 1994, 1995 by Sun Microsystems, Inc. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hiroyuki Miyamoto Digital Equipment Corporation miyamoto@jrd.dec.com Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ /* Protocol Packet frames */ #include "FrameMgr.h" /* Data type definitions */ static XimFrameRec ximattr_fr[] = { _FRAME(BIT16), /* attribute ID */ _FRAME(BIT16), /* type of the value */ _FRAME(BIT16), /* length of im-attribute */ _FRAME(BARRAY), /* im-attribute */ _PAD4(2), _FRAME(EOL), }; static XimFrameRec xicattr_fr[] = { _FRAME(BIT16), /* attribute ID */ _FRAME(BIT16), /* type of the value */ _FRAME(BIT16), /* length of ic-attribute */ _FRAME(BARRAY), /* ic-attribute */ _PAD4(2), _FRAME(EOL), }; static XimFrameRec ximattribute_fr[] = { _FRAME(BIT16), /* attribute ID */ _FRAME(BIT16), /* value length */ _FRAME(BARRAY), /* value */ _PAD4(1), _FRAME(EOL), }; static XimFrameRec xicattribute_fr[] = { _FRAME(BIT16), /* attribute ID */ _FRAME(BIT16), /* value length */ _FRAME(BARRAY), /* value */ _PAD4(1), _FRAME(EOL), }; static XimFrameRec ximtriggerkey_fr[] = { _FRAME(BIT32), /* keysym */ _FRAME(BIT32), /* modifier */ _FRAME(BIT32), /* modifier mask */ _FRAME(EOL), }; static XimFrameRec encodinginfo_fr[] = { _FRAME(BIT16), /* length of encoding info */ _FRAME(BARRAY), /* encoding info */ _PAD4(2), _FRAME(EOL), }; static XimFrameRec str_fr[] = { _FRAME(BIT8), /* number of byte */ _FRAME(BARRAY), /* string */ _FRAME(EOL), }; static XimFrameRec xpcs_fr[] = { _FRAME(BIT16), /* length of string in bytes */ _FRAME(BARRAY), /* string */ _PAD4(2), }; static XimFrameRec ext_fr[] = { _FRAME(BIT8), /* extension major-opcode */ _FRAME(BIT8), /* extension minor-opcode */ _FRAME(BIT16), /* length of extension name */ _FRAME(BARRAY), /* extension name */ _PAD4(1), _FRAME(EOL), }; static XimFrameRec inputstyle_fr[] = { _FRAME(BIT32), /* inputstyle */ _FRAME(EOL), }; /* Protocol definitions */ xim_externaldef XimFrameRec attr_head_fr[] = { _FRAME(BIT16), /* attribute id */ _FRAME(BIT16), /* attribute length */ _FRAME(EOL), }; xim_externaldef XimFrameRec short_fr[] = { _FRAME(BIT16), /* value */ _FRAME(EOL), }; xim_externaldef XimFrameRec long_fr[] = { _FRAME(BIT32), /* value */ _FRAME(EOL), }; xim_externaldef XimFrameRec xrectangle_fr[] = { _FRAME(BIT16), /* x */ _FRAME(BIT16), /* y */ _FRAME(BIT16), /* width */ _FRAME(BIT16), /* height */ _FRAME(EOL), }; xim_externaldef XimFrameRec xpoint_fr[] = { _FRAME(BIT16), /* x */ _FRAME(BIT16), /* y */ _FRAME(EOL), }; xim_externaldef XimFrameRec fontset_fr[] = { _FRAME(BIT16), /* length of base font name */ _FRAME(BARRAY), /* base font name list */ _PAD4(2), /* unused */ _FRAME(EOL), }; xim_externaldef XimFrameRec input_styles_fr[] = { _FRAME(BIT16), /* number of list */ _PAD4(1), /* unused */ _FRAME(ITER), /* XIMStyle list */ _FRAME(POINTER), _PTR(inputstyle_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec packet_header_fr[] = { _FRAME(BIT8), /* major-opcode */ _FRAME(BIT8), /* minor-opcode */ _FRAME(BIT16), /* length */ _FRAME(EOL), }; xim_externaldef XimFrameRec error_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _FRAME(BIT16), /* Error Code */ _FRAME(BIT16), /* length of error detail */ _FRAME(BIT16), /* type of error detail */ _FRAME(BARRAY), /* error detail */ _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec connect_fr[] = { _FRAME(BIT8), /* byte order */ _PAD2(1), /* unused */ _FRAME(BIT16), /* client-major-protocol-version */ _FRAME(BIT16), /* client-minor-protocol-version */ _BYTE_COUNTER(BIT16, 1), /* length of client-auth-protocol-names */ _FRAME(ITER), /* client-auth-protocol-names */ _FRAME(POINTER), _PTR(xpcs_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec connect_reply_fr[] = { _FRAME(BIT16), /* server-major-protocol-version */ _FRAME(BIT16), /* server-minor-protocol-version */ _FRAME(EOL), }; xim_externaldef XimFrameRec auth_required_fr[] = { _FRAME(BIT8), /* auth-protocol-index */ _FRAME(BIT8), /* auth-data1 */ _FRAME(BARRAY), /* auth-data2 */ _PAD4(3), _FRAME(EOL), }; xim_externaldef XimFrameRec auth_reply_fr[] = { _FRAME(BIT8), _FRAME(BARRAY), _PAD4(2), _FRAME(EOL), }; xim_externaldef XimFrameRec auth_next_fr[] = { _FRAME(BIT8), /* auth-data1 */ _FRAME(BARRAY), /* auth-data2 */ _PAD4(2), _FRAME(EOL), }; xim_externaldef XimFrameRec auth_setup_fr[] = { _BYTE_COUNTER(BIT16, 2), /* number of client-auth-protocol-names */ _PAD4(1), /* unused */ _FRAME(ITER), /* server-auth-protocol-names */ _FRAME(POINTER), _PTR(xpcs_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec auth_ng_fr[] = { _FRAME(EOL), }; xim_externaldef XimFrameRec disconnect_fr[] = { _FRAME(EOL), }; xim_externaldef XimFrameRec disconnect_reply_fr[] = { _FRAME(EOL), }; xim_externaldef XimFrameRec open_fr[] = { _FRAME(POINTER), /* locale name */ _PTR(str_fr), _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec open_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of IM attributes supported */ _FRAME(ITER), /* IM attribute supported */ _FRAME(POINTER), _PTR(ximattr_fr), _BYTE_COUNTER(BIT16, 2), /* number of IC attribute supported */ _PAD4(1), /* unused */ _FRAME(ITER), /* IC attribute supported */ _FRAME(POINTER), _PTR(xicattr_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec close_fr[] = { _FRAME(BIT16), /* input-method-ID */ _PAD4(1), /* unused */ _FRAME(EOL), }; xim_externaldef XimFrameRec close_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _PAD4(1), /* unused */ _FRAME(EOL), }; xim_externaldef XimFrameRec register_triggerkeys_fr[] = { _FRAME(BIT16), /* input-method-ID */ _PAD4(1), /* unused */ _BYTE_COUNTER(BIT32, 1), /* byte length of on-keys */ _FRAME(ITER), /* on-keys list */ _FRAME(POINTER), _PTR(ximtriggerkey_fr), _BYTE_COUNTER(BIT32, 1), /* byte length of off-keys */ _FRAME(ITER), /* off-keys list */ _FRAME(POINTER), _PTR(ximtriggerkey_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec trigger_notify_fr[] = { _FRAME(BIT16), /* input-mehotd-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* flag */ _FRAME(BIT32), /* index of keys list */ _FRAME(BIT32), /* client-select-event-mask */ _FRAME(EOL), }; xim_externaldef XimFrameRec trigger_notify_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec set_event_mask_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* forward-event-mask */ _FRAME(BIT32), /* synchronous-event-mask */ _FRAME(EOL), }; xim_externaldef XimFrameRec encoding_negotiation_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of encodings listed by name */ _FRAME(ITER), /* supported list of encoding in IM library */ _FRAME(POINTER), _PTR(str_fr), _PAD4(1), _BYTE_COUNTER(BIT16, 2), /* byte length of encodings listed by detailed data */ _PAD4(1), _FRAME(ITER), /* list of encodings supported in the IM library */ _FRAME(POINTER), _PTR(encodinginfo_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec encoding_negotiation_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* category of the encoding determined */ _FRAME(BIT16), /* index of the encoding dterminated */ _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec query_extension_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of extensions supported by the IM library */ _FRAME(ITER), /* extensions supported by the IM library */ _FRAME(POINTER), _PTR(str_fr), _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec query_extension_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of extensions supported by the IM server */ _FRAME(ITER), /* list of extensions supported by the IM server */ _FRAME(POINTER), _PTR(ext_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec get_im_values_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of im-attribute-id */ _FRAME(ITER), /* im-attribute-id */ _FRAME(BIT16), _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec get_im_values_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of im-attribute returned */ _FRAME(ITER), /* im-attribute returned */ _FRAME(POINTER), _PTR(ximattribute_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec create_ic_fr[] = { _FRAME(BIT16), /* input-method-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of ic-attributes */ _FRAME(ITER), /* ic-attributes */ _FRAME(POINTER), _PTR(xicattribute_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec create_ic_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec destroy_ic_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec destroy_ic_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec set_ic_values_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _BYTE_COUNTER(BIT16, 2), /* byte length of ic-attributes */ _PAD4(1), _FRAME(ITER), /* ic-attribute */ _FRAME(POINTER), _PTR(xicattribute_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec set_ic_values_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec get_ic_values_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _BYTE_COUNTER(BIT16, 1), /* byte length of ic-attribute-id */ _FRAME(ITER), /* ic-attribute */ _FRAME(BIT16), _PAD4(2), _FRAME(EOL), }; xim_externaldef XimFrameRec get_ic_values_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _BYTE_COUNTER(BIT16, 2), /* byte length of ic-attribute */ _PAD4(1), _FRAME(ITER), /* ic-attribute */ _FRAME(POINTER), _PTR(xicattribute_fr), _FRAME(EOL), }; xim_externaldef XimFrameRec set_ic_focus_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec unset_ic_focus_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec forward_event_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _FRAME(BIT16), /* sequence number */ _FRAME(EOL), }; xim_externaldef XimFrameRec wire_keyevent_fr[] = { _FRAME(BIT8), /* type */ _FRAME(BIT8), /* detail */ _FRAME(BIT16), /* serial number */ _FRAME(BIT32), /* time */ _FRAME(BIT32), /* root */ _FRAME(BIT32), /* window */ _FRAME(BIT32), /* subwindow */ _FRAME(BIT16), /* rootX */ _FRAME(BIT16), /* rootY */ _FRAME(BIT16), /* X */ _FRAME(BIT16), /* Y */ _FRAME(BIT16), /* state */ _FRAME(BIT8), /* sameScreen */ _FRAME(EOL), }; xim_externaldef XimFrameRec sync_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec sync_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; #if 0 xim_externaldef XimFrameRec commit_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _FRAME(BIT16), /* byte length of committed string */ _FRAME(BARRAY), /* committed string */ _PAD4(1), _BYTE_COUNTER(BIT16, 1), /* byte length of keysym */ _FRAME(ITER), /* keysym */ _FRAME(BIT32), _PAD4(1), _FRAME(EOL), }; #endif xim_externaldef XimFrameRec commit_chars_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _FRAME(BIT16), /* byte length of committed string */ _FRAME(BARRAY), /* committed string */ _PAD4(1), _FRAME(EOL), }; xim_externaldef XimFrameRec commit_both_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _PAD4(1), /* unused */ _FRAME(BIT32), /* keysym */ _FRAME(BIT16), /* byte length of committed string */ _FRAME(BARRAY), /* committed string */ _PAD4(2), _FRAME(EOL), }; xim_externaldef XimFrameRec reset_ic_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec reset_ic_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* byte length of committed string */ _FRAME(BARRAY), /* committed string */ _PAD4(2), _FRAME(EOL), }; xim_externaldef XimFrameRec geometry_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec str_conversion_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* XIMStringConversionPosition */ _FRAME(BIT32), /* XIMStringConversionType */ _FRAME(BIT32), /* XIMStringConversionOperation */ _FRAME(BIT16), /* length to multiply the XIMStringConversionType */ _FRAME(BIT16), /* length of the string to be substituted */ #if 0 _FRAME(BARRAY), /* string */ _PAD4(1), #endif _FRAME(EOL), }; xim_externaldef XimFrameRec str_conversion_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* XIMStringConversionFeedback */ _FRAME(BIT16), /* length of the retrieved string */ _FRAME(BARRAY), /* retrieved string */ _PAD4(2), _BYTE_COUNTER(BIT16, 2), /* number of feedback array */ _PAD4(1), _FRAME(ITER), /* feedback array */ _FRAME(BIT32), _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_start_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_start_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* return value */ _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_draw_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* caret */ _FRAME(BIT32), /* chg_first */ _FRAME(BIT32), /* chg_length */ _FRAME(BIT32), /* status */ _FRAME(BIT16), /* length of preedit string */ _FRAME(BARRAY), /* preedit string */ _PAD4(2), _BYTE_COUNTER(BIT16, 2), /* number of feedback array */ _PAD4(1), _FRAME(ITER), /* feedback array */ _FRAME(BIT32), _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_caret_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* position */ _FRAME(BIT32), /* direction */ _FRAME(BIT32), /* style */ _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_caret_reply_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* position */ _FRAME(EOL), }; xim_externaldef XimFrameRec preedit_done_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec status_start_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec status_draw_text_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* type */ _FRAME(BIT32), /* status */ _FRAME(BIT16), /* length of status string */ _FRAME(BARRAY), /* status string */ _PAD4(2), _BYTE_COUNTER(BIT16, 2), /* number of feedback array */ _PAD4(1), _FRAME(ITER), /* feedback array */ _FRAME(BIT32), _FRAME(EOL), }; xim_externaldef XimFrameRec status_draw_bitmap_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* type */ _FRAME(BIT32), /* pixmap data */ _FRAME(EOL), }; xim_externaldef XimFrameRec status_done_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(EOL), }; xim_externaldef XimFrameRec ext_set_event_mask_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT32), /* filter-event-mask */ _FRAME(BIT32), /* intercept-event-mask */ _FRAME(BIT32), /* select-event-mask */ _FRAME(BIT32), /* forward-event-mask */ _FRAME(BIT32), /* synchronous-event-mask */ _FRAME(EOL), }; xim_externaldef XimFrameRec ext_forward_keyevent_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* flag */ _FRAME(BIT16), /* sequence number */ _FRAME(BIT8), /* xEvent.u.u.type */ _FRAME(BIT8), /* keycode */ _FRAME(BIT16), /* state */ _FRAME(BIT32), /* time */ _FRAME(BIT32), /* window */ _FRAME(EOL), }; xim_externaldef XimFrameRec ext_move_fr[] = { _FRAME(BIT16), /* input-method-ID */ _FRAME(BIT16), /* input-context-ID */ _FRAME(BIT16), /* X */ _FRAME(BIT16), /* Y */ _FRAME(EOL), }; scim-master/modules/FrontEnd/IMdkit/i18nIc.c000066400000000000000000001015361415264260100210600ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include "IMdkit.h" #include "Xi18n.h" #include "FrameMgr.h" #include "XimFunc.h" #define IC_SIZE 64 /* Set IC values */ static void SetCardAttribute (XICAttribute *value_ret, char *p, XICAttr *ic_attr, int value_length, int need_swap, void **value_buf) { FrameMgr fm; /*endif*/ if (value_length == sizeof (CARD8)) { memmove (*value_buf, p, value_length); } else if (value_length == sizeof (CARD16)) { INT16 value; extern XimFrameRec short_fr[]; fm = FrameMgrInit (short_fr, (char *) p, need_swap); /* get data */ FrameMgrGetToken (fm, value); FrameMgrFree (fm); memmove (*value_buf, &value, value_length); } else if (value_length == sizeof(CARD32)) { INT32 value; extern XimFrameRec long_fr[]; fm = FrameMgrInit (long_fr, (char *) p, need_swap); /* get data */ FrameMgrGetToken (fm, value); FrameMgrFree (fm); memmove (*value_buf, &value, value_length); } /*endif*/ value_ret->attribute_id = ic_attr->attribute_id; value_ret->name = ic_attr->name; value_ret->name_length = ic_attr->length; value_ret->type = ic_attr->type; value_ret->value_length = value_length; value_ret->value = *value_buf; *value_buf += value_length; } static void SetFontAttribute (XICAttribute *value_ret, char *p, XICAttr *ic_attr, int value_length, int need_swap, void **value_buf) { char *base_name; CARD16 base_length; FrameMgr fm; extern XimFrameRec fontset_fr[]; fm = FrameMgrInit (fontset_fr, (char *) p, need_swap); /* get data */ FrameMgrGetToken (fm, base_length); FrameMgrSetSize (fm, base_length); /*endif*/ FrameMgrGetToken (fm, base_name); FrameMgrFree(fm); strncpy ((char *) (*value_buf), base_name, base_length); ((char *) *value_buf)[base_length] = (char) 0; value_ret->attribute_id = ic_attr->attribute_id; value_ret->name = ic_attr->name; value_ret->name_length = ic_attr->length; value_ret->type = ic_attr->type; value_ret->value_length = value_length; value_ret->value = *value_buf; *value_buf += (base_length + 1); } static void SetPointAttribute (XICAttribute *value_ret, char *p, XICAttr *ic_attr, int value_length, int need_swap, void **value_buf) { XPoint *buf; FrameMgr fm; extern XimFrameRec xpoint_fr[]; buf = (XPoint *) (*value_buf); fm = FrameMgrInit (xpoint_fr, (char *) p, need_swap); /* get data */ FrameMgrGetToken (fm, buf->x); FrameMgrGetToken (fm, buf->y); FrameMgrFree (fm); value_ret->attribute_id = ic_attr->attribute_id; value_ret->name = ic_attr->name; value_ret->name_length = ic_attr->length; value_ret->type = ic_attr->type; value_ret->value_length = value_length; value_ret->value = (char *) buf; *value_buf += value_length; } static void SetRectAttribute (XICAttribute *value_ret, char *p, XICAttr *ic_attr, int value_length, int need_swap, void **value_buf) { XRectangle *buf; FrameMgr fm; extern XimFrameRec xrectangle_fr[]; buf = (XRectangle *) (*value_buf); fm = FrameMgrInit (xrectangle_fr, (char *) p, need_swap); /* get data */ FrameMgrGetToken (fm, buf->x); FrameMgrGetToken (fm, buf->y); FrameMgrGetToken (fm, buf->width); FrameMgrGetToken (fm, buf->height); FrameMgrFree (fm); value_ret->attribute_id = ic_attr->attribute_id; value_ret->name = ic_attr->name; value_ret->name_length = ic_attr->length; value_ret->type = ic_attr->type; value_ret->value_length = value_length; value_ret->value = (char *) buf; *value_buf += value_length; } #if 0 static void SetHotKeyAttribute (XICAttribute *value_ret, char *p, XICAttr *ic_attr, int value_length, int need_swap, void **value_buf) { INT32 list_number; XIMTriggerKey *hotkeys; memmove (&list_number, p, sizeof(INT32)); p += sizeof(INT32); hotkeys = (XIMTriggerKey *) (*value_buf); memmove (hotkeys, p, list_number*sizeof (XIMTriggerKey)); value_ret->attribute_id = ic_attr->attribute_id; value_ret->name = ic_attr->name; value_ret->name_length = ic_attr->length; value_ret->type = ic_attr->type; value_ret->value_length = value_length; value_ret->value = (char *) hotkeys; *value_buf += value_length; } #endif /* get IC values */ static void GetAttrHeader (unsigned char *rec, XICAttribute *list, int need_swap) { FrameMgr fm; extern XimFrameRec attr_head_fr[]; fm = FrameMgrInit (attr_head_fr, (char *) rec, need_swap); /* put data */ FrameMgrPutToken (fm, list->attribute_id); FrameMgrPutToken (fm, list->value_length); FrameMgrFree (fm); } static void GetCardAttribute (char *rec, XICAttribute *list, int need_swap) { FrameMgr fm; unsigned char *recp = (unsigned char *) rec; GetAttrHeader (recp, list, need_swap); recp += sizeof (CARD16)*2; if (list->value_length == sizeof (CARD8)) { memmove (recp, list->value, list->value_length); } else if (list->value_length == sizeof (CARD16)) { INT16 *value = (INT16 *) list->value; extern XimFrameRec short_fr[]; fm = FrameMgrInit (short_fr, (char *) recp, need_swap); /* put data */ FrameMgrPutToken (fm, *value); FrameMgrFree (fm); } else if (list->value_length == sizeof (CARD32)) { INT32 *value = (INT32 *) list->value; extern XimFrameRec long_fr[]; fm = FrameMgrInit (long_fr, (char *) recp, need_swap); /* put data */ FrameMgrPutToken (fm, *value); FrameMgrFree (fm); } /*endif*/ } static void GetFontAttribute(char *rec, XICAttribute *list, int need_swap) { FrameMgr fm; extern XimFrameRec fontset_fr[]; char *base_name = (char *) list->value; unsigned char *recp = (unsigned char *) rec; GetAttrHeader (recp, list, need_swap); recp += sizeof (CARD16)*2; fm = FrameMgrInit (fontset_fr, (char *)recp, need_swap); /* put data */ FrameMgrSetSize (fm, list->value_length); FrameMgrPutToken (fm, list->value_length); FrameMgrPutToken (fm, base_name); FrameMgrFree (fm); } static void GetRectAttribute (char *rec, XICAttribute *list, int need_swap) { FrameMgr fm; extern XimFrameRec xrectangle_fr[]; XRectangle *rect = (XRectangle *) list->value; unsigned char *recp = (unsigned char *) rec; GetAttrHeader (recp, list, need_swap); recp += sizeof(CARD16)*2; fm = FrameMgrInit (xrectangle_fr, (char *) recp, need_swap); /* put data */ FrameMgrPutToken (fm, rect->x); FrameMgrPutToken (fm, rect->y); FrameMgrPutToken (fm, rect->width); FrameMgrPutToken (fm, rect->height); FrameMgrFree (fm); } static void GetPointAttribute (char *rec, XICAttribute *list, int need_swap) { FrameMgr fm; extern XimFrameRec xpoint_fr[]; XPoint *rect = (XPoint *) list->value; unsigned char *recp = (unsigned char *) rec; GetAttrHeader (recp, list, need_swap); recp += sizeof(CARD16)*2; fm = FrameMgrInit (xpoint_fr, (char *) recp, need_swap); /* put data */ FrameMgrPutToken (fm, rect->x); FrameMgrPutToken (fm, rect->y); FrameMgrFree (fm); } static int ReadICValue (Xi18n i18n_core, CARD16 icvalue_id, int value_length, void *p, XICAttribute *value_ret, CARD16 *number_ret, int need_swap, void **value_buf) { XICAttr *ic_attr = i18n_core->address.xic_attr; int i; *number_ret = (CARD16) 0; for (i = 0; i < i18n_core->address.ic_attr_num; i++, ic_attr++) { if (ic_attr->attribute_id == icvalue_id) break; /*endif*/ } /*endfor*/ switch (ic_attr->type) { case XimType_NEST: { int total_length = 0; CARD16 attribute_ID; INT16 attribute_length; unsigned char *p1 = (unsigned char *) p; CARD16 ic_len = 0; CARD16 number; FrameMgr fm; extern XimFrameRec attr_head_fr[]; while (total_length < value_length) { fm = FrameMgrInit (attr_head_fr, (char *) p1, need_swap); /* get data */ FrameMgrGetToken (fm, attribute_ID); FrameMgrGetToken (fm, attribute_length); FrameMgrFree (fm); p1 += sizeof (CARD16)*2; ReadICValue (i18n_core, attribute_ID, attribute_length, p1, (value_ret + ic_len), &number, need_swap, value_buf); ic_len++; *number_ret += number; p1 += attribute_length; p1 += IMPAD (attribute_length); total_length += (CARD16) sizeof(CARD16)*2 + (INT16) attribute_length + IMPAD (attribute_length); } /*endwhile*/ return ic_len; } case XimType_CARD8: case XimType_CARD16: case XimType_CARD32: case XimType_Window: SetCardAttribute (value_ret, p, ic_attr, value_length, need_swap, value_buf); *number_ret = (CARD16) 1; return *number_ret; case XimType_XFontSet: SetFontAttribute (value_ret, p, ic_attr, value_length, need_swap, value_buf); *number_ret = (CARD16) 1; return *number_ret; case XimType_XRectangle: SetRectAttribute (value_ret, p, ic_attr, value_length, need_swap, value_buf); *number_ret = (CARD16) 1; return *number_ret; case XimType_XPoint: SetPointAttribute(value_ret, p, ic_attr, value_length, need_swap, value_buf); *number_ret = (CARD16) 1; return *number_ret; #if 0 case XimType_XIMHotKeyTriggers: SetHotKeyAttribute (value_ret, p, ic_attr, value_length, need_swap, value_buf); *number_ret = (CARD16) 1; return *number_ret; #endif } /*endswitch*/ return 0; } static XICAttribute *CreateNestedList (CARD16 attr_id, XICAttribute *list, int number, int need_swap) { XICAttribute *nest_list = NULL; register int i; char *values = NULL; char *valuesp; int value_length = 0; if (number == 0) return NULL; /*endif*/ for (i = 0; i < number; i++) { value_length += sizeof (CARD16)*2; value_length += list[i].value_length; value_length += IMPAD (list[i].value_length); } /*endfor*/ if ((values = (char *) malloc (value_length)) == NULL) return NULL; /*endif*/ memset (values, 0, value_length); valuesp = values; for (i = 0; i < number; i++) { switch (list[i].type) { case XimType_CARD8: case XimType_CARD16: case XimType_CARD32: case XimType_Window: GetCardAttribute (valuesp, &list[i], need_swap); break; case XimType_XFontSet: GetFontAttribute (valuesp, &list[i], need_swap); break; case XimType_XRectangle: GetRectAttribute (valuesp, &list[i], need_swap); break; case XimType_XPoint: GetPointAttribute (valuesp, &list[i], need_swap); break; #if 0 case XimType_XIMHotKeyTriggers: GetHotKeyAttribute (valuesp, &list[i], need_swap); break; #endif } /*endswitch*/ valuesp += sizeof (CARD16)*2; valuesp += list[i].value_length; valuesp += IMPAD(list[i].value_length); } /*endfor*/ nest_list = (XICAttribute *) malloc (sizeof (XICAttribute)); if (nest_list == NULL) return NULL; /*endif*/ memset (nest_list, 0, sizeof (XICAttribute)); nest_list->value = (void *) malloc (value_length); if (nest_list->value == NULL) return NULL; /*endif*/ memset (nest_list->value, 0, sizeof (value_length)); nest_list->attribute_id = attr_id; nest_list->value_length = value_length; memmove (nest_list->value, values, value_length); XFree (values); return nest_list; } static Bool IsNestedList (Xi18n i18n_core, CARD16 icvalue_id) { XICAttr *ic_attr = i18n_core->address.xic_attr; int i; for (i = 0; i < i18n_core->address.ic_attr_num; i++, ic_attr++) { if (ic_attr->attribute_id == icvalue_id) { if (ic_attr->type == XimType_NEST) return True; /*endif*/ return False; } /*endif*/ } /*endfor*/ return False; } static Bool IsSeparator (Xi18n i18n_core, CARD16 icvalue_id) { return (i18n_core->address.separatorAttr_id == icvalue_id); } static int GetICValue (Xi18n i18n_core, XICAttribute *attr_ret, CARD16 *id_list, int list_num) { XICAttr *xic_attr = i18n_core->address.xic_attr; register int i; register int j; register int n; i = n = 0; if (IsNestedList (i18n_core, id_list[i])) { i++; while (i < list_num && !IsSeparator (i18n_core, id_list[i])) { for (j = 0; j < i18n_core->address.ic_attr_num; j++) { if (xic_attr[j].attribute_id == id_list[i]) { attr_ret[n].attribute_id = xic_attr[j].attribute_id; attr_ret[n].name_length = xic_attr[j].length; attr_ret[n].name = malloc (xic_attr[j].length + 1); strcpy(attr_ret[n].name, xic_attr[j].name); attr_ret[n].type = xic_attr[j].type; n++; i++; break; } /*endif*/ } /*endfor*/ } /*endwhile*/ } else { for (j = 0; j < i18n_core->address.ic_attr_num; j++) { if (xic_attr[j].attribute_id == id_list[i]) { attr_ret[n].attribute_id = xic_attr[j].attribute_id; attr_ret[n].name_length = xic_attr[j].length; attr_ret[n].name = malloc (xic_attr[j].length + 1); strcpy(attr_ret[n].name, xic_attr[j].name); attr_ret[n].type = xic_attr[j].type; n++; break; } /*endif*/ } /*endfor*/ } /*endif*/ return n; } static void SwapAttributes (XICAttribute *list, int number){ FrameMgr fm; CARD16 c16; extern XimFrameRec short_fr[]; CARD32 c32; extern XimFrameRec long_fr[]; XPoint xpoint; extern XimFrameRec xpoint_fr[]; XRectangle xrect; extern XimFrameRec xrectangle_fr[]; int i; for (i = 0; i < number; ++i, ++list) { if (list->value == NULL) continue; switch (list->type) { case XimType_CARD16: fm = FrameMgrInit (short_fr, (char *)list->value, 1); FrameMgrGetToken (fm, c16); memmove(list->value, &c16, sizeof(CARD16)); FrameMgrFree (fm); break; case XimType_CARD32: case XimType_Window: fm = FrameMgrInit (long_fr, (char *)list->value, 1); FrameMgrGetToken (fm, c32); memmove(list->value, &c32, sizeof(CARD32)); FrameMgrFree (fm); break; case XimType_XRectangle: fm = FrameMgrInit (xrectangle_fr, (char *)list->value, 1); FrameMgrGetToken (fm, xrect); memmove(list->value, &xrect, sizeof(XRectangle)); FrameMgrFree (fm); break; case XimType_XPoint: fm = FrameMgrInit (xpoint_fr, (char *)list->value, 1); FrameMgrGetToken (fm, xpoint); memmove(list->value, &xpoint, sizeof(XPoint)); FrameMgrFree (fm); break; default: break; } } } /* called from CreateICMessageProc and SetICValueMessageProc */ void _Xi18nChangeIC (XIMS ims, IMProtocol *call_data, unsigned char *p, int create_flag) { Xi18n i18n_core = ims->protocol; FrameMgr fm; FmStatus status; CARD16 byte_length; register int total_size; unsigned char *reply = NULL; register int i; register int attrib_num; XICAttribute *attrib_list; XICAttribute pre_attr[IC_SIZE]; XICAttribute sts_attr[IC_SIZE]; XICAttribute ic_attr[IC_SIZE]; CARD16 preedit_ic_num = 0; CARD16 status_ic_num = 0; CARD16 ic_num = 0; CARD16 connect_id = call_data->any.connect_id; IMChangeICStruct *changeic = (IMChangeICStruct *) &call_data->changeic; extern XimFrameRec create_ic_fr[]; extern XimFrameRec create_ic_reply_fr[]; extern XimFrameRec set_ic_values_fr[]; extern XimFrameRec set_ic_values_reply_fr[]; CARD16 input_method_ID; void *value_buf = NULL; void *value_buf_ptr; register int total_value_length = 0; memset (pre_attr, 0, sizeof (XICAttribute)*IC_SIZE); memset (sts_attr, 0, sizeof (XICAttribute)*IC_SIZE); memset (ic_attr, 0, sizeof (XICAttribute)*IC_SIZE); if (create_flag == True) { fm = FrameMgrInit (create_ic_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, byte_length); } else { fm = FrameMgrInit (set_ic_values_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, changeic->icid); FrameMgrGetToken (fm, byte_length); } /*endif*/ attrib_list = (XICAttribute *) malloc (sizeof (XICAttribute)*IC_SIZE); if (!attrib_list) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (attrib_list, 0, sizeof(XICAttribute)*IC_SIZE); attrib_num = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) { void *value; int value_length; FrameMgrGetToken (fm, attrib_list[attrib_num].attribute_id); FrameMgrGetToken (fm, value_length); FrameMgrSetSize (fm, value_length); attrib_list[attrib_num].value_length = value_length; FrameMgrGetToken (fm, value); attrib_list[attrib_num].value = (void *) malloc (value_length + 1); memmove (attrib_list[attrib_num].value, value, value_length); ((char *)attrib_list[attrib_num].value)[value_length] = '\0'; attrib_num++; total_value_length += (value_length + 1); } /*endwhile*/ value_buf = (void *) malloc (total_value_length); value_buf_ptr = value_buf; if (!value_buf) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); for (i = 0; i < attrib_num; i++) XFree (attrib_list[i].value); /*endfor*/ XFree (attrib_list); return; } /*endif*/ for (i = 0; i < attrib_num; i++) { CARD16 number; if (IsNestedList (i18n_core, attrib_list[i].attribute_id)) { if (attrib_list[i].attribute_id == i18n_core->address.preeditAttr_id) { ReadICValue (i18n_core, attrib_list[i].attribute_id, attrib_list[i].value_length, attrib_list[i].value, &pre_attr[preedit_ic_num], &number, _Xi18nNeedSwap(i18n_core, connect_id), &value_buf_ptr); preedit_ic_num += number; } else if (attrib_list[i].attribute_id == i18n_core->address.statusAttr_id) { ReadICValue (i18n_core, attrib_list[i].attribute_id, attrib_list[i].value_length, attrib_list[i].value, &sts_attr[status_ic_num], &number, _Xi18nNeedSwap (i18n_core, connect_id), &value_buf_ptr); status_ic_num += number; } else { /* another nested list.. possible? */ } /*endif*/ } else { ReadICValue (i18n_core, attrib_list[i].attribute_id, attrib_list[i].value_length, attrib_list[i].value, &ic_attr[ic_num], &number, _Xi18nNeedSwap (i18n_core, connect_id), &value_buf_ptr); ic_num += number; } /*endif*/ } /*endfor*/ for (i = 0; i < attrib_num; i++) XFree (attrib_list[i].value); /*endfor*/ XFree (attrib_list); FrameMgrFree (fm); changeic->preedit_attr_num = preedit_ic_num; changeic->status_attr_num = status_ic_num; changeic->ic_attr_num = ic_num; changeic->preedit_attr = pre_attr; changeic->status_attr = sts_attr; changeic->ic_attr = ic_attr; if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) { XFree (value_buf); return; } /*endif*/ } XFree (value_buf); /*endif*/ if (create_flag == True) { fm = FrameMgrInit (create_ic_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); } else { fm = FrameMgrInit (set_ic_values_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); } /*endif*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, changeic->icid); if (create_flag == True) { _Xi18nSendMessage (ims, connect_id, XIM_CREATE_IC_REPLY, 0, reply, total_size); } else { _Xi18nSendMessage (ims, connect_id, XIM_SET_IC_VALUES_REPLY, 0, reply, total_size); } /*endif*/ if (create_flag == True) { int on_key_num = i18n_core->address.on_keys.count_keys; int off_key_num = i18n_core->address.off_keys.count_keys; if (on_key_num == 0 && off_key_num == 0) { long mask; if (i18n_core->address.imvalue_mask & I18N_FILTERMASK) mask = i18n_core->address.filterevent_mask; else mask = DEFAULT_FILTER_MASK; /*endif*/ /* static event flow is default */ _Xi18nSetEventMask (ims, connect_id, input_method_ID, changeic->icid, mask, ~mask); } /*endif*/ } /*endif*/ FrameMgrFree (fm); XFree(reply); } /* called from GetICValueMessageProc */ void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; FmStatus status; extern XimFrameRec get_ic_values_fr[]; extern XimFrameRec get_ic_values_reply_fr[]; CARD16 byte_length; register int total_size; unsigned char *reply = NULL; XICAttribute *preedit_ret = NULL; XICAttribute *status_ret = NULL; register int i; register int number; int iter_count; CARD16 *attrID_list; XICAttribute pre_attr[IC_SIZE]; XICAttribute sts_attr[IC_SIZE]; XICAttribute ic_attr[IC_SIZE]; CARD16 pre_count = 0; CARD16 sts_count = 0; CARD16 ic_count = 0; IMChangeICStruct *getic = (IMChangeICStruct *) &call_data->changeic; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; memset (pre_attr, 0, sizeof (XICAttribute)*IC_SIZE); memset (sts_attr, 0, sizeof (XICAttribute)*IC_SIZE); memset (ic_attr, 0, sizeof (XICAttribute)*IC_SIZE); fm = FrameMgrInit (get_ic_values_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, getic->icid); FrameMgrGetToken (fm, byte_length); attrID_list = (CARD16 *) malloc (sizeof (CARD16)*IC_SIZE); /* bogus */ memset (attrID_list, 0, sizeof (CARD16)*IC_SIZE); number = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) FrameMgrGetToken (fm, attrID_list[number++]); /*endwhile*/ FrameMgrFree (fm); i = 0; while (i < number) { int read_number; if (IsNestedList (i18n_core, attrID_list[i])) { if (attrID_list[i] == i18n_core->address.preeditAttr_id) { read_number = GetICValue (i18n_core, &pre_attr[pre_count], &attrID_list[i], number); i += read_number + 1; pre_count += read_number; } else if (attrID_list[i] == i18n_core->address.statusAttr_id) { read_number = GetICValue (i18n_core, &sts_attr[sts_count], &attrID_list[i], number); i += read_number + 1; sts_count += read_number; } else { /* another nested list.. possible? */ } /*endif*/ } else { read_number = GetICValue (i18n_core, &ic_attr[ic_count], &attrID_list[i], number); i += read_number; ic_count += read_number; } /*endif*/ } /*endwhile*/ getic->preedit_attr_num = pre_count; getic->status_attr_num = sts_count; getic->ic_attr_num = ic_count; getic->preedit_attr = pre_attr; getic->status_attr = sts_attr; getic->ic_attr = ic_attr; if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ if (_Xi18nNeedSwap (i18n_core, connect_id)) SwapAttributes(getic->ic_attr, getic->ic_attr_num); } /*endif*/ iter_count = getic->ic_attr_num; preedit_ret = CreateNestedList (i18n_core->address.preeditAttr_id, getic->preedit_attr, getic->preedit_attr_num, _Xi18nNeedSwap (i18n_core, connect_id)); if (preedit_ret) iter_count++; /*endif*/ status_ret = CreateNestedList (i18n_core->address.statusAttr_id, getic->status_attr, getic->status_attr_num, _Xi18nNeedSwap (i18n_core, connect_id)); if (status_ret) iter_count++; /*endif*/ fm = FrameMgrInit (get_ic_values_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set iteration count for list of ic_attribute */ FrameMgrSetIterCount (fm, iter_count); /* set length of BARRAY item in xicattribute_fr */ for (i = 0; i < (int) getic->ic_attr_num; i++) FrameMgrSetSize (fm, ic_attr[i].value_length); /*endfor*/ if (preedit_ret) FrameMgrSetSize (fm, preedit_ret->value_length); /*endif*/ if (status_ret) FrameMgrSetSize (fm, status_ret->value_length); /*endif*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (reply == NULL) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, getic->icid); for (i = 0; i < (int) getic->ic_attr_num; i++) { FrameMgrPutToken (fm, ic_attr[i].attribute_id); FrameMgrPutToken (fm, ic_attr[i].value_length); FrameMgrPutToken (fm, ic_attr[i].value); } /*endfor*/ if (preedit_ret) { FrameMgrPutToken (fm, preedit_ret->attribute_id); FrameMgrPutToken (fm, preedit_ret->value_length); FrameMgrPutToken (fm, preedit_ret->value); } /*endif*/ if (status_ret) { FrameMgrPutToken (fm, status_ret->attribute_id); FrameMgrPutToken (fm, status_ret->value_length); FrameMgrPutToken (fm, status_ret->value); } /*endif*/ _Xi18nSendMessage (ims, connect_id, XIM_GET_IC_VALUES_REPLY, 0, reply, total_size); XFree (reply); XFree (attrID_list); for (i = 0; i < (int) getic->ic_attr_num; i++) { if (getic->ic_attr[i].name) XFree (getic->ic_attr[i].name); /*endif*/ if (getic->ic_attr[i].value) XFree (getic->ic_attr[i].value); /*endif*/ } /*endfor*/ for (i = 0; i < (int) getic->preedit_attr_num; i++) { if (getic->preedit_attr[i].name) XFree (getic->preedit_attr[i].name); /*endif*/ if (getic->preedit_attr[i].value) XFree (getic->preedit_attr[i].value); /*endif*/ } /*endfor*/ for (i = 0; i < (int) getic->status_attr_num; i++) { if (getic->status_attr[i].name) XFree (getic->status_attr[i].name); /*endif*/ if (getic->status_attr[i].value) XFree (getic->status_attr[i].value); /*endif*/ } /*endfor*/ if (preedit_ret) { XFree (preedit_ret->value); XFree (preedit_ret); } /*endif*/ if (status_ret) { XFree (status_ret->value); XFree (status_ret); } /*endif*/ FrameMgrFree (fm); } scim-master/modules/FrontEnd/IMdkit/i18nMethod.c000066400000000000000000001106521415264260100217440ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #ifndef NEED_EVENTS #define NEED_EVENTS #endif #include #undef NEED_EVENTS #include "FrameMgr.h" #include "IMdkit.h" #include "Xi18n.h" #include "XimFunc.h" extern Xi18nClient *_Xi18nFindClient (Xi18n, CARD16); static void *xi18n_setup (Display *, XIMArg *); static Status xi18n_openIM (XIMS); static Status xi18n_closeIM (XIMS); static char *xi18n_setIMValues (XIMS, XIMArg *); static char *xi18n_getIMValues (XIMS, XIMArg *); static Status xi18n_forwardEvent (XIMS, XPointer); static Status xi18n_commit (XIMS, XPointer); static int xi18n_callCallback (XIMS, XPointer); static int xi18n_preeditStart (XIMS, XPointer); static int xi18n_preeditEnd (XIMS, XPointer); static int xi18n_syncXlib (XIMS, XPointer); #ifndef XIM_SERVERS #define XIM_SERVERS "XIM_SERVERS" #endif static Atom XIM_Servers = None; IMMethodsRec Xi18n_im_methods = { xi18n_setup, xi18n_openIM, xi18n_closeIM, xi18n_setIMValues, xi18n_getIMValues, xi18n_forwardEvent, xi18n_commit, xi18n_callCallback, xi18n_preeditStart, xi18n_preeditEnd, xi18n_syncXlib, }; extern Bool _Xi18nCheckXAddress (Xi18n, TransportSW *, char *); extern Bool _Xi18nCheckTransAddress (Xi18n, TransportSW *, char *); TransportSW _TransR[] = { {"X", 1, _Xi18nCheckXAddress}, #ifdef TCPCONN {"tcp", 3, _Xi18nCheckTransAddress}, {"local", 5, _Xi18nCheckTransAddress}, #endif #ifdef DNETCONN {"decnet", 6, _Xi18nCheckTransAddress}, #endif {(char *) NULL, 0, (Bool (*) ()) NULL} }; static Bool GetInputStyles (Xi18n i18n_core, XIMStyles **p_style) { Xi18nAddressRec *address = (Xi18nAddressRec *) &i18n_core->address; XIMStyles *p; int i; p = &address->input_styles; if ((*p_style = (XIMStyles *) malloc (sizeof (XIMStyles) + p->count_styles*sizeof (XIMStyle))) == NULL) { return False; } /*endif*/ (*p_style)->count_styles = p->count_styles; (*p_style)->supported_styles = (XIMStyle *) ((XPointer) *p_style + sizeof (XIMStyles)); for (i = 0; i < (int) p->count_styles; i++) (*p_style)->supported_styles[i] = p->supported_styles[i]; /*endfor*/ return True; } static Bool GetOnOffKeys (Xi18n i18n_core, long mask, XIMTriggerKeys **p_key) { Xi18nAddressRec *address = (Xi18nAddressRec *) &i18n_core->address; XIMTriggerKeys *p; int i; if (mask & I18N_ON_KEYS) p = &address->on_keys; else p = &address->off_keys; /*endif*/ if ((*p_key = (XIMTriggerKeys *) malloc (sizeof(XIMTriggerKeys) + p->count_keys*sizeof(XIMTriggerKey))) == NULL) { return False; } /*endif*/ (*p_key)->count_keys = p->count_keys; (*p_key)->keylist = (XIMTriggerKey *) ((XPointer) *p_key + sizeof(XIMTriggerKeys)); for (i = 0; i < (int) p->count_keys; i++) { (*p_key)->keylist[i].keysym = p->keylist[i].keysym; (*p_key)->keylist[i].modifier = p->keylist[i].modifier; (*p_key)->keylist[i].modifier_mask = p->keylist[i].modifier_mask; } /*endfor*/ return True; } static Bool GetEncodings(Xi18n i18n_core, XIMEncodings **p_encoding) { Xi18nAddressRec *address = (Xi18nAddressRec *) &i18n_core->address; XIMEncodings *p; int i; p = &address->encoding_list; if ((*p_encoding = (XIMEncodings *) malloc (sizeof (XIMEncodings) + p->count_encodings*sizeof(XIMEncoding))) == NULL) { return False; } /*endif*/ (*p_encoding)->count_encodings = p->count_encodings; (*p_encoding)->supported_encodings = (XIMEncoding *) ((XPointer)*p_encoding + sizeof (XIMEncodings)); for (i = 0; i < (int) p->count_encodings; i++) { (*p_encoding)->supported_encodings[i] = (char *) malloc (strlen (p->supported_encodings[i]) + 1); strcpy ((*p_encoding)->supported_encodings[i], p->supported_encodings[i]); } /*endif*/ return True; } static char *ParseArgs (Xi18n i18n_core, int mode, XIMArg *args) { Xi18nAddressRec *address = (Xi18nAddressRec *) &i18n_core->address; XIMArg *p; if (mode == I18N_OPEN || mode == I18N_SET) { for (p = args; p->name != NULL; p++) { if (strcmp (p->name, IMLocale) == 0) { if (address->imvalue_mask & I18N_IM_LOCALE) return IMLocale; /*endif*/ address->im_locale = (char *) malloc (strlen (p->value) + 1); if (!address->im_locale) return IMLocale; /*endif*/ strcpy (address->im_locale, p->value); address->imvalue_mask |= I18N_IM_LOCALE; } else if (strcmp (p->name, IMServerTransport) == 0) { if (address->imvalue_mask & I18N_IM_ADDRESS) return IMServerTransport; /*endif*/ address->im_addr = (char *) malloc (strlen (p->value) + 1); if (!address->im_addr) return IMServerTransport; /*endif*/ strcpy(address->im_addr, p->value); address->imvalue_mask |= I18N_IM_ADDRESS; } else if (strcmp (p->name, IMServerName) == 0) { if (address->imvalue_mask & I18N_IM_NAME) return IMServerName; /*endif*/ address->im_name = (char *) malloc (strlen (p->value) + 1); if (!address->im_name) return IMServerName; /*endif*/ strcpy (address->im_name, p->value); address->imvalue_mask |= I18N_IM_NAME; } else if (strcmp (p->name, IMServerWindow) == 0) { if (address->imvalue_mask & I18N_IMSERVER_WIN) return IMServerWindow; /*endif*/ address->im_window = (Window) p->value; address->imvalue_mask |= I18N_IMSERVER_WIN; } else if (strcmp (p->name, IMInputStyles) == 0) { if (address->imvalue_mask & I18N_INPUT_STYLES) return IMInputStyles; /*endif*/ address->input_styles.count_styles = ((XIMStyles*)p->value)->count_styles; address->input_styles.supported_styles = (XIMStyle *) malloc (sizeof (XIMStyle)*address->input_styles.count_styles); if (address->input_styles.supported_styles == (XIMStyle *) NULL) return IMInputStyles; /*endif*/ memmove (address->input_styles.supported_styles, ((XIMStyles *) p->value)->supported_styles, sizeof (XIMStyle)*address->input_styles.count_styles); address->imvalue_mask |= I18N_INPUT_STYLES; } else if (strcmp (p->name, IMProtocolHandler) == 0) { address->improto = (IMProtoHandler) p->value; address->imvalue_mask |= I18N_IM_HANDLER; } else if (strcmp (p->name, IMOnKeysList) == 0) { if (address->imvalue_mask & I18N_ON_KEYS) return IMOnKeysList; /*endif*/ address->on_keys.count_keys = ((XIMTriggerKeys *) p->value)->count_keys; address->on_keys.keylist = (XIMTriggerKey *) malloc (sizeof (XIMTriggerKey)*address->on_keys.count_keys); if (address->on_keys.keylist == (XIMTriggerKey *) NULL) return IMOnKeysList; /*endif*/ memmove (address->on_keys.keylist, ((XIMTriggerKeys *) p->value)->keylist, sizeof (XIMTriggerKey)*address->on_keys.count_keys); address->imvalue_mask |= I18N_ON_KEYS; } else if (strcmp (p->name, IMOffKeysList) == 0) { if (address->imvalue_mask & I18N_OFF_KEYS) return IMOffKeysList; /*endif*/ address->off_keys.count_keys = ((XIMTriggerKeys *) p->value)->count_keys; address->off_keys.keylist = (XIMTriggerKey *) malloc (sizeof (XIMTriggerKey)*address->off_keys.count_keys); if (address->off_keys.keylist == (XIMTriggerKey *) NULL) return IMOffKeysList; /*endif*/ memmove (address->off_keys.keylist, ((XIMTriggerKeys *) p->value)->keylist, sizeof (XIMTriggerKey)*address->off_keys.count_keys); address->imvalue_mask |= I18N_OFF_KEYS; } else if (strcmp (p->name, IMEncodingList) == 0) { if (address->imvalue_mask & I18N_ENCODINGS) return IMEncodingList; /*endif*/ address->encoding_list.count_encodings = ((XIMEncodings *) p->value)->count_encodings; address->encoding_list.supported_encodings = (XIMEncoding *) malloc (sizeof (XIMEncoding)*address->encoding_list.count_encodings); if (address->encoding_list.supported_encodings == (XIMEncoding *) NULL) { return IMEncodingList; } /*endif*/ memmove (address->encoding_list.supported_encodings, ((XIMEncodings *) p->value)->supported_encodings, sizeof (XIMEncoding)*address->encoding_list.count_encodings); address->imvalue_mask |= I18N_ENCODINGS; } else if (strcmp (p->name, IMFilterEventMask) == 0) { if (address->imvalue_mask & I18N_FILTERMASK) return IMFilterEventMask; /*endif*/ address->filterevent_mask = (long) p->value; address->imvalue_mask |= I18N_FILTERMASK; } /*endif*/ } /*endfor*/ if (mode == I18N_OPEN) { /* check mandatory IM values */ if (!(address->imvalue_mask & I18N_IM_LOCALE)) { /* locales must be set in IMOpenIM */ return IMLocale; } /*endif*/ if (!(address->imvalue_mask & I18N_IM_ADDRESS)) { /* address must be set in IMOpenIM */ return IMServerTransport; } /*endif*/ } /*endif*/ } else if (mode == I18N_GET) { for (p = args; p->name != NULL; p++) { if (strcmp (p->name, IMLocale) == 0) { p->value = (char *) malloc (strlen (address->im_locale) + 1); if (!p->value) return IMLocale; /*endif*/ strcpy (p->value, address->im_locale); } else if (strcmp (p->name, IMServerTransport) == 0) { p->value = (char *) malloc (strlen (address->im_addr) + 1); if (!p->value) return IMServerTransport; /*endif*/ strcpy (p->value, address->im_addr); } else if (strcmp (p->name, IMServerName) == 0) { if (address->imvalue_mask & I18N_IM_NAME) { p->value = (char *) malloc (strlen (address->im_name) + 1); if (!p->value) return IMServerName; /*endif*/ strcpy (p->value, address->im_name); } else { return IMServerName; } /*endif*/ } else if (strcmp (p->name, IMServerWindow) == 0) { if (address->imvalue_mask & I18N_IMSERVER_WIN) *((Window *) (p->value)) = address->im_window; else return IMServerWindow; /*endif*/ } else if (strcmp (p->name, IMInputStyles) == 0) { if (GetInputStyles (i18n_core, (XIMStyles **) p->value) == False) { return IMInputStyles; } /*endif*/ } else if (strcmp (p->name, IMProtocolHandler) == 0) { if (address->imvalue_mask & I18N_IM_HANDLER) *((IMProtoHandler *) (p->value)) = address->improto; else return IMProtocolHandler; /*endif*/ } else if (strcmp (p->name, IMOnKeysList) == 0) { if (address->imvalue_mask & I18N_ON_KEYS) { if (GetOnOffKeys (i18n_core, I18N_ON_KEYS, (XIMTriggerKeys **) p->value) == False) { return IMOnKeysList; } /*endif*/ } else { return IMOnKeysList; } /*endif*/ } else if (strcmp (p->name, IMOffKeysList) == 0) { if (address->imvalue_mask & I18N_OFF_KEYS) { if (GetOnOffKeys (i18n_core, I18N_OFF_KEYS, (XIMTriggerKeys **) p->value) == False) { return IMOffKeysList; } /*endif*/ } else { return IMOffKeysList; } /*endif*/ } else if (strcmp (p->name, IMEncodingList) == 0) { if (address->imvalue_mask & I18N_ENCODINGS) { if (GetEncodings (i18n_core, (XIMEncodings **) p->value) == False) { return IMEncodingList; } /*endif*/ } else { return IMEncodingList; } /*endif*/ } else if (strcmp (p->name, IMFilterEventMask) == 0) { if (address->imvalue_mask & I18N_FILTERMASK) *((long *) (p->value)) = address->filterevent_mask; else return IMFilterEventMask; /*endif*/ } /*endif*/ } /*endfor*/ } /*endif*/ return NULL; } static int CheckIMName (Xi18n i18n_core) { char *address = i18n_core->address.im_addr; int i; for (i = 0; _TransR[i].transportname; i++) { while (*address == ' ' || *address == '\t') address++; /*endwhile*/ if (strncmp (address, _TransR[i].transportname, _TransR[i].namelen) == 0 && address[_TransR[i].namelen] == '/') { if (_TransR[i].checkAddr (i18n_core, &_TransR[i], address + _TransR[i].namelen + 1) == True) { return True; } /*endif*/ return False; } /*endif*/ } /*endfor*/ return False; } static int SetXi18nSelectionOwner(Xi18n i18n_core) { Display *dpy = i18n_core->address.dpy; Window ims_win = i18n_core->address.im_window; Window root = RootWindow (dpy, DefaultScreen (dpy)); Atom realtype; int realformat; unsigned long bytesafter; long *data=NULL; unsigned long length; Atom atom; int i; int found; int forse = False; char buf[256]; (void)snprintf(buf, 256, "@server=%s", i18n_core->address.im_name); if ((atom = XInternAtom(dpy, buf, False)) == 0) return False; i18n_core->address.selection = atom; if (XIM_Servers == None) XIM_Servers = XInternAtom (dpy, XIM_SERVERS, False); /*endif*/ XGetWindowProperty (dpy, root, XIM_Servers, 0L, 1000000L, False, XA_ATOM, &realtype, &realformat, &length, &bytesafter, (unsigned char **) (&data)); if (realtype != None && (realtype != XA_ATOM || realformat != 32)) { if (data != NULL) XFree ((char *) data); return False; } found = False; for (i = 0; i < length; i++) { if (data[i] == atom) { Window owner; found = True; if ((owner = XGetSelectionOwner (dpy, atom)) != ims_win) { if (owner == None || forse == True) XSetSelectionOwner (dpy, atom, ims_win, CurrentTime); else return False; } break; } } if (found == False) { XSetSelectionOwner (dpy, atom, ims_win, CurrentTime); XChangeProperty (dpy, root, XIM_Servers, XA_ATOM, 32, PropModePrepend, (unsigned char *) &atom, 1); } else { /* * We always need to generate the PropertyNotify to the Root Window */ XChangeProperty (dpy, root, XIM_Servers, XA_ATOM, 32, PropModePrepend, (unsigned char *) data, 0); } if (data != NULL) XFree ((char *) data); /* Intern "LOCALES" and "TRANSOPORT" Target Atoms */ i18n_core->address.Localename = XInternAtom (dpy, LOCALES, False); i18n_core->address.Transportname = XInternAtom (dpy, TRANSPORT, False); return (XGetSelectionOwner (dpy, atom) == ims_win); } static int DeleteXi18nAtom(Xi18n i18n_core) { Display *dpy = i18n_core->address.dpy; Window root = RootWindow (dpy, DefaultScreen (dpy)); Atom realtype; int realformat; unsigned long bytesafter; long *data=NULL; unsigned long length; Atom atom; int i, ret; int found; char buf[256]; (void)snprintf(buf, 256, "@server=%s", i18n_core->address.im_name); if ((atom = XInternAtom(dpy, buf, False)) == 0) return False; i18n_core->address.selection = atom; if (XIM_Servers == None) XIM_Servers = XInternAtom (dpy, XIM_SERVERS, False); XGetWindowProperty (dpy, root, XIM_Servers, 0L, 1000000L, False, XA_ATOM, &realtype, &realformat, &length, &bytesafter, (unsigned char **) (&data)); if (realtype != XA_ATOM || realformat != 32) { if (data != NULL) XFree ((char *) data); return False; } found = False; for (i = 0; i < length; i++) { if (data[i] == atom) { found = True; break; } } if (found == True) { for (i=i+1; iaddress.dpy = dpy; if (ParseArgs (i18n_core, I18N_OPEN, args) != NULL) { XFree (i18n_core); return NULL; } /*endif*/ if (*(char *) &endian) i18n_core->address.im_byteOrder = 'l'; else i18n_core->address.im_byteOrder = 'B'; /*endif*/ /* install IMAttr and ICAttr list in i18n_core */ _Xi18nInitAttrList (i18n_core); /* install IMExtension list in i18n_core */ _Xi18nInitExtension (i18n_core); return i18n_core; } static void ReturnSelectionNotify (Xi18n i18n_core, XSelectionRequestEvent *ev) { XEvent event; Display *dpy = i18n_core->address.dpy; char buf[4096]; event.type = SelectionNotify; event.xselection.requestor = ev->requestor; event.xselection.selection = ev->selection; event.xselection.target = ev->target; event.xselection.time = ev->time; event.xselection.property = ev->property; if (ev->target == i18n_core->address.Localename) { snprintf (buf, 4096, "@locale=%s", i18n_core->address.im_locale); } else if (ev->target == i18n_core->address.Transportname) { snprintf (buf, 4096, "@transport=%s", i18n_core->address.im_addr); } /*endif*/ XChangeProperty (dpy, event.xselection.requestor, ev->target, ev->target, 8, PropModeReplace, (unsigned char *) buf, strlen (buf)); XSendEvent (dpy, event.xselection.requestor, False, NoEventMask, &event); XFlush (i18n_core->address.dpy); } static Bool WaitXSelectionRequest (Display *dpy, Window win, XEvent *ev, XPointer client_data) { XIMS ims = (XIMS) client_data; Xi18n i18n_core = ims->protocol; if (((XSelectionRequestEvent *) ev)->selection == i18n_core->address.selection) { ReturnSelectionNotify (i18n_core, (XSelectionRequestEvent *) ev); return True; } /*endif*/ return False; } static Status xi18n_openIM(XIMS ims) { Xi18n i18n_core = ims->protocol; Display *dpy = i18n_core->address.dpy; if (!CheckIMName (i18n_core) || !SetXi18nSelectionOwner (i18n_core) || !i18n_core->methods.begin (ims)) { XFree (i18n_core->address.im_name); XFree (i18n_core->address.im_locale); XFree (i18n_core->address.im_addr); XFree (i18n_core); return False; } /*endif*/ _XRegisterFilterByType (dpy, i18n_core->address.im_window, SelectionRequest, SelectionRequest, WaitXSelectionRequest, (XPointer)ims); XFlush(dpy); return True; } static Status xi18n_closeIM(XIMS ims) { Xi18n i18n_core = ims->protocol; Display *dpy = i18n_core->address.dpy; DeleteXi18nAtom(i18n_core); if (!i18n_core->methods.end (ims)) return False; _XUnregisterFilter (dpy, i18n_core->address.im_window, WaitXSelectionRequest, (XPointer)ims); XFree (i18n_core->address.im_name); XFree (i18n_core->address.im_locale); XFree (i18n_core->address.im_addr); XFree (i18n_core); return True; } static char *xi18n_setIMValues (XIMS ims, XIMArg *args) { Xi18n i18n_core = ims->protocol; char *ret; if ((ret = ParseArgs (i18n_core, I18N_SET, args)) != NULL) return ret; /*endif*/ return NULL; } static char *xi18n_getIMValues (XIMS ims, XIMArg *args) { Xi18n i18n_core = ims->protocol; char *ret; if ((ret = ParseArgs (i18n_core, I18N_GET, args)) != NULL) return ret; /*endif*/ return NULL; } static void EventToWireEvent (XEvent *ev, xEvent *event, CARD16 *serial, Bool byte_swap) { FrameMgr fm; extern XimFrameRec wire_keyevent_fr[]; extern XimFrameRec short_fr[]; BYTE b; CARD16 c16; CARD32 c32; *serial = (CARD16)(ev->xany.serial >> 16); switch (ev->type) { case KeyPress: case KeyRelease: { XKeyEvent *kev = (XKeyEvent*)ev; /* create FrameMgr */ fm = FrameMgrInit(wire_keyevent_fr, (char *)(&(event->u)), byte_swap); /* set values */ b = (BYTE)kev->type; FrameMgrPutToken(fm, b); b = (BYTE)kev->keycode; FrameMgrPutToken(fm, b); c16 = (CARD16)(kev->serial & (unsigned long)0xffff); FrameMgrPutToken(fm, c16); c32 = (CARD32)kev->time; FrameMgrPutToken(fm, c32); c32 = (CARD32)kev->root; FrameMgrPutToken(fm, c32); c32 = (CARD32)kev->window; FrameMgrPutToken(fm, c32); c32 = (CARD32)kev->subwindow; FrameMgrPutToken(fm, c32); c16 = (CARD16)kev->x_root; FrameMgrPutToken(fm, c16); c16 = (CARD16)kev->y_root; FrameMgrPutToken(fm, c16); c16 = (CARD16)kev->x; FrameMgrPutToken(fm, c16); c16 = (CARD16)kev->y; FrameMgrPutToken(fm, c16); c16 = (CARD16)kev->state; FrameMgrPutToken(fm, c16); b = (BYTE)kev->same_screen; FrameMgrPutToken(fm, b); } break; default: /* create FrameMgr */ fm = FrameMgrInit(short_fr, (char *)(&(event->u.u.sequenceNumber)), byte_swap); c16 = (CARD16)(ev->xany.serial & (unsigned long)0xffff); FrameMgrPutToken(fm, c16); break; } /* free FrameMgr */ FrameMgrFree(fm); } static Status xi18n_forwardEvent (XIMS ims, XPointer xp) { Xi18n i18n_core = ims->protocol; IMForwardEventStruct *call_data = (IMForwardEventStruct *)xp; FrameMgr fm; extern XimFrameRec forward_event_fr[]; register int total_size; unsigned char *reply = NULL; unsigned char *replyp; CARD16 serial; int event_size; Xi18nClient *client; client = (Xi18nClient *) _Xi18nFindClient (i18n_core, call_data->connect_id); /* create FrameMgr */ fm = FrameMgrInit (forward_event_fr, NULL, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); total_size = FrameMgrGetTotalSize (fm); event_size = sizeof (xEvent); reply = (unsigned char *) malloc (total_size + event_size); if (!reply) { _Xi18nSendMessage (ims, call_data->connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size + event_size); FrameMgrSetBuffer (fm, reply); replyp = reply; call_data->sync_bit = 1; /* always sync */ client->sync = True; FrameMgrPutToken (fm, call_data->connect_id); FrameMgrPutToken (fm, call_data->icid); FrameMgrPutToken (fm, call_data->sync_bit); replyp += total_size; EventToWireEvent (&(call_data->event), (xEvent *) replyp, &serial, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); FrameMgrPutToken (fm, serial); _Xi18nSendMessage (ims, call_data->connect_id, XIM_FORWARD_EVENT, 0, reply, total_size + event_size); XFree (reply); FrameMgrFree (fm); return True; } static Status xi18n_commit (XIMS ims, XPointer xp) { Xi18n i18n_core = ims->protocol; IMCommitStruct *call_data = (IMCommitStruct *)xp; FrameMgr fm; extern XimFrameRec commit_chars_fr[]; extern XimFrameRec commit_both_fr[]; register int total_size; unsigned char *reply = NULL; CARD16 str_length; call_data->flag |= XimSYNCHRONUS; /* always sync */ if (!(call_data->flag & XimLookupKeySym) && (call_data->flag & XimLookupChars)) { fm = FrameMgrInit (commit_chars_fr, NULL, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); /* set length of STRING8 */ str_length = strlen (call_data->commit_string); FrameMgrSetSize (fm, str_length); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, call_data->connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); str_length = FrameMgrGetSize (fm); FrameMgrPutToken (fm, call_data->connect_id); FrameMgrPutToken (fm, call_data->icid); FrameMgrPutToken (fm, call_data->flag); FrameMgrPutToken (fm, str_length); FrameMgrPutToken (fm, call_data->commit_string); } else { fm = FrameMgrInit (commit_both_fr, NULL, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); /* set length of STRING8 */ str_length = strlen (call_data->commit_string); if (str_length > 0) FrameMgrSetSize (fm, str_length); /*endif*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, call_data->connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, call_data->connect_id); FrameMgrPutToken (fm, call_data->icid); FrameMgrPutToken (fm, call_data->flag); FrameMgrPutToken (fm, call_data->keysym); if (str_length > 0) { str_length = FrameMgrGetSize (fm); FrameMgrPutToken (fm, str_length); FrameMgrPutToken (fm, call_data->commit_string); } /*endif*/ } /*endif*/ _Xi18nSendMessage (ims, call_data->connect_id, XIM_COMMIT, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); return True; } static int xi18n_callCallback (XIMS ims, XPointer xp) { IMProtocol *call_data = (IMProtocol *)xp; switch (call_data->major_code) { case XIM_GEOMETRY: return _Xi18nGeometryCallback (ims, call_data); case XIM_PREEDIT_START: return _Xi18nPreeditStartCallback (ims, call_data); case XIM_PREEDIT_DRAW: return _Xi18nPreeditDrawCallback (ims, call_data); case XIM_PREEDIT_CARET: return _Xi18nPreeditCaretCallback (ims, call_data); case XIM_PREEDIT_DONE: return _Xi18nPreeditDoneCallback (ims, call_data); case XIM_STATUS_START: return _Xi18nStatusStartCallback (ims, call_data); case XIM_STATUS_DRAW: return _Xi18nStatusDrawCallback (ims, call_data); case XIM_STATUS_DONE: return _Xi18nStatusDoneCallback (ims, call_data); case XIM_STR_CONVERSION: return _Xi18nStringConversionCallback (ims, call_data); } /*endswitch*/ return False; } /* preeditStart and preeditEnd are used only for Dynamic Event Flow. */ static int xi18n_preeditStart (XIMS ims, XPointer xp) { IMProtocol *call_data = (IMProtocol *)xp; Xi18n i18n_core = ims->protocol; IMPreeditStateStruct *preedit_state = (IMPreeditStateStruct *) &call_data->preedit_state; long mask; int on_key_num = i18n_core->address.on_keys.count_keys; int off_key_num = i18n_core->address.off_keys.count_keys; if (on_key_num == 0 && off_key_num == 0) return False; /*endif*/ if (i18n_core->address.imvalue_mask & I18N_FILTERMASK) mask = i18n_core->address.filterevent_mask; else mask = DEFAULT_FILTER_MASK; /*endif*/ _Xi18nSetEventMask (ims, preedit_state->connect_id, preedit_state->connect_id, preedit_state->icid, mask, ~mask); return True; } static int xi18n_preeditEnd (XIMS ims, XPointer xp) { IMProtocol *call_data = (IMProtocol *)xp; Xi18n i18n_core = ims->protocol; int on_key_num = i18n_core->address.on_keys.count_keys; int off_key_num = i18n_core->address.off_keys.count_keys; IMPreeditStateStruct *preedit_state; preedit_state = (IMPreeditStateStruct *) &call_data->preedit_state; if (on_key_num == 0 && off_key_num == 0) return False; /*endif*/ _Xi18nSetEventMask (ims, preedit_state->connect_id, preedit_state->connect_id, preedit_state->icid, 0, 0); return True; } static int xi18n_syncXlib (XIMS ims, XPointer xp) { IMProtocol *call_data = (IMProtocol *)xp; Xi18n i18n_core = ims->protocol; IMSyncXlibStruct *sync_xlib; extern XimFrameRec sync_fr[]; FrameMgr fm; CARD16 connect_id = call_data->any.connect_id; int total_size; unsigned char *reply; sync_xlib = (IMSyncXlibStruct *) &call_data->sync_xlib; fm = FrameMgrInit (sync_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize(fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return False; } memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); /* input input-method ID */ FrameMgrPutToken (fm, connect_id); /* input input-context ID */ FrameMgrPutToken (fm, sync_xlib->icid); _Xi18nSendMessage (ims, connect_id, XIM_SYNC, 0, reply, total_size); FrameMgrFree (fm); XFree(reply); return True; } scim-master/modules/FrontEnd/IMdkit/i18nOffsetCache.c000066400000000000000000000032701415264260100226730ustar00rootroot00000000000000#include #include #include "IMdkit.h" #include "Xi18n.h" /* * The XIM specification does not limit the number of window properties * that can be used to transfer data, but Xlib uses the atom strings * _client0 through _client20. * * So use that as a sensible initial size for the offset cache. */ #define INITIAL_OFFSET_CACHE_CAPACITY 21 #define OFFSET_CACHE_GROWTH_FACTOR 2 void _Xi18nInitOffsetCache(Xi18nOffsetCache *offset_cache) { offset_cache->size = 0; offset_cache->capacity = INITIAL_OFFSET_CACHE_CAPACITY; offset_cache->data = (Xi18nAtomOffsetPair *)malloc( INITIAL_OFFSET_CACHE_CAPACITY * sizeof(Xi18nAtomOffsetPair)); } unsigned long _Xi18nLookupPropertyOffset(Xi18nOffsetCache *offset_cache, Atom key) { Xi18nAtomOffsetPair *data = offset_cache->data; size_t i; for (i = 0; i < offset_cache->size; ++i) { if (data[i].key == key) { return data[i].offset; } } return 0; } void _Xi18nSetPropertyOffset(Xi18nOffsetCache *offset_cache, Atom key, unsigned long offset) { Xi18nAtomOffsetPair *data = offset_cache->data; size_t i; for (i = 0; i < offset_cache->size; ++i) { if (data[i].key == key) { data[i].offset = offset; return; } } if (++offset_cache->size > offset_cache->capacity) { offset_cache->capacity *= OFFSET_CACHE_GROWTH_FACTOR; offset_cache->data = data = (Xi18nAtomOffsetPair *)realloc(data, offset_cache->capacity * sizeof(Xi18nAtomOffsetPair)); } data[i].key = key; data[i].offset = offset; } scim-master/modules/FrontEnd/IMdkit/i18nPtHdr.c000066400000000000000000001545511415264260100215530ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include #ifndef NEED_EVENTS #define NEED_EVENTS #endif #include #undef NEED_EVENTS #include "FrameMgr.h" #include "IMdkit.h" #include "Xi18n.h" #include "XimFunc.h" #ifdef XIM_DEBUG #include static void DebugLog(char * msg) { fprintf(stderr, msg); } #endif extern Xi18nClient *_Xi18nFindClient (Xi18n, CARD16); static void DiscardQueue (XIMS ims, CARD16 connect_id) { Xi18n i18n_core = ims->protocol; Xi18nClient *client = (Xi18nClient *) _Xi18nFindClient (i18n_core, connect_id); if (client != NULL) { client->sync = False; while (client->pending != NULL) { XIMPending* pending = client->pending; client->pending = pending->next; XFree(pending->p); XFree(pending); } } } static void DiscardAllQueue(XIMS ims) { Xi18n i18n_core = ims->protocol; Xi18nClient* client = i18n_core->address.clients; while (client != NULL) { if (client->sync) { DiscardQueue(ims, client->connect_id); } client = client->next; } } static void GetProtocolVersion (CARD16 client_major, CARD16 client_minor, CARD16 *server_major, CARD16 *server_minor) { *server_major = client_major; *server_minor = client_minor; } static void ConnectMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec connect_fr[], connect_reply_fr[]; register int total_size; CARD16 server_major_version, server_minor_version; unsigned char *reply = NULL; IMConnectStruct *imconnect = (IMConnectStruct*) &call_data->imconnect; CARD16 connect_id = call_data->any.connect_id; fm = FrameMgrInit (connect_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, imconnect->byte_order); FrameMgrGetToken (fm, imconnect->major_version); FrameMgrGetToken (fm, imconnect->minor_version); FrameMgrFree (fm); GetProtocolVersion (imconnect->major_version, imconnect->minor_version, &server_major_version, &server_minor_version); #ifdef PROTOCOL_RICH if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ #endif /* PROTOCOL_RICH */ fm = FrameMgrInit (connect_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, server_major_version); FrameMgrPutToken (fm, server_minor_version); _Xi18nSendMessage (ims, connect_id, XIM_CONNECT_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); } static void DisConnectMessageProc (XIMS ims, IMProtocol *call_data) { Xi18n i18n_core = ims->protocol; unsigned char *reply = NULL; CARD16 connect_id = call_data->any.connect_id; #ifdef PROTOCOL_RICH if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ #endif /* PROTOCOL_RICH */ _Xi18nSendMessage (ims, connect_id, XIM_DISCONNECT_REPLY, 0, reply, 0); i18n_core->methods.disconnect (ims, connect_id); } static void OpenMessageProc(XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec open_fr[]; extern XimFrameRec open_reply_fr[]; unsigned char *reply = NULL; int str_size; register int i, total_size; CARD16 connect_id = call_data->any.connect_id; int str_length; char *name; IMOpenStruct *imopen = (IMOpenStruct *) &call_data->imopen; fm = FrameMgrInit (open_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, str_length); FrameMgrSetSize (fm, str_length); FrameMgrGetToken (fm, name); imopen->lang.length = str_length; imopen->lang.name = malloc (str_length + 1); strncpy (imopen->lang.name, name, str_length); imopen->lang.name[str_length] = (char) 0; FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ if ((i18n_core->address.imvalue_mask & I18N_ON_KEYS) || (i18n_core->address.imvalue_mask & I18N_OFF_KEYS)) { _Xi18nSendTriggerKey (ims, connect_id); } /*endif*/ XFree (imopen->lang.name); fm = FrameMgrInit (open_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set iteration count for list of imattr */ FrameMgrSetIterCount (fm, i18n_core->address.im_attr_num); /* set length of BARRAY item in ximattr_fr */ for (i = 0; i < i18n_core->address.im_attr_num; i++) { str_size = strlen (i18n_core->address.xim_attr[i].name); FrameMgrSetSize (fm, str_size); } /*endfor*/ /* set iteration count for list of icattr */ FrameMgrSetIterCount (fm, i18n_core->address.ic_attr_num); /* set length of BARRAY item in xicattr_fr */ for (i = 0; i < i18n_core->address.ic_attr_num; i++) { str_size = strlen (i18n_core->address.xic_attr[i].name); FrameMgrSetSize (fm, str_size); } /*endfor*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); /* input input-method ID */ FrameMgrPutToken (fm, connect_id); for (i = 0; i < i18n_core->address.im_attr_num; i++) { str_size = FrameMgrGetSize (fm); FrameMgrPutToken (fm, i18n_core->address.xim_attr[i].attribute_id); FrameMgrPutToken (fm, i18n_core->address.xim_attr[i].type); FrameMgrPutToken (fm, str_size); FrameMgrPutToken (fm, i18n_core->address.xim_attr[i].name); } /*endfor*/ for (i = 0; i < i18n_core->address.ic_attr_num; i++) { str_size = FrameMgrGetSize (fm); FrameMgrPutToken (fm, i18n_core->address.xic_attr[i].attribute_id); FrameMgrPutToken (fm, i18n_core->address.xic_attr[i].type); FrameMgrPutToken (fm, str_size); FrameMgrPutToken (fm, i18n_core->address.xic_attr[i].name); } /*endfor*/ _Xi18nSendMessage (ims, connect_id, XIM_OPEN_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); } static void CloseMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec close_fr[]; extern XimFrameRec close_reply_fr[]; unsigned char *reply = NULL; register int total_size; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (close_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); FrameMgrGetToken (fm, input_method_ID); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ fm = FrameMgrInit (close_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); _Xi18nSendMessage (ims, connect_id, XIM_CLOSE_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); } static XIMExt *MakeExtensionList (Xi18n i18n_core, XIMStr *lib_extension, int number, int *reply_number) { XIMExt *ext_list; XIMExt *im_ext = (XIMExt *) i18n_core->address.extension; int im_ext_len = i18n_core->address.ext_num; int i; int j; *reply_number = 0; if (number == 0) { /* query all extensions */ *reply_number = im_ext_len; } else { for (i = 0; i < im_ext_len; i++) { for (j = 0; j < (int) number; j++) { if (strcmp (lib_extension[j].name, im_ext[i].name) == 0) { (*reply_number)++; break; } /*endif*/ } /*endfor*/ } /*endfor*/ } /*endif*/ if (!(*reply_number)) return NULL; /*endif*/ ext_list = (XIMExt *) malloc (sizeof (XIMExt)*(*reply_number)); if (!ext_list) return NULL; /*endif*/ memset (ext_list, 0, sizeof (XIMExt)*(*reply_number)); if (number == 0) { /* query all extensions */ for (i = 0; i < im_ext_len; i++) { ext_list[i].major_opcode = im_ext[i].major_opcode; ext_list[i].minor_opcode = im_ext[i].minor_opcode; ext_list[i].length = im_ext[i].length; ext_list[i].name = malloc (im_ext[i].length + 1); strcpy (ext_list[i].name, im_ext[i].name); } /*endfor*/ } else { int n = 0; for (i = 0; i < im_ext_len; i++) { for (j = 0; j < (int)number; j++) { if (strcmp (lib_extension[j].name, im_ext[i].name) == 0) { ext_list[n].major_opcode = im_ext[i].major_opcode; ext_list[n].minor_opcode = im_ext[i].minor_opcode; ext_list[n].length = im_ext[i].length; ext_list[n].name = malloc (im_ext[i].length + 1); strcpy (ext_list[n].name, im_ext[i].name); n++; break; } /*endif*/ } /*endfor*/ } /*endfor*/ } /*endif*/ return ext_list; } static void QueryExtensionMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; FmStatus status; extern XimFrameRec query_extension_fr[]; extern XimFrameRec query_extension_reply_fr[]; unsigned char *reply = NULL; int str_size; register int i; register int number; register int total_size; int byte_length; int reply_number = 0; XIMExt *ext_list; IMQueryExtensionStruct *query_ext = (IMQueryExtensionStruct *) &call_data->queryext; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (query_extension_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, byte_length); query_ext->extension = (XIMStr *) malloc (sizeof (XIMStr)*10); memset (query_ext->extension, 0, sizeof (XIMStr)*10); number = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) { char *name; int str_length; FrameMgrGetToken (fm, str_length); FrameMgrSetSize (fm, str_length); query_ext->extension[number].length = str_length; FrameMgrGetToken (fm, name); query_ext->extension[number].name = malloc (str_length + 1); strncpy (query_ext->extension[number].name, name, str_length); query_ext->extension[number].name[str_length] = (char) 0; number++; } /*endwhile*/ query_ext->number = number; #ifdef PROTOCOL_RICH if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ #endif /* PROTOCOL_RICH */ FrameMgrFree (fm); ext_list = MakeExtensionList (i18n_core, query_ext->extension, number, &reply_number); for (i = 0; i < number; i++) XFree (query_ext->extension[i].name); /*endfor*/ XFree (query_ext->extension); fm = FrameMgrInit (query_extension_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set iteration count for list of extensions */ FrameMgrSetIterCount (fm, reply_number); /* set length of BARRAY item in ext_fr */ for (i = 0; i < reply_number; i++) { str_size = strlen (ext_list[i].name); FrameMgrSetSize (fm, str_size); } /*endfor*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); for (i = 0; i < reply_number; i++) { str_size = FrameMgrGetSize (fm); FrameMgrPutToken (fm, ext_list[i].major_opcode); FrameMgrPutToken (fm, ext_list[i].minor_opcode); FrameMgrPutToken (fm, str_size); FrameMgrPutToken (fm, ext_list[i].name); } /*endfor*/ _Xi18nSendMessage (ims, connect_id, XIM_QUERY_EXTENSION_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); for (i = 0; i < reply_number; i++) XFree (ext_list[i].name); /*endfor*/ XFree ((char *) ext_list); } static void SyncReplyMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec sync_reply_fr[]; CARD16 connect_id = call_data->any.connect_id; Xi18nClient *client; CARD16 input_method_ID; CARD16 input_context_ID; client = (Xi18nClient *)_Xi18nFindClient (i18n_core, connect_id); fm = FrameMgrInit (sync_reply_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, input_context_ID); FrameMgrFree (fm); client->sync = False; if (ims->sync == True) { ims->sync = False; if (i18n_core->address.improto) { call_data->sync_xlib.major_code = XIM_SYNC_REPLY; call_data->sync_xlib.minor_code = 0; call_data->sync_xlib.connect_id = input_method_ID; call_data->sync_xlib.icid = input_context_ID; i18n_core->address.improto(ims, call_data); } } } static void GetIMValueFromName (Xi18n i18n_core, CARD16 connect_id, char *buf, char *name, int *length) { register int i; if (strcmp (name, XNQueryInputStyle) == 0) { XIMStyles *styles = (XIMStyles *) &i18n_core->address.input_styles; *length = sizeof (CARD16)*2; /* count_styles, unused */ *length += styles->count_styles*sizeof (CARD32); if (buf != NULL) { FrameMgr fm; extern XimFrameRec input_styles_fr[]; unsigned char *data = NULL; int total_size; fm = FrameMgrInit (input_styles_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set iteration count for list of input_style */ FrameMgrSetIterCount (fm, styles->count_styles); total_size = FrameMgrGetTotalSize (fm); data = (unsigned char *) malloc (total_size); if (!data) return; /*endif*/ memset (data, 0, total_size); FrameMgrSetBuffer (fm, data); FrameMgrPutToken (fm, styles->count_styles); for (i = 0; i < (int) styles->count_styles; i++) FrameMgrPutToken (fm, styles->supported_styles[i]); /*endfor*/ memmove (buf, data, total_size); FrameMgrFree (fm); /* ADDED BY SUZHE */ free (data); /* ADDED BY SUZHE */ } /*endif*/ } /*endif*/ else if (strcmp (name, XNQueryIMValuesList) == 0) { } } static XIMAttribute *MakeIMAttributeList (Xi18n i18n_core, CARD16 connect_id, CARD16 *list, int *number, int *length) { XIMAttribute *attrib_list; int list_num; XIMAttr *attr = i18n_core->address.xim_attr; int list_len = i18n_core->address.im_attr_num; register int i; register int j; int value_length; int number_ret = 0; *length = 0; list_num = 0; for (i = 0; i < *number; i++) { for (j = 0; j < list_len; j++) { if (attr[j].attribute_id == list[i]) { list_num++; break; } /*endif*/ } /*endfor*/ } /*endfor*/ attrib_list = (XIMAttribute *) malloc (sizeof (XIMAttribute)*list_num); if (!attrib_list) return NULL; /*endif*/ memset (attrib_list, 0, sizeof (XIMAttribute)*list_num); number_ret = list_num; list_num = 0; for (i = 0; i < *number; i++) { for (j = 0; j < list_len; j++) { if (attr[j].attribute_id == list[i]) { attrib_list[list_num].attribute_id = attr[j].attribute_id; attrib_list[list_num].name_length = attr[j].length; attrib_list[list_num].name = attr[j].name; attrib_list[list_num].type = attr[j].type; GetIMValueFromName (i18n_core, connect_id, NULL, attr[j].name, &value_length); attrib_list[list_num].value_length = value_length; attrib_list[list_num].value = (void *) malloc (value_length); memset(attrib_list[list_num].value, 0, value_length); GetIMValueFromName (i18n_core, connect_id, attrib_list[list_num].value, attr[j].name, &value_length); *length += sizeof (CARD16)*2; *length += value_length; *length += IMPAD (value_length); list_num++; break; } /*endif*/ } /*endfor*/ } /*endfor*/ *number = number_ret; return attrib_list; } static void GetIMValuesMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; FmStatus status; extern XimFrameRec get_im_values_fr[]; extern XimFrameRec get_im_values_reply_fr[]; CARD16 byte_length; int list_len, total_size; unsigned char *reply = NULL; int iter_count; register int i; register int j; int number; CARD16 *im_attrID_list; char **name_list; CARD16 name_number; XIMAttribute *im_attribute_list; IMGetIMValuesStruct *getim = (IMGetIMValuesStruct *)&call_data->getim; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; /* create FrameMgr */ fm = FrameMgrInit (get_im_values_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, byte_length); im_attrID_list = (CARD16 *) malloc (sizeof (CARD16)*20); memset (im_attrID_list, 0, sizeof (CARD16)*20); name_list = (char **)malloc(sizeof(char *) * 20); memset(name_list, 0, sizeof(char *) * 20); number = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) { FrameMgrGetToken (fm, im_attrID_list[number]); number++; } FrameMgrFree (fm); name_number = 0; for (i = 0; i < number; i++) { for (j = 0; j < i18n_core->address.im_attr_num; j++) { if (i18n_core->address.xim_attr[j].attribute_id == im_attrID_list[i]) { name_list[name_number++] = i18n_core->address.xim_attr[j].name; break; } } } getim->number = name_number; getim->im_attr_list = name_list; XFree (name_list); #ifdef PROTOCOL_RICH if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; } #endif /* PROTOCOL_RICH */ im_attribute_list = MakeIMAttributeList (i18n_core, connect_id, im_attrID_list, &number, &list_len); if (im_attrID_list) XFree (im_attrID_list); /*endif*/ fm = FrameMgrInit (get_im_values_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); iter_count = number; /* set iteration count for list of im_attribute */ FrameMgrSetIterCount (fm, iter_count); /* set length of BARRAY item in ximattribute_fr */ for (i = 0; i < iter_count; i++) FrameMgrSetSize (fm, im_attribute_list[i].value_length); /*endfor*/ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); for (i = 0; i < iter_count; i++) { FrameMgrPutToken (fm, im_attribute_list[i].attribute_id); FrameMgrPutToken (fm, im_attribute_list[i].value_length); FrameMgrPutToken (fm, im_attribute_list[i].value); } /*endfor*/ _Xi18nSendMessage (ims, connect_id, XIM_GET_IM_VALUES_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree (reply); for (i = 0; i < iter_count; i++) XFree(im_attribute_list[i].value); XFree (im_attribute_list); } static void CreateICMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { _Xi18nChangeIC (ims, call_data, p, True); } static void SetICValuesMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { _Xi18nChangeIC (ims, call_data, p, False); } static void GetICValuesMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { _Xi18nGetIC (ims, call_data, p); } static void SetICFocusMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec set_ic_focus_fr[]; IMChangeFocusStruct *setfocus; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; /* some buggy xim clients do not send XIM_SYNC_REPLY for synchronous * events. In such case, xim server is waiting for XIM_SYNC_REPLY * forever. So the xim server is blocked to waiting sync reply. * It prevents further input. * Usually it happens when a client calls XSetICFocus() with another ic * before passing an event to XFilterEvent(), where the event is needed * by the old focused ic to sync its state. * To avoid such problem, remove the whole clients queue and set them * as asynchronous. * * See: * http://bugs.freedesktop.org/show_bug.cgi?id=7869 */ DiscardAllQueue(ims); setfocus = (IMChangeFocusStruct *) &call_data->changefocus; fm = FrameMgrInit (set_ic_focus_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, setfocus->icid); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ } static void UnsetICFocusMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec unset_ic_focus_fr[]; IMChangeFocusStruct *unsetfocus; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; Xi18nClient *client = _Xi18nFindClient (i18n_core, connect_id); /* some buggy clients unset focus ic before the ic answer the sync reply, * so the xim server may be blocked to waiting sync reply. To avoid * this problem, remove the client queue and set it asynchronous * * See: SetICFocusMessageProc */ if (client != NULL && client->sync) { DiscardQueue(ims, client->connect_id); } unsetfocus = (IMChangeFocusStruct *) &call_data->changefocus; fm = FrameMgrInit (unset_ic_focus_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, unsetfocus->icid); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ } static void DestroyICMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec destroy_ic_fr[]; extern XimFrameRec destroy_ic_reply_fr[]; register int total_size; unsigned char *reply = NULL; IMDestroyICStruct *destroy = (IMDestroyICStruct *) &call_data->destroyic; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (destroy_ic_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, destroy->icid); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ fm = FrameMgrInit (destroy_ic_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, destroy->icid); _Xi18nSendMessage (ims, connect_id, XIM_DESTROY_IC_REPLY, 0, reply, total_size); XFree(reply); FrameMgrFree (fm); } static void ResetICMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec reset_ic_fr[]; extern XimFrameRec reset_ic_reply_fr[]; register int total_size; unsigned char *reply = NULL; IMResetICStruct *resetic = (IMResetICStruct *) &call_data->resetic; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (reset_ic_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, resetic->icid); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ /* create FrameMgr */ fm = FrameMgrInit (reset_ic_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set length of STRING8 */ FrameMgrSetSize (fm, resetic->length); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, resetic->icid); FrameMgrPutToken(fm, resetic->length); FrameMgrPutToken (fm, resetic->commit_string); _Xi18nSendMessage (ims, connect_id, XIM_RESET_IC_REPLY, 0, reply, total_size); FrameMgrFree (fm); XFree(reply); } static int WireEventToEvent (Xi18n i18n_core, xEvent *event, CARD16 serial, XEvent *ev, Bool byte_swap) { FrameMgr fm; extern XimFrameRec wire_keyevent_fr[]; BYTE b; CARD16 c16; CARD32 c32; int ret = False; /* create FrameMgr */ fm = FrameMgrInit(wire_keyevent_fr, (char *)(&(event->u)), byte_swap); /* get & set type */ FrameMgrGetToken(fm, b); ev->type = (unsigned int)b; /* get detail */ FrameMgrGetToken(fm, b); /* get & set serial */ FrameMgrGetToken(fm, c16); ev->xany.serial = (unsigned long)c16; ev->xany.serial |= serial << 16; ev->xany.send_event = False; ev->xany.display = i18n_core->address.dpy; /* Remove SendEvent flag from event type to emulate KeyPress/Release */ ev->type &= 0x7F; switch (ev->type) { case KeyPress: case KeyRelease: { XKeyEvent *kev = (XKeyEvent*)ev; /* set keycode (detail) */ kev->keycode = (unsigned int)b; /* get & set values */ FrameMgrGetToken(fm, c32); kev->time = (Time)c32; FrameMgrGetToken(fm, c32); kev->root = (Window)c32; FrameMgrGetToken(fm, c32); kev->window = (Window)c32; FrameMgrGetToken(fm, c32); kev->subwindow = (Window)c32; FrameMgrGetToken(fm, c16); kev->x_root = (int)c16; FrameMgrGetToken(fm, c16); kev->y_root = (int)c16; FrameMgrGetToken(fm, c16); kev->x = (int)c16; FrameMgrGetToken(fm, c16); kev->y = (int)c16; FrameMgrGetToken(fm, c16); kev->state = (unsigned int)c16; FrameMgrGetToken(fm, b); kev->same_screen = (Bool)b; } ret = True; break; default: break; } /* free FrameMgr */ FrameMgrFree(fm); return ret; } static void ForwardEventMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec forward_event_fr[]; xEvent wire_event; IMForwardEventStruct *forward = (IMForwardEventStruct*) &call_data->forwardevent; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (forward_event_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, forward->icid); FrameMgrGetToken (fm, forward->sync_bit); FrameMgrGetToken (fm, forward->serial_number); p += sizeof (CARD16)*4; memmove (&wire_event, p, sizeof (xEvent)); FrameMgrFree (fm); if (WireEventToEvent (i18n_core, &wire_event, forward->serial_number, &forward->event, _Xi18nNeedSwap (i18n_core, connect_id)) == True) { if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ } /*endif*/ } static void ExtForwardKeyEventMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec ext_forward_keyevent_fr[]; CARD8 type, keycode; CARD16 state; CARD32 ev_time, window; IMForwardEventStruct *forward = (IMForwardEventStruct *) &call_data->forwardevent; XEvent *ev = (XEvent *) &forward->event; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (ext_forward_keyevent_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, forward->icid); FrameMgrGetToken (fm, forward->sync_bit); FrameMgrGetToken (fm, forward->serial_number); FrameMgrGetToken (fm, type); FrameMgrGetToken (fm, keycode); FrameMgrGetToken (fm, state); FrameMgrGetToken (fm, ev_time); FrameMgrGetToken (fm, window); FrameMgrFree (fm); if (type != KeyPress) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ /* make a faked keypress event */ ev->type = (int)type; ev->xany.send_event = True; ev->xany.display = i18n_core->address.dpy; ev->xany.serial = (unsigned long) forward->serial_number; ((XKeyEvent *) ev)->keycode = (unsigned int) keycode; ((XKeyEvent *) ev)->state = (unsigned int) state; ((XKeyEvent *) ev)->time = (Time) ev_time; ((XKeyEvent *) ev)->window = (Window) window; ((XKeyEvent *) ev)->root = DefaultRootWindow (ev->xany.display); ((XKeyEvent *) ev)->x = 0; ((XKeyEvent *) ev)->y = 0; ((XKeyEvent *) ev)->x_root = 0; ((XKeyEvent *) ev)->y_root = 0; if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ } static void ExtMoveMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec ext_move_fr[]; IMMoveStruct *extmove = (IMMoveStruct*) & call_data->extmove; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (ext_move_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, extmove->icid); FrameMgrGetToken (fm, extmove->x); FrameMgrGetToken (fm, extmove->y); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ } static void ExtensionMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { switch (call_data->any.minor_code) { case XIM_EXT_FORWARD_KEYEVENT: ExtForwardKeyEventMessageProc (ims, call_data, p); break; case XIM_EXT_MOVE: ExtMoveMessageProc (ims, call_data, p); break; } /*endswitch*/ } static void TriggerNotifyMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec trigger_notify_fr[], trigger_notify_reply_fr[]; register int total_size; unsigned char *reply = NULL; IMTriggerNotifyStruct *trigger = (IMTriggerNotifyStruct *) &call_data->triggernotify; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; CARD32 flag; fm = FrameMgrInit (trigger_notify_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, trigger->icid); FrameMgrGetToken (fm, trigger->flag); FrameMgrGetToken (fm, trigger->key_index); FrameMgrGetToken (fm, trigger->event_mask); /* In order to support Front End Method, this event_mask must be saved per clients so that it should be restored by an XIM_EXT_SET_EVENT_MASK call when preediting mode is reset to off. */ flag = trigger->flag; FrameMgrFree (fm); fm = FrameMgrInit (trigger_notify_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, trigger->icid); /* NOTE: XIM_TRIGGER_NOTIFY_REPLY should be sent before XIM_SET_EVENT_MASK in case of XIM_TRIGGER_NOTIFY(flag == ON), while it should be sent after XIM_SET_EVENT_MASK in case of XIM_TRIGGER_NOTIFY(flag == OFF). */ if (flag == 0) { /* on key */ _Xi18nSendMessage (ims, connect_id, XIM_TRIGGER_NOTIFY_REPLY, 0, reply, total_size); IMPreeditStart (ims, (XPointer)call_data); } /*endif*/ if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ if (flag == 1) { /* off key */ IMPreeditEnd (ims, (XPointer) call_data); _Xi18nSendMessage (ims, connect_id, XIM_TRIGGER_NOTIFY_REPLY, 0, reply, total_size); } /*endif*/ FrameMgrFree (fm); XFree (reply); } static INT16 ChooseEncoding (Xi18n i18n_core, IMEncodingNegotiationStruct *enc_nego) { Xi18nAddressRec *address = (Xi18nAddressRec *) & i18n_core->address; XIMEncodings *p; int i, j; int enc_index=0; p = (XIMEncodings *) &address->encoding_list; for (i = 0; i < (int) p->count_encodings; i++) { for (j = 0; j < (int) enc_nego->encoding_number; j++) { if (strcmp (p->supported_encodings[i], enc_nego->encoding[j].name) == 0) { enc_index = j; break; } /*endif*/ } /*endfor*/ } /*endfor*/ return (INT16) enc_index; #if 0 return (INT16) XIM_Default_Encoding_IDX; #endif } static void EncodingNegotiatonMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; FmStatus status; CARD16 byte_length; extern XimFrameRec encoding_negotiation_fr[]; extern XimFrameRec encoding_negotiation_reply_fr[]; register int i, total_size; unsigned char *reply = NULL; IMEncodingNegotiationStruct *enc_nego = (IMEncodingNegotiationStruct *) &call_data->encodingnego; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (encoding_negotiation_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); FrameMgrGetToken (fm, input_method_ID); /* get ENCODING STR field */ FrameMgrGetToken (fm, byte_length); if (byte_length > 0) { enc_nego->encoding = (XIMStr *) malloc (sizeof (XIMStr)*10); memset (enc_nego->encoding, 0, sizeof (XIMStr)*10); i = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) { char *name; int str_length; FrameMgrGetToken (fm, str_length); FrameMgrSetSize (fm, str_length); enc_nego->encoding[i].length = str_length; FrameMgrGetToken (fm, name); enc_nego->encoding[i].name = malloc (str_length + 1); strncpy (enc_nego->encoding[i].name, name, str_length); enc_nego->encoding[i].name[str_length] = '\0'; i++; } /*endwhile*/ enc_nego->encoding_number = i; } /*endif*/ /* get ENCODING INFO field */ FrameMgrGetToken (fm, byte_length); if (byte_length > 0) { enc_nego->encodinginfo = (XIMStr *) malloc (sizeof (XIMStr)*10); memset (enc_nego->encoding, 0, sizeof (XIMStr)*10); i = 0; while (FrameMgrIsIterLoopEnd (fm, &status) == False) { char *name; int str_length; FrameMgrGetToken (fm, str_length); FrameMgrSetSize (fm, str_length); enc_nego->encodinginfo[i].length = str_length; FrameMgrGetToken (fm, name); enc_nego->encodinginfo[i].name = malloc (str_length + 1); strncpy (enc_nego->encodinginfo[i].name, name, str_length); enc_nego->encodinginfo[i].name[str_length] = '\0'; i++; } /*endwhile*/ enc_nego->encoding_info_number = i; } /*endif*/ enc_nego->enc_index = ChooseEncoding (i18n_core, enc_nego); enc_nego->category = 0; #ifdef PROTOCOL_RICH if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ #endif /* PROTOCOL_RICH */ FrameMgrFree (fm); fm = FrameMgrInit (encoding_negotiation_reply_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, input_method_ID); FrameMgrPutToken (fm, enc_nego->category); FrameMgrPutToken (fm, enc_nego->enc_index); _Xi18nSendMessage (ims, connect_id, XIM_ENCODING_NEGOTIATION_REPLY, 0, reply, total_size); XFree (reply); /* free data for encoding list */ if (enc_nego->encoding) { for (i = 0; i < (int) enc_nego->encoding_number; i++) XFree (enc_nego->encoding[i].name); /*endfor*/ XFree (enc_nego->encoding); } /*endif*/ if (enc_nego->encodinginfo) { for (i = 0; i < (int) enc_nego->encoding_info_number; i++) XFree (enc_nego->encodinginfo[i].name); /*endfor*/ XFree (enc_nego->encodinginfo); } /*endif*/ FrameMgrFree (fm); } void PreeditStartReplyMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_start_reply_fr[]; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct *) &call_data->preedit_callback; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (preedit_start_reply_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, preedit_CB->icid); FrameMgrGetToken (fm, preedit_CB->todo.return_value); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto (ims, call_data))) return; /*endif*/ } /*endif*/ } void PreeditCaretReplyMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec preedit_caret_reply_fr[]; IMPreeditCBStruct *preedit_CB = (IMPreeditCBStruct *) &call_data->preedit_callback; XIMPreeditCaretCallbackStruct *caret = (XIMPreeditCaretCallbackStruct *) & preedit_CB->todo.caret; CARD16 connect_id = call_data->any.connect_id; CARD16 input_method_ID; fm = FrameMgrInit (preedit_caret_reply_fr, (char *) p, _Xi18nNeedSwap (i18n_core, connect_id)); /* get data */ FrameMgrGetToken (fm, input_method_ID); FrameMgrGetToken (fm, preedit_CB->icid); FrameMgrGetToken (fm, caret->position); FrameMgrFree (fm); if (i18n_core->address.improto) { if (!(i18n_core->address.improto(ims, call_data))) return; /*endif*/ } /*endif*/ } void StrConvReplyMessageProc (XIMS ims, IMProtocol *call_data, unsigned char *p) { return; } static void AddQueue (Xi18nClient *client, unsigned char *p) { XIMPending *new; XIMPending *last; if ((new = (XIMPending *) malloc (sizeof (XIMPending))) == NULL) return; /*endif*/ new->p = p; new->next = (XIMPending *) NULL; if (!client->pending) { client->pending = new; } else { for (last = client->pending; last->next; last = last->next) ; /*endfor*/ last->next = new; } /*endif*/ return; } static void ProcessQueue (XIMS ims, CARD16 connect_id) { Xi18n i18n_core = ims->protocol; Xi18nClient *client = (Xi18nClient *) _Xi18nFindClient (i18n_core, connect_id); while (client->sync == False && client->pending) { XimProtoHdr *hdr = (XimProtoHdr *) client->pending->p; unsigned char *p1 = (unsigned char *) (hdr + 1); IMProtocol call_data; call_data.major_code = hdr->major_opcode; call_data.any.minor_code = hdr->minor_opcode; call_data.any.connect_id = connect_id; switch (hdr->major_opcode) { case XIM_FORWARD_EVENT: ForwardEventMessageProc(ims, &call_data, p1); break; } /*endswitch*/ XFree (hdr); { XIMPending *old = client->pending; client->pending = old->next; XFree (old); } } /*endwhile*/ return; } void _Xi18nMessageHandler (XIMS ims, CARD16 connect_id, unsigned char *p, Bool *delete) { XimProtoHdr *hdr = (XimProtoHdr *)p; unsigned char *p1 = (unsigned char *)(hdr + 1); IMProtocol call_data; Xi18n i18n_core = ims->protocol; Xi18nClient *client; client = (Xi18nClient *) _Xi18nFindClient (i18n_core, connect_id); if (hdr == (XimProtoHdr *) NULL) return; /*endif*/ memset (&call_data, 0, sizeof(IMProtocol)); call_data.major_code = hdr->major_opcode; call_data.any.minor_code = hdr->minor_opcode; call_data.any.connect_id = connect_id; switch (call_data.major_code) { case XIM_CONNECT: #ifdef XIM_DEBUG DebugLog("-- XIM_CONNECT\n"); #endif ConnectMessageProc (ims, &call_data, p1); break; case XIM_DISCONNECT: #ifdef XIM_DEBUG DebugLog("-- XIM_DISCONNECT\n"); #endif DisConnectMessageProc (ims, &call_data); break; case XIM_OPEN: #ifdef XIM_DEBUG DebugLog("-- XIM_OPEN\n"); #endif OpenMessageProc (ims, &call_data, p1); break; case XIM_CLOSE: #ifdef XIM_DEBUG DebugLog("-- XIM_CLOSE\n"); #endif CloseMessageProc (ims, &call_data, p1); break; case XIM_QUERY_EXTENSION: #ifdef XIM_DEBUG DebugLog("-- XIM_QUERY_EXTENSION\n"); #endif QueryExtensionMessageProc (ims, &call_data, p1); break; case XIM_GET_IM_VALUES: #ifdef XIM_DEBUG DebugLog("-- XIM_GET_IM_VALUES\n"); #endif GetIMValuesMessageProc (ims, &call_data, p1); break; case XIM_CREATE_IC: #ifdef XIM_DEBUG DebugLog("-- XIM_CREATE_IC\n"); #endif CreateICMessageProc (ims, &call_data, p1); break; case XIM_SET_IC_VALUES: #ifdef XIM_DEBUG DebugLog("-- XIM_SET_IC_VALUES\n"); #endif SetICValuesMessageProc (ims, &call_data, p1); break; case XIM_GET_IC_VALUES: #ifdef XIM_DEBUG DebugLog("-- XIM_GET_IC_VALUES\n"); #endif GetICValuesMessageProc (ims, &call_data, p1); break; case XIM_SET_IC_FOCUS: #ifdef XIM_DEBUG DebugLog("-- XIM_SET_IC_FOCUS\n"); #endif SetICFocusMessageProc (ims, &call_data, p1); break; case XIM_UNSET_IC_FOCUS: #ifdef XIM_DEBUG DebugLog("-- XIM_UNSET_IC_FOCUS\n"); #endif UnsetICFocusMessageProc (ims, &call_data, p1); break; case XIM_DESTROY_IC: #ifdef XIM_DEBUG DebugLog("-- XIM_DESTROY_IC\n"); #endif DestroyICMessageProc (ims, &call_data, p1); break; case XIM_RESET_IC: #ifdef XIM_DEBUG DebugLog("-- XIM_RESET_IC\n"); #endif ResetICMessageProc (ims, &call_data, p1); break; case XIM_FORWARD_EVENT: #ifdef XIM_DEBUG DebugLog("-- XIM_FORWARD_EVENT\n"); #endif if (client->sync == True) { AddQueue (client, p); *delete = False; } else { ForwardEventMessageProc (ims, &call_data, p1); } break; case XIM_EXTENSION: #ifdef XIM_DEBUG DebugLog("-- XIM_EXTENSION\n"); #endif ExtensionMessageProc (ims, &call_data, p1); break; case XIM_SYNC: #ifdef XIM_DEBUG DebugLog("-- XIM_SYNC\n"); #endif break; case XIM_SYNC_REPLY: #ifdef XIM_DEBUG DebugLog("-- XIM_SYNC_REPLY\n"); #endif SyncReplyMessageProc (ims, &call_data, p1); ProcessQueue (ims, connect_id); break; case XIM_TRIGGER_NOTIFY: #ifdef XIM_DEBUG DebugLog("-- XIM_TRIGGER_NOTIFY\n"); #endif TriggerNotifyMessageProc (ims, &call_data, p1); break; case XIM_ENCODING_NEGOTIATION: #ifdef XIM_DEBUG DebugLog("-- XIM_ENCODING_NEGOTIATION\n"); #endif EncodingNegotiatonMessageProc (ims, &call_data, p1); break; case XIM_PREEDIT_START_REPLY: #ifdef XIM_DEBUG DebugLog("-- XIM_PREEDIT_START_REPLY\n"); #endif PreeditStartReplyMessageProc (ims, &call_data, p1); break; case XIM_PREEDIT_CARET_REPLY: #ifdef XIM_DEBUG DebugLog("-- XIM_PREEDIT_CARET_REPLY\n"); #endif PreeditCaretReplyMessageProc (ims, &call_data, p1); break; case XIM_STR_CONVERSION_REPLY: #ifdef XIM_DEBUG DebugLog("-- XIM_STR_CONVERSION_REPLY\n"); #endif StrConvReplyMessageProc (ims, &call_data, p1); break; } /*endswitch*/ } scim-master/modules/FrontEnd/IMdkit/i18nUtil.c000066400000000000000000000210351415264260100214350ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include "IMdkit.h" #include "Xi18n.h" #include "FrameMgr.h" #include "XimFunc.h" Xi18nClient *_Xi18nFindClient (Xi18n, CARD16); void _Xi18nInitOffsetCache(Xi18nOffsetCache *); int _Xi18nNeedSwap (Xi18n i18n_core, CARD16 connect_id) { CARD8 im_byteOrder = i18n_core->address.im_byteOrder; Xi18nClient *client = _Xi18nFindClient (i18n_core, connect_id); return (client->byte_order != im_byteOrder); } Xi18nClient *_Xi18nNewClient(Xi18n i18n_core) { static CARD16 connect_id = 0; int new_connect_id; Xi18nClient *client; if (i18n_core->address.free_clients) { client = i18n_core->address.free_clients; i18n_core->address.free_clients = client->next; new_connect_id = client->connect_id; } else { client = (Xi18nClient *) malloc (sizeof (Xi18nClient)); new_connect_id = ++connect_id; } /*endif*/ memset (client, 0, sizeof (Xi18nClient)); client->connect_id = new_connect_id; client->pending = (XIMPending *) NULL; client->sync = False; client->byte_order = '?'; /* initial value */ memset (&client->pending, 0, sizeof (XIMPending *)); _Xi18nInitOffsetCache(&client->offset_cache); client->next = i18n_core->address.clients; i18n_core->address.clients = client; return (Xi18nClient *) client; } Xi18nClient *_Xi18nFindClient (Xi18n i18n_core, CARD16 connect_id) { Xi18nClient *client = i18n_core->address.clients; while (client) { if (client->connect_id == connect_id) return client; /*endif*/ client = client->next; } /*endwhile*/ return NULL; } void _Xi18nDeleteClient (Xi18n i18n_core, CARD16 connect_id) { Xi18nClient *target = _Xi18nFindClient (i18n_core, connect_id); Xi18nClient *ccp; Xi18nClient *ccp0; for (ccp = i18n_core->address.clients, ccp0 = NULL; ccp != NULL; ccp0 = ccp, ccp = ccp->next) { if (ccp == target) { if (ccp0 == NULL) i18n_core->address.clients = ccp->next; else ccp0->next = ccp->next; /*endif*/ /* put it back to free list */ target->next = i18n_core->address.free_clients; i18n_core->address.free_clients = target; return; } /*endif*/ } /*endfor*/ } void _Xi18nSendMessage (XIMS ims, CARD16 connect_id, CARD8 major_opcode, CARD8 minor_opcode, unsigned char *data, long length) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec packet_header_fr[]; unsigned char *reply_hdr = NULL; int header_size; unsigned char *reply = NULL; unsigned char *replyp; int reply_length; long p_len = length/4; fm = FrameMgrInit (packet_header_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); header_size = FrameMgrGetTotalSize (fm); reply_hdr = (unsigned char *) malloc (header_size); if (reply_hdr == NULL) { _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); return; } /*endif*/ FrameMgrSetBuffer (fm, reply_hdr); /* put data */ FrameMgrPutToken (fm, major_opcode); FrameMgrPutToken (fm, minor_opcode); FrameMgrPutToken (fm, p_len); reply_length = header_size + length; reply = (unsigned char *) malloc (reply_length); replyp = reply; memmove (reply, reply_hdr, header_size); replyp += header_size; memmove (replyp, data, length); i18n_core->methods.send (ims, connect_id, reply, reply_length); XFree (reply); XFree (reply_hdr); FrameMgrFree (fm); } void _Xi18nSendTriggerKey (XIMS ims, CARD16 connect_id) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec register_triggerkeys_fr[]; XIMTriggerKey *on_keys = i18n_core->address.on_keys.keylist; XIMTriggerKey *off_keys = i18n_core->address.off_keys.keylist; int on_key_num = i18n_core->address.on_keys.count_keys; int off_key_num = i18n_core->address.off_keys.count_keys; unsigned char *reply = NULL; register int i, total_size; CARD16 im_id; if (on_key_num == 0 && off_key_num == 0) return; /*endif*/ fm = FrameMgrInit (register_triggerkeys_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); /* set iteration count for on-keys list */ FrameMgrSetIterCount (fm, on_key_num); /* set iteration count for off-keys list */ FrameMgrSetIterCount (fm, off_key_num); /* get total_size */ total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) return; /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); /* Right now XIM_OPEN_REPLY hasn't been sent to this new client, so the input-method-id is still invalid, and should be set to zero... Reter to $(XC)/lib/X11/imDefLkup.c:_XimRegisterTriggerKeysCallback */ im_id = 0; FrameMgrPutToken (fm, im_id); /* input-method-id */ for (i = 0; i < on_key_num; i++) { FrameMgrPutToken (fm, on_keys[i].keysym); FrameMgrPutToken (fm, on_keys[i].modifier); FrameMgrPutToken (fm, on_keys[i].modifier_mask); } /*endfor*/ for (i = 0; i < off_key_num; i++) { FrameMgrPutToken (fm, off_keys[i].keysym); FrameMgrPutToken (fm, off_keys[i].modifier); FrameMgrPutToken (fm, off_keys[i].modifier_mask); } /*endfor*/ _Xi18nSendMessage (ims, connect_id, XIM_REGISTER_TRIGGERKEYS, 0, reply, total_size); FrameMgrFree (fm); XFree(reply); } void _Xi18nSetEventMask (XIMS ims, CARD16 connect_id, CARD16 im_id, CARD16 ic_id, CARD32 forward_mask, CARD32 sync_mask) { Xi18n i18n_core = ims->protocol; FrameMgr fm; extern XimFrameRec set_event_mask_fr[]; unsigned char *reply = NULL; register int total_size; fm = FrameMgrInit (set_event_mask_fr, NULL, _Xi18nNeedSwap (i18n_core, connect_id)); total_size = FrameMgrGetTotalSize (fm); reply = (unsigned char *) malloc (total_size); if (!reply) return; /*endif*/ memset (reply, 0, total_size); FrameMgrSetBuffer (fm, reply); FrameMgrPutToken (fm, im_id); /* input-method-id */ FrameMgrPutToken (fm, ic_id); /* input-context-id */ FrameMgrPutToken (fm, forward_mask); FrameMgrPutToken (fm, sync_mask); _Xi18nSendMessage (ims, connect_id, XIM_SET_EVENT_MASK, 0, reply, total_size); FrameMgrFree (fm); XFree(reply); } scim-master/modules/FrontEnd/IMdkit/i18nX.c000066400000000000000000000425641415264260100207410ustar00rootroot00000000000000/****************************************************************** Copyright 1994, 1995 by Sun Microsystems, Inc. Copyright 1993, 1994 by Hewlett-Packard Company Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sun Microsystems, Inc. and Hewlett-Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sun Microsystems, Inc. and Hewlett-Packard make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SUN MICROSYSTEMS INC. AND HEWLETT-PACKARD COMPANY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SUN MICROSYSTEMS, INC. AND HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hidetoshi Tajima(tajima@Eng.Sun.COM) Sun Microsystems, Inc. This version tidied and debugged by Steve Underwood May 1999 ******************************************************************/ #include #include #include #include #include "FrameMgr.h" #include "IMdkit.h" #include "Xi18n.h" #include "Xi18nX.h" #include "XimFunc.h" extern Xi18nClient *_Xi18nFindClient(Xi18n, CARD16); extern Xi18nClient *_Xi18nNewClient(Xi18n); extern void _Xi18nDeleteClient(Xi18n, CARD16); extern unsigned long _Xi18nLookupPropertyOffset(Xi18nOffsetCache *, Atom); extern void _Xi18nSetPropertyOffset(Xi18nOffsetCache *, Atom, unsigned long); static Bool WaitXConnectMessage(Display*, Window, XEvent*, XPointer); static Bool WaitXIMProtocol(Display*, Window, XEvent*, XPointer); static XClient *NewXClient (Xi18n i18n_core, Window new_client) { Display *dpy = i18n_core->address.dpy; Xi18nClient *client = _Xi18nNewClient (i18n_core); XClient *x_client; x_client = (XClient *) malloc (sizeof (XClient)); x_client->client_win = new_client; x_client->accept_win = XCreateSimpleWindow (dpy, DefaultRootWindow(dpy), 0, 0, 1, 1, 1, 0, 0); client->trans_rec = x_client; return ((XClient *) x_client); } static unsigned char *ReadXIMMessage (XIMS ims, XClientMessageEvent *ev, int *connect_id) { Xi18n i18n_core = ims->protocol; Xi18nClient *client = i18n_core->address.clients; XClient *x_client = NULL; FrameMgr fm; extern XimFrameRec packet_header_fr[]; unsigned char *p = NULL; unsigned char *p1; while (client != NULL) { x_client = (XClient *) client->trans_rec; if (x_client->accept_win == ev->window) { *connect_id = client->connect_id; break; } client = client->next; } if (ev->format == 8) { /* ClientMessage only */ XimProtoHdr *hdr = (XimProtoHdr *) ev->data.b; unsigned char *rec = (unsigned char *) (hdr + 1); register int total_size; CARD8 major_opcode; CARD8 minor_opcode; CARD16 length; extern int _Xi18nNeedSwap (Xi18n, CARD16); if (client->byte_order == '?') { if (hdr->major_opcode != XIM_CONNECT) return (unsigned char *) NULL; /* can do nothing */ client->byte_order = (CARD8) rec[0]; } fm = FrameMgrInit (packet_header_fr, (char *) hdr, _Xi18nNeedSwap (i18n_core, *connect_id)); total_size = FrameMgrGetTotalSize (fm); /* get data */ FrameMgrGetToken (fm, major_opcode); FrameMgrGetToken (fm, minor_opcode); FrameMgrGetToken (fm, length); FrameMgrFree (fm); if ((p = (unsigned char *) malloc (total_size + length * 4)) == NULL) return (unsigned char *) NULL; p1 = p; memmove (p1, &major_opcode, sizeof (CARD8)); p1 += sizeof (CARD8); memmove (p1, &minor_opcode, sizeof (CARD8)); p1 += sizeof (CARD8); memmove (p1, &length, sizeof (CARD16)); p1 += sizeof (CARD16); memmove (p1, rec, length * 4); } else if (ev->format == 32) { /* ClientMessage and WindowProperty */ unsigned long length = (unsigned long) ev->data.l[0]; Atom atom = (Atom) ev->data.l[1]; int return_code; Atom actual_type_ret; int actual_format_ret; unsigned long bytes_after_ret; unsigned char *prop; unsigned long nitems; Xi18nOffsetCache *offset_cache = &client->offset_cache; unsigned long offset; unsigned long end; unsigned long long_begin; unsigned long long_end; if (length == 0) { fprintf (stderr, "%s: invalid length 0\n", __func__); return NULL; } offset = _Xi18nLookupPropertyOffset (offset_cache, atom); end = offset + length; /* The property data is retrieved in 32-bit chunks */ long_begin = offset / 4; long_end = (end + 3) / 4; return_code = XGetWindowProperty (i18n_core->address.dpy, x_client->accept_win, atom, long_begin, long_end - long_begin, True, AnyPropertyType, &actual_type_ret, &actual_format_ret, &nitems, &bytes_after_ret, &prop); if (return_code != Success || actual_format_ret == 0 || nitems == 0) { if (return_code == Success) XFree (prop); fprintf (stderr, "(XIM-IMdkit) ERROR: XGetWindowProperty failed.\n" "Protocol data is likely to be inconsistent.\n"); _Xi18nSetPropertyOffset (offset_cache, atom, 0); return (unsigned char *) NULL; } /* Update the offset to read next time as needed */ if (bytes_after_ret > 0) _Xi18nSetPropertyOffset (offset_cache, atom, offset + length); else _Xi18nSetPropertyOffset (offset_cache, atom, 0); /* if hit, it might be an error */ if ((p = (unsigned char *) malloc (length)) == NULL) return (unsigned char *) NULL; memcpy (p, prop + (offset % 4), length); XFree (prop); } return (unsigned char *) p; } static void ReadXConnectMessage (XIMS ims, XClientMessageEvent *ev) { Xi18n i18n_core = ims->protocol; XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; XEvent event; Display *dpy = i18n_core->address.dpy; Window new_client = ev->data.l[0]; CARD32 major_version = ev->data.l[1]; CARD32 minor_version = ev->data.l[2]; XClient *x_client = NewXClient (i18n_core, new_client); if (ev->window != i18n_core->address.im_window) return; /* incorrect connection request */ /*endif*/ if (major_version != 0 || minor_version != 0) { major_version = minor_version = 0; /* Only supporting only-CM & Property-with-CM method */ } /*endif*/ _XRegisterFilterByType (dpy, x_client->accept_win, ClientMessage, ClientMessage, WaitXIMProtocol, (XPointer)ims); event.xclient.type = ClientMessage; event.xclient.display = dpy; event.xclient.window = new_client; event.xclient.message_type = spec->connect_request; event.xclient.format = 32; event.xclient.data.l[0] = x_client->accept_win; event.xclient.data.l[1] = major_version; event.xclient.data.l[2] = minor_version; event.xclient.data.l[3] = XCM_DATA_LIMIT; XSendEvent (dpy, new_client, False, NoEventMask, &event); XFlush (dpy); } static Bool Xi18nXBegin (XIMS ims) { Xi18n i18n_core = ims->protocol; Display *dpy = i18n_core->address.dpy; XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; spec->xim_request = XInternAtom (i18n_core->address.dpy, _XIM_PROTOCOL, False); spec->connect_request = XInternAtom (i18n_core->address.dpy, _XIM_XCONNECT, False); _XRegisterFilterByType (dpy, i18n_core->address.im_window, ClientMessage, ClientMessage, WaitXConnectMessage, (XPointer)ims); return True; } static Bool Xi18nXEnd(XIMS ims) { Xi18n i18n_core = ims->protocol; Display *dpy = i18n_core->address.dpy; _XUnregisterFilter (dpy, i18n_core->address.im_window, WaitXConnectMessage, (XPointer)ims); return True; } static char *MakeNewAtom (CARD16 connect_id, char *atomName) { static int sequence = 0; sprintf (atomName, "_server%d_%d", connect_id, ((sequence > 20) ? (sequence = 0) : sequence++)); return atomName; } static Bool Xi18nXSend (XIMS ims, CARD16 connect_id, unsigned char *reply, long length) { Xi18n i18n_core = ims->protocol; Xi18nClient *client = _Xi18nFindClient (i18n_core, connect_id); XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; XClient *x_client = (XClient *) client->trans_rec; XEvent event; event.type = ClientMessage; event.xclient.window = x_client->client_win; event.xclient.message_type = spec->xim_request; if (length > XCM_DATA_LIMIT) { Atom atom; char atomName[16]; Atom actual_type_ret; int actual_format_ret; int return_code; unsigned long nitems_ret; unsigned long bytes_after_ret; unsigned char *win_data; event.xclient.format = 32; atom = XInternAtom (i18n_core->address.dpy, MakeNewAtom (connect_id, atomName), False); return_code = XGetWindowProperty (i18n_core->address.dpy, x_client->client_win, atom, 0L, 10000L, False, XA_STRING, &actual_type_ret, &actual_format_ret, &nitems_ret, &bytes_after_ret, &win_data); if (return_code != Success) return False; /*endif*/ if (win_data) XFree ((char *) win_data); /*endif*/ XChangeProperty (i18n_core->address.dpy, x_client->client_win, atom, XA_STRING, 8, PropModeAppend, (unsigned char *) reply, length); event.xclient.data.l[0] = length; event.xclient.data.l[1] = atom; } else { unsigned char buffer[XCM_DATA_LIMIT]; int i; event.xclient.format = 8; /* Clear unused field with NULL */ memmove(buffer, reply, length); for (i = length; i < XCM_DATA_LIMIT; i++) buffer[i] = (char) 0; /*endfor*/ length = XCM_DATA_LIMIT; memmove (event.xclient.data.b, buffer, length); } XSendEvent (i18n_core->address.dpy, x_client->client_win, False, NoEventMask, &event); XFlush (i18n_core->address.dpy); return True; } static Bool CheckCMEvent (Display *display, XEvent *event, XPointer xi18n_core) { Xi18n i18n_core = (Xi18n) ((void *) xi18n_core); XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; if ((event->type == ClientMessage) && (event->xclient.message_type == spec->xim_request)) { return True; } /*endif*/ return False; } static Bool Xi18nXWait (XIMS ims, CARD16 connect_id, CARD8 major_opcode, CARD8 minor_opcode) { Xi18n i18n_core = ims->protocol; XEvent event; Xi18nClient *client = _Xi18nFindClient (i18n_core, connect_id); XClient *x_client = (XClient *) client->trans_rec; for (;;) { unsigned char *packet; XimProtoHdr *hdr; int connect_id_ret; XIfEvent (i18n_core->address.dpy, &event, CheckCMEvent, (XPointer) i18n_core); if (event.xclient.window == x_client->accept_win) { if ((packet = ReadXIMMessage (ims, (XClientMessageEvent *) & event, &connect_id_ret)) == (unsigned char*) NULL) { return False; } /*endif*/ hdr = (XimProtoHdr *)packet; if ((hdr->major_opcode == major_opcode) && (hdr->minor_opcode == minor_opcode)) { return True; } else if (hdr->major_opcode == XIM_ERROR) { return False; } /*endif*/ } /*endif*/ } /*endfor*/ } static Bool Xi18nXDisconnect (XIMS ims, CARD16 connect_id) { Xi18n i18n_core = ims->protocol; Display *dpy = i18n_core->address.dpy; Xi18nClient *client = _Xi18nFindClient (i18n_core, connect_id); XClient *x_client = (XClient *) client->trans_rec; XDestroyWindow (dpy, x_client->accept_win); _XUnregisterFilter (dpy, x_client->accept_win, WaitXIMProtocol, (XPointer)ims); XFree (x_client); _Xi18nDeleteClient (i18n_core, connect_id); return True; } Bool _Xi18nCheckXAddress (Xi18n i18n_core, TransportSW *transSW, char *address) { XSpecRec *spec; if (!(spec = (XSpecRec *) malloc (sizeof (XSpecRec)))) return False; /*endif*/ i18n_core->address.connect_addr = (XSpecRec *) spec; i18n_core->methods.begin = Xi18nXBegin; i18n_core->methods.end = Xi18nXEnd; i18n_core->methods.send = Xi18nXSend; i18n_core->methods.wait = Xi18nXWait; i18n_core->methods.disconnect = Xi18nXDisconnect; return True; } static Bool WaitXConnectMessage (Display *dpy, Window win, XEvent *ev, XPointer client_data) { XIMS ims = (XIMS)client_data; Xi18n i18n_core = ims->protocol; XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; if (((XClientMessageEvent *) ev)->message_type == spec->connect_request) { ReadXConnectMessage (ims, (XClientMessageEvent *) ev); return True; } /*endif*/ return False; } static Bool WaitXIMProtocol (Display *dpy, Window win, XEvent *ev, XPointer client_data) { extern void _Xi18nMessageHandler (XIMS, CARD16, unsigned char *, Bool *); XIMS ims = (XIMS) client_data; Xi18n i18n_core = ims->protocol; XSpecRec *spec = (XSpecRec *) i18n_core->address.connect_addr; Bool delete = True; unsigned char *packet; int connect_id; if (((XClientMessageEvent *) ev)->message_type == spec->xim_request) { if ((packet = ReadXIMMessage (ims, (XClientMessageEvent *) ev, &connect_id)) == (unsigned char *) NULL) { return False; } /*endif*/ _Xi18nMessageHandler (ims, connect_id, packet, &delete); if (delete == True) XFree (packet); /*endif*/ return True; } /*endif*/ return False; } scim-master/modules/FrontEnd/Makefile.am000066400000000000000000000045741415264260100205400ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/data \ -I$(top_srcdir)/utils \ -I$(top_srcdir)/extras/panel \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" if SCIM_BUILD_FRONTEND_X11 CONFIG_FRONTEND_X11_MODULE = x11.la SUBDIRS = IMdkit endif if SCIM_BUILD_FRONTEND_SOCKET CONFIG_FRONTEND_SOCKET_MODULE = socket.la endif noinst_HEADERS = scim_x11_ic.h \ scim_x11_frontend.h \ scim_socket_frontend.h moduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/FrontEnd module_LTLIBRARIES = $(CONFIG_FRONTEND_X11_MODULE) \ $(CONFIG_FRONTEND_SOCKET_MODULE) x11_la_SOURCES = scim_x11_frontend.cpp \ scim_x11_ic.cpp x11_la_CFLAGS = @X_CFLAGS@ x11_la_CXXFLAGS = @X_CFLAGS@ x11_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @X_LIBS@ \ @LTLIBINTL@ x11_la_LIBADD = IMdkit/libXimd.la \ $(top_builddir)/src/libscim@SCIM_EPOCH@.la \ $(top_builddir)/utils/libscim-x11utils@SCIM_EPOCH@.la socket_la_SOURCES = scim_socket_frontend.cpp socket_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ socket_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la scim-master/modules/FrontEnd/scim_socket_frontend.cpp000066400000000000000000001213671415264260100234120ustar00rootroot00000000000000/** @file scim_socket_frontend.cpp * implementation of class SocketFrontEnd. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_frontend.cpp,v 1.37 2005/07/03 08:36:42 suzhe Exp $ * */ #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_FRONTEND #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_STL_UTILITY #define Uses_C_STDIO #define Uses_C_STDLIB #include #include "scim_private.h" #include "scim.h" #include "scim_socket_frontend.h" #include #define scim_module_init socket_LTX_scim_module_init #define scim_module_exit socket_LTX_scim_module_exit #define scim_frontend_module_init socket_LTX_scim_frontend_module_init #define scim_frontend_module_run socket_LTX_scim_frontend_module_run #define SCIM_CONFIG_FRONTEND_SOCKET_CONFIG_READONLY "/FrontEnd/Socket/ConfigReadOnly" #define SCIM_CONFIG_FRONTEND_SOCKET_MAXCLIENTS "/FrontEnd/Socket/MaxClients" using namespace scim; static Pointer _scim_frontend (0); static int _argc; static char **_argv; //Module Interface extern "C" { void scim_module_init (void) { SCIM_DEBUG_FRONTEND(1) << "Initializing Socket FrontEnd module...\n"; } void scim_module_exit (void) { SCIM_DEBUG_FRONTEND(1) << "Exiting Socket FrontEnd module...\n"; _scim_frontend.reset (); } void scim_frontend_module_init (const BackEndPointer &backend, const ConfigPointer &config, int argc, char **argv) { if (_scim_frontend.null ()) { SCIM_DEBUG_FRONTEND(1) << "Initializing Socket FrontEnd module (more)...\n"; _scim_frontend = new SocketFrontEnd (backend, config); _argc = argc; _argv = argv; } } void scim_frontend_module_run (void) { if (!_scim_frontend.null ()) { SCIM_DEBUG_FRONTEND(1) << "Starting Socket FrontEnd module...\n"; _scim_frontend->init (_argc, _argv); _scim_frontend->run (); } } } SocketFrontEnd::SocketFrontEnd (const BackEndPointer &backend, const ConfigPointer &config) : FrontEndBase (backend), m_config (config), m_stay (true), m_config_readonly (false), m_socket_timeout (scim_get_default_socket_timeout ()), m_current_instance (-1), m_current_socket_client (-1), m_current_socket_client_key (0) { SCIM_DEBUG_FRONTEND (2) << " Constructing SocketFrontEnd object...\n"; } SocketFrontEnd::~SocketFrontEnd () { SCIM_DEBUG_FRONTEND (2) << " Destructing SocketFrontEnd object...\n"; if (m_socket_server.is_running ()) m_socket_server.shutdown (); } void SocketFrontEnd::show_preedit_string (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_SHOW_PREEDIT_STRING); } void SocketFrontEnd::show_aux_string (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_SHOW_AUX_STRING); } void SocketFrontEnd::show_lookup_table (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_SHOW_LOOKUP_TABLE); } void SocketFrontEnd::hide_preedit_string (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_HIDE_PREEDIT_STRING); } void SocketFrontEnd::hide_aux_string (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_HIDE_AUX_STRING); } void SocketFrontEnd::hide_lookup_table (int id) { if (m_current_instance == id) m_send_trans.put_command (SCIM_TRANS_CMD_HIDE_LOOKUP_TABLE); } void SocketFrontEnd::update_preedit_caret (int id, int caret) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_CARET); m_send_trans.put_data ((uint32) caret); } } void SocketFrontEnd::update_preedit_string (int id, const WideString & str, const AttributeList & attrs) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_STRING); m_send_trans.put_data (str); m_send_trans.put_data (attrs); } } void SocketFrontEnd::update_aux_string (int id, const WideString & str, const AttributeList & attrs) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_AUX_STRING); m_send_trans.put_data (str); m_send_trans.put_data (attrs); } } void SocketFrontEnd::commit_string (int id, const WideString & str) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_COMMIT_STRING); m_send_trans.put_data (str); } } void SocketFrontEnd::forward_key_event (int id, const KeyEvent & key) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_FORWARD_KEY_EVENT); m_send_trans.put_data (key); } } void SocketFrontEnd::update_lookup_table (int id, const LookupTable & table) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE); m_send_trans.put_data (table); } } void SocketFrontEnd::register_properties (int id, const PropertyList &properties) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_REGISTER_PROPERTIES); m_send_trans.put_data (properties); } } void SocketFrontEnd::update_property (int id, const Property &property) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_PROPERTY); m_send_trans.put_data (property); } } void SocketFrontEnd::beep (int id) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_BEEP); } } void SocketFrontEnd::start_helper (int id, const String &helper_uuid) { SCIM_DEBUG_FRONTEND (2) << "start_helper (" << helper_uuid << ")\n"; if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_START_HELPER); m_send_trans.put_data (helper_uuid); } } void SocketFrontEnd::stop_helper (int id, const String &helper_uuid) { SCIM_DEBUG_FRONTEND (2) << "stop_helper (" << helper_uuid << ")\n"; if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_STOP_HELPER); m_send_trans.put_data (helper_uuid); } } void SocketFrontEnd::send_helper_event (int id, const String &helper_uuid, const Transaction &trans) { if (m_current_instance == id) { m_send_trans.put_command (SCIM_TRANS_CMD_SEND_HELPER_EVENT); m_send_trans.put_data (helper_uuid); m_send_trans.put_data (trans); } } bool SocketFrontEnd::get_surrounding_text (int id, WideString &text, int &cursor, int maxlen_before, int maxlen_after) { text.clear (); cursor = 0; if (m_current_instance == id && m_current_socket_client >= 0 && (maxlen_before != 0 || maxlen_after != 0)) { if (maxlen_before < 0) maxlen_before = -1; if (maxlen_after < 0) maxlen_after = -1; m_temp_trans.clear (); m_temp_trans.put_command (SCIM_TRANS_CMD_REPLY); m_temp_trans.put_command (SCIM_TRANS_CMD_GET_SURROUNDING_TEXT); m_temp_trans.put_data ((uint32) maxlen_before); m_temp_trans.put_data ((uint32) maxlen_after); Socket socket_client (m_current_socket_client); if (m_temp_trans.write_to_socket (socket_client) && m_temp_trans.read_from_socket (socket_client, m_socket_timeout)) { int cmd; uint32 key; uint32 cur; if (m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REQUEST && m_temp_trans.get_data (key) && key == m_current_socket_client_key && m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_GET_SURROUNDING_TEXT && m_temp_trans.get_data (text) && m_temp_trans.get_data (cur)) { cursor = (int) cur; return true; } } } return false; } bool SocketFrontEnd::delete_surrounding_text (int id, int offset, int len) { if (m_current_instance == id && m_current_socket_client >= 0 && len > 0) { m_temp_trans.clear (); m_temp_trans.put_command (SCIM_TRANS_CMD_REPLY); m_temp_trans.put_command (SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT); m_temp_trans.put_data ((uint32) offset); m_temp_trans.put_data ((uint32) len); Socket socket_client (m_current_socket_client); if (m_temp_trans.write_to_socket (socket_client) && m_temp_trans.read_from_socket (socket_client, m_socket_timeout)) { int cmd; uint32 key; if (m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REQUEST && m_temp_trans.get_data (key) && key == m_current_socket_client_key && m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT && m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) return true; } } return false; } void SocketFrontEnd::init (int argc, char **argv) { int max_clients = -1; if (!m_config.null ()) { String str; m_config_readonly = m_config->read (String (SCIM_CONFIG_FRONTEND_SOCKET_CONFIG_READONLY), false); max_clients = m_config->read (String (SCIM_CONFIG_FRONTEND_SOCKET_MAXCLIENTS), -1); m_config->signal_connect_reload (slot (this, &SocketFrontEnd::reload_config_callback)); } else { m_config_readonly = false; max_clients = -1; } if (!m_socket_server.create (scim_get_default_socket_frontend_address ())) throw FrontEndError ("SocketFrontEnd -- Cannot create SocketServer."); m_socket_server.set_max_clients (max_clients); m_socket_server.signal_connect_accept ( slot (this, &SocketFrontEnd::socket_accept_callback)); m_socket_server.signal_connect_receive ( slot (this, &SocketFrontEnd::socket_receive_callback)); m_socket_server.signal_connect_exception( slot (this, &SocketFrontEnd::socket_exception_callback)); if (argv && argc > 1) { for (int i = 1; i < argc && argv [i]; ++i) { if (String ("--no-stay") == argv [i]) m_stay = false; } } /** * initialize the random number generator. */ srand (time (0)); } void SocketFrontEnd::run () { if (m_socket_server.valid ()) m_socket_server.run (); } uint32 SocketFrontEnd::generate_key () const { return rand (); } bool SocketFrontEnd::check_client_connection (const Socket &client) const { SCIM_DEBUG_FRONTEND (1) << "check_client_connection (" << client.get_id () << ").\n"; unsigned char buf [sizeof(uint32)]; int nbytes = client.read_with_timeout (buf, sizeof(uint32), m_socket_timeout); if (nbytes == sizeof (uint32)) return true; if (nbytes < 0) { SCIM_DEBUG_FRONTEND (2) << " Error occurred when reading socket (" << client.get_id () << "):" << client.get_error_message () << "\n"; } else { SCIM_DEBUG_FRONTEND (2) << " Timeout when reading socket (" << client.get_id () << ").\n"; } return false; } void SocketFrontEnd::socket_accept_callback (SocketServer *server, const Socket &client) { SCIM_DEBUG_FRONTEND (1) << "socket_accept_callback (" << client.get_id () << ").\n"; } void SocketFrontEnd::socket_receive_callback (SocketServer *server, const Socket &client) { int id = client.get_id (); int cmd; uint32 key; ClientInfo client_info; SCIM_DEBUG_FRONTEND (1) << "socket_receive_callback (" << id << ").\n"; // Check if the client is closed. if (!check_client_connection (client)) { SCIM_DEBUG_FRONTEND (2) << " closing client connection.\n"; socket_close_connection (server, client); return; } client_info = socket_get_client_info (client); // If it's a new client, then request to open the connection first. if (client_info.type == UNKNOWN_CLIENT) { socket_open_connection (server, client); return; } // If can not read the transaction, // or the transaction is not started with SCIM_TRANS_CMD_REQUEST, // or the key is mismatch, // just return. if (!m_receive_trans.read_from_socket (client, m_socket_timeout) || !m_receive_trans.get_command (cmd) || cmd != SCIM_TRANS_CMD_REQUEST || !m_receive_trans.get_data (key) || key != (uint32) client_info.key) return; m_current_socket_client = id; m_current_socket_client_key = key; m_send_trans.clear (); m_send_trans.put_command (SCIM_TRANS_CMD_REPLY); // Move the read ptr to the end. m_send_trans.get_command (cmd); while (m_receive_trans.get_command (cmd)) { if (cmd == SCIM_TRANS_CMD_PROCESS_KEY_EVENT) socket_process_key_event (id); else if (cmd == SCIM_TRANS_CMD_MOVE_PREEDIT_CARET) socket_move_preedit_caret (id); else if (cmd == SCIM_TRANS_CMD_SELECT_CANDIDATE) socket_select_candidate (id); else if (cmd == SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE) socket_update_lookup_table_page_size (id); else if (cmd == SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP) socket_lookup_table_page_up (id); else if (cmd == SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN) socket_lookup_table_page_down (id); else if (cmd == SCIM_TRANS_CMD_RESET) socket_reset (id); else if (cmd == SCIM_TRANS_CMD_FOCUS_IN) socket_focus_in (id); else if (cmd == SCIM_TRANS_CMD_FOCUS_OUT) socket_focus_out (id); else if (cmd == SCIM_TRANS_CMD_TRIGGER_PROPERTY) socket_trigger_property (id); else if (cmd == SCIM_TRANS_CMD_PROCESS_HELPER_EVENT) socket_process_helper_event (id); else if (cmd == SCIM_TRANS_CMD_UPDATE_CLIENT_CAPABILITIES) socket_update_client_capabilities (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_LIST) socket_get_factory_list (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_NAME) socket_get_factory_name (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_AUTHORS) socket_get_factory_authors (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_CREDITS) socket_get_factory_credits (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_HELP) socket_get_factory_help (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_LOCALES) socket_get_factory_locales (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_ICON_FILE) socket_get_factory_icon_file (id); else if (cmd == SCIM_TRANS_CMD_GET_FACTORY_LANGUAGE) socket_get_factory_language (id); else if (cmd == SCIM_TRANS_CMD_NEW_INSTANCE) socket_new_instance (id); else if (cmd == SCIM_TRANS_CMD_DELETE_INSTANCE) socket_delete_instance (id); else if (cmd == SCIM_TRANS_CMD_DELETE_ALL_INSTANCES) socket_delete_all_instances (id); else if (cmd == SCIM_TRANS_CMD_FLUSH_CONFIG) socket_flush_config (id); else if (cmd == SCIM_TRANS_CMD_ERASE_CONFIG) socket_erase_config (id); else if (cmd == SCIM_TRANS_CMD_RELOAD_CONFIG) socket_reload_config (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_STRING) socket_get_config_string (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_STRING) socket_set_config_string (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_INT) socket_get_config_int (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_INT) socket_set_config_int (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_BOOL) socket_get_config_bool (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_BOOL) socket_set_config_bool (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_DOUBLE) socket_get_config_double (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_DOUBLE) socket_set_config_double (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_STRING) socket_get_config_vector_string (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_STRING) socket_set_config_vector_string (id); else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_INT) socket_get_config_vector_int (id); else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_INT) socket_set_config_vector_int (id); else if (cmd == SCIM_TRANS_CMD_LOAD_FILE) socket_load_file (id); else if (cmd == SCIM_TRANS_CMD_CLOSE_CONNECTION) { socket_close_connection (server, client); m_current_socket_client = -1; m_current_socket_client_key = 0; return; } } // Send reply to client if (m_send_trans.get_data_type () == SCIM_TRANS_DATA_UNKNOWN) m_send_trans.put_command (SCIM_TRANS_CMD_FAIL); m_send_trans.write_to_socket (client); m_current_socket_client = -1; m_current_socket_client_key = 0; SCIM_DEBUG_FRONTEND (1) << "End of socket_receive_callback (" << id << ").\n"; } bool SocketFrontEnd::socket_open_connection (SocketServer *server, const Socket &client) { SCIM_DEBUG_FRONTEND (2) << " Open socket connection for client " << client.get_id () << " number of clients=" << m_socket_client_repository.size () << ".\n"; uint32 key; String type = scim_socket_accept_connection (key, String ("SocketFrontEnd"), String ("SocketIMEngine,SocketConfig"), client, m_socket_timeout); if (type.length ()) { ClientInfo info; info.key = key; info.type = ((type == "SocketIMEngine") ? IMENGINE_CLIENT : CONFIG_CLIENT); SCIM_DEBUG_MAIN (2) << " Add client to repository. Type=" << type << " key=" << key << "\n"; m_socket_client_repository [client.get_id ()] = info; return true; } // Client did not pass the registration process, close it. SCIM_DEBUG_FRONTEND (2) << " Failed to create new connection.\n"; server->close_connection (client); return false; } void SocketFrontEnd::socket_close_connection (SocketServer *server, const Socket &client) { SCIM_DEBUG_FRONTEND (2) << " Close client connection " << client.get_id () << " number of clients=" << m_socket_client_repository.size () << ".\n"; ClientInfo client_info = socket_get_client_info (client); server->close_connection (client); if (client_info.type != UNKNOWN_CLIENT) { m_socket_client_repository.erase (client.get_id ()); if (client_info.type == IMENGINE_CLIENT) socket_delete_all_instances (client.get_id ()); if (!m_socket_client_repository.size () && !m_stay) server->shutdown (); } } SocketFrontEnd::ClientInfo SocketFrontEnd::socket_get_client_info (const Socket &client) { static ClientInfo null_client = { 0, UNKNOWN_CLIENT }; SocketClientRepository::iterator it = m_socket_client_repository.find (client.get_id ()); if (it != m_socket_client_repository.end ()) return it->second; return null_client; } void SocketFrontEnd::socket_exception_callback (SocketServer *server, const Socket &client) { SCIM_DEBUG_FRONTEND (1) << "socket_exception_callback (" << client.get_id () << ").\n"; socket_close_connection (server, client); } //client_id is client's socket id void SocketFrontEnd::socket_get_factory_list (int /*client_id*/) { String encoding; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_list.\n"; if (m_receive_trans.get_data (encoding)) { std::vector uuids; get_factory_list_for_encoding (uuids, encoding); SCIM_DEBUG_FRONTEND (3) << " Encoding (" << encoding << ") Num(" << uuids.size () << ").\n"; m_send_trans.put_data (uuids); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_name (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_name.\n"; if (m_receive_trans.get_data (sfid)) { WideString name = get_factory_name (sfid); m_send_trans.put_data (name); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_authors (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_authors.\n"; if (m_receive_trans.get_data (sfid)) { WideString authors = get_factory_authors (sfid); m_send_trans.put_data (authors); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_credits (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_credits.\n"; if (m_receive_trans.get_data (sfid)) { WideString credits = get_factory_credits (sfid); m_send_trans.put_data (credits); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_help (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_help.\n"; if (m_receive_trans.get_data (sfid)) { WideString help = get_factory_help (sfid); m_send_trans.put_data (help); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_locales (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_locales.\n"; if (m_receive_trans.get_data (sfid)) { String locales = get_factory_locales (sfid); SCIM_DEBUG_FRONTEND (3) << " Locales (" << locales << ").\n"; m_send_trans.put_data (locales); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_icon_file (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_icon_file.\n"; if (m_receive_trans.get_data (sfid)) { String iconfile = get_factory_icon_file (sfid); SCIM_DEBUG_FRONTEND (3) << " ICON File (" << iconfile << ").\n"; m_send_trans.put_data (iconfile); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_factory_language (int /*client_id*/) { String sfid; SCIM_DEBUG_FRONTEND (2) << " socket_get_factory_language.\n"; if (m_receive_trans.get_data (sfid)) { String language = get_factory_language (sfid); SCIM_DEBUG_FRONTEND (3) << " Language (" << language << ").\n"; m_send_trans.put_data (language); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_new_instance (int client_id) { String sfid; String encoding; SCIM_DEBUG_FRONTEND (2) << " socket_new_instance.\n"; if (m_receive_trans.get_data (sfid) && m_receive_trans.get_data (encoding)) { int siid = new_instance (sfid, encoding); // Instance created OK. if (siid >= 0) { SocketInstanceRepository::iterator it = std::lower_bound (m_socket_instance_repository.begin (), m_socket_instance_repository.end (), std::pair (client_id, siid)); if (it == m_socket_instance_repository.end ()) m_socket_instance_repository.push_back (std::pair (client_id, siid)); else m_socket_instance_repository.insert (it, std::pair (client_id, siid)); SCIM_DEBUG_FRONTEND (3) << " InstanceID (" << siid << ").\n"; m_send_trans.put_data ((uint32)siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_delete_instance (int client_id) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_delete_instance.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " InstanceID (" << siid << ").\n"; m_current_instance = (int) siid; delete_instance ((int) siid); m_current_instance = -1; SocketInstanceRepository::iterator it = std::lower_bound (m_socket_instance_repository.begin (), m_socket_instance_repository.end (), std::pair (client_id, siid)); if (it != m_socket_instance_repository.end () && *it == std::pair (client_id, siid)) m_socket_instance_repository.erase (it); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_delete_all_instances (int client_id) { SCIM_DEBUG_FRONTEND (2) << " socket_delete_all_instances.\n"; SocketInstanceRepository::iterator it; SocketInstanceRepository::iterator lit = std::lower_bound (m_socket_instance_repository.begin (), m_socket_instance_repository.end (), std::pair (client_id, 0)); SocketInstanceRepository::iterator uit = std::upper_bound (m_socket_instance_repository.begin (), m_socket_instance_repository.end (), std::pair (client_id, INT_MAX)); if (lit != uit) { for (it = lit; it != uit; ++it) { m_current_instance = it->second; delete_instance (it->second); } m_current_instance = -1; m_socket_instance_repository.erase (lit, uit); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_process_key_event (int /*client_id*/) { uint32 siid; KeyEvent event; SCIM_DEBUG_FRONTEND (2) << " socket_process_key_event.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (event)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ") KeyEvent (" << event.code << "," << event.mask << ").\n"; m_current_instance = (int) siid; if (process_key_event ((int) siid, event)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); else m_send_trans.put_command (SCIM_TRANS_CMD_FAIL); m_current_instance = -1; } } void SocketFrontEnd::socket_move_preedit_caret (int /*client_id*/) { uint32 siid; uint32 caret; SCIM_DEBUG_FRONTEND (2) << " socket_move_preedit_caret.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (caret)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ") Caret (" << caret << ").\n"; m_current_instance = (int) siid; move_preedit_caret ((int) siid, caret); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_select_candidate (int /*client_id*/) { uint32 siid; uint32 item; SCIM_DEBUG_FRONTEND (2) << " socket_select_candidate.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (item)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ") Item (" << item << ").\n"; m_current_instance = (int) siid; select_candidate ((int) siid, item); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_update_lookup_table_page_size (int /*client_id*/) { uint32 siid; uint32 size; SCIM_DEBUG_FRONTEND (2) << " socket_update_lookup_table_page_size.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (size)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ") PageSize (" << size << ").\n"; m_current_instance = (int) siid; update_lookup_table_page_size ((int) siid, size); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_lookup_table_page_up (int /*client_id*/) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_lookup_table_page_up.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; lookup_table_page_up ((int) siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_lookup_table_page_down (int /*client_id*/) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_lookup_table_page_down.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; lookup_table_page_down ((int) siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_reset (int /*client_id*/) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_reset.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; reset ((int) siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_focus_in (int /*client_id*/) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_focus_in.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; focus_in ((int) siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_focus_out (int /*client_id*/) { uint32 siid; SCIM_DEBUG_FRONTEND (2) << " socket_focus_out.\n"; if (m_receive_trans.get_data (siid)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; focus_out ((int) siid); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_trigger_property (int /*client_id*/) { uint32 siid; String property; SCIM_DEBUG_FRONTEND (2) << " socket_trigger_property.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (property)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; trigger_property ((int) siid, property); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_process_helper_event (int /*client_id*/) { uint32 siid; String helper_uuid; Transaction trans; SCIM_DEBUG_FRONTEND (2) << " socket_process_helper_event.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (helper_uuid) && m_receive_trans.get_data (trans)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; process_helper_event ((int) siid, helper_uuid, trans); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_update_client_capabilities (int /*client_id*/) { uint32 siid; uint32 cap; SCIM_DEBUG_FRONTEND (2) << " socket_update_client_capabilities.\n"; if (m_receive_trans.get_data (siid) && m_receive_trans.get_data (cap)) { SCIM_DEBUG_FRONTEND (3) << " SI (" << siid << ").\n"; m_current_instance = (int) siid; update_client_capabilities ((int) siid, cap); m_send_trans.put_command (SCIM_TRANS_CMD_OK); m_current_instance = -1; } } void SocketFrontEnd::socket_flush_config (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; SCIM_DEBUG_FRONTEND (2) << " socket_flush_config.\n"; if (m_config->flush ()) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } void SocketFrontEnd::socket_erase_config (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_erase_config.\n"; if (m_receive_trans.get_data (key)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->erase (key)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_reload_config (int /*client_id*/) { static timeval last_timestamp = {0, 0}; if (m_config.null ()) return; SCIM_DEBUG_FRONTEND (2) << " socket_reload_config.\n"; timeval timestamp; gettimeofday (×tamp, 0); if (timestamp.tv_sec > last_timestamp.tv_sec + 1) m_config->reload (); gettimeofday (&last_timestamp, 0); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } void SocketFrontEnd::socket_get_config_string (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_string.\n"; if (m_receive_trans.get_data (key)) { String value; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->read (key, &value)) { m_send_trans.put_data (value); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_set_config_string (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; String value; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_string.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (value)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; SCIM_DEBUG_FRONTEND (3) << " Value (" << value << ").\n"; if (m_config->write (key, value)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_config_int (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_int.\n"; if (m_receive_trans.get_data (key)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; int value; if (m_config->read (key, &value)) { m_send_trans.put_data ((uint32) value); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_set_config_int (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; uint32 value; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_int.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (value)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; SCIM_DEBUG_FRONTEND (3) << " Value (" << value << ").\n"; if (m_config->write (key, (int) value)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_config_bool (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_bool.\n"; if (m_receive_trans.get_data (key)) { bool value; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->read (key, &value)) { m_send_trans.put_data ((uint32) value); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_set_config_bool (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; uint32 value; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_bool.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (value)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; SCIM_DEBUG_FRONTEND (3) << " Value (" << value << ").\n"; if (m_config->write (key, (bool) value)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_config_double (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_double.\n"; if (m_receive_trans.get_data (key)) { double value; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->read (key, &value)) { char buf [80]; snprintf (buf, 79, "%lE", value); m_send_trans.put_data (String (buf)); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_set_config_double (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; String str; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_double.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (str)) { double value; sscanf (str.c_str (), "%lE", &value); SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; SCIM_DEBUG_FRONTEND (3) << " Value (" << value << ").\n"; if (m_config->write (key, value)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_config_vector_string (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_string.\n"; if (m_receive_trans.get_data (key)) { std::vector vec; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->read (key, &vec)) { m_send_trans.put_data (vec); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } } void SocketFrontEnd::socket_set_config_vector_string (int /*client_id*/) { if (m_config_readonly || m_config.null ()) return; String key; std::vector vec; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_string.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (vec)) { SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->write (key, vec)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_get_config_vector_int (int /*client_id*/) { if (m_config.null ()) return; String key; SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_int.\n"; if (m_receive_trans.get_data (key)) { std::vector vec; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; if (m_config->read (key, &vec)) { std::vector reply; for (uint32 i=0; i vec; SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_int.\n"; if (m_receive_trans.get_data (key) && m_receive_trans.get_data (vec)) { std::vector req; SCIM_DEBUG_FRONTEND (3) << " Key (" << key << ").\n"; for (uint32 i=0; iwrite (key, req)) m_send_trans.put_command (SCIM_TRANS_CMD_OK); } } void SocketFrontEnd::socket_load_file (int /*client_id*/) { String filename; char *bufptr = 0; size_t filesize = 0; SCIM_DEBUG_FRONTEND (2) << " socket_load_file.\n"; if (m_receive_trans.get_data (filename)) { SCIM_DEBUG_FRONTEND (3) << " File (" << filename << ").\n"; if ((filesize = scim_load_file (filename, &bufptr)) > 0) { m_send_trans.put_data (bufptr, filesize); m_send_trans.put_command (SCIM_TRANS_CMD_OK); } delete [] bufptr; } } void SocketFrontEnd::reload_config_callback (const ConfigPointer &config) { SCIM_DEBUG_FRONTEND (1) << "Reload configuration.\n"; int max_clients = -1; m_config_readonly = config->read (String (SCIM_CONFIG_FRONTEND_SOCKET_CONFIG_READONLY), false); max_clients = config->read (String (SCIM_CONFIG_FRONTEND_SOCKET_MAXCLIENTS), -1); m_socket_server.set_max_clients (max_clients); } /* vi:ts=4:nowrap:expandtab */ scim-master/modules/FrontEnd/scim_socket_frontend.h000066400000000000000000000160321415264260100230470ustar00rootroot00000000000000/** * @file scim_socket_frontend.h * @brief definition of SocketFrontEnd related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_frontend.h,v 1.26 2005/04/14 17:01:56 suzhe Exp $ */ #if !defined (__SCIM_SOCKET_FRONTEND_H) #define __SCIM_SOCKET_FRONTEND_H #include "scim_stl_map.h" using namespace scim; class SocketFrontEnd : public FrontEndBase { enum ClientType { UNKNOWN_CLIENT, IMENGINE_CLIENT, CONFIG_CLIENT }; struct ClientInfo { uint32 key; ClientType type; }; /** * ::first = socket id, ::second = instance id. */ typedef std::vector > SocketInstanceRepository; #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map > SocketClientRepository; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map > SocketClientRepository; #else typedef std::map SocketClientRepository; #endif ConfigPointer m_config; SocketServer m_socket_server; Transaction m_send_trans; Transaction m_receive_trans; Transaction m_temp_trans; SocketInstanceRepository m_socket_instance_repository; SocketClientRepository m_socket_client_repository; bool m_stay; bool m_config_readonly; int m_socket_timeout; int m_current_instance; int m_current_socket_client; uint32 m_current_socket_client_key; public: SocketFrontEnd (const BackEndPointer &backend, const ConfigPointer &config); virtual ~SocketFrontEnd (); protected: virtual void show_preedit_string (int id); virtual void show_aux_string (int id); virtual void show_lookup_table (int id); virtual void hide_preedit_string (int id); virtual void hide_aux_string (int id); virtual void hide_lookup_table (int id); virtual void update_preedit_caret (int id, int caret); virtual void update_preedit_string (int id, const WideString & str, const AttributeList & attrs); virtual void update_aux_string (int id, const WideString & str, const AttributeList & attrs); virtual void commit_string (int id, const WideString & str); virtual void forward_key_event (int id, const KeyEvent & key); virtual void update_lookup_table (int id, const LookupTable & table); virtual void register_properties (int id, const PropertyList & properties); virtual void update_property (int id, const Property & property); virtual void beep (int id); virtual void start_helper (int id, const String &helper_uuid); virtual void stop_helper (int id, const String &helper_uuid); virtual void send_helper_event (int id, const String &helper_uuid, const Transaction &trans); virtual bool get_surrounding_text (int id, WideString &text, int &cursor, int maxlen_before, int maxlen_after); virtual bool delete_surrounding_text (int id, int offset, int len); public: virtual void init (int argc, char **argv); virtual void run (); private: uint32 generate_key () const; bool check_client_connection (const Socket &client) const; void socket_accept_callback (SocketServer *server, const Socket &client); void socket_receive_callback (SocketServer *server, const Socket &client); void socket_exception_callback (SocketServer *server, const Socket &client); bool socket_open_connection (SocketServer *server, const Socket &client); void socket_close_connection (SocketServer *server, const Socket &client); ClientInfo socket_get_client_info (const Socket &client); //client_id is client's socket id void socket_get_factory_list (int client_id); void socket_get_factory_name (int client_id); void socket_get_factory_authors (int client_id); void socket_get_factory_credits (int client_id); void socket_get_factory_help (int client_id); void socket_get_factory_locales (int client_id); void socket_get_factory_icon_file (int client_id); void socket_get_factory_language (int client_id); void socket_new_instance (int client_id); void socket_delete_instance (int client_id); void socket_delete_all_instances (int client_id); void socket_process_key_event (int client_id); void socket_move_preedit_caret (int client_id); void socket_select_candidate (int client_id); void socket_update_lookup_table_page_size (int client_id); void socket_lookup_table_page_up (int client_id); void socket_lookup_table_page_down (int client_id); void socket_reset (int client_id); void socket_focus_in (int client_id); void socket_focus_out (int client_id); void socket_trigger_property (int client_id); void socket_process_helper_event (int client_id); void socket_update_client_capabilities (int client_id); void socket_flush_config (int client_id); void socket_erase_config (int client_id); void socket_get_config_string (int client_id); void socket_set_config_string (int client_id); void socket_get_config_int (int client_id); void socket_set_config_int (int client_id); void socket_get_config_bool (int client_id); void socket_set_config_bool (int client_id); void socket_get_config_double (int client_id); void socket_set_config_double (int client_id); void socket_get_config_vector_string (int client_id); void socket_set_config_vector_string (int client_id); void socket_get_config_vector_int (int client_id); void socket_set_config_vector_int (int client_id); void socket_reload_config (int client_id); void socket_load_file (int client_id); void reload_config_callback (const ConfigPointer &config); }; #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/FrontEnd/scim_x11_frontend.cpp000066400000000000000000001731431415264260100225320ustar00rootroot00000000000000/** @file scim_x11_frontend.cpp * implementation of class X11FrontEnd. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_x11_frontend.cpp,v 1.179.2.6 2007/06/16 06:23:38 suzhe Exp $ * */ #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_FRONTEND #define Uses_SCIM_ICONV #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_SCIM_HOTKEY #define Uses_SCIM_PANEL_CLIENT #define Uses_C_LOCALE #define Uses_C_STDIO #define Uses_C_STDLIB #include #include #include #include #include #include #include #include #include "IMdkit/IMdkit.h" #include "IMdkit/Xi18n.h" #include "scim_private.h" #include "scim.h" #include "scim_x11_ic.h" #include "scim_x11_frontend.h" #include "scim_x11_utils.h" #define scim_module_init x11_LTX_scim_module_init #define scim_module_exit x11_LTX_scim_module_exit #define scim_frontend_module_init x11_LTX_scim_frontend_module_init #define scim_frontend_module_run x11_LTX_scim_frontend_module_run #define SCIM_CONFIG_FRONTEND_X11_BROKEN_WCHAR "/FrontEnd/X11/BrokenWchar" #define SCIM_CONFIG_FRONTEND_X11_DYNAMIC "/FrontEnd/X11/Dynamic" #define SCIM_CONFIG_FRONTEND_X11_SERVER_NAME "/FrontEnd/X11/ServerName" #define SCIM_CONFIG_FRONTEND_X11_ONTHESPOT "/FrontEnd/X11/OnTheSpot" #define SCIM_KEYBOARD_ICON_FILE (SCIM_ICONDIR "/keyboard.png") using namespace scim; //Local static data static Pointer _scim_frontend (0); //Module Interface extern "C" { void scim_module_init (void) { SCIM_DEBUG_FRONTEND(1) << "Initializing X11 FrontEnd module...\n"; } void scim_module_exit (void) { SCIM_DEBUG_FRONTEND(1) << "Exiting X11 FrontEnd module...\n"; _scim_frontend.reset (); } void scim_frontend_module_init (const BackEndPointer &backend, const ConfigPointer &config, int argc, char **argv) { if (config.null () || backend.null ()) throw FrontEndError (String ("X11 FrontEnd couldn't run without Config and BackEnd.\n")); if (_scim_frontend.null ()) { SCIM_DEBUG_FRONTEND(1) << "Initializing X11 FrontEnd module (more)...\n"; _scim_frontend = new X11FrontEnd (backend, config); _scim_frontend->init (argc, argv); } } void scim_frontend_module_run (void) { if (!_scim_frontend.null ()) { SCIM_DEBUG_FRONTEND(1) << "Starting X11 FrontEnd module...\n"; _scim_frontend->run (); } } } X11FrontEnd::X11FrontEnd (const BackEndPointer &backend, const ConfigPointer &config, const String& server_name) : FrontEndBase (backend), m_xims (0), m_display (0), m_xims_window (0), m_server_name (server_name), m_focus_ic (0), m_xims_dynamic (true), m_wchar_ucs4_equal (scim_if_wchar_ucs4_equal ()), m_broken_wchar (false), m_shared_input_method (false), m_keyboard_layout (SCIM_KEYBOARD_Default), m_valid_key_mask (SCIM_KEY_AllMasks), m_should_exit (false), m_iconv (String ()), m_config (config), m_old_x_error_handler (0) { if (!_scim_frontend.null () && _scim_frontend != this) { throw FrontEndError ( String ("X11 -- only one frontend can be created!")); } if (!m_server_name.length ()) m_server_name = String ("SCIM"); // Attach Panel Client signal. m_panel_client.signal_connect_reload_config (slot (this, &X11FrontEnd::panel_slot_reload_config)); m_panel_client.signal_connect_exit (slot (this, &X11FrontEnd::panel_slot_exit)); m_panel_client.signal_connect_update_lookup_table_page_size (slot (this, &X11FrontEnd::panel_slot_update_lookup_table_page_size)); m_panel_client.signal_connect_lookup_table_page_up (slot (this, &X11FrontEnd::panel_slot_lookup_table_page_up)); m_panel_client.signal_connect_lookup_table_page_down (slot (this, &X11FrontEnd::panel_slot_lookup_table_page_down)); m_panel_client.signal_connect_trigger_property (slot (this, &X11FrontEnd::panel_slot_trigger_property)); m_panel_client.signal_connect_process_helper_event (slot (this, &X11FrontEnd::panel_slot_process_helper_event)); m_panel_client.signal_connect_move_preedit_caret (slot (this, &X11FrontEnd::panel_slot_move_preedit_caret)); m_panel_client.signal_connect_select_candidate (slot (this, &X11FrontEnd::panel_slot_select_candidate)); m_panel_client.signal_connect_process_key_event (slot (this, &X11FrontEnd::panel_slot_process_key_event)); m_panel_client.signal_connect_commit_string (slot (this, &X11FrontEnd::panel_slot_commit_string)); m_panel_client.signal_connect_forward_key_event (slot (this, &X11FrontEnd::panel_slot_forward_key_event)); m_panel_client.signal_connect_request_help (slot (this, &X11FrontEnd::panel_slot_request_help)); m_panel_client.signal_connect_request_factory_menu (slot (this, &X11FrontEnd::panel_slot_request_factory_menu)); m_panel_client.signal_connect_change_factory (slot (this, &X11FrontEnd::panel_slot_change_factory)); } X11FrontEnd::~X11FrontEnd () { if (m_xims) { if (validate_ic (m_focus_ic)) { m_panel_client.prepare (m_focus_ic->icid); focus_out (m_focus_ic->siid); m_panel_client.turn_off (m_focus_ic->icid); m_panel_client.send (); ims_sync_ic (m_focus_ic); } XSync(m_display, False); IMCloseIM (m_xims); } if (m_display && m_xims_window) { XDestroyWindow (m_display, m_xims_window); XCloseDisplay (m_display); } m_panel_client.close_connection (); } void X11FrontEnd::show_preedit_string (int siid) { SCIM_DEBUG_FRONTEND(2) << " Show preedit string, siid=" << siid << "\n"; if (is_inputing_ic (siid)) { if (ims_is_preedit_callback_mode (m_focus_ic)) ims_preedit_callback_start (m_focus_ic); else m_panel_client.show_preedit_string (m_focus_ic->icid); } } void X11FrontEnd::show_aux_string (int siid) { SCIM_DEBUG_FRONTEND(2) << " Show aux string, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.show_aux_string (m_focus_ic->icid); } void X11FrontEnd::show_lookup_table (int siid) { SCIM_DEBUG_FRONTEND(2) << " Show lookup table, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.show_lookup_table (m_focus_ic->icid); } void X11FrontEnd::hide_preedit_string (int siid) { SCIM_DEBUG_FRONTEND(2) << " Hide preedit string, siid=" << siid << "\n"; if (is_focused_ic (siid)) { if (ims_is_preedit_callback_mode (m_focus_ic)) ims_preedit_callback_done (m_focus_ic); else m_panel_client.hide_preedit_string (m_focus_ic->icid); } } void X11FrontEnd::hide_aux_string (int siid) { SCIM_DEBUG_FRONTEND(2) << " Hide aux string, siid=" << siid << "\n"; if (is_focused_ic (siid)) m_panel_client.hide_aux_string (m_focus_ic->icid); } void X11FrontEnd::hide_lookup_table (int siid) { SCIM_DEBUG_FRONTEND(2) << " Hide lookup table, siid=" << siid << "\n"; if (is_focused_ic (siid)) m_panel_client.hide_lookup_table (m_focus_ic->icid); } void X11FrontEnd::update_preedit_caret (int siid, int caret) { SCIM_DEBUG_FRONTEND(2) << " Update preedit caret, siid=" << siid << " caret=" << caret << "\n"; if (is_inputing_ic (siid)) { if (ims_is_preedit_callback_mode (m_focus_ic)) ims_preedit_callback_caret (m_focus_ic, caret); else m_panel_client.update_preedit_caret (m_focus_ic->icid, caret); } } void X11FrontEnd::update_preedit_string (int siid, const WideString & str, const AttributeList & attrs) { SCIM_DEBUG_FRONTEND(2) << " Update preedit string, siid=" << siid << "\n"; if (is_inputing_ic (siid)) { if (ims_is_preedit_callback_mode (m_focus_ic)) ims_preedit_callback_draw (m_focus_ic, str, attrs); else m_panel_client.update_preedit_string (m_focus_ic->icid, str, attrs); } } void X11FrontEnd::update_aux_string (int siid, const WideString & str, const AttributeList & attrs) { SCIM_DEBUG_FRONTEND(2) << " Update aux string, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.update_aux_string (m_focus_ic->icid, str, attrs); } void X11FrontEnd::update_lookup_table (int siid, const LookupTable & table) { SCIM_DEBUG_FRONTEND(2) << " Update lookup table, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.update_lookup_table (m_focus_ic->icid, table); } void X11FrontEnd::commit_string (int siid, const WideString & str) { SCIM_DEBUG_FRONTEND(2) << " Commit string, siid=" << siid << "\n"; if (is_focused_ic (siid)) ims_commit_string (m_focus_ic, str); } void X11FrontEnd::forward_key_event (int siid, const KeyEvent & key) { SCIM_DEBUG_FRONTEND(2) << " Forward keyevent, siid=" << siid << "\n"; if (is_focused_ic (siid)) ims_forward_key_event (m_focus_ic, key); } void X11FrontEnd::register_properties (int siid, const PropertyList &properties) { SCIM_DEBUG_FRONTEND(2) << " Register properties, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.register_properties (m_focus_ic->icid, properties); } void X11FrontEnd::update_property (int siid, const Property &property) { SCIM_DEBUG_FRONTEND(2) << " Update property, siid=" << siid << "\n"; if (is_inputing_ic (siid)) m_panel_client.update_property (m_focus_ic->icid, property); } void X11FrontEnd::beep (int siid) { SCIM_DEBUG_FRONTEND(2) << " Beep, siid=" << siid << "\n"; if (is_inputing_ic (siid)) XBell (m_display, 0); } void X11FrontEnd::start_helper (int siid, const String &helper_uuid) { SCIM_DEBUG_FRONTEND(2) << " Start helper, siid=" << siid << " Helper=" << helper_uuid << "\n"; X11IC *ic = m_ic_manager.find_ic_by_siid (siid); if (validate_ic (ic)) m_panel_client.start_helper (ic->icid, helper_uuid); } void X11FrontEnd::stop_helper (int siid, const String &helper_uuid) { SCIM_DEBUG_FRONTEND(2) << " Stop helper, siid=" << siid << " Helper=" << helper_uuid << "\n"; X11IC *ic = m_ic_manager.find_ic_by_siid (siid); if (validate_ic (ic)) m_panel_client.stop_helper (ic->icid, helper_uuid); } void X11FrontEnd::send_helper_event (int siid, const String &helper_uuid, const Transaction &trans) { SCIM_DEBUG_FRONTEND(2) << " Send helper event, siid=" << siid << " Helper=" << helper_uuid << "\n"; X11IC *ic = m_ic_manager.find_ic_by_siid (siid); if (validate_ic (ic)) m_panel_client.send_helper_event (ic->icid, helper_uuid, trans); } bool X11FrontEnd::get_surrounding_text (int siid, WideString &text, int &cursor, int maxlen_before, int maxlen_after) { SCIM_DEBUG_FRONTEND(2) << " Get surrounding text, siid=" << siid << "\n"; text.clear (); cursor = 0; if (is_inputing_ic (siid)) { // return ims_string_conversion_callback_retrieval (m_focus_ic, text, cursor, maxlen_before, maxlen_after); return false; } return false; } bool X11FrontEnd::delete_surrounding_text (int siid, int offset, int len) { SCIM_DEBUG_FRONTEND(2) << " Delete surrounding text, siid=" << siid << " offset = " << offset << " len = " << len << "\n"; if (is_inputing_ic (siid)) { // return ims_string_conversion_callback_substitution (m_focus_ic, offset, len); return false; } return false; } void X11FrontEnd::init (int argc, char **argv) { String str; SCIM_DEBUG_FRONTEND (1) << "X11 -- Loading configuration.\n"; //Read settings. reload_config_callback (m_config); m_server_name = m_config->read (String (SCIM_CONFIG_FRONTEND_X11_SERVER_NAME), m_server_name); m_xims_dynamic = m_config->read (String (SCIM_CONFIG_FRONTEND_X11_DYNAMIC), true); m_config->signal_connect_reload (slot (this, &X11FrontEnd::reload_config_callback)); m_display_name = init_ims (); SCIM_DEBUG_FRONTEND (1) << "X11 -- Connecting to panel daemon.\n"; if (m_panel_client.open_connection (m_config->get_name (), m_display_name) < 0) throw FrontEndError (String ("X11 -- failed to connect to the panel daemon!")); // Only use ComposeKeyFactory when it's enabled. if (validate_factory (SCIM_COMPOSE_KEY_FACTORY_UUID, "UTF-8")) m_fallback_factory = new ComposeKeyFactory (); else m_fallback_factory = new DummyIMEngineFactory (); m_fallback_instance = m_fallback_factory->create_instance (String ("UTF-8"), 0); m_fallback_instance->signal_connect_commit_string (slot (this, &X11FrontEnd::fallback_commit_string_cb)); } void X11FrontEnd::run () { if (!m_display || !m_xims_window || !m_xims || m_panel_client.get_connection_number () < 0) { SCIM_DEBUG_FRONTEND(1) << "X11 -- Cannot run without initialization!\n"; return; } XEvent event; fd_set read_fds, active_fds; int panel_fd = m_panel_client.get_connection_number (); int xserver_fd = ConnectionNumber (m_display); int max_fd = (panel_fd > xserver_fd) ? panel_fd : xserver_fd; FD_ZERO (&active_fds); FD_SET (panel_fd, &active_fds); FD_SET (xserver_fd, &active_fds); m_should_exit = false; // Select between the X Server and the Panel GUI. while (!m_should_exit) { int ret; read_fds = active_fds; // Process the events which are already send to me from the X Server // before calling select. while (XPending (m_display)) { XNextEvent (m_display, &event); XFilterEvent (&event, None); } if ((ret = select (max_fd + 1, &read_fds, NULL, NULL, NULL)) < 0) { SCIM_DEBUG_FRONTEND(1) << "X11 -- Error when watching events!\n"; return; } if (m_should_exit) break; if (FD_ISSET (panel_fd, &read_fds)) { if (!m_panel_client.filter_event ()) { SCIM_DEBUG_FRONTEND(1) << "X11 -- Lost connection with panel daemon, re-establish it!\n"; m_panel_client.close_connection (); max_fd = xserver_fd; FD_ZERO (&active_fds); FD_SET (xserver_fd, &active_fds); if (m_panel_client.open_connection (m_config->get_name (), m_display_name) >= 0) { panel_fd = m_panel_client.get_connection_number (); FD_SET (panel_fd, &active_fds); max_fd = (panel_fd > xserver_fd) ? panel_fd : xserver_fd; } else { panel_fd = -1; SCIM_DEBUG_FRONTEND(1) << "X11 -- Lost connection with panel daemon, can't re-establish it!\n"; } } } // X Events will be processed at beginning of the loop. } } String X11FrontEnd::get_supported_locales (void) { std::vector all_locales; std::vector supported_locales; scim_split_string_list (all_locales, get_all_locales (), ','); String last = String (setlocale (LC_CTYPE, 0)); for (size_t i = 0; i < all_locales.size (); ++i) { if (setlocale (LC_CTYPE, all_locales [i].c_str ()) && XSupportsLocale ()) supported_locales.push_back (all_locales [i]); } setlocale (LC_CTYPE, last.c_str ()); return scim_combine_string_list (supported_locales, ','); } int X11FrontEnd::get_default_instance (const String &language, const String &encoding) { DefaultInstanceMap::iterator it = m_default_instance_map.find (encoding); String sfid = get_default_factory (language, encoding); if (it == m_default_instance_map.end ()) { int siid = new_instance (sfid, encoding); m_default_instance_map [encoding] = siid; return siid; } else if (get_instance_uuid (it->second) != sfid) { replace_instance (it->second, sfid); } return it->second; } String X11FrontEnd::init_ims (void) { XIMStyle ims_styles_overspot [] = { XIMPreeditPosition | XIMStatusNothing, XIMPreeditNothing | XIMStatusNothing, XIMPreeditPosition | XIMStatusCallbacks, XIMPreeditNothing | XIMStatusCallbacks, 0 }; XIMStyle ims_styles_onspot [] = { XIMPreeditPosition | XIMStatusNothing, XIMPreeditCallbacks | XIMStatusNothing, XIMPreeditNothing | XIMStatusNothing, XIMPreeditPosition | XIMStatusCallbacks, XIMPreeditCallbacks | XIMStatusCallbacks, XIMPreeditNothing | XIMStatusCallbacks, 0 }; XIMEncoding ims_encodings[] = { const_cast ("COMPOUND_TEXT"), 0 }; XIMStyles styles; XIMEncodings encodings; String locales; locales = get_supported_locales (); SCIM_DEBUG_FRONTEND(1) << "Initializing XIMS: " << m_server_name << " with locale (" << locales.length () << "): " << locales << " ...\n"; // Initialize X Display and Root Windows. if (m_xims != (XIMS) 0) { throw FrontEndError (String ("X11 -- XIMS already initialized!")); } m_display = XOpenDisplay (NULL); if (!m_display) throw FrontEndError (String ("X11 -- Cannot open Display!")); m_xims_window = XCreateSimpleWindow (m_display, DefaultRootWindow (m_display), -1, -1, 1, 1, 0, 0, 0); if (!m_xims_window) throw FrontEndError (String ("X11 -- Cannot create IMS Window!")); XSetWindowAttributes attrs; unsigned long attrmask; attrs.override_redirect = true; attrmask = CWOverrideRedirect; XChangeWindowAttributes (m_display, m_xims_window, attrmask, &attrs); XSelectInput (m_display, m_xims_window, KeyPressMask | KeyReleaseMask); m_old_x_error_handler = XSetErrorHandler (x_error_handler); // Initialize XIMS. if (m_config->read (String (SCIM_CONFIG_FRONTEND_ON_THE_SPOT), true) && m_config->read (String (SCIM_CONFIG_FRONTEND_X11_ONTHESPOT), true)) { styles.count_styles = sizeof (ims_styles_onspot)/sizeof (XIMStyle) - 1; styles.supported_styles = ims_styles_onspot; } else { styles.count_styles = sizeof (ims_styles_overspot)/sizeof (XIMStyle) - 1; styles.supported_styles = ims_styles_overspot; } encodings.count_encodings = sizeof (ims_encodings)/sizeof (XIMEncoding) - 1; encodings.supported_encodings = ims_encodings; m_xims = IMOpenIM(m_display, IMModifiers, "Xi18n", IMServerWindow, m_xims_window, IMServerName, m_server_name.c_str (), IMLocale, locales.c_str (), IMServerTransport, "X/", IMInputStyles, &styles, IMEncodingList, &encodings, IMProtocolHandler, ims_protocol_handler, IMFilterEventMask, KeyPressMask | KeyReleaseMask, NULL); if (m_xims == (XIMS)NULL) throw FrontEndError (String ("X11 -- failed to initialize XIM Server!")); if (m_xims_dynamic) { XIMTriggerKey xim_on_key_list[10]; XIMTriggerKey xim_off_key_list[10]; XIMTriggerKeys xim_on_keys; XIMTriggerKeys xim_off_keys; uint32 count_trigger_keys, count_on_keys, count_off_keys; KeyEventList keys; m_frontend_hotkey_matcher.find_hotkeys (SCIM_FRONTEND_HOTKEY_TRIGGER, keys); for (count_trigger_keys=0; count_trigger_keys < 10 && count_trigger_keys < keys.size (); ++count_trigger_keys) { XKeyEvent xkey = scim_x11_keyevent_scim_to_x11 (m_display, keys [count_trigger_keys]); xim_on_key_list [count_trigger_keys].keysym = keys [count_trigger_keys].code; xim_on_key_list [count_trigger_keys].modifier = xkey.state; xim_on_key_list [count_trigger_keys].modifier_mask = xkey.state; } m_frontend_hotkey_matcher.find_hotkeys (SCIM_FRONTEND_HOTKEY_ON, keys); for (count_on_keys=count_trigger_keys; count_on_keys < 10 && (count_on_keys - count_trigger_keys) < keys.size (); ++count_on_keys) { XKeyEvent xkey = scim_x11_keyevent_scim_to_x11 (m_display, keys [count_on_keys - count_trigger_keys]); xim_on_key_list [count_on_keys].keysym = keys [count_on_keys - count_trigger_keys].code; xim_on_key_list [count_on_keys].modifier = xkey.state; xim_on_key_list [count_on_keys].modifier_mask = xkey.state; } m_frontend_hotkey_matcher.find_hotkeys (SCIM_FRONTEND_HOTKEY_OFF, keys); for (count_off_keys=0; count_off_keys < 10 && count_off_keys < keys.size (); ++count_off_keys) { XKeyEvent xkey = scim_x11_keyevent_scim_to_x11 (m_display, keys [count_off_keys]); xim_off_key_list [count_off_keys].keysym = keys [count_off_keys].code; xim_off_key_list [count_off_keys].modifier = xkey.state; xim_off_key_list [count_off_keys].modifier_mask = xkey.state; } xim_on_keys.count_keys = count_on_keys; xim_on_keys.keylist = xim_on_key_list; xim_off_keys.count_keys = count_off_keys; xim_off_keys.keylist = xim_off_key_list; IMSetIMValues(m_xims, IMOnKeysList, &xim_on_keys, IMOffKeysList, &xim_off_keys, NULL); } return String (DisplayString (m_display)); } bool X11FrontEnd::filter_hotkeys (X11IC *ic, const KeyEvent &scimkey) { bool ok = false; if (!is_focused_ic (ic)) return false; m_frontend_hotkey_matcher.push_key_event (scimkey); m_imengine_hotkey_matcher.push_key_event (scimkey); FrontEndHotkeyAction hotkey_action = m_frontend_hotkey_matcher.get_match_result (); // Match trigger and show factory menu hotkeys. if (hotkey_action == SCIM_FRONTEND_HOTKEY_TRIGGER) { if (!ic->xims_on) ims_turn_on_ic (ic); else ims_turn_off_ic (ic); ok = true; } else if (hotkey_action == SCIM_FRONTEND_HOTKEY_ON) { if (!ic->xims_on) ims_turn_on_ic (ic); ok = true; } else if (hotkey_action == SCIM_FRONTEND_HOTKEY_OFF) { if (ic->xims_on) ims_turn_off_ic (ic); ok = true; } else if (hotkey_action == SCIM_FRONTEND_HOTKEY_NEXT_FACTORY) { String encoding = scim_get_locale_encoding (ic->locale); String language = scim_get_locale_language (ic->locale); String sfid = get_next_factory ("", encoding, get_instance_uuid (ic->siid)); if (validate_factory (sfid, encoding)) { ims_turn_off_ic (ic); replace_instance (ic->siid, sfid); m_panel_client.register_input_context (ic->icid, get_instance_uuid (ic->siid)); set_ic_capabilities (ic); set_default_factory (language, sfid); ims_turn_on_ic (ic); } ok = true; } else if (hotkey_action == SCIM_FRONTEND_HOTKEY_PREVIOUS_FACTORY) { String encoding = scim_get_locale_encoding (ic->locale); String language = scim_get_locale_language (ic->locale); String sfid = get_previous_factory ("", encoding, get_instance_uuid (ic->siid)); if (validate_factory (sfid, encoding)) { ims_turn_off_ic (ic); replace_instance (ic->siid, sfid); m_panel_client.register_input_context (ic->icid, get_instance_uuid (ic->siid)); set_ic_capabilities (ic); set_default_factory (language, sfid); ims_turn_on_ic (ic); } ok = true; } else if (hotkey_action == SCIM_FRONTEND_HOTKEY_SHOW_FACTORY_MENU) { panel_req_show_factory_menu (ic); ok = true; } else if (m_imengine_hotkey_matcher.is_matched ()) { String encoding = scim_get_locale_encoding (ic->locale); String language = scim_get_locale_language (ic->locale); String sfid = m_imengine_hotkey_matcher.get_match_result (); if (validate_factory (sfid, encoding)) { ims_turn_off_ic (ic); replace_instance (ic->siid, sfid); m_panel_client.register_input_context (ic->icid, get_instance_uuid (ic->siid)); set_ic_capabilities (ic); set_default_factory (language, sfid); ims_turn_on_ic (ic); } ok = true; } return ok; } int X11FrontEnd::ims_open_handler (XIMS ims, IMOpenStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Open handler: LANG=" << call_data->lang.name << " Connect ID=" << call_data->connect_id << "\n"; m_ic_manager.new_connection (call_data); return 1; } int X11FrontEnd::ims_close_handler (XIMS ims, IMCloseStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Close handler: Connect ID=" << call_data->connect_id << "\n"; m_ic_manager.delete_connection (call_data); return 1; } int X11FrontEnd::ims_create_ic_handler (XIMS ims, IMChangeICStruct *call_data) { String locale = m_ic_manager.get_connection_locale (call_data->connect_id); String language = scim_get_locale_language (locale); String encoding = scim_get_locale_encoding (locale); SCIM_DEBUG_FRONTEND(2) << " IMS Create handler: Encoding=" << encoding << "\n"; if (language.empty () || encoding.empty ()) return 0; int siid = -1; if (m_shared_input_method) { siid = get_default_instance (language, encoding); } else { String sfid = get_default_factory (language, encoding); siid = new_instance (sfid, encoding); } if (siid >= 0) { uint32 attrs = m_ic_manager.create_ic (call_data, siid); X11IC *ic = m_ic_manager.find_ic (call_data->icid); SCIM_DEBUG_FRONTEND(2) << " IMS Create handler OK: SIID=" << siid << " ICID = " << ic->icid << " Connect ID=" << call_data->connect_id << "\n"; m_panel_client.prepare (ic->icid); m_panel_client.register_input_context (ic->icid, get_instance_uuid (siid)); if (attrs & SCIM_X11_IC_INPUT_STYLE) set_ic_capabilities (ic); m_panel_client.send (); if (m_shared_input_method) { ic->xims_on = m_config->read (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), ic->xims_on); ic->shared_siid = true; } return 1; } else { SCIM_DEBUG_FRONTEND(2) << " IMS Create handler Failed: " << " Connect ID=" << call_data->connect_id << "\n"; } return 0; } int X11FrontEnd::ims_set_ic_values_handler (XIMS ims, IMChangeICStruct *call_data) { uint32 changes; X11IC *ic = m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } changes = m_ic_manager.set_ic_values (call_data); if (changes & SCIM_X11_IC_ENCODING) { SCIM_DEBUG_FRONTEND(1) << "Cannot change IC encoding on the fly!\n"; return 0; } SCIM_DEBUG_FRONTEND(2) << " IMS Set IC values handler, ICID=" << call_data->icid << " Connect ID=" << call_data->connect_id << " Changes=" << changes << "\n"; m_panel_client.prepare (ic->icid); //It's focus IC if (is_focused_ic (ic)) { if (changes & SCIM_X11_IC_PRE_SPOT_LOCATION) panel_req_update_spot_location (ic); } // Update the client capabilities, if the input style was changed. if (changes & SCIM_X11_IC_INPUT_STYLE) set_ic_capabilities (ic); m_panel_client.send (); return 1; } int X11FrontEnd::ims_get_ic_values_handler (XIMS ims, IMChangeICStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Get IC values handler, ICID=" << call_data->icid << " Connect ID=" << call_data->connect_id << "\n"; m_ic_manager.get_ic_values (call_data); return 1; } int X11FrontEnd::ims_destroy_ic_handler (XIMS ims, IMDestroyICStruct *call_data) { X11IC *ic = m_ic_manager.find_ic (call_data->icid); SCIM_DEBUG_FRONTEND(2) << " IMS Destroy IC handler, ICID=" << call_data->icid << " Connect ID=" << call_data->connect_id << "\n"; if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } m_panel_client.prepare (ic->icid); if (is_focused_ic (ic)) { focus_out (ic->siid); m_panel_client.turn_off (ic->icid); m_panel_client.focus_out (ic->icid); } X11IC *old_focus = m_focus_ic; m_focus_ic = ic; if (!ic->shared_siid) delete_instance (ic->siid); m_panel_client.remove_input_context (ic->icid); m_panel_client.send (); if (is_focused_ic (ic)) m_focus_ic = 0; else m_focus_ic = old_focus; m_ic_manager.destroy_ic (call_data); return 1; } int X11FrontEnd::ims_set_ic_focus_handler (XIMS ims, IMChangeFocusStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Set IC focus handler, ID=" << call_data->icid << " Connect ID=" << call_data->connect_id << "\n"; X11IC *ic =m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } if (validate_ic (m_focus_ic) && m_focus_ic->icid != ic->icid) { m_panel_client.prepare (m_focus_ic->icid); stop_ic (m_focus_ic); m_panel_client.focus_out (m_focus_ic->icid); m_panel_client.send (); } String encoding = scim_get_locale_encoding (ic->locale); String language = scim_get_locale_language (ic->locale); bool need_reg = false; bool need_cap = false; bool need_reset = false; m_focus_ic = ic; m_panel_client.prepare (ic->icid); if (m_shared_input_method) { SCIM_DEBUG_FRONTEND(3) << "Shared input method.\n"; if (!ic->shared_siid) { delete_instance (ic->siid); ic->shared_siid = true; } ic->siid = get_default_instance (language, encoding); ic->onspot_preedit_started = false; ic->onspot_preedit_length = 0; ic->onspot_caret = 0; ic->xims_on = m_config->read (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), ic->xims_on); need_reg = true; need_cap = true; need_reset = true; } else if (ic->shared_siid) { String sfid = get_default_factory (language, encoding); ic->siid = new_instance (sfid, encoding); ic->onspot_preedit_started = false; ic->onspot_preedit_length = 0; ic->onspot_caret = 0; ic->shared_siid = false; need_reg = true; need_cap = true; } panel_req_focus_in (ic); if (need_reset) reset (ic->siid); if (need_cap) set_ic_capabilities (ic); if (need_reg) m_panel_client.register_input_context (ic->icid, get_instance_uuid (ic->siid)); if (ic->xims_on) { start_ic (ic); } else { panel_req_update_factory_info (ic); m_panel_client.turn_off (ic->icid); } m_panel_client.send (); return 1; } int X11FrontEnd::ims_unset_ic_focus_handler (XIMS ims, IMChangeFocusStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Unset IC focus handler, ID=" << call_data->icid << " Connect ID=" << call_data->connect_id << "\n"; X11IC *ic =m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } if (is_focused_ic (ic)) { m_panel_client.prepare (ic->icid); stop_ic (ic); m_panel_client.focus_out (ic->icid); m_panel_client.send (); m_focus_ic = 0; } return 1; } int X11FrontEnd::ims_reset_ic_handler (XIMS ims, IMResetICStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Reset IC handler, ID=" << call_data->icid << " Connect ID=" << call_data->connect_id << "\n"; X11IC *ic =m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } m_panel_client.prepare (ic->icid); reset (ic->siid); m_panel_client.send (); return 1; } int X11FrontEnd::ims_trigger_notify_handler (XIMS ims, IMTriggerNotifyStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Trigger notify handler, Flag=" << call_data->flag << " KeyIndex=" << call_data->key_index << " EventMask=" << call_data->event_mask << "\n"; X11IC *ic =m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } int ret = 0; m_panel_client.prepare (ic->icid); if (!call_data->flag) { ims_turn_on_ic (ic); ret = 1; } else { ims_turn_off_ic (ic); ret = 1; } m_panel_client.send (); return ret; } int X11FrontEnd::ims_forward_event_handler (XIMS ims, IMForwardEventStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Forward event handler, ICID=" << call_data->icid << " Connect ID=" << call_data->connect_id << " SerialNo=" << call_data->serial_number << "EventType=" << call_data->event.type << "\n"; if (call_data->event.type != KeyPress && call_data->event.type != KeyRelease) return 1; X11IC *ic = m_ic_manager.find_ic (call_data->icid); if (!validate_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "Cannot find IC for icid " << call_data->icid << "\n"; return 0; } // If the ic is not focused, then return. if (!is_focused_ic (ic)) { SCIM_DEBUG_FRONTEND(1) << "IC " << call_data->icid << " is not focused, focus it first.\n"; return 1; } XKeyEvent *event = (XKeyEvent*) &(call_data->event); KeyEvent scimkey = scim_x11_keyevent_x11_to_scim (m_display, *event); scimkey.mask &= m_valid_key_mask; // Set keyboard layout information. scimkey.layout = m_keyboard_layout; SCIM_DEBUG_FRONTEND(3) << " KeyEvent:\n" << " Type=" << event->type << " Display=" << event->display << " Serial=" << event->serial << " Send=" << event->send_event << "\n" << " X=" << event->x << " Y=" << event->y << " XRoot=" << event->x_root << " YRoot=" << event->y_root << "\n" << " Time=" << event->time << " SameScreen=" << event->same_screen << " SubWin=" << event->subwindow << " Win=" << event->window << "\n" << " Root=" << event->root << " KeyCode=" << event->keycode << " State=" << event->state << "\n" << " scimKeyEvent=(" << scimkey.code << "," << scimkey.mask << ")\n"; m_panel_client.prepare (ic->icid); if (!filter_hotkeys (ic, scimkey)) { if (!ic->xims_on || !process_key_event (ic->siid, scimkey)) { if (!m_fallback_instance->process_key_event (scimkey)) IMForwardEvent (ims, (XPointer) call_data); } } m_panel_client.send (); return 1; } int X11FrontEnd::ims_sync_reply_handler (XIMS ims, IMSyncXlibStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Sync reply handler.\n"; return 1; } int X11FrontEnd::ims_preedit_start_reply_handler (XIMS ims, IMPreeditCBStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Preedit start reply handler.\n"; return 1; } int X11FrontEnd::ims_preedit_caret_reply_handler (XIMS ims, IMPreeditCBStruct *call_data) { SCIM_DEBUG_FRONTEND(2) << " IMS Preedit caret reply handler.\n"; return 1; } void X11FrontEnd::ims_commit_string (const X11IC *ic, const WideString& str) { IMCommitStruct cms; XTextProperty tp; SCIM_DEBUG_FRONTEND(2) << " IMS Committing string.\n"; if (ims_wcstocts (tp, ic, str)) { memset (&cms, 0, sizeof (cms)); cms.major_code = XIM_COMMIT; cms.icid = ic->icid; cms.connect_id = ic->connect_id; cms.flag = XimLookupChars; cms.commit_string = (char *) tp.value; IMCommitString (m_xims, (XPointer) & cms); XFree (tp.value); } } void X11FrontEnd::ims_forward_key_event (const X11IC *ic, const KeyEvent &key) { IMForwardEventStruct fe; XEvent xkp; XKeyEvent *event = (XKeyEvent*) (&xkp); //create event xkp.xkey = scim_x11_keyevent_scim_to_x11 (m_display, key); memset (&fe, 0, sizeof (fe)); fe.major_code = XIM_FORWARD_EVENT; fe.icid = ic->icid; fe.connect_id = ic->connect_id; fe.sync_bit = 0; fe.serial_number = 0L; if (ic->focus_win) xkp.xkey.window = ic->focus_win; else if (ic->client_win) xkp.xkey.window = ic->client_win; memcpy (&(fe.event), &xkp, sizeof (fe.event)); IMForwardEvent (m_xims, (XPointer) & fe); } bool X11FrontEnd::ims_wcstocts (XTextProperty &tp,const X11IC *ic, const WideString& src) { if (!validate_ic (ic)) return false; String last = String (setlocale (LC_CTYPE, 0)); if (!setlocale (LC_CTYPE, ic->locale.c_str ())) { SCIM_DEBUG_FRONTEND(3) << " wcstocts -- unspported locale " << ic->locale.c_str () << "\n"; setlocale (LC_CTYPE, last.c_str ()); return false; } int ret; if (m_wchar_ucs4_equal && !m_broken_wchar) { wchar_t *wclist [1]; SCIM_DEBUG_FRONTEND(3) << " Convert WideString to COMPOUND_TEXT -- Using XwcTextListToTextProperty.\n"; wclist [0] = new wchar_t [src.length () + 1]; memcpy (wclist [0], src.data (), sizeof (wchar_t) * src.length ()); wclist [0][src.length ()] = 0; ret = XwcTextListToTextProperty (m_display, wclist, 1, XCompoundTextStyle, &tp); delete [] wclist [0]; } else { char *clist [1]; String mbs; SCIM_DEBUG_FRONTEND(3) << " Convert WideString to COMPOUND_TEXT -- Using XmbTextListToTextProperty.\n"; if (!m_iconv.set_encoding (ic->encoding)) { SCIM_DEBUG_FRONTEND(3) << " Convert WideString to COMPOUND_TEXT -- Cannot initialize iconv for encoding " << ic->encoding << "\n"; setlocale (LC_CTYPE, last.c_str ()); return false; } m_iconv.convert (mbs, src); clist [0] = (char *) mbs.c_str (); ret = XmbTextListToTextProperty (m_display, clist, 1, XCompoundTextStyle, &tp); } setlocale (LC_CTYPE, last.c_str ()); return ret >= 0; } bool X11FrontEnd::ims_is_preedit_callback_mode (const X11IC *ic) { return validate_ic (ic) && (ic->input_style & XIMPreeditCallbacks); } void X11FrontEnd::ims_preedit_callback_start (X11IC *ic) { if (!validate_ic (ic) || ic->onspot_preedit_started) return; ic->onspot_preedit_started = true; SCIM_DEBUG_FRONTEND(2) << " Onspot preedit start, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; IMPreeditCBStruct pcb; pcb.major_code = XIM_PREEDIT_START; pcb.minor_code = 0; pcb.connect_id = ic->connect_id; pcb.icid = ic->icid; pcb.todo.return_value = 0; IMCallCallback (m_xims, (XPointer) & pcb); } void X11FrontEnd::ims_preedit_callback_done (X11IC *ic) { if (!validate_ic (ic) || !ic->onspot_preedit_started) return; SCIM_DEBUG_FRONTEND(2) << " Onspot preedit done, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; // First clear the preedit string. ims_preedit_callback_draw (ic, WideString ()); ic->onspot_preedit_started = false; IMPreeditCBStruct pcb; pcb.major_code = XIM_PREEDIT_DONE; pcb.minor_code = 0; pcb.connect_id = ic->connect_id; pcb.icid = ic->icid; pcb.todo.return_value = 0; IMCallCallback (m_xims, (XPointer) & pcb); } void X11FrontEnd::ims_preedit_callback_draw (X11IC *ic, const WideString& str, const AttributeList & attrs) { if (!validate_ic (ic)) return; if (!ic->onspot_preedit_started) ims_preedit_callback_start (ic); SCIM_DEBUG_FRONTEND(2) << " Onspot preedit draw, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; IMPreeditCBStruct pcb; XIMText text; XIMFeedback *feedback; XIMFeedback attr; XTextProperty tp; unsigned int i, j, len; len = str.length (); if (!len && !ic->onspot_preedit_length) return; feedback = new XIMFeedback [str.length () + 1]; for (i = 0; i < len; ++i) feedback [i] = 0; for (i = 0; i < attrs.size (); ++i) { attr = 0; if (attrs [i].get_type () == SCIM_ATTR_DECORATE) { if (attrs [i].get_value () == SCIM_ATTR_DECORATE_REVERSE) attr = XIMReverse; else if (attrs [i].get_value () == SCIM_ATTR_DECORATE_HIGHLIGHT) attr = XIMHighlight; } for (j = attrs [i].get_start (); j < attrs [i].get_end () && j < len; ++j) feedback [j] |= attr; } for (i = 0; i < len; ++i) if (!feedback [i]) feedback [i] = XIMUnderline; feedback [len] = 0; pcb.major_code = XIM_PREEDIT_DRAW; pcb.connect_id = ic->connect_id; pcb.icid = ic->icid; pcb.todo.draw.caret = len; pcb.todo.draw.chg_first = 0; pcb.todo.draw.chg_length = ic->onspot_preedit_length; pcb.todo.draw.text = &text; text.feedback = feedback; if (len > 0 && ims_wcstocts (tp, ic, str)) { text.encoding_is_wchar = false; text.length = strlen ((char*)tp.value); text.string.multi_byte = (char*)tp.value; IMCallCallback (m_xims, (XPointer) & pcb); XFree (tp.value); } else { text.encoding_is_wchar = false; text.length = 0; text.string.multi_byte = const_cast (""); IMCallCallback (m_xims, (XPointer) & pcb); len = 0; } ic->onspot_preedit_length = len; delete [] feedback; } void X11FrontEnd::ims_preedit_callback_caret (X11IC *ic, int caret) { if (!validate_ic (ic) || !ic->onspot_preedit_started || caret > ic->onspot_preedit_length || caret < 0) return; SCIM_DEBUG_FRONTEND(2) << " Onspot preedit caret, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; //save the caret position for future usage when updating preedit string. ic->onspot_caret = caret; //client usually does not support this callback IMPreeditCBStruct pcb; pcb.major_code = XIM_PREEDIT_CARET; pcb.connect_id = ic->connect_id; pcb.icid = ic->icid; pcb.todo.caret.direction = XIMAbsolutePosition; pcb.todo.caret.position = caret; pcb.todo.caret.style = XIMIsPrimary; IMCallCallback (m_xims, (XPointer) & pcb); } bool X11FrontEnd::ims_string_conversion_callback_retrieval (X11IC *ic, WideString &text, int &cursor, int maxlen_before, int maxlen_after) { #if 0 if (!validate_ic (ic) || (maxlen_before == 0 && maxlen_after == 0)) return false; SCIM_DEBUG_FRONTEND(2) << " String conversion callback retrieval, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; //client usually does not support this callback IMStrConvCBStruct sccb; sccb.major_code = XIM_STR_CONVERSION; sccb.connect_id = ic->connect_id; sccb.icid = ic->icid; sccb.strconv.text = 0; sccb.strconv.operation = XIMStringConversionRetrieval; sccb.strconv.position = 0; sccb.strconv.direction = XIMBackwardChar; sccb.strconv.factor = (short)((maxlen_before > 0) ? maxlen_before : 1); IMCallCallback (m_xims, (XPointer) & sccb); std::cerr << "Surrounding text: "; if (sccb.strconv.text && sccb.strconv.text->string.mbs) { std::cerr << sccb.strconv.text->string.mbs << " "; } sccb.strconv.direction = XIMForwardChar; sccb.strconv.factor = (maxlen_after > 0) ? maxlen_after : 1; IMCallCallback (m_xims, (XPointer) & sccb); if (sccb.strconv.text && sccb.strconv.text->string.mbs) { std::cerr << sccb.strconv.text->string.mbs; } std::cerr << "\n"; #endif return false; } bool X11FrontEnd::ims_string_conversion_callback_substitution (X11IC *ic, int offset, int len) { #if 0 if (!validate_ic (ic) || len <= 0) return false; SCIM_DEBUG_FRONTEND(2) << " String conversion callback substitution, ICID=" << ic->icid << " Connect ID=" << ic->connect_id << "\n"; //client usually does not support this callback IMStrConvCBStruct sccb; sccb.major_code = XIM_STR_CONVERSION; sccb.connect_id = ic->connect_id; sccb.icid = ic->icid; sccb.strconv.text = 0; sccb.strconv.operation = XIMStringConversionSubstitution; sccb.strconv.position = (XIMStringConversionPosition) offset; sccb.strconv.direction = XIMForwardChar; sccb.strconv.factor = (short) len; IMCallCallback (m_xims, (XPointer) & sccb); return sccb.strconv.text != NULL; #endif return false; } void X11FrontEnd::ims_turn_on_ic (X11IC *ic) { if (validate_ic (ic) && !ic->xims_on) { SCIM_DEBUG_FRONTEND(2) << "ims_turn_on_ic.\n"; ic->xims_on = true; //Record the IC on/off status if (m_shared_input_method) m_config->write (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), true); if (is_focused_ic (ic)) { panel_req_focus_in (ic); start_ic (ic); } } } void X11FrontEnd::ims_turn_off_ic (X11IC *ic) { if (validate_ic (ic) && ic->xims_on) { SCIM_DEBUG_FRONTEND(2) << "ims_turn_off_ic.\n"; ic->xims_on = false; //Record the IC on/off status if (m_shared_input_method) m_config->write (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), false); if (is_focused_ic (ic)) stop_ic (ic); } } void X11FrontEnd::ims_sync_ic (X11IC *ic) { if (validate_ic (ic)) { IMSyncXlibStruct data; data.major_code = XIM_SYNC; data.minor_code = 0; data.connect_id = ic->connect_id; data.icid = ic->icid; IMSyncXlib(m_xims, (XPointer) &data); } } void X11FrontEnd::set_ic_capabilities (const X11IC *ic) { if (validate_ic (ic)) { unsigned int cap = SCIM_CLIENT_CAP_ALL_CAPABILITIES - SCIM_CLIENT_CAP_SURROUNDING_TEXT; if (!ims_is_preedit_callback_mode (ic)) cap -= SCIM_CLIENT_CAP_ONTHESPOT_PREEDIT; update_client_capabilities (ic->siid, cap); } } void X11FrontEnd::start_ic (X11IC *ic) { if (validate_ic (ic)) { if (m_xims_dynamic) { IMPreeditStateStruct ips; ips.major_code = 0; ips.minor_code = 0; ips.icid = ic->icid; ips.connect_id = ic->connect_id; IMPreeditStart (m_xims, (XPointer) & ips); } panel_req_update_screen (ic); panel_req_update_spot_location (ic); panel_req_update_factory_info (ic); m_panel_client.turn_on (ic->icid); m_panel_client.hide_preedit_string (ic->icid); m_panel_client.hide_aux_string (ic->icid); m_panel_client.hide_lookup_table (ic->icid); if (ic->shared_siid) reset (ic->siid); focus_in (ic->siid); } } void X11FrontEnd::stop_ic (X11IC *ic) { if (validate_ic (ic)) { focus_out (ic->siid); if (ic->shared_siid) reset (ic->siid); if (ims_is_preedit_callback_mode (ic)) ims_preedit_callback_done (ic); panel_req_update_factory_info (ic); m_panel_client.turn_off (ic->icid); if (m_xims_dynamic) { IMPreeditStateStruct ips; ips.major_code = 0; ips.minor_code = 0; ips.icid = ic->icid; ips.connect_id = ic->connect_id; IMPreeditEnd (m_xims, (XPointer) & ips); } } } int X11FrontEnd::ims_protocol_handler (XIMS ims, IMProtocol *call_data) { if (!_scim_frontend || !call_data || ims != _scim_frontend->m_xims) return 0; switch (call_data->major_code) { case XIM_OPEN: return _scim_frontend->ims_open_handler (ims, (IMOpenStruct *) call_data); case XIM_CLOSE: return _scim_frontend->ims_close_handler (ims, (IMCloseStruct *) call_data); case XIM_CREATE_IC: return _scim_frontend->ims_create_ic_handler (ims, (IMChangeICStruct *) call_data); case XIM_DESTROY_IC: return _scim_frontend->ims_destroy_ic_handler (ims, (IMDestroyICStruct *) call_data); case XIM_SET_IC_VALUES: return _scim_frontend->ims_set_ic_values_handler (ims, (IMChangeICStruct *) call_data); case XIM_GET_IC_VALUES: return _scim_frontend->ims_get_ic_values_handler (ims, (IMChangeICStruct *) call_data); case XIM_FORWARD_EVENT: return _scim_frontend->ims_forward_event_handler (ims, (IMForwardEventStruct *) call_data); case XIM_SET_IC_FOCUS: return _scim_frontend->ims_set_ic_focus_handler (ims, (IMChangeFocusStruct *) call_data); case XIM_UNSET_IC_FOCUS: return _scim_frontend->ims_unset_ic_focus_handler (ims, (IMChangeFocusStruct *) call_data); case XIM_RESET_IC: return _scim_frontend->ims_reset_ic_handler (ims, (IMResetICStruct *) call_data); case XIM_TRIGGER_NOTIFY: return _scim_frontend->ims_trigger_notify_handler (ims, (IMTriggerNotifyStruct *) call_data); case XIM_PREEDIT_START_REPLY: return _scim_frontend->ims_preedit_start_reply_handler (ims, (IMPreeditCBStruct *) call_data); case XIM_PREEDIT_CARET_REPLY: return _scim_frontend->ims_preedit_caret_reply_handler (ims, (IMPreeditCBStruct *) call_data); case XIM_SYNC_REPLY: return _scim_frontend->ims_sync_reply_handler (ims, (IMSyncXlibStruct *) call_data); default: SCIM_DEBUG_FRONTEND(1) << "Unknown major code " << call_data->major_code << "\n"; break; } return 1; } int X11FrontEnd::x_error_handler (Display *display, XErrorEvent *error) { #if ENABLE_DEBUG char buf [256]; XGetErrorText (display, error->error_code, buf, 256); SCIM_DEBUG_FRONTEND (1) << "X Error occurred:\n" << " Display = " << display << "\n" << " Type = " << error->type << "\n" << " Resourceid = " << error->resourceid << "\n" << " Serial = " << error->serial << "\n" << " ErrorCode = " << (uint32) error->error_code << "\n" << " RequestCode = " << (uint32) error->request_code << "\n" << " MinorCode = " << (uint32) error->minor_code << "\n" << " Error Text = " << buf << "\n"; #endif // trap all possible error for broken focus ic. if ((error->error_code == BadWindow || error->error_code == BadMatch) && (error->request_code == X_GetWindowAttributes || error->request_code == X_GetProperty || error->request_code == X_SendEvent || error->request_code == X_TranslateCoords)) { SCIM_DEBUG_FRONTEND(1) << "Discard This Error\n"; } else if (_scim_frontend && _scim_frontend->m_old_x_error_handler) { _scim_frontend->m_old_x_error_handler (display, error); } return 0; } //===================== Panel Slot callbacks ======================= void X11FrontEnd::panel_slot_reload_config (int context) { m_config->reload (); } void X11FrontEnd::panel_slot_exit (int context) { m_should_exit = true; } void X11FrontEnd::panel_slot_update_lookup_table_page_size (int context, int page_size) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); update_lookup_table_page_size (ic->siid, page_size); m_panel_client.send (); } } void X11FrontEnd::panel_slot_lookup_table_page_up (int context) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); lookup_table_page_up (ic->siid); m_panel_client.send (); } } void X11FrontEnd::panel_slot_lookup_table_page_down (int context) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); lookup_table_page_down (ic->siid); m_panel_client.send (); } } void X11FrontEnd::panel_slot_trigger_property (int context, const String &property) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); trigger_property (ic->siid, property); m_panel_client.send (); } } void X11FrontEnd::panel_slot_process_helper_event (int context, const String &target_uuid, const String &helper_uuid, const Transaction &trans) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic) && get_instance_uuid (ic->siid) == target_uuid) { m_panel_client.prepare (ic->icid); process_helper_event (ic->siid, helper_uuid, trans); m_panel_client.send (); } } void X11FrontEnd::panel_slot_move_preedit_caret (int context, int caret_pos) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); move_preedit_caret (ic->siid, caret_pos); m_panel_client.send (); } } void X11FrontEnd::panel_slot_select_candidate (int context, int cand_index) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); select_candidate (ic->siid, cand_index); m_panel_client.send (); } } void X11FrontEnd::panel_slot_process_key_event (int context, const KeyEvent &key) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); if (!filter_hotkeys (ic, key)) { if (!ic->xims_on || !process_key_event (ic->siid, key)) { if (!m_fallback_instance->process_key_event (key)) ims_forward_key_event (ic, key); } } m_panel_client.send (); } } void X11FrontEnd::panel_slot_commit_string (int context, const WideString &wstr) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { ims_commit_string (ic, wstr); } } void X11FrontEnd::panel_slot_forward_key_event (int context, const KeyEvent &key) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { ims_forward_key_event (ic, key); } } void X11FrontEnd::panel_slot_request_help (int context) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); panel_req_show_help (ic); m_panel_client.send (); } } void X11FrontEnd::panel_slot_request_factory_menu (int context) { X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); panel_req_show_factory_menu (ic); m_panel_client.send (); } } void X11FrontEnd::panel_slot_change_factory (int context, const String &uuid) { SCIM_DEBUG_FRONTEND (1) << "panel_slot_change_factory " << uuid << "\n"; X11IC *ic = m_ic_manager.find_ic (context); if (validate_ic (ic)) { m_panel_client.prepare (ic->icid); if (uuid.length () == 0 && ic->xims_on) { SCIM_DEBUG_FRONTEND (2) << "panel_slot_change_factory : turn off.\n"; ims_turn_off_ic (ic); }else if(uuid.length () == 0 && (ic->xims_on == false)){ panel_req_update_factory_info (ic); m_panel_client.turn_off (ic->icid); }else if (uuid.length ()) { String encoding = scim_get_locale_encoding (ic->locale); String language = scim_get_locale_language (ic->locale); if (validate_factory (uuid, encoding)) { ims_turn_off_ic (ic); replace_instance (ic->siid, uuid); m_panel_client.register_input_context (ic->icid, get_instance_uuid (ic->siid)); set_ic_capabilities (ic); set_default_factory (language, uuid); ims_turn_on_ic (ic); } } m_panel_client.send (); } } //================ Panel Request methods ==================== void X11FrontEnd::panel_req_update_screen (const X11IC *ic) { Window target = ic->focus_win ? ic->focus_win : ic->client_win; XWindowAttributes xwa; if (target && XGetWindowAttributes (m_display, target, &xwa) && validate_ic (ic)) { int num = ScreenCount (m_display); int idx; for (idx = 0; idx < num; ++ idx) { if (ScreenOfDisplay (m_display, idx) == xwa.screen) { m_panel_client.update_screen (ic->icid, idx); return; } } } } void X11FrontEnd::panel_req_show_help (const X11IC *ic) { String help; String tmp; help = String (_("Smart Common Input Method platform ")) + String (SCIM_VERSION) + String (_("\n(C) 2002-2005 James Su \n\n")); if (ic->xims_on) { help += utf8_wcstombs (get_instance_name (ic->siid)); help += String (_(":\n\n")); help += utf8_wcstombs (get_instance_authors (ic->siid)); help += String (_("\n\n")); help += utf8_wcstombs (get_instance_help (ic->siid)); help += String (_("\n\n")); help += utf8_wcstombs (get_instance_credits (ic->siid)); } m_panel_client.show_help (ic->icid, help); } void X11FrontEnd::panel_req_show_factory_menu (const X11IC *ic) { std::vector uuids; if (get_factory_list_for_encoding (uuids, ic->encoding)) { std::vector menu; for (size_t i = 0; i < uuids.size (); ++ i) { menu.push_back (PanelFactoryInfo ( uuids [i], utf8_wcstombs (get_factory_name (uuids [i])), get_factory_language (uuids [i]), get_factory_icon_file (uuids [i]))); } m_panel_client.show_factory_menu (ic->icid, menu); } } void X11FrontEnd::panel_req_focus_in (const X11IC * ic) { m_panel_client.focus_in (ic->icid, get_instance_uuid (ic->siid)); } void X11FrontEnd::panel_req_update_factory_info (const X11IC *ic) { if (is_focused_ic (ic)) { PanelFactoryInfo info; if (ic->xims_on) { String uuid = get_instance_uuid (ic->siid); info = PanelFactoryInfo (uuid, utf8_wcstombs (get_factory_name (uuid)), get_factory_language (uuid), get_factory_icon_file (uuid)); } else { info = PanelFactoryInfo (String (""), String (_("English/Keyboard")), String ("C"), String (SCIM_KEYBOARD_ICON_FILE)); } m_panel_client.update_factory_info (ic->icid, info); } } void X11FrontEnd::panel_req_update_spot_location (const X11IC *ic) { Window target = ic->focus_win ? ic->focus_win : ic->client_win; XWindowAttributes xwa; if (target && XGetWindowAttributes (m_display, target, &xwa) && validate_ic (ic)) { int spot_x, spot_y; Window child; if (m_focus_ic->pre_attr.spot_location.x >= 0 && m_focus_ic->pre_attr.spot_location.y >= 0) { XTranslateCoordinates (m_display, target, xwa.root, m_focus_ic->pre_attr.spot_location.x + 8, m_focus_ic->pre_attr.spot_location.y + 8, &spot_x, &spot_y, &child); } else { XTranslateCoordinates (m_display, target, xwa.root, 0, xwa.height, &spot_x, &spot_y, &child); } m_panel_client.update_spot_location (ic->icid, spot_x, spot_y); } } void X11FrontEnd::reload_config_callback (const ConfigPointer &config) { SCIM_DEBUG_FRONTEND(1) << "Reload configuration.\n"; m_frontend_hotkey_matcher.load_hotkeys (config); m_imengine_hotkey_matcher.load_hotkeys (config); KeyEvent key; scim_string_to_key (key, config->read (String (SCIM_CONFIG_HOTKEYS_FRONTEND_VALID_KEY_MASK), String ("Shift+Control+Alt+Lock"))); m_valid_key_mask = (key.mask > 0) ? key.mask : 0xFFFF; m_valid_key_mask |= SCIM_KEY_ReleaseMask; // Special treatment for two backslash keys on jp106 keyboard. m_valid_key_mask |= SCIM_KEY_QuirkKanaRoMask; m_broken_wchar = config->read (String (SCIM_CONFIG_FRONTEND_X11_BROKEN_WCHAR), m_broken_wchar); m_shared_input_method = config->read (String (SCIM_CONFIG_FRONTEND_SHARED_INPUT_METHOD), m_shared_input_method); // Get keyboard layout setting // Flush the global config first, in order to load the new configs from disk. scim_global_config_flush (); m_keyboard_layout = scim_get_default_keyboard_layout (); } void X11FrontEnd::fallback_commit_string_cb (IMEngineInstanceBase * si, const WideString & str) { if (validate_ic (m_focus_ic)) ims_commit_string (m_focus_ic, str); } /* vi:ts=4:nowrap:expandtab */ scim-master/modules/FrontEnd/scim_x11_frontend.h000066400000000000000000000225001415264260100221650ustar00rootroot00000000000000/** * @file scim_x11_frontend.h * @brief definition of X11FrontEnd related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_x11_frontend.h,v 1.56 2005/06/26 16:35:12 suzhe Exp $ */ #if !defined (__SCIM_X11_FRONTEND_H) #define __SCIM_X11_FRONTEND_H #include "scim_stl_map.h" using namespace scim; class X11FrontEnd : public FrontEndBase { // first = UUID. // second= siid. #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map DefaultInstanceMap; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map DefaultInstanceMap; #else typedef std::map DefaultInstanceMap; #endif X11ICManager m_ic_manager; XIMS m_xims; Display *m_display; Window m_xims_window; String m_server_name; String m_display_name; PanelClient m_panel_client; X11IC *m_focus_ic; FrontEndHotkeyMatcher m_frontend_hotkey_matcher; IMEngineHotkeyMatcher m_imengine_hotkey_matcher; bool m_xims_dynamic; bool m_wchar_ucs4_equal; bool m_broken_wchar; bool m_shared_input_method; KeyboardLayout m_keyboard_layout; int m_valid_key_mask; bool m_should_exit; IConvert m_iconv; ConfigPointer m_config; IMEngineFactoryPointer m_fallback_factory; IMEngineInstancePointer m_fallback_instance; DefaultInstanceMap m_default_instance_map; int (*m_old_x_error_handler) (Display *, XErrorEvent *); public: X11FrontEnd (const BackEndPointer &backend, const ConfigPointer &config, const String &server_name = String ("SCIM")); virtual ~X11FrontEnd (); protected: virtual void show_preedit_string (int siid); virtual void show_aux_string (int siid); virtual void show_lookup_table (int siid); virtual void hide_preedit_string (int siid); virtual void hide_aux_string (int siid); virtual void hide_lookup_table (int siid); virtual void update_preedit_caret (int siid, int caret); virtual void update_preedit_string (int siid, const WideString & str, const AttributeList & attrs = AttributeList ()); virtual void update_aux_string (int siid, const WideString & str, const AttributeList & attrs = AttributeList ()); virtual void commit_string (int siid, const WideString & str); virtual void forward_key_event (int siid, const KeyEvent & key); virtual void update_lookup_table (int siid, const LookupTable & table); virtual void register_properties (int siid, const PropertyList & properties); virtual void update_property (int siid, const Property & property); virtual void beep (int siid); virtual void start_helper (int siid, const String &helper_uuid); virtual void stop_helper (int siid, const String &helper_uuid); virtual void send_helper_event (int siid, const String &helper_uuid, const Transaction &trans); virtual bool get_surrounding_text (int siid, WideString &text, int &cursor, int maxlen_before, int maxlen_after); virtual bool delete_surrounding_text (int siid, int offset, int len); public: virtual void init (int argc, char **argv); virtual void run (); private: String get_supported_locales (void); int get_default_instance (const String &language, const String &encoding); // Return the display name String init_ims (void); XKeyEvent keyevent_scim_to_x11 (const KeyEvent& key); KeyEvent keyevent_x11_to_scim (const XKeyEvent& key); bool filter_hotkeys (X11IC *ic, const KeyEvent &key); int ims_open_handler (XIMS ims, IMOpenStruct *call_data); int ims_close_handler (XIMS ims, IMCloseStruct *call_data); int ims_create_ic_handler (XIMS ims, IMChangeICStruct *call_data); int ims_set_ic_values_handler (XIMS ims, IMChangeICStruct *call_data); int ims_get_ic_values_handler (XIMS ims, IMChangeICStruct *call_data); int ims_destroy_ic_handler (XIMS ims, IMDestroyICStruct *call_data); int ims_set_ic_focus_handler (XIMS ims, IMChangeFocusStruct *call_data); int ims_unset_ic_focus_handler (XIMS ims, IMChangeFocusStruct *call_data); int ims_reset_ic_handler (XIMS ims, IMResetICStruct *call_data); int ims_trigger_notify_handler (XIMS ims, IMTriggerNotifyStruct *call_data); int ims_forward_event_handler (XIMS ims, IMForwardEventStruct *call_data); int ims_sync_reply_handler (XIMS ims, IMSyncXlibStruct *call_data); int ims_preedit_start_reply_handler (XIMS ims, IMPreeditCBStruct *call_data); int ims_preedit_caret_reply_handler (XIMS ims, IMPreeditCBStruct *call_data); void ims_commit_string (const X11IC *ic, const WideString& str); void ims_forward_key_event (const X11IC *ic, const KeyEvent& key); bool ims_wcstocts (XTextProperty &tp, const X11IC *ic, const WideString& src); bool ims_is_preedit_callback_mode (const X11IC *ic); void ims_preedit_callback_start (X11IC *ic); void ims_preedit_callback_done (X11IC *ic); void ims_preedit_callback_draw (X11IC *ic, const WideString& str, const AttributeList & attrs = AttributeList ()); void ims_preedit_callback_caret (X11IC *ic, int caret); bool ims_string_conversion_callback_retrieval (X11IC *ic, WideString &text, int &cursor, int maxlen_before, int maxlen_after); bool ims_string_conversion_callback_substitution (X11IC *ic, int offset, int len); void ims_turn_on_ic (X11IC *ic); void ims_turn_off_ic (X11IC *ic); void ims_sync_ic (X11IC *ic); void set_ic_capabilities (const X11IC *ic); void start_ic (X11IC *ic); void stop_ic (X11IC *ic); bool is_focused_ic (int siid) { return validate_ic (m_focus_ic) && m_focus_ic->siid == siid; } bool is_inputing_ic (int siid) { return is_focused_ic (siid) && m_focus_ic->xims_on; } bool is_forwarding_ic (int siid) { return is_focused_ic (siid) && !m_focus_ic->xims_on; } bool is_focused_ic (const X11IC *ic) { return validate_ic (m_focus_ic) && validate_ic (ic) && m_focus_ic->icid == ic->icid; } bool is_inputing_ic (const X11IC *ic) { return is_focused_ic (ic) && ic->xims_on; } bool is_forwarding_ic (const X11IC *ic) { return is_focused_ic (ic) && !ic->xims_on; } bool is_input_mode () { return validate_ic (m_focus_ic) && m_focus_ic->xims_on; } bool is_forward_mode () { return !is_input_mode (); } void panel_slot_reload_config (int context); void panel_slot_exit (int context); void panel_slot_update_lookup_table_page_size (int context, int page_size); void panel_slot_lookup_table_page_up (int context); void panel_slot_lookup_table_page_down (int context); void panel_slot_trigger_property (int context, const String &property); void panel_slot_process_helper_event (int context, const String &target_uuid, const String &helper_uuid, const Transaction &trans); void panel_slot_move_preedit_caret (int context, int caret_pos); void panel_slot_select_candidate (int context, int cand_index); void panel_slot_process_key_event (int context, const KeyEvent &key); void panel_slot_commit_string (int context, const WideString &wstr); void panel_slot_forward_key_event (int context, const KeyEvent &key); void panel_slot_request_help (int context); void panel_slot_request_factory_menu (int context); void panel_slot_change_factory (int context, const String &uuid); void panel_req_update_screen (const X11IC *ic); void panel_req_show_help (const X11IC *ic); void panel_req_show_factory_menu (const X11IC *ic); void panel_req_focus_in (const X11IC *ic); void panel_req_update_factory_info (const X11IC *ic); void panel_req_update_spot_location (const X11IC *ic); void reload_config_callback (const ConfigPointer &config); void fallback_commit_string_cb (IMEngineInstanceBase * si, const WideString & str); private: static int ims_protocol_handler (XIMS ims, IMProtocol *call_data); static int x_error_handler (Display *display, XErrorEvent *error); static bool validate_ic (const X11IC * ic) { return ic && ic->icid > 0 && ic->siid >= 0; } }; #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/FrontEnd/scim_x11_ic.cpp000066400000000000000000000374001415264260100213010ustar00rootroot00000000000000/** @file scim_x11_ic.cpp * implementation of class X11ICManager. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_x11_ic.cpp,v 1.19 2005/06/26 16:35:12 suzhe Exp $ * */ #include #include #include #include "IMdkit/IMdkit.h" #include "IMdkit/Xi18n.h" #include "scim_private.h" #include "scim.h" #include "scim_x11_ic.h" using namespace scim; static int _is_attr (const char *attr, XICAttribute * attr_list) { return !strcmp (attr, attr_list->name); } X11ICManager::X11ICManager () : m_ic_list (NULL), m_free_list (NULL) { } X11ICManager::~X11ICManager () { X11IC *it; it = m_ic_list; while (it != NULL) { m_ic_list = it->next; delete it; it = m_ic_list; } it = m_free_list; while (it != NULL) { m_free_list = it->next; delete it; it = m_free_list; } } X11IC * X11ICManager::new_ic () { static CARD16 base_icid = 1; X11IC *rec; if (m_free_list != NULL) { rec = m_free_list; m_free_list = m_free_list->next; } else { rec = new X11IC; } if (base_icid == 0) base_icid = 1; rec->icid = base_icid ++; rec->next = m_ic_list; m_ic_list = rec; return rec; } void X11ICManager::delete_ic (CARD16 icid) { X11IC *rec, *last = NULL; for (rec = m_ic_list; rec != NULL; last = rec, rec = rec->next) { if (rec->icid == icid) { if (last != NULL) last->next = rec->next; else m_ic_list = rec->next; rec->next = m_free_list; m_free_list = rec; rec->siid = -1; rec->icid = 0; rec->connect_id = 0; rec->client_win = 0; rec->focus_win = 0; rec->shared_siid = false; rec->xims_on = false; rec->encoding = String (); rec->locale = String (); return; } } return; } String X11ICManager::get_connection_locale (CARD16 connect_id) { ConnectionLocaleMap::iterator it = m_connect_locales.find ((int)connect_id); if (it != m_connect_locales.end ()) return it->second; return String (); } void X11ICManager::new_connection (IMOpenStruct *call_data) { if (call_data == NULL) return; String locale = scim_validate_locale (String (call_data->lang.name)); if (!locale.length ()) { locale = String ("C"); } m_connect_locales [(int)call_data->connect_id] = locale; } void X11ICManager::delete_connection (IMCloseStruct *call_data) { if (call_data == NULL) return; m_connect_locales.erase ((int)call_data->connect_id); } uint32 X11ICManager::create_ic (IMChangeICStruct *call_data, int siid) { X11IC * rec; rec = new_ic (); if (rec == NULL) return 0; call_data->icid = rec->icid; rec->connect_id = call_data->connect_id; rec->siid = siid; rec->shared_siid = false; rec->xims_on = false; rec->onspot_preedit_started = false; rec->onspot_preedit_length = 0; rec->onspot_caret = 0; rec->focus_win = (Window) 0; rec->client_win = (Window) 0; rec->input_style = 0; rec->pre_attr.spot_location.x = -1; rec->pre_attr.spot_location.y = -1; return store_ic_values (rec, call_data); } X11IC * X11ICManager::find_ic (CARD16 icid) { X11IC *rec = m_ic_list; while (rec != NULL) { if (rec->icid == icid) return rec; rec = rec->next; } return NULL; } X11IC * X11ICManager::find_ic_by_siid (int siid) { X11IC *rec = m_ic_list; while (rec != NULL) { if (rec->siid == siid) return rec; rec = rec->next; } return NULL; } void X11ICManager::destroy_ic (IMDestroyICStruct *call_data) { if (call_data == NULL) return; delete_ic (call_data->icid); } uint32 X11ICManager::store_ic_values (X11IC *rec, IMChangeICStruct *call_data) { XICAttribute *ic_attr = call_data->ic_attr; XICAttribute *pre_attr = call_data->preedit_attr; XICAttribute *sts_attr = call_data->status_attr; int i; uint32 attrs = 0; // Set main attributes for (i=0; i< (int) call_data->ic_attr_num; ++i, ++ic_attr) { if (_is_attr (XNInputStyle, ic_attr)) { rec->input_style = * (INT32 *) ic_attr->value; attrs |= SCIM_X11_IC_INPUT_STYLE; } else if (_is_attr (XNClientWindow, ic_attr)) { rec->client_win = *(Window *) ic_attr->value; attrs |= SCIM_X11_IC_CLIENT_WINDOW; } else if (_is_attr (XNFocusWindow, ic_attr)) { rec->focus_win = *(Window *) ic_attr->value; attrs |= SCIM_X11_IC_FOCUS_WINDOW; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << ic_attr->name << std::endl; } } // Set preedit attributes for (i = 0; i < (int) call_data->preedit_attr_num; ++i, ++pre_attr) { if (_is_attr (XNArea, pre_attr)) { rec->pre_attr.area = *(XRectangle *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_AREA; } else if (_is_attr (XNAreaNeeded, pre_attr)) { rec->pre_attr.area_needed = *(XRectangle *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_AREA_NEEDED; } else if (_is_attr (XNSpotLocation, pre_attr)) { rec->pre_attr.spot_location = *(XPoint *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_SPOT_LOCATION; } else if (_is_attr (XNColormap, pre_attr)) { rec->pre_attr.cmap = *(Colormap *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_COLORMAP; } else if (_is_attr (XNStdColormap, pre_attr)) { rec->pre_attr.cmap = *(Colormap *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_COLORMAP; } else if (_is_attr (XNForeground, pre_attr)) { rec->pre_attr.foreground = *(CARD32 *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_FOREGROUND; } else if (_is_attr (XNBackground, pre_attr)) { rec->pre_attr.background = *(CARD32 *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_BACKGROUND; } else if (_is_attr (XNBackgroundPixmap, pre_attr)) { rec->pre_attr.bg_pixmap = *(Pixmap *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_BG_PIXMAP; } else if (_is_attr (XNFontSet, pre_attr)) { rec->pre_attr.base_font = (char*) pre_attr->value; attrs |= SCIM_X11_IC_PRE_FONTSET; } else if (_is_attr (XNLineSpace, pre_attr)) { rec->pre_attr.line_space = *(CARD32 *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_LINE_SPACE; } else if (_is_attr (XNCursor, pre_attr)) { rec->pre_attr.cursor = *(Cursor *) pre_attr->value; attrs |= SCIM_X11_IC_PRE_CURSOR; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << pre_attr->name << std::endl; } } // Set status attributes for (i = 0; i < (int) call_data->status_attr_num; ++i, ++sts_attr) { if (_is_attr (XNArea, sts_attr)) { rec->sts_attr.area = *(XRectangle *) sts_attr->value; attrs |= SCIM_X11_IC_STS_AREA; } else if (_is_attr (XNAreaNeeded, sts_attr)) { rec->sts_attr.area_needed = *(XRectangle *) sts_attr->value; attrs |= SCIM_X11_IC_STS_AREA_NEEDED; } else if (_is_attr (XNColormap, sts_attr)) { rec->sts_attr.cmap = *(Colormap *) sts_attr->value; attrs |= SCIM_X11_IC_STS_COLORMAP; } else if (_is_attr (XNStdColormap, sts_attr)) { rec->sts_attr.cmap = *(Colormap *) sts_attr->value; attrs |= SCIM_X11_IC_STS_COLORMAP; } else if (_is_attr (XNForeground, sts_attr)) { rec->sts_attr.foreground = *(CARD32 *) sts_attr->value; attrs |= SCIM_X11_IC_STS_FOREGROUND; } else if (_is_attr (XNBackground, sts_attr)) { rec->sts_attr.background = *(CARD32 *) sts_attr->value; attrs |= SCIM_X11_IC_STS_BACKGROUND; } else if (_is_attr (XNBackgroundPixmap, sts_attr)) { rec->sts_attr.bg_pixmap = *(Pixmap *) sts_attr->value; attrs |= SCIM_X11_IC_STS_BG_PIXMAP; } else if (_is_attr (XNFontSet, sts_attr)) { rec->sts_attr.base_font = (char*) sts_attr->value; attrs |= SCIM_X11_IC_STS_FONTSET; } else if (_is_attr (XNLineSpace, sts_attr)) { rec->sts_attr.line_space = *(CARD32 *) sts_attr->value; attrs |= SCIM_X11_IC_STS_LINE_SPACE; } else if (_is_attr (XNCursor, sts_attr)) { rec->sts_attr.cursor = *(Cursor *) sts_attr->value; attrs |= SCIM_X11_IC_STS_CURSOR; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << sts_attr->name << std::endl; } } String connect_locale = get_connection_locale ((int)call_data->connect_id); if (connect_locale != rec->locale) { rec->locale = connect_locale; rec->encoding = scim_get_locale_encoding (connect_locale); attrs |= SCIM_X11_IC_ENCODING; } return attrs; } uint32 X11ICManager::set_ic_values (IMChangeICStruct *call_data) { if (call_data == NULL) return 0; X11IC *rec = find_ic (call_data->icid); if (rec == NULL) return 0; return store_ic_values (rec, call_data); } uint32 X11ICManager::get_ic_values (IMChangeICStruct *call_data) { if (call_data == NULL) return 0; XICAttribute *ic_attr = call_data->ic_attr; XICAttribute *pre_attr = call_data->preedit_attr; XICAttribute *sts_attr = call_data->status_attr; X11IC *rec = find_ic (call_data->icid); if (rec == NULL) return 0; int i; uint32 attrs = 0; for (i = 0; i < (int) call_data->ic_attr_num; ++i, ++ic_attr) { if (_is_attr (XNFilterEvents, ic_attr)) { ic_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) ic_attr->value = KeyPressMask | KeyReleaseMask; ic_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_FILTER_EVENTS; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << ic_attr->name << std::endl; } } // preedit attributes for (i = 0; i < (int) call_data->preedit_attr_num; ++i, ++pre_attr) { if (_is_attr (XNArea, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (XRectangle)); *(XRectangle *) pre_attr->value = rec->pre_attr.area; pre_attr->value_length = sizeof (XRectangle); attrs |= SCIM_X11_IC_PRE_AREA; } else if (_is_attr (XNAreaNeeded, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (XRectangle)); *(XRectangle *) pre_attr->value = rec->pre_attr.area_needed; pre_attr->value_length = sizeof (XRectangle); attrs |= SCIM_X11_IC_PRE_AREA_NEEDED; } else if (_is_attr (XNSpotLocation, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (XPoint)); *(XPoint *) pre_attr->value = rec->pre_attr.spot_location; pre_attr->value_length = sizeof (XPoint); attrs |= SCIM_X11_IC_PRE_SPOT_LOCATION; } else if (_is_attr (XNFontSet, pre_attr)) { CARD16 base_len = (CARD16) rec->pre_attr.base_font.size (); int total_len = sizeof (CARD16) + (CARD16) base_len; char *p; pre_attr->value = (void *) malloc (total_len); p = (char *) pre_attr->value; memmove (p, &base_len, sizeof (CARD16)); p += sizeof (CARD16); strncpy (p, rec->pre_attr.base_font.c_str (), base_len); pre_attr->value_length = total_len; attrs |= SCIM_X11_IC_PRE_FONTSET; } else if (_is_attr (XNForeground, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) pre_attr->value = rec->pre_attr.foreground; pre_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_PRE_FOREGROUND; } else if (_is_attr (XNBackground, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) pre_attr->value = rec->pre_attr.background; pre_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_PRE_BACKGROUND; } else if (_is_attr (XNLineSpace, pre_attr)) { pre_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) pre_attr->value = rec->pre_attr.line_space; pre_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_PRE_LINE_SPACE; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << pre_attr->name << std::endl; } } // status attributes for (i = 0; i < (int) call_data->status_attr_num; ++i, ++sts_attr) { if (_is_attr (XNArea, sts_attr)) { sts_attr->value = (void *) malloc (sizeof (XRectangle)); *(XRectangle *) sts_attr->value = rec->sts_attr.area; sts_attr->value_length = sizeof (XRectangle); attrs |= SCIM_X11_IC_STS_AREA; } else if (_is_attr (XNAreaNeeded, sts_attr)) { sts_attr->value = (void *) malloc (sizeof (XRectangle)); *(XRectangle *) sts_attr->value = rec->sts_attr.area_needed; sts_attr->value_length = sizeof (XRectangle); attrs |= SCIM_X11_IC_STS_AREA_NEEDED; } else if (_is_attr (XNFontSet, sts_attr)) { CARD16 base_len = (CARD16) rec->sts_attr.base_font.size (); int total_len = sizeof (CARD16) + (CARD16) base_len; char *p; sts_attr->value = (void *) malloc (total_len); p = (char *) sts_attr->value; memmove (p, &base_len, sizeof (CARD16)); p += sizeof (CARD16); strncpy (p, rec->sts_attr.base_font.c_str (), base_len); sts_attr->value_length = total_len; attrs |= SCIM_X11_IC_STS_FONTSET; } else if (_is_attr (XNForeground, sts_attr)) { sts_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) sts_attr->value = rec->sts_attr.foreground; sts_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_STS_FOREGROUND; } else if (_is_attr (XNBackground, sts_attr)) { sts_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) sts_attr->value = rec->sts_attr.background; sts_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_STS_BACKGROUND; } else if (_is_attr (XNLineSpace, sts_attr)) { sts_attr->value = (void *) malloc (sizeof (CARD32)); *(CARD32 *) sts_attr->value = rec->sts_attr.line_space; sts_attr->value_length = sizeof (CARD32); attrs |= SCIM_X11_IC_STS_LINE_SPACE; } else { std::cerr << __FILE__ << "(" << __LINE__ << "):" <<"Unknown attr: " << sts_attr->name << std::endl; } } return attrs; } /* vi:ts=4:nowrap:expandtab */ scim-master/modules/FrontEnd/scim_x11_ic.h000066400000000000000000000133371415264260100207510ustar00rootroot00000000000000/** @file scim_x11_ic.h * definition of X11IC related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_x11_ic.h,v 1.10 2005/06/26 16:35:12 suzhe Exp $ */ #if !defined (__SCIM_X11_IC_H) #define __SCIM_X11_IC_H #include "scim_stl_map.h" using namespace scim; struct X11PreeditAttributes { XRectangle area; /* area */ XRectangle area_needed; /* area needed */ XPoint spot_location; /* spot location */ Colormap cmap; /* colormap */ CARD32 foreground; /* foreground */ CARD32 background; /* background */ Pixmap bg_pixmap; /* background pixmap */ String base_font; /* base font of fontset */ CARD32 line_space; /* line spacing */ Cursor cursor; /* cursor */ }; struct X11StatusAttributes { XRectangle area; /* area */ XRectangle area_needed; /* area needed */ Colormap cmap; /* colormap */ CARD32 foreground; /* foreground */ CARD32 background; /* background */ Pixmap bg_pixmap; /* background pixmap */ String base_font; /* base font of fontset */ CARD32 line_space; /* line spacing */ Cursor cursor; /* cursor */ }; struct X11IC { int siid; /* server instance id */ CARD16 icid; /* ic id */ CARD16 connect_id; /* connect id */ INT32 input_style; /* input style */ Window client_win; /* client window */ Window focus_win; /* focus window */ String encoding; /* connection encoding */ String locale; /* connection locale */ X11PreeditAttributes pre_attr; /* preedit attributes */ X11StatusAttributes sts_attr; /* status attributes */ bool shared_siid; bool xims_on; bool onspot_preedit_started; int onspot_preedit_length; /* preedit length of onspot mode */ int onspot_caret; /* caret position of onspot mode */ X11IC *next; }; #define SCIM_X11_IC_INPUT_STYLE (1<<0) #define SCIM_X11_IC_CLIENT_WINDOW (1<<1) #define SCIM_X11_IC_FOCUS_WINDOW (1<<2) #define SCIM_X11_IC_ENCODING (1<<3) #define SCIM_X11_IC_PRE_AREA (1<<4) #define SCIM_X11_IC_PRE_AREA_NEEDED (1<<5) #define SCIM_X11_IC_PRE_SPOT_LOCATION (1<<6) #define SCIM_X11_IC_PRE_COLORMAP (1<<7) #define SCIM_X11_IC_PRE_FOREGROUND (1<<8) #define SCIM_X11_IC_PRE_BACKGROUND (1<<9) #define SCIM_X11_IC_PRE_BG_PIXMAP (1<<10) #define SCIM_X11_IC_PRE_FONTSET (1<<11) #define SCIM_X11_IC_PRE_LINE_SPACE (1<<12) #define SCIM_X11_IC_PRE_CURSOR (1<<13) #define SCIM_X11_IC_STS_AREA (1<<14) #define SCIM_X11_IC_STS_AREA_NEEDED (1<<15) #define SCIM_X11_IC_STS_COLORMAP (1<<16) #define SCIM_X11_IC_STS_FOREGROUND (1<<17) #define SCIM_X11_IC_STS_BACKGROUND (1<<18) #define SCIM_X11_IC_STS_BG_PIXMAP (1<<19) #define SCIM_X11_IC_STS_FONTSET (1<<20) #define SCIM_X11_IC_STS_LINE_SPACE (1<<21) #define SCIM_X11_IC_STS_CURSOR (1<<22) #define SCIM_X11_IC_FILTER_EVENTS (1<<23) class X11ICManager { #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map > ConnectionLocaleMap; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map > ConnectionLocaleMap; #else typedef std::map ConnectionLocaleMap; #endif X11IC *m_ic_list; X11IC *m_free_list; ConnectionLocaleMap m_connect_locales; public: X11ICManager (); ~X11ICManager (); private: /** * create an empty scimX11IC struct. */ X11IC * new_ic (); /** * store the attributes in call_data to rec. * @return a bitsets indicates which attributes are set. */ uint32 store_ic_values (X11IC *rec, IMChangeICStruct *call_data); /** * delete a X11IC struct according to its icid. */ void delete_ic (CARD16 icid); public: void new_connection (IMOpenStruct *call_data); void delete_connection (IMCloseStruct *call_data); String get_connection_locale (CARD16 connect_id); /** * Create a new X11IC struct and set its attributes. * @return a bitsets indicates which attributes are set. */ uint32 create_ic (IMChangeICStruct *call_data, int siid); X11IC * find_ic (CARD16 icid); X11IC * find_ic_by_siid (int siid); void destroy_ic (IMDestroyICStruct *call_data); /** * load the attributes of ic into call_data * @return a bitsets indicates which attributes are loaded. */ uint32 get_ic_values (IMChangeICStruct *call_data); /** * store the attributes in call_data to rec. * @return a bitsets indicates which attributes are set. */ uint32 set_ic_values (IMChangeICStruct *call_data); }; #endif // _SCIM_X11_IC_H /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/IMEngine/000077500000000000000000000000001415264260100164065ustar00rootroot00000000000000scim-master/modules/IMEngine/Makefile.am000066400000000000000000000046351415264260100204520ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak EXTRA_DIST = imengine.version-script AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/utils \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" if SCIM_BUILD_IMENGINE_RAWCODE CONFIG_IMENGINE_RAWCODE_MODULE = rawcode.la endif if SCIM_BUILD_IMENGINE_SOCKET CONFIG_IMENGINE_SOCKET_MODULE = socket.la endif if SCIM_LD_VERSION_SCRIPT LD_VERSION_SCRIPT_OPTION="-Wl,--version-script=$(srcdir)/imengine.version-script" endif noinst_HEADERS = scim_rawcode_imengine.h \ scim_socket_imengine.h moduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/IMEngine module_LTLIBRARIES = $(CONFIG_IMENGINE_RAWCODE_MODULE) \ $(CONFIG_IMENGINE_SOCKET_MODULE) rawcode_la_SOURCES = scim_rawcode_imengine.cpp rawcode_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ $(LD_VERSION_SCRIPT_OPTION) \ @LIBTOOL_EXPORT_OPTIONS@ \ @LTLIBINTL@ rawcode_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la socket_la_SOURCES = scim_socket_imengine.cpp socket_la_LDFLAGS = -avoid-version \ -rpath $(moduledir) \ -module \ $(LD_VERSION_SCRIPT_OPTION) \ @LIBTOOL_EXPORT_OPTIONS@ \ @LTLIBINTL@ socket_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la scim-master/modules/IMEngine/imengine.version-script000066400000000000000000000005201415264260100231070ustar00rootroot00000000000000SCIM_IMENGINE_1.0 { global: extern "C" { *scim_imengine_module_create_factory*; *scim_imengine_module_init*; *scim_module_exit*; *scim_module_init*; }; local: extern "C++" { scim::*; std::*; __gnu_cxx::*; }; }; scim-master/modules/IMEngine/scim_rawcode_imengine.cpp000066400000000000000000000406561415264260100234370ustar00rootroot00000000000000/** @file scim_rawcode_imengine.cpp * implementation of class RawCodeInstance. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_rawcode_imengine.cpp,v 1.7.2.7 2007/04/10 07:47:18 suzhe Exp $ * */ #define Uses_SCIM_IMENGINE #define Uses_SCIM_ICONV #define Uses_C_STRING #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #include "scim_private.h" #include "scim.h" #include "scim_rawcode_imengine.h" #define scim_module_init rawcode_LTX_scim_module_init #define scim_module_exit rawcode_LTX_scim_module_exit #define scim_imengine_module_init rawcode_LTX_scim_imengine_module_init #define scim_imengine_module_create_factory rawcode_LTX_scim_imengine_module_create_factory #define SCIM_CONFIG_IMENGINE_RAWCODE_LOCALES "/IMEngine/RawCode/Locales" #define SCIM_PROP_RAWCODE_ENCODING "/IMEngine/RawCode/Encoding" #define SCIM_RAWCODE_ICON_FILE (SCIM_ICONDIR "/rawcode.png") using namespace scim; static Pointer __rawcode_factory; static String __rawcode_locales; static std::vector __rawcode_encodings; extern "C" { void scim_module_init (void) { __rawcode_locales = String ( "zh_CN.GB18030,zh_CN.GBK,zh_CN.GB2312,zh_TW,zh_TW.EUC-TW,zh_HK," "ja_JP,ja_JP.sjis,ko_KR,en_US.UTF-8"); } void scim_module_exit (void) { __rawcode_factory.reset (); } unsigned int scim_imengine_module_init (const ConfigPointer &config) { if (!config.null ()) { String locales = config->read (String (SCIM_CONFIG_IMENGINE_RAWCODE_LOCALES), String ("default")); if (locales != "default") __rawcode_locales = locales; } std::vector locale_list; scim_split_string_list (locale_list, __rawcode_locales); for (size_t i=0; i"))); } WideString RawCodeFactory::get_credits () const { return WideString (); } WideString RawCodeFactory::get_help () const { return utf8_mbstowcs (String (_( "Hot Keys:\n\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n\n" " Esc:\n" " reset the input method.\n"))); } String RawCodeFactory::get_uuid () const { return String ("6e029d75-ef65-42a8-848e-332e63d70f9c"); } String RawCodeFactory::get_icon_file () const { return String (SCIM_RAWCODE_ICON_FILE); } String RawCodeFactory::get_language () const { return scim_validate_language ("other"); } IMEngineInstancePointer RawCodeFactory::create_instance (const String& encoding, int id) { return new RawCodeInstance (this, encoding, id); } int RawCodeFactory::get_maxlen (const String &encoding) { if (encoding == "UTF-8") return 4; if (encoding == "Unicode") return 0; std::vector locales; scim_split_string_list (locales, get_locales ()); for (size_t i=0; i= SCIM_KEY_0 && key.code <= SCIM_KEY_9) || (key.code >= SCIM_KEY_A && key.code <= SCIM_KEY_F) || (key.code >= SCIM_KEY_a && key.code <= SCIM_KEY_f)) && (key.mask == 0 || key.is_shift_down ()) && m_preedit_string.length () < m_max_preedit_len) { if (m_preedit_string.length () == 0) show_preedit_string (); ucs4_t ascii = (ucs4_t) tolower (key.get_ascii_code ()); m_preedit_string.push_back (ascii); update_preedit_string (m_preedit_string); update_preedit_caret (m_preedit_string.length ()); process_preedit_string (); return true; } // commit key if (key.code == SCIM_KEY_space && key.mask == 0 && m_preedit_string.length () && m_lookup_table.number_of_candidates ()) { WideString str = m_lookup_table.get_candidate_label (0); // It's already a complete char, commit it. if (str.length () && str [0] == 0x20) { commit_string (m_lookup_table.get_candidate_in_current_page (0)); reset (); return true; } } //page up key. if ((key.code == SCIM_KEY_comma || key.code == SCIM_KEY_minus || key.code == SCIM_KEY_bracketleft || key.code == SCIM_KEY_Page_Up) && key.mask == 0) lookup_table_page_up (); //page down key. if ((key.code == SCIM_KEY_period || key.code == SCIM_KEY_equal || key.code == SCIM_KEY_bracketright || key.code == SCIM_KEY_Page_Down) && key.mask == 0) lookup_table_page_down (); //other keys is not allowed when preediting if (m_preedit_string.length ()) return true; return false; } void RawCodeInstance::select_candidate (unsigned int item) { WideString label = m_lookup_table.get_candidate_label (item); KeyEvent key ((int) label [0], 0); process_key_event (key); } void RawCodeInstance::update_lookup_table_page_size (unsigned int page_size) { if (page_size > 0) m_lookup_table.set_page_size (page_size); } void RawCodeInstance::lookup_table_page_up () { if (m_preedit_string.length () && m_lookup_table.number_of_candidates ()) { m_lookup_table.page_up (); m_lookup_table.set_page_size (m_lookup_table.number_of_candidates ()); m_lookup_table.set_candidate_labels ( std::vector ( m_lookup_table_labels.begin () + m_lookup_table.get_current_page_start (), m_lookup_table_labels.end ())); update_lookup_table (m_lookup_table); } } void RawCodeInstance::lookup_table_page_down () { if (m_preedit_string.length () && m_lookup_table.number_of_candidates ()) { m_lookup_table.page_down (); m_lookup_table.set_page_size (m_lookup_table.number_of_candidates ()); m_lookup_table.set_candidate_labels ( std::vector ( m_lookup_table_labels.begin () + m_lookup_table.get_current_page_start (), m_lookup_table_labels.end ())); update_lookup_table (m_lookup_table); } } void RawCodeInstance::move_preedit_caret (unsigned int /*pos*/) { } void RawCodeInstance::reset () { if (!m_client_iconv.set_encoding (get_encoding ())) m_client_iconv.set_encoding ("UTF-8"); m_preedit_string = WideString (); m_lookup_table.clear (); hide_lookup_table (); hide_preedit_string (); } void RawCodeInstance::set_working_encoding (const String &encoding) { unsigned int maxlen = m_factory->get_maxlen (encoding); if (maxlen && encoding != "Unicode" && m_working_iconv.set_encoding (encoding)){ m_unicode = false; m_max_preedit_len = maxlen * 2; m_working_encoding = encoding; } else { m_unicode = true; m_working_encoding = "Unicode"; m_max_preedit_len = 6; } refresh_encoding_property (); } void RawCodeInstance::focus_in () { initialize_properties (); if (m_preedit_string.length ()) { update_preedit_string (m_preedit_string); update_preedit_caret (m_preedit_string.length ()); show_preedit_string (); if (m_lookup_table.number_of_candidates ()) { update_lookup_table (m_lookup_table); show_lookup_table (); } } } void RawCodeInstance::focus_out () { reset (); } void RawCodeInstance::trigger_property (const String &property) { if (property.substr (0, strlen (SCIM_PROP_RAWCODE_ENCODING)) == SCIM_PROP_RAWCODE_ENCODING) { set_working_encoding (property.substr (strlen (SCIM_PROP_RAWCODE_ENCODING) + 1)); reset (); } } void RawCodeInstance::initialize_properties () { PropertyList proplist; proplist.push_back (Property (SCIM_PROP_RAWCODE_ENCODING, _(m_working_encoding.c_str ()), "", _("The status of the current input method. Click to change it."))); proplist.push_back (Property (String (SCIM_PROP_RAWCODE_ENCODING) + String ("/Unicode"), _("Unicode"))); for (size_t i = 0; i < __rawcode_encodings.size (); ++i) proplist.push_back (Property (String (SCIM_PROP_RAWCODE_ENCODING) + String ("/") + __rawcode_encodings [i], _(__rawcode_encodings [i].c_str ()))); register_properties (proplist); } void RawCodeInstance::refresh_encoding_property () { update_property (Property (SCIM_PROP_RAWCODE_ENCODING, _(m_working_encoding.c_str ()), "", _("The status of the current input method. Click to change it."))); } void RawCodeInstance::process_preedit_string () { if (m_preedit_string.length () == 0) { hide_preedit_string (); hide_lookup_table (); return; } if (m_unicode) { size_t maxlen = 6; if (m_preedit_string.length () > 0) { if (m_preedit_string [0] == '0') maxlen = 4; else if (m_preedit_string [0] == '1') maxlen = 6; else maxlen = 5; } if (m_preedit_string.length () >= 3 && m_preedit_string.length () < maxlen && create_lookup_table () > 0) { update_lookup_table (m_lookup_table); } else if (m_preedit_string.length () == maxlen) { WideString str; ucs4_t code = get_unicode_value (m_preedit_string); m_preedit_string = WideString (); m_lookup_table.clear (); hide_preedit_string (); // If code is valid under current encoding, // then commit it. if (m_client_iconv.test_convert (&code, 1) && code > 0 && code < 0x10FFFF) { str.push_back (code); commit_string (str); } } else if (m_lookup_table.number_of_candidates ()){ m_lookup_table.clear (); } } else { String code = get_multibyte_string (m_preedit_string); WideString wstr; // convert ok, then commit. if (m_working_iconv.convert (wstr, code) && wstr.length () > 0 && wstr [0] >= 128 && m_client_iconv.test_convert (wstr)) { m_preedit_string = WideString (); m_lookup_table.clear (); hide_preedit_string (); commit_string (wstr); } else if (create_lookup_table () > 0) { update_lookup_table (m_lookup_table); } } if (m_lookup_table.number_of_candidates ()) show_lookup_table (); else hide_lookup_table (); } inline static int ascii_to_hex (int ascii) { if (ascii >= '0' && ascii <= '9') return ascii - '0'; else if (ascii >= 'a' && ascii <= 'f') return ascii - 'a' + 10; else if (ascii >= 'A' && ascii <= 'F') return ascii - 'A' + 10; return 0; } inline static int hex_to_ascii (int hex) { hex %= 16; if (hex >= 0 && hex <= 9) return hex + '0'; return hex - 10 + 'a'; } String RawCodeInstance::get_multibyte_string (const WideString & preedit) { String str; char ch = 0; if (preedit.length () == 0) return str; for (size_t i=0; i 0 && ucs_code < 0x10FFFF) { m_lookup_table_labels.push_back (trail); m_lookup_table.append_candidate (ucs_code); } } for (int i=0; i<16; ++i) { trail [0] = (ucs4_t) hex_to_ascii (i); if (m_unicode) { ucs_code = get_unicode_value (m_preedit_string + trail); if (m_client_iconv.test_convert (&ucs_code, 1) && ucs_code > 0 && ucs_code < 0x10FFFF) { m_lookup_table_labels.push_back (trail); m_lookup_table.append_candidate (ucs_code); } } else { mbs_code = get_multibyte_string (m_preedit_string + trail); if (m_working_iconv.convert (wstr, mbs_code) && wstr.length () > 0 && wstr [0] >= 128 && m_client_iconv.test_convert (wstr)) { m_lookup_table_labels.push_back (trail); m_lookup_table.append_candidate (wstr); } } } m_lookup_table.set_page_size (m_lookup_table_labels.size ()); m_lookup_table.set_candidate_labels (m_lookup_table_labels); return m_lookup_table_labels.size (); } /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/IMEngine/scim_rawcode_imengine.h000066400000000000000000000062451415264260100231000ustar00rootroot00000000000000/** @file scim_rawcode_imengine.h * definition of RawCode related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_rawcode_imengine.h,v 1.5.4.3 2006/01/12 07:00:36 suzhe Exp $ */ #if !defined (__SCIM_RAWCODE_IMENGINE_H) #define __SCIM_RAWCODE_IMENGINE_H using namespace scim; class RawCodeFactory : public IMEngineFactoryBase { friend class RawCodeInstance; public: RawCodeFactory (); virtual ~RawCodeFactory (); virtual WideString get_name () const; virtual WideString get_authors () const; virtual WideString get_credits () const; virtual WideString get_help () const; virtual String get_uuid () const; virtual String get_icon_file () const; virtual String get_language () const; virtual IMEngineInstancePointer create_instance (const String& encoding, int id = -1); private: int get_maxlen (const String &encoding); }; class RawCodeInstance : public IMEngineInstanceBase { Pointer m_factory; CommonLookupTable m_lookup_table; std::vector m_lookup_table_labels; WideString m_preedit_string; String m_working_encoding; bool m_unicode; size_t m_max_preedit_len; IConvert m_working_iconv; IConvert m_client_iconv; public: RawCodeInstance (RawCodeFactory *factory, const String& encoding, int id = -1); virtual ~RawCodeInstance (); virtual bool process_key_event (const KeyEvent& key); virtual void move_preedit_caret (unsigned int pos); virtual void select_candidate (unsigned int item); virtual void update_lookup_table_page_size (unsigned int page_size); virtual void lookup_table_page_up (); virtual void lookup_table_page_down (); virtual void reset (); virtual void focus_in (); virtual void focus_out (); virtual void trigger_property (const String &property); private: int create_lookup_table (); void process_preedit_string (); void initialize_properties (); void refresh_encoding_property (); void set_working_encoding (const String &encoding); String get_multibyte_string (const WideString& preedit); ucs4_t get_unicode_value (const WideString& preedit); }; #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/IMEngine/scim_socket_imengine.cpp000066400000000000000000000745001415264260100232760ustar00rootroot00000000000000/** @file scim_socket_imengine.cpp * implementation of class SocketFactory and SocketInstance. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_imengine.cpp,v 1.21 2005/07/06 03:57:04 suzhe Exp $ * */ #define Uses_SCIM_IMENGINE #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_SOCKET #define Uses_SCIM_TRANSACTION #define Uses_C_STDLIB #include #include "scim_private.h" #include "scim.h" #include "scim_socket_imengine.h" #include "scim_stl_map.h" #define scim_module_init socket_LTX_scim_module_init #define scim_module_exit socket_LTX_scim_module_exit #define scim_imengine_module_init socket_LTX_scim_imengine_module_init #define scim_imengine_module_create_factory socket_LTX_scim_imengine_module_create_factory #define SCIM_CONFIG_IMENGINE_SOCKET_TIMEOUT "/IMEngine/Socket/Timeout" #define SCIM_CONFIG_IMENGINE_SOCKET_ADDRESS "/IMEngine/Socket/Address" #define SCIM_SOCKET_FRONTEND_DEF_ADDRESS "local:/tmp/scim-socket-frontend" #ifndef SCIM_TEMPDIR #define SCIM_TEMPDIR "/tmp" #endif using namespace scim; class scim::SocketIMEngineGlobal { #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map IconRepository; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map IconRepository; #else typedef std::map IconRepository; #endif SocketClient m_socket_client; SocketAddress m_socket_address; uint32 m_socket_magic_key; int m_socket_timeout; std::vector m_peer_factories; IconRepository m_icon_repository; Signal0 m_signal_reconnect; public: SocketIMEngineGlobal (); ~SocketIMEngineGlobal (); bool create_connection (); unsigned int number_of_factories (); SocketFactory * create_factory (unsigned int index); void init_transaction (Transaction &trans); bool send_transaction (Transaction &trans); bool receive_transaction (Transaction &trans); String load_icon (const String &icon); Connection connect_reconnect_signal (Slot0 *slot_reconnect); private: void init (); void destroy (); void destroy_all_icons (); }; static SocketIMEngineGlobal *global = 0; extern "C" { void scim_module_init (void) { if (!global) global = new SocketIMEngineGlobal; } void scim_module_exit (void) { if (global) { delete global; global = 0; } } unsigned int scim_imengine_module_init (const ConfigPointer &config) { if (global) return global->number_of_factories (); return 0; } IMEngineFactoryPointer scim_imengine_module_create_factory (unsigned int index) { if (!global || index >= global->number_of_factories ()) return 0; SocketFactory *sf = global->create_factory (index); if (!sf || !sf->valid ()) { delete sf; sf = 0; } return sf; } } namespace scim { SocketIMEngineGlobal::SocketIMEngineGlobal () : m_socket_magic_key (0), m_socket_timeout (-1) { init (); } SocketIMEngineGlobal::~SocketIMEngineGlobal () { destroy (); } void SocketIMEngineGlobal::init () { SCIM_DEBUG_IMENGINE(1) << "Init SocketIMEngine Global.\n"; String address = scim_get_default_socket_imengine_address (); m_socket_timeout = scim_get_default_socket_timeout (); m_socket_address.set_address (address); if (!m_socket_address.valid ()) return; // Connect to SocketFrontEnd. if (!create_connection ()) { SCIM_DEBUG_IMENGINE(2) << " Cannot connect to SocketFrontEnd (" << address << ").\n"; return; } SCIM_DEBUG_IMENGINE(2) << " Connected to SocketFrontEnd (" << address << ") MagicKey (" << m_socket_magic_key << ").\n"; // Init the connection, and get IMEngineFactory list. Transaction trans; // Get IMEngineFactory list. init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_LIST); trans.put_data (String ("")); if (!send_transaction (trans)) return; int cmd; if (trans.read_from_socket (m_socket_client, m_socket_timeout) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (m_peer_factories) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { SCIM_DEBUG_IMENGINE(2) << " Found " << m_peer_factories.size () << " IMEngine Factories.\n"; } } bool SocketIMEngineGlobal::create_connection () { // Connect to SocketFrontEnd. if (!m_socket_client.connect (m_socket_address)) return false; if (!scim_socket_open_connection (m_socket_magic_key, String ("SocketIMEngine"), String ("SocketFrontEnd"), m_socket_client, m_socket_timeout)) { m_socket_client.close (); return false; } m_signal_reconnect.emit (); return true; } void SocketIMEngineGlobal::destroy () { SCIM_DEBUG_IMENGINE(1) << "Destroy SocketIMEngine Global.\n"; m_socket_client.close (); destroy_all_icons (); } unsigned int SocketIMEngineGlobal::number_of_factories () { return m_peer_factories.size (); } SocketFactory * SocketIMEngineGlobal::create_factory (unsigned int index) { if (index < m_peer_factories.size ()) { return new SocketFactory (m_peer_factories [index]); } return 0; } void SocketIMEngineGlobal::init_transaction (Transaction &trans) { trans.clear (); trans.put_command (SCIM_TRANS_CMD_REQUEST); trans.put_data (m_socket_magic_key); } bool SocketIMEngineGlobal::send_transaction (Transaction &trans) { return trans.write_to_socket (m_socket_client); } bool SocketIMEngineGlobal::receive_transaction (Transaction &trans) { return trans.read_from_socket (m_socket_client, m_socket_timeout); } String SocketIMEngineGlobal::load_icon (const String &icon) { String local_icon = icon; IconRepository::const_iterator it = m_icon_repository.find (icon); // The icon has been loaded, just return the local copy filename. if (it != m_icon_repository.end ()) local_icon = it->second; // This icon is already available in local system, just return. if (scim_load_file (local_icon, 0) != 0) return local_icon; Transaction trans; int cmd; char *bufptr = 0; size_t filesize = 0; local_icon = String (""); init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_LOAD_FILE); trans.put_data (icon); // Load icon file from remote SocketFrontEnd. if (send_transaction (trans) && receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (&bufptr, filesize) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { String tempfile; String::size_type pos = icon.rfind (SCIM_PATH_DELIM); if (pos != String::npos) { tempfile = icon.substr (pos + 1, String::npos); } else { tempfile = icon; } char tmp [80]; snprintf (tmp, 80, "%lu", (unsigned long) m_socket_magic_key); tempfile = String (SCIM_TEMPDIR) + String (SCIM_PATH_DELIM_STRING) + String ("scim-") + String (tmp) + String ("-") + tempfile; SCIM_DEBUG_IMENGINE(1) << "Creating temporary icon file: " << tempfile << "\n"; std::ofstream os (tempfile.c_str ()); if (os) { os.write (bufptr, filesize); os.close (); // Check if the file is written correctly. if (scim_load_file (tempfile, 0) == filesize) { m_icon_repository [icon] = tempfile; local_icon = tempfile; } else { unlink (tempfile.c_str ()); } } } delete [] bufptr; return local_icon; } Connection SocketIMEngineGlobal::connect_reconnect_signal (Slot0 *slot_reconnect) { return m_signal_reconnect.connect (slot_reconnect); } void SocketIMEngineGlobal::destroy_all_icons () { IconRepository::const_iterator it = m_icon_repository.begin (); for (; it != m_icon_repository.end (); ++ it) { unlink (it->second.c_str ()); } m_icon_repository.clear (); } int SocketFactory::create_peer_instance (const String &encoding) { int cmd; int si_peer_id = -1; uint32 val; Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Create IMEngine Instance " << m_peer_uuid << ".\n"; global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_NEW_INSTANCE); trans.put_data (m_peer_uuid); trans.put_data (encoding); if (global->send_transaction (trans)) { if (global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (val) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { si_peer_id = (int) val; } } SCIM_DEBUG_IMENGINE(2) << " IMEngineInstance created (" << si_peer_id << ")\n"; return si_peer_id; } SocketFactory::SocketFactory (const String &peer_uuid) : m_name (utf8_mbstowcs (_("Unknown"))), m_language (String ("")), m_peer_uuid (peer_uuid), m_icon_file (String ("")), m_ok (false) { String locales; String iconfile; int cmd; bool m_name_ok = false; bool m_locale_ok = false; Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Create SocketFactory " << peer_uuid << ".\n"; // Get factory name. global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_NAME); trans.put_data (m_peer_uuid); if (global->send_transaction (trans)) { if (global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (m_name) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { SCIM_DEBUG_IMENGINE(2) << " Name (" << utf8_wcstombs (m_name) << ")\n"; m_name_ok = true; } else { m_name = utf8_mbstowcs (_("Unknown")); } } // Get factory locales global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_LOCALES); trans.put_data (m_peer_uuid); if (global->send_transaction (trans)) { if (global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (locales) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { SCIM_DEBUG_IMENGINE(2) << " Locales (" << locales << ")\n"; set_locales (locales); m_locale_ok = true; } } // Get factory language global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_LANGUAGE); trans.put_data (m_peer_uuid); if (global->send_transaction (trans)) { if (global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (m_language) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { SCIM_DEBUG_IMENGINE(2) << " Language (" << m_language << ")\n"; } else { m_language.clear (); } } // Get icon file. global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_ICON_FILE); trans.put_data (m_peer_uuid); if (global->send_transaction (trans)) { if (global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (iconfile) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { m_icon_file = global->load_icon (iconfile); } } m_ok = (m_name_ok && m_locale_ok); } SocketFactory::~SocketFactory () { } WideString SocketFactory::get_name () const { return m_name; } WideString SocketFactory::get_authors () const { int cmd; WideString authors; Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Get Authors " << m_peer_uuid << ".\n"; // Get factory authors. for (int retry = 0; retry < 3; ++retry) { global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_AUTHORS); trans.put_data (m_peer_uuid); if (global->send_transaction (trans) && global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (authors) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) break; authors = utf8_mbstowcs (_("Unknown")); if (!global->create_connection ()) break; } return authors; } WideString SocketFactory::get_credits () const { int cmd; WideString credits; Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Get Credits " << m_peer_uuid << ".\n"; // Get factory credits. for (int retry = 0; retry < 3; ++retry) { global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_CREDITS); trans.put_data (m_peer_uuid); if (global->send_transaction (trans) && global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (credits) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) break; credits = utf8_mbstowcs (_("Unknown")); if (!global->create_connection ()) break; } return credits; } WideString SocketFactory::get_help () const { int cmd; WideString help; Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Get Help " << m_peer_uuid << ".\n"; // Get factory help. for (int retry = 0; retry < 3; ++retry) { global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_GET_FACTORY_HELP); trans.put_data (m_peer_uuid); if (global->send_transaction (trans) && global->receive_transaction (trans) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && trans.get_data (help) && trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) break; help = utf8_mbstowcs (_("Unknown")); if (!global->create_connection ()) break; } return help; } String SocketFactory::get_uuid () const { return m_peer_uuid; } String SocketFactory::get_icon_file () const { return m_icon_file; } String SocketFactory::get_language () const { if (m_language.length ()) return m_language; else return IMEngineFactoryBase::get_language (); } IMEngineInstancePointer SocketFactory::create_instance (const String& encoding, int id) { int si_peer_id = create_peer_instance (encoding); SCIM_DEBUG_IMENGINE(2) << " IMEngineInstance created (" << si_peer_id << ")\n"; return new SocketInstance (this, encoding, id, si_peer_id); } SocketInstance::SocketInstance (SocketFactory *factory, const String& encoding, int id, int peer_id) : IMEngineInstanceBase (factory, encoding, id), m_factory (factory), m_peer_id (peer_id) { m_signal_reconnect_connection = global->connect_reconnect_signal (slot (this, &SocketInstance::reconnect_callback)); } SocketInstance::~SocketInstance () { Transaction trans; SCIM_DEBUG_IMENGINE(1) << "Destroy IMEngine Instance " << m_peer_id << ".\n"; m_signal_reconnect_connection.disconnect (); if (m_peer_id >= 0) { global->init_transaction (trans); trans.put_command (SCIM_TRANS_CMD_DELETE_INSTANCE); trans.put_data (m_peer_id); commit_transaction (trans); } } bool SocketInstance::process_key_event (const KeyEvent& key) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "process_key_event (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_PROCESS_KEY_EVENT); trans.put_data (m_peer_id); trans.put_data (key); return commit_transaction (trans); } void SocketInstance::move_preedit_caret (unsigned int pos) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "move_preedit_caret (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_MOVE_PREEDIT_CARET); trans.put_data (m_peer_id); trans.put_data ((uint32) pos); commit_transaction (trans); } void SocketInstance::select_candidate (unsigned int item) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "select_candidate (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_SELECT_CANDIDATE); trans.put_data (m_peer_id); trans.put_data ((uint32) item); commit_transaction (trans); } void SocketInstance::update_lookup_table_page_size (unsigned int page_size) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "update_lookup_table_page_size (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE); trans.put_data (m_peer_id); trans.put_data ((uint32) page_size); commit_transaction (trans); } void SocketInstance::lookup_table_page_up () { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "lookup_table_page_up (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP); trans.put_data (m_peer_id); commit_transaction (trans); } void SocketInstance::lookup_table_page_down () { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "lookup_table_page_up (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN); trans.put_data (m_peer_id); commit_transaction (trans); } void SocketInstance::reset () { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "reset (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_RESET); trans.put_data (m_peer_id); commit_transaction (trans); } void SocketInstance::focus_in () { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "focus_in (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_FOCUS_IN); trans.put_data (m_peer_id); commit_transaction (trans); } void SocketInstance::focus_out () { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "focus_out (" << m_peer_id << ")\n"; trans.put_command (SCIM_TRANS_CMD_FOCUS_OUT); trans.put_data (m_peer_id); commit_transaction (trans); } void SocketInstance::trigger_property (const String &property) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "trigger_property (" << m_peer_id << ", " << property << ")\n"; trans.put_command (SCIM_TRANS_CMD_TRIGGER_PROPERTY); trans.put_data (m_peer_id); trans.put_data (property); commit_transaction (trans); } void SocketInstance::process_helper_event (const String &helper_uuid, const Transaction &helper_trans) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "process_helper_event (" << m_peer_id << ", " << helper_uuid << ")\n"; trans.put_command (SCIM_TRANS_CMD_PROCESS_HELPER_EVENT); trans.put_data (m_peer_id); trans.put_data (helper_uuid); trans.put_data (helper_trans); commit_transaction (trans); } void SocketInstance::update_client_capabilities (unsigned int cap) { Transaction trans; global->init_transaction (trans); SCIM_DEBUG_IMENGINE(1) << "update_client_capabilities (" << m_peer_id << ", " << cap << ")\n"; trans.put_command (SCIM_TRANS_CMD_UPDATE_CLIENT_CAPABILITIES); trans.put_data (m_peer_id); trans.put_data ((uint32) cap); commit_transaction (trans); } bool SocketInstance::commit_transaction (Transaction &trans) { SCIM_DEBUG_IMENGINE(2) << " commit_transaction:\n"; bool ret = false; if (m_peer_id >= 0) { if (global->send_transaction (trans)) { while (1) { if (!global->receive_transaction (trans)) break; if (!do_transaction (trans, ret)) return ret; } } } if (global->create_connection ()) reset (); return ret; } bool SocketInstance::do_transaction (Transaction &trans, bool &ret) { int cmd = -1; bool cont = false; ret = false; SCIM_DEBUG_IMENGINE(2) << " Do transaction:\n"; if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY) { while (trans.get_command (cmd)) { switch (cmd) { case SCIM_TRANS_CMD_SHOW_PREEDIT_STRING: { SCIM_DEBUG_IMENGINE(3) << " show_preedit_string ()\n"; show_preedit_string (); break; } case SCIM_TRANS_CMD_SHOW_AUX_STRING: { SCIM_DEBUG_IMENGINE(3) << " show_aux_string ()\n"; show_aux_string (); break; } case SCIM_TRANS_CMD_SHOW_LOOKUP_TABLE: { SCIM_DEBUG_IMENGINE(3) << " show_lookup_table ()\n"; show_lookup_table (); break; } case SCIM_TRANS_CMD_HIDE_PREEDIT_STRING: { SCIM_DEBUG_IMENGINE(3) << " hide_preedit_string ()\n"; hide_preedit_string (); break; } case SCIM_TRANS_CMD_HIDE_AUX_STRING: { SCIM_DEBUG_IMENGINE(3) << " hide_aux_string ()\n"; hide_aux_string (); break; } case SCIM_TRANS_CMD_HIDE_LOOKUP_TABLE: { SCIM_DEBUG_IMENGINE(3) << " hide_lookup_table ()\n"; hide_lookup_table (); break; } case SCIM_TRANS_CMD_UPDATE_PREEDIT_CARET: { uint32 caret; if (trans.get_data (caret)) { SCIM_DEBUG_IMENGINE(3) << " update_preedit_caret (" << caret << ")\n"; update_preedit_caret (caret); } break; } case SCIM_TRANS_CMD_UPDATE_PREEDIT_STRING: { WideString str; AttributeList attrs; if (trans.get_data (str) && trans.get_data (attrs)) { SCIM_DEBUG_IMENGINE(3) << " update_preedit_string ()\n"; update_preedit_string (str, attrs); } break; } case SCIM_TRANS_CMD_UPDATE_AUX_STRING: { WideString str; AttributeList attrs; if (trans.get_data (str) && trans.get_data (attrs)) { SCIM_DEBUG_IMENGINE(3) << " update_aux_string ()\n"; update_aux_string (str, attrs); } break; } case SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE: { CommonLookupTable table; if (trans.get_data (table)) { SCIM_DEBUG_IMENGINE(3) << " update_lookup_table ()\n"; update_lookup_table (table); } break; } case SCIM_TRANS_CMD_COMMIT_STRING: { WideString str; if (trans.get_data (str)) { SCIM_DEBUG_IMENGINE(3) << " commit_string ()\n"; commit_string (str); } break; } case SCIM_TRANS_CMD_FORWARD_KEY_EVENT: { KeyEvent key; if (trans.get_data (key)) { SCIM_DEBUG_IMENGINE(3) << " forward_key_event ()\n"; forward_key_event (key); } break; } case SCIM_TRANS_CMD_REGISTER_PROPERTIES: { PropertyList proplist; if (trans.get_data (proplist)) { SCIM_DEBUG_IMENGINE(3) << " register_properties ()\n"; // Load icon files of these properties from remote SocketFrontEnd. for (PropertyList::iterator it = proplist.begin (); it != proplist.end (); ++it) it->set_icon (global->load_icon (it->get_icon ())); register_properties (proplist); } break; } case SCIM_TRANS_CMD_UPDATE_PROPERTY: { Property prop; if (trans.get_data (prop)) { SCIM_DEBUG_IMENGINE(3) << " update_property ()\n"; // Load the icon file of this property from remote SocketFrontEnd. prop.set_icon (global->load_icon (prop.get_icon ())); update_property (prop); } break; } case SCIM_TRANS_CMD_BEEP: { SCIM_DEBUG_IMENGINE(3) << " beep ()\n"; beep (); break; } case SCIM_TRANS_CMD_START_HELPER: { String helper_uuid; if (trans.get_data (helper_uuid)) { SCIM_DEBUG_IMENGINE(3) << " start_helper (" << helper_uuid << ")\n"; start_helper (helper_uuid); } break; } case SCIM_TRANS_CMD_STOP_HELPER: { String helper_uuid; if (trans.get_data (helper_uuid)) { SCIM_DEBUG_IMENGINE(3) << " stop_helper (" << helper_uuid << ")\n"; stop_helper (helper_uuid); } break; } case SCIM_TRANS_CMD_SEND_HELPER_EVENT: { String helper_uuid; Transaction temp_trans; if (trans.get_data (helper_uuid) && trans.get_data (temp_trans)) { SCIM_DEBUG_IMENGINE(3) << " send_helper_event (" << helper_uuid << ")\n"; send_helper_event (helper_uuid, temp_trans); } break; } case SCIM_TRANS_CMD_OK: { SCIM_DEBUG_IMENGINE(3) << " ret = true\n"; ret = true; break; } case SCIM_TRANS_CMD_GET_SURROUNDING_TEXT: { WideString text; int cursor; uint32 maxlen_before; uint32 maxlen_after; Transaction temp_trans; if (trans.get_data (maxlen_before) && trans.get_data (maxlen_after)) { global->init_transaction (temp_trans); if (get_surrounding_text (text, cursor, (int) maxlen_before, (int) maxlen_after)) { temp_trans.put_command (SCIM_TRANS_CMD_GET_SURROUNDING_TEXT); temp_trans.put_data (text); temp_trans.put_data ((uint32) cursor); } else { temp_trans.put_command (SCIM_TRANS_CMD_FAIL); } global->send_transaction (temp_trans); } cont = true; break; } case SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT: { uint32 offset; uint32 len; Transaction temp_trans; if (trans.get_data (offset) && trans.get_data (len)) { global->init_transaction (temp_trans); if (delete_surrounding_text ((int) offset, (int) len)) { temp_trans.put_command (SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT); temp_trans.put_command (SCIM_TRANS_CMD_OK); } else { temp_trans.put_command (SCIM_TRANS_CMD_FAIL); } global->send_transaction (temp_trans); } cont = true; break; } default: SCIM_DEBUG_IMENGINE(3) << " Strange cmd: " << cmd << "\n";; } } } else { SCIM_DEBUG_IMENGINE(3) << " Failed to get cmd: " << cmd << "\n"; } SCIM_DEBUG_IMENGINE(2) << " End of Do transaction\n"; return cont; } void SocketInstance::reconnect_callback (void) { m_peer_id = m_factory->create_peer_instance (get_encoding ()); } } // namespace scim /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/IMEngine/scim_socket_imengine.h000066400000000000000000000061051415264260100227370ustar00rootroot00000000000000/** @file scim_socket_imengine.h * definition of SocketFactory related classes. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_socket_imengine.h,v 1.13 2005/07/06 03:57:05 suzhe Exp $ */ #if !defined (__SCIM_SOCKET_IMENGINE_H) #define __SCIM_SOCKET_IMENGINE_H namespace scim { class SocketFactory; class SocketFactory : public IMEngineFactoryBase { WideString m_name; String m_language; String m_peer_uuid; String m_icon_file; bool m_ok; friend class SocketInstance; public: SocketFactory (const String &peer_uuid); bool valid () const { return m_ok; } virtual ~SocketFactory (); virtual WideString get_name () const; virtual WideString get_authors () const; virtual WideString get_credits () const; virtual WideString get_help () const; virtual String get_uuid () const; virtual String get_icon_file () const; virtual String get_language () const; virtual IMEngineInstancePointer create_instance (const String& encoding, int id = -1); private: int create_peer_instance (const String &encoding); }; class SocketInstance : public IMEngineInstanceBase { SocketFactory *m_factory; int m_peer_id; Connection m_signal_reconnect_connection; public: SocketInstance (SocketFactory *factory, const String& encoding, int id, int peer_id); virtual ~SocketInstance (); virtual bool process_key_event (const KeyEvent& key); virtual void move_preedit_caret (unsigned int pos); virtual void select_candidate (unsigned int item); virtual void update_lookup_table_page_size (unsigned int page_size); virtual void lookup_table_page_up (); virtual void lookup_table_page_down (); virtual void reset (); virtual void focus_in (); virtual void focus_out (); virtual void trigger_property (const String &property); virtual void process_helper_event (const String &helper_uuid, const Transaction &trans); virtual void update_client_capabilities (unsigned int cap); private: bool commit_transaction (Transaction &trans); bool do_transaction (Transaction &trans, bool &ret); void reconnect_callback (void); }; // Forward declaration class SocketIMEngineGlobal; } // namespace scim #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/modules/Makefile.am000066400000000000000000000016021415264260100170060ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak SUBDIRS = FrontEnd IMEngine Config SetupUI Filter scim-master/modules/SetupUI/000077500000000000000000000000001415264260100163115ustar00rootroot00000000000000scim-master/modules/SetupUI/Makefile.am000066400000000000000000000061551415264260100203540ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in CLEANFILES = *.bak AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/data \ -I$(top_srcdir)/utils \ -I$(top_srcdir)/modules/IMEngine \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\" if SCIM_BUILD_SCIM_SETUP if SCIM_BUILD_PANEL_GTK CONFIG_PANEL_GTK_SETUP_MODULE= panel-gtk-setup.la endif CONFIG_FRONTEND_SETUP_MODULE= aaa-frontend-setup.la CONFIG_IMENGINE_SETUP_MODULE= aaa-imengine-setup.la endif # Rules for setup module setupmoduledir = $(libdir)/scim@SCIM_EPOCH@/$(SCIM_BINARY_VERSION)/SetupUI setupmodule_LTLIBRARIES = $(CONFIG_FRONTEND_SETUP_MODULE) \ $(CONFIG_IMENGINE_SETUP_MODULE) \ $(CONFIG_PANEL_GTK_SETUP_MODULE) aaa_frontend_setup_la_SOURCES = scim_frontend_setup.cpp aaa_frontend_setup_la_CFLAGS = @GTK_CFLAGS@ aaa_frontend_setup_la_CXXFLAGS= @GTK_CFLAGS@ aaa_frontend_setup_la_LDFLAGS = -avoid-version \ -rpath $(setupmoduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @GTK_LIBS@ \ @LTLIBINTL@ aaa_frontend_setup_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la \ $(top_builddir)/utils/libscim-gtkutils@SCIM_EPOCH@.la aaa_imengine_setup_la_SOURCES = scim_imengine_setup.cpp aaa_imengine_setup_la_CFLAGS = @GTK_CFLAGS@ aaa_imengine_setup_la_CXXFLAGS= @GTK_CFLAGS@ aaa_imengine_setup_la_LDFLAGS = -avoid-version \ -rpath $(setupmoduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @GTK_LIBS@ \ @LTLIBINTL@ aaa_imengine_setup_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la \ $(top_builddir)/utils/libscim-gtkutils@SCIM_EPOCH@.la panel_gtk_setup_la_SOURCES = scim_panel_gtk_setup.cpp panel_gtk_setup_la_CFLAGS = @GTK_CFLAGS@ panel_gtk_setup_la_CXXFLAGS = @GTK_CFLAGS@ panel_gtk_setup_la_LDFLAGS = -avoid-version \ -rpath $(setupmoduledir) \ -module \ @LIBTOOL_EXPORT_OPTIONS@ \ @GTK_LIBS@ \ @LTLIBINTL@ panel_gtk_setup_la_LIBADD = $(top_builddir)/src/libscim@SCIM_EPOCH@.la scim-master/modules/SetupUI/scim_frontend_setup.cpp000066400000000000000000000524571415264260100231040ustar00rootroot00000000000000/** @file scim_aaa_frontend_setup.cpp * implementation of Setup Module for FrontEnd Hotkeys configuration. */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_frontend_setup.cpp,v 1.6 2005/06/29 08:19:17 suzhe Exp $ * */ #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_EVENT #include #include #include "scim_private.h" #include "scim.h" #include "scimkeyselection.h" using namespace scim; #define scim_module_init aaa_frontend_setup_LTX_scim_module_init #define scim_module_exit aaa_frontend_setup_LTX_scim_module_exit #define scim_setup_module_create_ui aaa_frontend_setup_LTX_scim_setup_module_create_ui #define scim_setup_module_get_category aaa_frontend_setup_LTX_scim_setup_module_get_category #define scim_setup_module_get_name aaa_frontend_setup_LTX_scim_setup_module_get_name #define scim_setup_module_get_description aaa_frontend_setup_LTX_scim_setup_module_get_description #define scim_setup_module_load_config aaa_frontend_setup_LTX_scim_setup_module_load_config #define scim_setup_module_save_config aaa_frontend_setup_LTX_scim_setup_module_save_config #define scim_setup_module_query_changed aaa_frontend_setup_LTX_scim_setup_module_query_changed static GtkWidget * create_setup_window (); static void load_config (const ConfigPointer &config); static void save_config (const ConfigPointer &config); static bool query_changed (); // Module Interface. extern "C" { void scim_module_init (void) { } void scim_module_exit (void) { } GtkWidget * scim_setup_module_create_ui (void) { return create_setup_window (); } String scim_setup_module_get_category (void) { return String ("FrontEnd"); } String scim_setup_module_get_name (void) { return String (_("Global Setup")); } String scim_setup_module_get_description (void) { return String (_("Setup the global options used by All FrontEnd modules, including X11 FrontEnd, GTK IMModule, QT IMModule etc.")); } void scim_setup_module_load_config (const ConfigPointer &config) { load_config (config); } void scim_setup_module_save_config (const ConfigPointer &config) { save_config (config); } bool scim_setup_module_query_changed () { return query_changed (); } } // extern "C" // Internal data structure struct KeyboardConfigData { const char *key; const char *label; const char *title; const char *tooltip; GtkWidget *entry; GtkWidget *button; String data; }; // Internal data declaration. static bool __config_on_the_spot = true; #if GTK_CHECK_VERSION(2, 12, 0) #else static GtkTooltips * __widget_tooltips = 0; #endif static bool __config_shared_input_method = false; static KeyboardLayout __config_keyboard_layout = SCIM_KEYBOARD_Unknown; static bool __have_changed = false; static GtkWidget * __widget_on_the_spot = 0; static GtkWidget * __widget_keyboard_layout = NULL; static GtkWidget * __widget_shared_input_method = NULL; static KeyboardConfigData __config_keyboards [] = { { // key SCIM_CONFIG_HOTKEYS_FRONTEND_TRIGGER, // label N_("_Trigger:"), // title N_("Select the trigger keys"), // tooltip N_("The key events to turn on/off SCIM input method. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "Control+space" }, { // key SCIM_CONFIG_HOTKEYS_FRONTEND_ON, // label N_("Turn _On:"), // title N_("Select the Turn On keys"), // tooltip N_("The key events to turn on SCIM input method. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "" }, { // key SCIM_CONFIG_HOTKEYS_FRONTEND_OFF, // label N_("Turn O_ff:"), // title N_("Select the Turn Off keys"), // tooltip N_("The key events to turn off SCIM input method. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "" }, { // key SCIM_CONFIG_HOTKEYS_FRONTEND_NEXT_FACTORY, // label N_("_Next input method:"), // title N_("Select the next input method keys"), // tooltip N_("The key events to switch to the next input method. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "Control+Alt+Down," "Control+Shift_R," "Control+Shift_L" }, { // key SCIM_CONFIG_HOTKEYS_FRONTEND_PREVIOUS_FACTORY, // label N_("_Previous input method:"), // title N_("Select the previous input method keys"), // tooltip N_("The key events to switch to the previous input method. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "Control+Alt+Up," "Shift+Control_R," "Shift+Control_L" }, { // key SCIM_CONFIG_HOTKEYS_FRONTEND_SHOW_FACTORY_MENU, // label N_("Show input method _menu:"), // title N_("Select the show input method menu keys"), // tooltip N_("The key events to show the input method menu. " "Click on the button on the right to edit it."), // entry NULL, // button NULL, // data "Control+Alt+l," "Control+Alt+m," "Control+Alt+s," "Control+Alt+Right," }, { // key NULL, // label NULL, // title NULL, // tooltip NULL, // entry NULL, // button NULL, // data "" }, }; // Declaration of internal functions. static void on_default_editable_changed (GtkEditable *editable, gpointer user_data); static void on_default_key_selection_clicked (GtkButton *button, gpointer user_data); static void on_keyboard_layout_changed (GtkComboBox *combobox, gpointer user_data); static void on_default_toggle_button_toggled (GtkToggleButton *togglebutton, gpointer user_data); static void setup_widget_value (); // Function implementations. static GtkWidget * create_setup_window () { static GtkWidget *window = 0; if (!window) { GtkWidget *table; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *label; int i; #if GTK_CHECK_VERSION(2, 12, 0) #else __widget_tooltips = gtk_tooltips_new (); #endif // Create the toplevel box. #if GTK_CHECK_VERSION(3, 2, 0) window = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else window = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (window); frame = gtk_frame_new (_("Options")); gtk_widget_show (frame); gtk_container_set_border_width (GTK_CONTAINER (frame), 4); gtk_box_pack_start (GTK_BOX (window), frame, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(3, 2, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); #else vbox = gtk_vbox_new (FALSE, 4); #endif gtk_widget_show (vbox); gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); // Keyboard Layout. #if GTK_CHECK_VERSION(3, 2, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); #else hbox = gtk_hbox_new (FALSE, 4); #endif gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("_Keyboard Layout:")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(2,24,0) __widget_keyboard_layout = gtk_combo_box_text_new (); #else __widget_keyboard_layout = gtk_combo_box_new_text (); #endif gtk_widget_show (__widget_keyboard_layout); gtk_label_set_mnemonic_widget (GTK_LABEL (label), __widget_keyboard_layout); for (size_t i = 0; i < SCIM_KEYBOARD_NUM_LAYOUTS; ++i) { #if GTK_CHECK_VERSION(2,24,0) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (__widget_keyboard_layout), #else gtk_combo_box_append_text (GTK_COMBO_BOX (__widget_keyboard_layout), #endif scim_keyboard_layout_get_display_name (static_cast (i)).c_str ()); } g_signal_connect (G_OBJECT (__widget_keyboard_layout), "changed", G_CALLBACK (on_keyboard_layout_changed), NULL); gtk_box_pack_start (GTK_BOX (hbox), __widget_keyboard_layout, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__widget_keyboard_layout, _("You should choose your currently used keyboard layout here " "so that input methods, who care about keyboard layout, could work correctly.")); #else gtk_tooltips_set_tip (__widget_tooltips, __widget_keyboard_layout, _("You should choose your currently used keyboard layout here " "so that input methods, who care about keyboard layout, could work correctly."), NULL); #endif // On The Spot. __widget_on_the_spot = gtk_check_button_new_with_mnemonic (_("_Embed Preedit String into client window")); gtk_widget_show (__widget_on_the_spot); gtk_box_pack_start (GTK_BOX (vbox), __widget_on_the_spot, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__widget_on_the_spot, _("If this option is checked, " "the preedit string will be displayed directly in the client input window, " "rather than in a independent float window.")); #else gtk_tooltips_set_tip (__widget_tooltips, __widget_on_the_spot, _("If this option is checked, " "the preedit string will be displayed directly in the client input window, " "rather than in a independent float window."), NULL); #endif g_signal_connect ((gpointer) __widget_on_the_spot, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_on_the_spot); // Shared input method. __widget_shared_input_method = gtk_check_button_new_with_mnemonic (_("_Share the same input method among all applications")); gtk_widget_show (__widget_shared_input_method); gtk_box_pack_start (GTK_BOX (vbox), __widget_shared_input_method, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__widget_shared_input_method, _("If this option is checked, " "then only one input method could be used by all applications at the same time." "Otherwise different input method could be used by each application.")); #else gtk_tooltips_set_tip (__widget_tooltips, __widget_shared_input_method, _("If this option is checked, " "then only one input method could be used by all applications at the same time." "Otherwise different input method could be used by each application."), NULL); #endif g_signal_connect ((gpointer) __widget_shared_input_method, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_shared_input_method); frame = gtk_frame_new (_("Hotkeys")); gtk_widget_show (frame); gtk_container_set_border_width (GTK_CONTAINER (frame), 4); gtk_box_pack_start (GTK_BOX (window), frame, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(3, 4, 0) table = gtk_grid_new(); #else table = gtk_table_new (3, 3, FALSE); #endif gtk_widget_show (table); gtk_container_add (GTK_CONTAINER (frame), table); #if GTK_CHECK_VERSION(3, 4, 0) gtk_grid_set_row_spacing (GTK_GRID (table), 0); gtk_grid_set_column_spacing (GTK_GRID (table), 8); #else gtk_table_set_row_spacings (GTK_TABLE (table), 0); gtk_table_set_col_spacings (GTK_TABLE (table), 8); #endif for (i = 0; __config_keyboards [i].key; ++ i) { label = gtk_label_new (NULL); gtk_label_set_text_with_mnemonic (GTK_LABEL (label), _(__config_keyboards[i].label)); gtk_widget_show (label); #if GTK_CHECK_VERSION(3, 14, 0) gtk_widget_set_halign (label, GTK_ALIGN_END); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); gtk_widget_set_margin_start (label, 4); gtk_widget_set_margin_end (label, 4); #else gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_misc_set_padding (GTK_MISC (label), 4, 0); #endif #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (label, GTK_ALIGN_FILL); gtk_widget_set_valign (label, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), label, 0, i, 1, 1); #else gtk_table_attach (GTK_TABLE (table), label, 0, 1, i, i+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2); #endif __config_keyboards [i].entry = gtk_entry_new (); gtk_widget_show (__config_keyboards [i].entry); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (__config_keyboards [i].entry, GTK_ALIGN_FILL); gtk_widget_set_valign (__config_keyboards [i].entry, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __config_keyboards [i].entry, 1, i, 1, 1); #else gtk_table_attach (GTK_TABLE (table), __config_keyboards [i].entry, 1, 2, i, i+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (GTK_FILL), 4, 2); #endif gtk_editable_set_editable (GTK_EDITABLE (__config_keyboards[i].entry), FALSE); __config_keyboards[i].button = gtk_button_new_with_label ("..."); gtk_widget_show (__config_keyboards[i].button); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (__config_keyboards [i].button, GTK_ALIGN_FILL); gtk_widget_set_valign (__config_keyboards [i].button, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __config_keyboards[i].button, 2, i, 1, 1); #else gtk_table_attach (GTK_TABLE (table), __config_keyboards[i].button, 2, 3, i, i+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 4, 2); #endif gtk_label_set_mnemonic_widget (GTK_LABEL (label), __config_keyboards[i].button); } for (i = 0; __config_keyboards [i].key; ++ i) { g_signal_connect ((gpointer) __config_keyboards [i].button, "clicked", G_CALLBACK (on_default_key_selection_clicked), &(__config_keyboards [i])); g_signal_connect ((gpointer) __config_keyboards [i].entry, "changed", G_CALLBACK (on_default_editable_changed), &(__config_keyboards [i].data)); } for (i = 0; __config_keyboards [i].key; ++ i) { #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__config_keyboards [i].entry, _(__config_keyboards [i].tooltip)); #else gtk_tooltips_set_tip (__widget_tooltips, __config_keyboards [i].entry, _(__config_keyboards [i].tooltip), NULL); #endif } setup_widget_value (); } return window; } static void setup_widget_value () { for (int i = 0; __config_keyboards [i].key; ++ i) { if (__config_keyboards [i].entry) { gtk_entry_set_text ( GTK_ENTRY (__config_keyboards [i].entry), __config_keyboards [i].data.c_str ()); } } if (__widget_on_the_spot) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_on_the_spot), __config_on_the_spot); } if (__widget_shared_input_method) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_shared_input_method), __config_shared_input_method); } gtk_combo_box_set_active (GTK_COMBO_BOX (__widget_keyboard_layout), (gint) __config_keyboard_layout); } static void load_config (const ConfigPointer &config) { if (!config.null ()) { for (int i = 0; __config_keyboards [i].key; ++ i) { __config_keyboards [i].data = config->read (String (__config_keyboards [i].key), __config_keyboards [i].data); } __config_on_the_spot = config->read (String (SCIM_CONFIG_FRONTEND_ON_THE_SPOT), __config_on_the_spot); __config_shared_input_method = config->read (String (SCIM_CONFIG_FRONTEND_SHARED_INPUT_METHOD), __config_shared_input_method); __config_keyboard_layout = scim_get_default_keyboard_layout (); setup_widget_value (); __have_changed = false; } } static void save_config (const ConfigPointer &config) { if (!config.null ()) { for (int i = 0; __config_keyboards [i].key; ++ i) { config->write (String (__config_keyboards [i].key), __config_keyboards [i].data); } gint act = gtk_combo_box_get_active (GTK_COMBO_BOX (__widget_keyboard_layout)); if (act >= 0 && act < SCIM_KEYBOARD_NUM_LAYOUTS) __config_keyboard_layout = static_cast (act); else __config_keyboard_layout = SCIM_KEYBOARD_Unknown; if (__config_keyboard_layout != scim_get_default_keyboard_layout ()) scim_set_default_keyboard_layout (__config_keyboard_layout); config->write (String (SCIM_CONFIG_FRONTEND_ON_THE_SPOT), __config_on_the_spot); config->write (String (SCIM_CONFIG_FRONTEND_SHARED_INPUT_METHOD), __config_shared_input_method); __have_changed = false; } } static bool query_changed () { return __have_changed; } static void on_default_editable_changed (GtkEditable *editable, gpointer user_data) { String *str = static_cast (user_data); if (str) { *str = String (gtk_entry_get_text (GTK_ENTRY (editable))); __have_changed = true; } } static void on_default_key_selection_clicked (GtkButton *button, gpointer user_data) { KeyboardConfigData *data = static_cast (user_data); if (data) { GtkWidget *dialog = scim_key_selection_dialog_new (_(data->title)); gint result; scim_key_selection_dialog_set_keys ( SCIM_KEY_SELECTION_DIALOG (dialog), data->data.c_str ()); result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { const gchar *keys = scim_key_selection_dialog_get_keys ( SCIM_KEY_SELECTION_DIALOG (dialog)); if (!keys) keys = ""; if (String (keys) != data->data) gtk_entry_set_text (GTK_ENTRY (data->entry), keys); } gtk_widget_destroy (dialog); } } static void on_default_toggle_button_toggled (GtkToggleButton *togglebutton, gpointer user_data) { bool *toggle = static_cast (user_data); if (toggle) { *toggle = gtk_toggle_button_get_active (togglebutton); __have_changed = true; } } static void on_keyboard_layout_changed (GtkComboBox *combobox, gpointer user_data) { __have_changed = true; } /* vi:ts=4:nowrap:expandtab */ scim-master/modules/SetupUI/scim_imengine_setup.cpp000066400000000000000000001553641415264260100230610ustar00rootroot00000000000000/** @file scim_frontend_hotkeys_setup.cpp * implementation of Setup Module for FrontEnd Hotkeys configuration. */ /* * Smart Common Input Method * * Copyright (c) 2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_imengine_setup.cpp,v 1.9.2.2 2006/09/24 16:00:51 suzhe Exp $ * */ #define Uses_SCIM_COMPOSE_KEY #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_HOTKEY #define Uses_SCIM_FILTER_MANAGER #include #include #include "scim_private.h" #include "scim.h" #include "scimkeyselection.h" #include "scim_stl_map.h" using namespace scim; #define scim_module_init aaa_imengine_setup_LTX_scim_module_init #define scim_module_exit aaa_imengine_setup_LTX_scim_module_exit #define scim_setup_module_create_ui aaa_imengine_setup_LTX_scim_setup_module_create_ui #define scim_setup_module_get_category aaa_imengine_setup_LTX_scim_setup_module_get_category #define scim_setup_module_get_name aaa_imengine_setup_LTX_scim_setup_module_get_name #define scim_setup_module_get_description aaa_imengine_setup_LTX_scim_setup_module_get_description #define scim_setup_module_load_config aaa_imengine_setup_LTX_scim_setup_module_load_config #define scim_setup_module_save_config aaa_imengine_setup_LTX_scim_setup_module_save_config #define scim_setup_module_query_changed aaa_imengine_setup_LTX_scim_setup_module_query_changed #define LIST_ICON_SIZE 20 static GtkWidget * create_setup_window (); static void load_config (const ConfigPointer &config); static void save_config (const ConfigPointer &config); static bool query_changed (); // Module Interface. extern "C" { void scim_module_init (void) { } void scim_module_exit (void) { } GtkWidget * scim_setup_module_create_ui (void) { return create_setup_window (); } String scim_setup_module_get_category (void) { return String ("IMEngine"); } String scim_setup_module_get_name (void) { return String (_("Global Setup")); } String scim_setup_module_get_description (void) { return String (_("You can enable/disable input methods and set hotkeys for input methods here.")); } void scim_setup_module_load_config (const ConfigPointer &config) { load_config (config); } void scim_setup_module_save_config (const ConfigPointer &config) { save_config (config); } bool scim_setup_module_query_changed () { return query_changed (); } } // extern "C" // Internal data type. enum { FACTORY_LIST_ENABLE = 0, FACTORY_LIST_INCONSISTENT, FACTORY_LIST_ICON, FACTORY_LIST_NAME, FACTORY_LIST_UUID, FACTORY_LIST_HOTKEYS, FACTORY_LIST_FILTER_NAMES, FACTORY_LIST_FILTER_UUIDS, FACTORY_LIST_NUM_COLUMNS }; enum { FILTER_LIST_ENABLE = 0, FILTER_LIST_UUID, FILTER_LIST_NAME, FILTER_LIST_ICON, FILTER_LIST_LANGS, FILTER_LIST_DESC, FILTER_LIST_NUM_COLUMNS }; #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map , scim_hash_string> MapStringVectorSizeT; typedef __gnu_cxx::hash_map MapStringKeyEventList; typedef __gnu_cxx::hash_map , scim_hash_string> MapStringVectorFilterInfo; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map , scim_hash_string> MapStringVectorSizeT; typedef std::hash_map MapStringKeyEventList; typedef std::hash_map , scim_hash_string> MapStringVectorFilterInfo; #else typedef std::map > MapStringVectorSizeT; typedef std::map MapStringKeyEventList; typedef std::map > MapStringVectorFilterInfo; #endif // Internal data declaration. static bool __have_changed = false; #if GTK_CHECK_VERSION(2, 12, 0) #else static GtkTooltips *__widget_tooltips = 0; #endif static GtkTreeStore *__factory_list_model = 0; static GtkWidget *__hotkey_button = 0; static GtkWidget *__filter_button = 0; static GtkTreeIter __selected_factory; static std::vector __filter_infos; // Internal functions declaration. static GdkPixbuf * scale_pixbuf (GdkPixbuf **pixbuf, int width, int height); static void get_factory_list (const ConfigPointer &config, std::vector &uuids, std::vector &names, std::vector &langs, std::vector &icons); static GtkWidget * create_factory_list_view (); static GtkWidget * create_filter_list_view (); static void set_filter_list_view_content (GtkTreeView *view, const std::vector & infos, const std::vector &enabled_filters); static void get_filter_list_view_result (GtkTreeView *view, std::vector &result, std::vector &names); static void load_factory_list (const ConfigPointer &config); static void load_hotkey_settings (const ConfigPointer &config); static void save_hotkey_settings (const ConfigPointer &config); static void load_filter_settings (const ConfigPointer &config); static void save_filter_settings (const ConfigPointer &config); static void factory_list_update_inconsistent(void); static void on_hotkey_button_clicked (GtkButton *button, gpointer user_data); static void on_expand_button_clicked (GtkButton *button, gpointer user_data); static void on_collapse_button_clicked (GtkButton *button, gpointer user_data); static void on_toggle_all_button_clicked (GtkButton *button, gpointer user_data); static void on_filter_button_clicked (GtkButton *button, gpointer user_data); static void on_filter_move_up_button_clicked (GtkButton *button, gpointer user_data); static void on_filter_move_down_button_clicked (GtkButton *button, gpointer user_data); static void on_factory_enable_box_clicked (GtkCellRendererToggle *cell, gchar *arg1, gpointer data); static void on_filter_enable_box_clicked (GtkCellRendererToggle *cell, gchar *arg1, gpointer data); static gboolean factory_list_set_disabled_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_get_disabled_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_set_hotkeys_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_get_hotkeys_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_set_filters_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_get_filters_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean factory_list_toggle_all_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static void factory_list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data); // Function implementations. static GtkWidget * create_setup_window () { static GtkWidget *window = 0; if (!window) { GtkWidget *view; GtkWidget *hbox; GtkWidget *label; GtkWidget *sep; GtkWidget *scrolledwindow; GtkWidget *button; #if GTK_CHECK_VERSION(2, 12, 0) #else __widget_tooltips = gtk_tooltips_new (); #endif // Create the toplevel box. #if GTK_CHECK_VERSION(3, 2, 0) window = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else window = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (window); label = gtk_label_new (_("The installed input method services:")); #if GTK_CHECK_VERSION(3, 14, 0) gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); #else gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); #endif gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (window), label, FALSE, FALSE, 0); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_box_pack_start (GTK_BOX (window), scrolledwindow, TRUE, TRUE, 4); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_NONE); // Create hotkey and filter button before factory list view, because // factory_list_selection_changed_callback may access these two buttons. __hotkey_button = gtk_button_new_with_mnemonic (_("Edit _Hotkeys")); gtk_widget_show (__hotkey_button); gtk_widget_set_sensitive (__hotkey_button, FALSE); g_signal_connect ((gpointer) __hotkey_button, "clicked", G_CALLBACK (on_hotkey_button_clicked), NULL); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__hotkey_button, _("Edit Hotkeys associated with the selected input method.")); #else gtk_tooltips_set_tip (__widget_tooltips, __hotkey_button, _("Edit Hotkeys associated with the selected input method."), NULL); #endif __filter_button = gtk_button_new_with_mnemonic (_("Select _Filters")); gtk_widget_show (__filter_button); gtk_widget_set_sensitive (__filter_button, FALSE); g_signal_connect ((gpointer) __filter_button, "clicked", G_CALLBACK (on_filter_button_clicked), NULL); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__filter_button, _("Select the Filters which will be attached to this input method.")); #else gtk_tooltips_set_tip (__widget_tooltips, __filter_button, _("Select the Filters which will be attached to this input method."), NULL); #endif view = create_factory_list_view (); gtk_widget_show (view); gtk_container_add (GTK_CONTAINER (scrolledwindow), view); #if GTK_CHECK_VERSION(3, 2, 0) sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); #else sep = gtk_hseparator_new (); #endif gtk_widget_show (sep); gtk_box_pack_start (GTK_BOX (window), sep, FALSE, FALSE, 2); #if GTK_CHECK_VERSION(3, 2, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox = gtk_hbox_new (FALSE, 0); #endif gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (window), hbox, FALSE, FALSE, 2); gtk_box_pack_end (GTK_BOX (hbox), __hotkey_button, FALSE, FALSE, 4); gtk_box_pack_end (GTK_BOX (hbox), __filter_button, FALSE, FALSE, 4); button = gtk_button_new_with_mnemonic (_("_Expand")); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_expand_button_clicked), (gpointer) view); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (button, _("Expand all language categories.")); #else gtk_tooltips_set_tip (__widget_tooltips, button, _("Expand all language categories."), NULL); #endif button = gtk_button_new_with_mnemonic (_("_Collapse")); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_collapse_button_clicked), (gpointer) view); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (button, _("Collapse all language categories.")); #else gtk_tooltips_set_tip (__widget_tooltips, button, _("Collapse all language categories."), NULL); #endif button = gtk_button_new_with_mnemonic (_("E_nable All")); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_toggle_all_button_clicked), (gpointer) (1)); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (button, _("Enable all input methods.")); #else gtk_tooltips_set_tip (__widget_tooltips, button, _("Enable all input methods."), NULL); #endif button = gtk_button_new_with_mnemonic (_("_Disable All")); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_toggle_all_button_clicked), (gpointer) (0)); #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (button, _("Disable all input methods.")); #else gtk_tooltips_set_tip (__widget_tooltips, button, _("Disable all input methods."), NULL); #endif } return window; } static GtkWidget * create_factory_list_view () { GtkWidget *view; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkTreeViewColumn *column; view = gtk_tree_view_new (); gtk_widget_show (view); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), TRUE); #if !GTK_CHECK_VERSION(3, 14, 0) gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); #endif // Name column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Name")); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "pixbuf", FACTORY_LIST_ICON, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FACTORY_LIST_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Enable column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Enable")); renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), FALSE); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "active", FACTORY_LIST_ENABLE, "inconsistent", FACTORY_LIST_INCONSISTENT, NULL); g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (on_factory_enable_box_clicked), NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Hotkey column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Hotkeys")); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FACTORY_LIST_HOTKEYS, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Filter column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Filters")); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FACTORY_LIST_FILTER_NAMES, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // selection selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (factory_list_selection_changed_callback), NULL); // Create model. __factory_list_model = gtk_tree_store_new (FACTORY_LIST_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (__factory_list_model)); gtk_tree_view_collapse_all (GTK_TREE_VIEW (view)); return view; } static GtkWidget * create_filter_list_view () { GtkWidget *view; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *filter_list_model; view = gtk_tree_view_new (); gtk_widget_show (view); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), TRUE); #if !GTK_CHECK_VERSION(3, 14, 0) gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); #endif // Enable column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, FALSE); gtk_tree_view_column_set_title (column, _("Enable")); renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), FALSE); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "active", FILTER_LIST_ENABLE, NULL); g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (on_filter_enable_box_clicked), (gpointer) view); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Icon and column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Name")); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "pixbuf", FILTER_LIST_ICON, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FILTER_LIST_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Languages column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Languages")); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FILTER_LIST_LANGS, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Description column column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_title (column, _("Description")); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", FILTER_LIST_DESC, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); // Create model. filter_list_model = gtk_list_store_new (FILTER_LIST_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (filter_list_model)); return view; } static GdkPixbuf * scale_pixbuf (GdkPixbuf **pixbuf, int width, int height) { if (pixbuf && *pixbuf) { if (gdk_pixbuf_get_width (*pixbuf) != width || gdk_pixbuf_get_height (*pixbuf) != height) { GdkPixbuf *dest = gdk_pixbuf_scale_simple (*pixbuf, width, height, GDK_INTERP_BILINEAR); g_object_unref (*pixbuf); *pixbuf = dest; } return *pixbuf; } return 0; } static void get_factory_list (const ConfigPointer &config, std::vector &uuids, std::vector &names, std::vector &langs, std::vector &icons) { std::vector module_list; IMEngineFactoryPointer factory; IMEngineModule module; scim_get_imengine_module_list (module_list); uuids.clear (); names.clear (); langs.clear (); icons.clear (); // Add "English/European" factory first. factory = new ComposeKeyFactory (); uuids.push_back (factory->get_uuid ()); names.push_back (utf8_wcstombs (factory->get_name ())); langs.push_back (scim_get_normalized_language (factory->get_language ())); icons.push_back (factory->get_icon_file ()); for (size_t i = 0; i < module_list.size (); ++ i) { module.load (module_list [i], config); if (module.valid ()) { for (size_t j = 0; j < module.number_of_factories (); ++j) { try { factory = module.create_factory (j); } catch (...) { factory.reset (); } if (!factory.null ()) { if (std::find (uuids.begin (), uuids.end (), factory->get_uuid ()) == uuids.end ()) { uuids.push_back (factory->get_uuid ()); names.push_back (utf8_wcstombs (factory->get_name ())); langs.push_back (scim_get_normalized_language (factory->get_language ())); icons.push_back (factory->get_icon_file ()); } factory.reset (); } } module.unload (); } } } static void load_factory_list (const ConfigPointer &config) { if (!__factory_list_model) return; std::vector uuids; std::vector names; std::vector langs; std::vector icons; MapStringVectorSizeT groups; GtkTreeIter iter; GtkTreeIter parent; String lang_name; GdkPixbuf *pixbuf; size_t i; get_factory_list (config, uuids, names, langs, icons); for (i = 0; i < uuids.size (); ++i) { groups [langs [i]].push_back (i); } gtk_tree_store_clear (GTK_TREE_STORE (__factory_list_model)); // Add language group for (MapStringVectorSizeT::iterator it = groups.begin (); it != groups.end (); ++ it) { lang_name = scim_get_language_name (it->first); gtk_tree_store_append (__factory_list_model, &parent, NULL); gtk_tree_store_set (__factory_list_model, &parent, FACTORY_LIST_ENABLE, true, FACTORY_LIST_INCONSISTENT, FALSE, FACTORY_LIST_ICON, NULL, FACTORY_LIST_NAME, lang_name.c_str (), FACTORY_LIST_UUID, NULL, FACTORY_LIST_HOTKEYS, NULL, -1); // Add factories for this group for (i = 0; i < it->second.size (); ++i) { pixbuf = gdk_pixbuf_new_from_file (icons [it->second [i]].c_str (), NULL); scale_pixbuf (&pixbuf, LIST_ICON_SIZE, LIST_ICON_SIZE); gtk_tree_store_append (__factory_list_model, &iter, &parent); gtk_tree_store_set (__factory_list_model, &iter, FACTORY_LIST_ENABLE, true, FACTORY_LIST_INCONSISTENT, FALSE, FACTORY_LIST_ICON, pixbuf, FACTORY_LIST_NAME, names [it->second [i]].c_str (), FACTORY_LIST_UUID, uuids [it->second [i]].c_str (), FACTORY_LIST_HOTKEYS, NULL, -1); if (pixbuf) g_object_unref (pixbuf); } } } static void load_hotkey_settings (const ConfigPointer &config) { // Load Hotkeys. IMEngineHotkeyMatcher hotkey_matcher; hotkey_matcher.load_hotkeys (config); KeyEventList keys; std::vector uuids; MapStringKeyEventList hotkey_map; if (hotkey_matcher.get_all_hotkeys (keys, uuids) > 0) { for (size_t i = 0; i < keys.size (); ++i) hotkey_map [uuids[i]].push_back (keys [i]); } gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_set_hotkeys_func, static_cast (&hotkey_map)); } static void save_hotkey_settings (const ConfigPointer &config) { // Save Hotkeys. IMEngineHotkeyMatcher hotkey_matcher; MapStringKeyEventList hotkey_map; gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_get_hotkeys_func, static_cast (&hotkey_map)); for (MapStringKeyEventList::iterator it = hotkey_map.begin (); it != hotkey_map.end (); ++it) hotkey_matcher.add_hotkeys (it->second, it->first); hotkey_matcher.save_hotkeys (config); } static void load_filter_settings (const ConfigPointer &config) { FilterManager m_manager (config); unsigned int nfilters = m_manager.number_of_filters (); __filter_infos.clear (); if (!nfilters) return; FilterInfo info; // Get information of all filters. for (unsigned int i = 0; i < nfilters; ++i) { if (m_manager.get_filter_info (i, info)) __filter_infos.push_back (info); } // Load Filter infos. std::vector filtered_imes; MapStringVectorFilterInfo filter_map; if (m_manager.get_filtered_imengines (filtered_imes) > 0) { std::vector filter_uuids; for (size_t i = 0; i < filtered_imes.size (); ++i) { if (m_manager.get_filters_for_imengine (filtered_imes [i], filter_uuids)) { for (size_t j = 0; j < filter_uuids.size (); ++j) { if (m_manager.get_filter_info (filter_uuids [j], info)) filter_map [filtered_imes [i]].push_back (info); } } } } gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_set_filters_func, static_cast (&filter_map)); } static void save_filter_settings (const ConfigPointer &config) { FilterManager m_manager (config); MapStringVectorFilterInfo filter_map; gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_get_filters_func, static_cast (&filter_map)); m_manager.clear_all_filter_settings (); for (MapStringVectorFilterInfo::iterator it = filter_map.begin (); it != filter_map.end (); ++it) { std::vector filters; for (size_t i = 0; i < it->second.size (); ++i) filters.push_back (it->second [i].uuid); m_manager.set_filters_for_imengine (it->first, filters); } } static gboolean factory_list_set_disabled_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; std::vector *disabled = static_cast *> (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, -1); if (uuid && std::binary_search (disabled->begin (), disabled->end (), String (uuid))) { gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_ENABLE, FALSE, -1); } else { gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_ENABLE, TRUE, -1); } if (uuid) g_free (uuid); return FALSE; } static gboolean factory_list_get_disabled_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; gboolean enable; std::vector *disabled = static_cast *> (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, FACTORY_LIST_ENABLE, &enable, -1); if (!enable && uuid) disabled->push_back (String (uuid)); if (uuid) g_free (uuid); return FALSE; } static gboolean factory_list_set_hotkeys_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; MapStringKeyEventList::iterator it; MapStringKeyEventList *hotkey_map = static_cast (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, -1); if (uuid && (it = hotkey_map->find (String (uuid))) != hotkey_map->end ()) { String str; scim_key_list_to_string (str, it->second); gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_HOTKEYS, str.c_str (), -1); } else { gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_HOTKEYS, NULL, -1); } if (uuid) g_free (uuid); return FALSE; } static gboolean factory_list_get_hotkeys_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; gchar *hotkeys; MapStringKeyEventList *hotkey_map = static_cast (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, FACTORY_LIST_HOTKEYS, &hotkeys, -1); if (hotkeys && uuid) { KeyEventList keylist; if (scim_string_to_key_list (keylist, String (hotkeys))) hotkey_map->insert (std::make_pair (String (uuid), keylist)); } if (uuid) g_free (uuid); if (hotkeys) g_free (hotkeys); return FALSE; } static gboolean factory_list_set_filters_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; MapStringVectorFilterInfo::iterator it; MapStringVectorFilterInfo *filter_map = static_cast (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, -1); if (uuid && (it = filter_map->find (String (uuid))) != filter_map->end ()) { std::vector names; std::vector uuids; for (size_t i = 0; i < it->second.size (); ++i) { names.push_back (it->second [i].name); uuids.push_back (it->second [i].uuid); } gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_FILTER_NAMES, scim_combine_string_list (names).c_str (), FACTORY_LIST_FILTER_UUIDS, scim_combine_string_list (uuids).c_str (), -1); } else { gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_FILTER_NAMES, NULL, FACTORY_LIST_FILTER_UUIDS, NULL, -1); } if (uuid) g_free (uuid); return FALSE; } static gboolean factory_list_get_filters_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *uuid; gchar *filter_uuids; MapStringVectorFilterInfo *filter_map = static_cast (data); gtk_tree_model_get (model, iter, FACTORY_LIST_UUID, &uuid, FACTORY_LIST_FILTER_UUIDS, &filter_uuids, -1); if (filter_uuids && uuid) { std::vector strvec; scim_split_string_list (strvec, String (filter_uuids)); std::vector infovec; for (size_t i = 0; i < strvec.size (); ++i) infovec.push_back (FilterInfo (strvec [i])); if (infovec.size ()) filter_map->insert (std::make_pair (String (uuid), infovec)); } if (uuid) g_free (uuid); if (filter_uuids) g_free (filter_uuids); return FALSE; } static gboolean factory_list_toggle_all_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gboolean enable = (data != 0); gtk_tree_store_set (GTK_TREE_STORE (model), iter, FACTORY_LIST_ENABLE, enable, FACTORY_LIST_INCONSISTENT, FALSE, -1); return FALSE; } static void load_config (const ConfigPointer &config) { if (__factory_list_model) { load_factory_list (config); // Load disabled IMEngines list. std::vector disabled; disabled = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_DISABLED_IMENGINE_FACTORIES), disabled); std::sort (disabled.begin (), disabled.end ()); gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_set_disabled_func, static_cast (&disabled)); factory_list_update_inconsistent (); load_hotkey_settings (config); load_filter_settings (config); } __have_changed = false; } static void save_config (const ConfigPointer &config) { if (__factory_list_model && __have_changed) { // Save disabled IMEngines list. std::vector disabled; gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_get_disabled_func, static_cast (&disabled)); scim_global_config_write (String (SCIM_GLOBAL_CONFIG_DISABLED_IMENGINE_FACTORIES), disabled); save_hotkey_settings (config); save_filter_settings (config); } __have_changed = false; } static bool query_changed () { return __have_changed; } static void factory_list_update_inconsistent(void) { GtkTreeIter iter; GtkTreeIter childiter; gboolean enable; gboolean inconsistent; if (!__factory_list_model || !gtk_tree_model_get_iter_first (GTK_TREE_MODEL (__factory_list_model), &iter)) return; do { gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &iter, FACTORY_LIST_ENABLE, &enable, FACTORY_LIST_INCONSISTENT, &inconsistent, -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL (__factory_list_model), &childiter, &iter)) { gint enable_count = 0; gint total_count = gtk_tree_model_iter_n_children(GTK_TREE_MODEL (__factory_list_model), &iter); do { gboolean child_enable; gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &childiter, FACTORY_LIST_ENABLE, &child_enable, -1); if (child_enable) ++ enable_count; } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (__factory_list_model), &childiter)); enable = (enable_count && enable_count >= ((total_count+1) >> 1)); inconsistent = (enable_count && enable_count < total_count); } gtk_tree_store_set (GTK_TREE_STORE (__factory_list_model), &iter, FACTORY_LIST_ENABLE, enable, FACTORY_LIST_INCONSISTENT, inconsistent, -1); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (__factory_list_model), &iter)); } static void on_factory_enable_box_clicked (GtkCellRendererToggle *cell, gchar *arg1, gpointer data) { GtkTreePath *path; GtkTreeIter iter, childiter; gboolean enable; path = gtk_tree_path_new_from_string (arg1); if (gtk_tree_model_get_iter (GTK_TREE_MODEL (__factory_list_model), &iter, path)) { if (gtk_tree_model_iter_children(GTK_TREE_MODEL (__factory_list_model), &childiter, &iter)) { gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &iter, FACTORY_LIST_ENABLE, &enable, -1); enable = !enable; gtk_tree_store_set (__factory_list_model, &iter, FACTORY_LIST_ENABLE, enable, FACTORY_LIST_INCONSISTENT, FALSE, -1); do { gtk_tree_store_set (__factory_list_model, &childiter, FACTORY_LIST_ENABLE, enable, -1); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (__factory_list_model), &childiter)); } else { gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &iter, FACTORY_LIST_ENABLE, &enable, -1); gtk_tree_store_set (__factory_list_model, &iter, FACTORY_LIST_ENABLE, !enable, -1); factory_list_update_inconsistent (); } } gtk_tree_path_free (path); __have_changed = true; } static void on_filter_enable_box_clicked (GtkCellRendererToggle *cell, gchar *arg1, gpointer data) { GtkTreePath *path; GtkTreeIter iter; gboolean enable; GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (data)); path = gtk_tree_path_new_from_string (arg1); if (gtk_tree_model_get_iter (model, &iter, path)) { gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, FILTER_LIST_ENABLE, &enable, -1); enable = !enable; gtk_list_store_set (GTK_LIST_STORE (model), &iter, FILTER_LIST_ENABLE, enable, -1); } gtk_tree_path_free (path); } static void on_hotkey_button_clicked (GtkButton *button, gpointer user_data) { gchar *uuid; gchar *hotkeys; gchar *name; gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &__selected_factory, FACTORY_LIST_UUID, &uuid, FACTORY_LIST_HOTKEYS, &hotkeys, FACTORY_LIST_NAME, &name, -1); if (uuid) { char buf [256]; snprintf (buf, 256, _("Edit Hotkeys for %s"), name); GtkWidget *dialog = scim_key_selection_dialog_new (buf); gint result; if (hotkeys) { scim_key_selection_dialog_set_keys ( SCIM_KEY_SELECTION_DIALOG (dialog), hotkeys); } result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { const gchar *newkeys = scim_key_selection_dialog_get_keys (SCIM_KEY_SELECTION_DIALOG (dialog)); if ((newkeys && hotkeys && String (newkeys) != String (hotkeys)) || (newkeys || hotkeys)) { gtk_tree_store_set (__factory_list_model, &__selected_factory, FACTORY_LIST_HOTKEYS, newkeys, -1); __have_changed = true; } } gtk_widget_destroy (dialog); } if (uuid) g_free (uuid); if (hotkeys) g_free (hotkeys); if (name) g_free (name); } static void on_expand_button_clicked (GtkButton *button, gpointer user_data) { GtkWidget *view = static_cast(user_data); if (view) gtk_tree_view_expand_all (GTK_TREE_VIEW (view)); } static void on_collapse_button_clicked (GtkButton *button, gpointer user_data) { GtkWidget *view = static_cast(user_data); if (view) gtk_tree_view_collapse_all (GTK_TREE_VIEW (view)); } static void factory_list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data) { GtkTreeModel *model; if (gtk_tree_selection_get_selected (selection, &model, &__selected_factory)) { if (gtk_tree_model_iter_has_child (model, &__selected_factory)) { gtk_widget_set_sensitive (__hotkey_button, FALSE); gtk_widget_set_sensitive (__filter_button, FALSE); } else { gtk_widget_set_sensitive (__hotkey_button, TRUE); if (__filter_infos.size ()) gtk_widget_set_sensitive (__filter_button, TRUE); } } else { gtk_widget_set_sensitive (__hotkey_button, FALSE); gtk_widget_set_sensitive (__filter_button, FALSE); } } static void on_toggle_all_button_clicked (GtkButton *button, gpointer user_data) { gtk_tree_model_foreach (GTK_TREE_MODEL (__factory_list_model), factory_list_toggle_all_func, user_data); __have_changed = true; } static void set_filter_list_view_content (GtkTreeView *view, const std::vector & infos, const std::vector &enabled_filters) { std::vector lang_ids; std::vector lang_names; std::vector disabled_infos = infos; std::vector enabled_infos; std::vector ::iterator fiit; std::vector ::const_iterator sit; GdkPixbuf *pixbuf; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model (view); gtk_list_store_clear (GTK_LIST_STORE (model)); // Put the enabled filters in the front. for (sit = enabled_filters.begin (); sit != enabled_filters.end (); ++sit) { for (fiit = disabled_infos.begin (); fiit != disabled_infos.end (); ++fiit) { if (fiit->uuid == *sit) { enabled_infos.push_back (*fiit); disabled_infos.erase (fiit); break; } } } for (fiit = enabled_infos.begin (); fiit != enabled_infos.end (); ++fiit) { pixbuf = gdk_pixbuf_new_from_file (fiit->icon.c_str (), NULL); scale_pixbuf (&pixbuf, LIST_ICON_SIZE, LIST_ICON_SIZE); scim_split_string_list (lang_ids, fiit->langs); lang_names.clear (); for (sit = lang_ids.begin (); sit != lang_ids.end (); ++sit) { String name = scim_get_language_name (*sit); if (std::find (lang_names.begin (), lang_names.end (), name) == lang_names.end ()) lang_names.push_back (name); } String langs = scim_combine_string_list (lang_names); if (!langs.length ()) langs = ""; gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, FILTER_LIST_ENABLE, TRUE, FILTER_LIST_ICON, pixbuf, FILTER_LIST_UUID, fiit->uuid.c_str (), FILTER_LIST_NAME, fiit->name.c_str (), FILTER_LIST_LANGS, langs.c_str (), FILTER_LIST_DESC, fiit->desc.c_str (), -1); if (pixbuf) g_object_unref (pixbuf); } for (fiit = disabled_infos.begin (); fiit != disabled_infos.end (); ++fiit) { pixbuf = gdk_pixbuf_new_from_file (fiit->icon.c_str (), NULL); scale_pixbuf (&pixbuf, LIST_ICON_SIZE, LIST_ICON_SIZE); scim_split_string_list (lang_ids, fiit->langs); lang_names.clear (); for (sit = lang_ids.begin (); sit != lang_ids.end (); ++sit) { String name = scim_get_language_name (*sit); if (std::find (lang_names.begin (), lang_names.end (), name) == lang_names.end ()) lang_names.push_back (name); } String langs = scim_combine_string_list (lang_names); if (!langs.length ()) langs = ""; gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, FILTER_LIST_ENABLE, FALSE, FILTER_LIST_ICON, pixbuf, FILTER_LIST_UUID, fiit->uuid.c_str (), FILTER_LIST_NAME, fiit->name.c_str (), FILTER_LIST_LANGS, langs.c_str (), FILTER_LIST_DESC, fiit->desc.c_str (), -1); if (pixbuf) g_object_unref (pixbuf); } } static void get_filter_list_view_result (GtkTreeView *view, std::vector &result, std::vector &names) { gchar *uuid; gchar *name; gboolean enable; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model (view); result.clear (); names.clear (); if (!gtk_tree_model_get_iter_first (model, &iter)) return; do { gtk_tree_model_get (model, &iter, FILTER_LIST_UUID, &uuid, FILTER_LIST_NAME, &name, FILTER_LIST_ENABLE, &enable, -1); if (enable && uuid) { result.push_back (String (uuid)); names.push_back (String (name)); } if (uuid) g_free (uuid); if (name) g_free (name); } while (gtk_tree_model_iter_next (model, &iter)); } static void on_filter_button_clicked (GtkButton *button, gpointer user_data) { gchar *uuid; gchar *filter_uuids; gchar *name; gtk_tree_model_get (GTK_TREE_MODEL (__factory_list_model), &__selected_factory, FACTORY_LIST_UUID, &uuid, FACTORY_LIST_FILTER_UUIDS, &filter_uuids, FACTORY_LIST_NAME, &name, -1); if (uuid) { GtkWidget *dialog; GtkWidget *view; GtkWidget *scrolledwindow; GtkWidget *separator; GtkWidget *hbox; GtkWidget *button; std::vector enabled_filters; if (filter_uuids) scim_split_string_list (enabled_filters, filter_uuids); char buf [256]; snprintf (buf, 256, _("Select Filters for %s"), name); dialog = gtk_dialog_new_with_buttons (buf, NULL, GTK_DIALOG_MODAL, _("_OK"), GTK_RESPONSE_OK, _("_Cancel"), GTK_RESPONSE_CANCEL, NULL); #if GTK_CHECK_VERSION(2, 22, 0) #else gtk_dialog_set_has_separator (GTK_DIALOG (dialog), TRUE); #endif scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_NONE); #if GTK_CHECK_VERSION(3, 0, 0) gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), scrolledwindow, TRUE, TRUE, 2); #else gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), scrolledwindow, TRUE, TRUE, 2); #endif view = create_filter_list_view (); set_filter_list_view_content (GTK_TREE_VIEW (view), __filter_infos, enabled_filters); gtk_container_add (GTK_CONTAINER (scrolledwindow), view); #if GTK_CHECK_VERSION(3, 2, 0) separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); #else separator = gtk_hseparator_new (); #endif gtk_widget_show (separator); #if GTK_CHECK_VERSION(3, 0, 0) gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), separator, FALSE, FALSE, 2); #else gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), separator, FALSE, FALSE, 2); #endif #if GTK_CHECK_VERSION(3, 2, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); #else hbox = gtk_hbox_new (FALSE, 4); #endif gtk_widget_show (hbox); #if GTK_CHECK_VERSION(3, 0, 0) gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox, FALSE, FALSE, 2); #else gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 2); #endif button = gtk_button_new_with_mnemonic (_("Move _Up")); gtk_widget_show (button); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_filter_move_up_button_clicked), (gpointer) view); button = gtk_button_new_with_mnemonic (_("Move _Down")); gtk_widget_show (button); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 4); g_signal_connect ((gpointer) button, "clicked", G_CALLBACK (on_filter_move_down_button_clicked), (gpointer) view); gtk_window_set_default_size (GTK_WINDOW (dialog), 320, 240); gint result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { std::vector filter_names; get_filter_list_view_result (GTK_TREE_VIEW (view), enabled_filters, filter_names); String str = scim_combine_string_list (enabled_filters); if (String (filter_uuids ? filter_uuids : "") != str) { gtk_tree_store_set (GTK_TREE_STORE (__factory_list_model), &__selected_factory, FACTORY_LIST_FILTER_NAMES, scim_combine_string_list (filter_names).c_str (), FACTORY_LIST_FILTER_UUIDS, str.c_str (), -1); __have_changed = true; } } gtk_widget_destroy (dialog); } if (uuid) g_free (uuid); if (filter_uuids) g_free (filter_uuids); if (name) g_free (name); } static void on_filter_move_up_button_clicked (GtkButton *button, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW (user_data); GtkTreeSelection *selection = gtk_tree_view_get_selection (view); GtkTreeModel *model; GtkTreeIter cur_iter; GtkTreeIter prev_iter; GtkTreePath *path; if (gtk_tree_selection_get_selected (selection, &model, &cur_iter)) { path = gtk_tree_model_get_path (model, &cur_iter); if (gtk_tree_path_prev (path) && gtk_tree_model_get_iter (model, &prev_iter, path)) { gtk_list_store_swap (GTK_LIST_STORE (model), &cur_iter, &prev_iter); } gtk_tree_path_free (path); } } static void on_filter_move_down_button_clicked (GtkButton *button, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW (user_data); GtkTreeSelection *selection = gtk_tree_view_get_selection (view); GtkTreeModel *model; GtkTreeIter cur_iter; GtkTreeIter next_iter; if (gtk_tree_selection_get_selected (selection, &model, &cur_iter)) { next_iter = cur_iter; if (gtk_tree_model_iter_next (model, &next_iter)) { gtk_list_store_swap (GTK_LIST_STORE (model), &cur_iter, &next_iter); } } } /* vi:ts=4:nowrap:expandtab */ scim-master/modules/SetupUI/scim_panel_gtk_setup.cpp000066400000000000000000001244501415264260100232220ustar00rootroot00000000000000/** @file scim_panel_gtk_setup.cpp * implementation of Setup Module of scim-panel-gtk. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_panel_gtk_setup.cpp,v 1.15 2005/12/10 14:04:54 suzhe Exp $ * */ #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_PANEL #include #include "scim_private.h" #include "scim.h" using namespace scim; #define scim_module_init panel_gtk_setup_LTX_scim_module_init #define scim_module_exit panel_gtk_setup_LTX_scim_module_exit #define scim_setup_module_create_ui panel_gtk_setup_LTX_scim_setup_module_create_ui #define scim_setup_module_get_category panel_gtk_setup_LTX_scim_setup_module_get_category #define scim_setup_module_get_name panel_gtk_setup_LTX_scim_setup_module_get_name #define scim_setup_module_get_description panel_gtk_setup_LTX_scim_setup_module_get_description #define scim_setup_module_load_config panel_gtk_setup_LTX_scim_setup_module_load_config #define scim_setup_module_save_config panel_gtk_setup_LTX_scim_setup_module_save_config #define scim_setup_module_query_changed panel_gtk_setup_LTX_scim_setup_module_query_changed #define SCIM_CONFIG_PANEL_GTK_FONT "/Panel/Gtk/Font" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_SHOW "/Panel/Gtk/ToolBar/AlwaysShow" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_HIDDEN "/Panel/Gtk/ToolBar/AlwaysHidden" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_AUTO_SNAP "/Panel/Gtk/ToolBar/AutoSnap" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_HIDE_TIMEOUT "/Panel/Gtk/ToolBar/HideTimeout" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_X "/Panel/Gtk/ToolBar/POS_X" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_POS_Y "/Panel/Gtk/ToolBar/POS_Y" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_ICON "/Panel/Gtk/ToolBar/ShowFactoryIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_NAME "/Panel/Gtk/ToolBar/ShowFactoryName" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_STICK_ICON "/Panel/Gtk/ToolBar/ShowStickIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_MENU_ICON "/Panel/Gtk/ToolBar/ShowMenuIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_HELP_ICON "/Panel/Gtk/ToolBar/ShowHelpIcon" #define SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_PROPERTY_LABEL "/Panel/Gtk/ToolBar/ShowPropertyLabel" #define SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_EMBEDDED "/Panel/Gtk/LookupTableEmbedded" #define SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_VERTICAL "/Panel/Gtk/LookupTableVertical" #define SCIM_CONFIG_PANEL_GTK_DEFAULT_STICKED "/Panel/Gtk/DefaultSticked" #define SCIM_CONFIG_PANEL_GTK_SHOW_TRAY_ICON "/Panel/Gtk/ShowTrayIcon" static GtkWidget * create_setup_window (); static void load_config (const ConfigPointer &config); static void save_config (const ConfigPointer &config); static bool query_changed (); // Module Interface. extern "C" { void scim_module_init (void) { } void scim_module_exit (void) { } GtkWidget * scim_setup_module_create_ui (void) { return create_setup_window (); } String scim_setup_module_get_category (void) { return String ("Panel"); } String scim_setup_module_get_name (void) { return String (_("GTK")); } String scim_setup_module_get_description (void) { return String (_("A panel daemon based on GTK+-2.x library.")); } void scim_setup_module_load_config (const ConfigPointer &config) { load_config (config); } void scim_setup_module_save_config (const ConfigPointer &config) { save_config (config); } bool scim_setup_module_query_changed () { return query_changed (); } } // extern "C" // Internal data declaration. static bool __config_toolbar_always_show = false; static bool __config_toolbar_always_hidden = false; static bool __config_toolbar_auto_snap = false; static int __config_toolbar_hide_timeout = 2; static bool __config_toolbar_show_factory_icon = true; static bool __config_toolbar_show_factory_name = true; static bool __config_toolbar_show_stick_icon = false; static bool __config_toolbar_show_menu_icon = true; static bool __config_toolbar_show_help_icon = false; static bool __config_toolbar_show_property_label = true; static bool __config_lookup_table_embedded = true; static bool __config_lookup_table_vertical = false; static bool __config_default_sticked = false; static bool __config_show_tray_icon = true; static String __config_font = "default"; static bool __have_changed = false; static GtkWidget * __widget_toolbar_show_behaviour = 0; static GtkWidget * __widget_toolbar_auto_snap = 0; static GtkWidget * __widget_toolbar_hide_timeout = 0; static GtkWidget * __widget_toolbar_show_factory_icon = 0; static GtkWidget * __widget_toolbar_show_factory_name = 0; static GtkWidget * __widget_toolbar_show_stick_icon = 0; static GtkWidget * __widget_toolbar_show_menu_icon = 0; static GtkWidget * __widget_toolbar_show_help_icon = 0; static GtkWidget * __widget_toolbar_show_property_label = 0; static GtkWidget * __widget_lookup_table_embedded = 0; static GtkWidget * __widget_lookup_table_vertical = 0; static GtkWidget * __widget_default_sticked = 0; static GtkWidget * __widget_show_tray_icon = 0; static GtkWidget * __widget_font = 0; #if GTK_CHECK_VERSION(2, 12, 0) #else static GtkTooltips * __widget_tooltips = 0; #endif enum ToolbarShowFlavourType { SCIM_TOOLBAR_SHOW_ALWAYS, SCIM_TOOLBAR_SHOW_ON_DEMAND, SCIM_TOOLBAR_SHOW_NEVER }; static const char * __toolbar_show_behaviour_text[] = { N_("Always"), N_("On demand"), N_("Never") }; // Declaration of internal functions. static void on_default_toggle_button_toggled (GtkToggleButton *togglebutton, gpointer user_data); static void on_default_spin_button_changed (GtkSpinButton *spinbutton, gpointer user_data); static void on_toolbar_show_behaviour_changed (GtkComboBox *combobox, gpointer user_data); static void on_font_selection_clicked (GtkButton *button, gpointer user_data); static void setup_widget_value (); // Function implementations. GtkWidget * create_setup_window () { static GtkWidget *window = 0; if (!window) { GtkWidget *page; GtkWidget *table; GtkWidget *frame; GtkWidget *vbox; GtkWidget *label; GtkWidget *hbox; #if GTK_CHECK_VERSION(2, 12, 0) #else __widget_tooltips = gtk_tooltips_new (); #endif // Create the vbox for the first page. #if GTK_CHECK_VERSION(3, 0, 0) page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else page = gtk_vbox_new (FALSE, 0); #endif gtk_widget_show (page); vbox = page; // Create the ToolBar setup block. frame = gtk_frame_new (_("ToolBar")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame), 4); #if GTK_CHECK_VERSION(3, 4, 0) table = gtk_grid_new(); gtk_grid_set_row_spacing (GTK_GRID (table), 4); gtk_grid_set_column_spacing (GTK_GRID (table), 8); #else table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 8); #endif gtk_widget_show (table); gtk_container_add (GTK_CONTAINER (frame), table); #if GTK_CHECK_VERSION(3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox = gtk_hbox_new (FALSE, 0); #endif gtk_widget_show (hbox); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (hbox, GTK_ALIGN_FILL); gtk_grid_attach(GTK_GRID (table), hbox, 0, 0, 1, 1); #else gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); #endif label = gtk_label_new_with_mnemonic (_("_Show:")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(3, 14, 0) gtk_widget_set_margin_start (label, 4); gtk_widget_set_margin_end (label, 4); #else gtk_misc_set_padding (GTK_MISC (label), 4, 0); #endif #if GTK_CHECK_VERSION(2, 24, 0) __widget_toolbar_show_behaviour = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_ALWAYS])); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_ON_DEMAND])); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_NEVER])); #else __widget_toolbar_show_behaviour = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_ALWAYS])); gtk_combo_box_append_text (GTK_COMBO_BOX (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_ON_DEMAND])); gtk_combo_box_append_text (GTK_COMBO_BOX (__widget_toolbar_show_behaviour), _(__toolbar_show_behaviour_text[SCIM_TOOLBAR_SHOW_NEVER])); #endif gtk_widget_show (__widget_toolbar_show_behaviour); gtk_box_pack_start (GTK_BOX (hbox), __widget_toolbar_show_behaviour, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), __widget_toolbar_show_behaviour); __widget_toolbar_auto_snap = gtk_check_button_new_with_mnemonic (_("Auto s_nap")); gtk_widget_show (__widget_toolbar_auto_snap); __widget_toolbar_show_factory_icon = gtk_check_button_new_with_mnemonic (_("Show _input method icon")); gtk_widget_show (__widget_toolbar_show_factory_icon); __widget_toolbar_show_factory_name = gtk_check_button_new_with_mnemonic (_("Show inp_ut method name")); gtk_widget_show (__widget_toolbar_show_factory_name); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (__widget_toolbar_auto_snap, GTK_ALIGN_FILL); gtk_grid_attach(GTK_GRID (table), __widget_toolbar_auto_snap, 0, 1, 1, 1); gtk_widget_set_halign (__widget_toolbar_show_factory_icon, GTK_ALIGN_FILL); gtk_grid_attach(GTK_GRID (table), __widget_toolbar_show_factory_icon, 0, 2, 1, 1); gtk_widget_set_halign (__widget_toolbar_show_factory_name, GTK_ALIGN_FILL); gtk_grid_attach(GTK_GRID (table), __widget_toolbar_show_factory_name, 0, 3, 1, 1); #else gtk_table_attach (GTK_TABLE (table), __widget_toolbar_auto_snap, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_factory_icon, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_factory_name, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); #endif #if GTK_CHECK_VERSION(3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox = gtk_hbox_new (FALSE, 0); #endif gtk_widget_show (hbox); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (hbox, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), hbox, 1, 0, 1, 1); #else gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); #endif label = gtk_label_new_with_mnemonic (_("Hide time_out:")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(3, 14, 0) gtk_widget_set_margin_start (label, 4); gtk_widget_set_margin_end (label, 4); #else gtk_misc_set_padding (GTK_MISC (label), 4, 0); #endif __widget_toolbar_hide_timeout = gtk_spin_button_new_with_range (0, 60, 1); gtk_widget_show (__widget_toolbar_hide_timeout); gtk_box_pack_start (GTK_BOX (hbox), __widget_toolbar_hide_timeout, FALSE, FALSE, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (__widget_toolbar_hide_timeout), TRUE); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (__widget_toolbar_hide_timeout), TRUE); gtk_spin_button_set_digits (GTK_SPIN_BUTTON (__widget_toolbar_hide_timeout), 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), __widget_toolbar_hide_timeout); __widget_toolbar_show_stick_icon = gtk_check_button_new_with_mnemonic (_("Show s_tick icon")); gtk_widget_show (__widget_toolbar_show_stick_icon); __widget_toolbar_show_menu_icon = gtk_check_button_new_with_mnemonic (_("Show m_enu icon")); gtk_widget_show (__widget_toolbar_show_menu_icon); __widget_toolbar_show_help_icon = gtk_check_button_new_with_mnemonic (_("Show _help icon")); gtk_widget_show (__widget_toolbar_show_help_icon); __widget_toolbar_show_property_label = gtk_check_button_new_with_mnemonic (_("Show _property label")); gtk_widget_show (__widget_toolbar_show_property_label); #if GTK_CHECK_VERSION(3, 4, 0) gtk_widget_set_halign (__widget_toolbar_show_stick_icon, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __widget_toolbar_show_stick_icon, 1, 1, 1, 1); gtk_widget_set_halign (__widget_toolbar_show_menu_icon, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __widget_toolbar_show_menu_icon, 1, 2, 1, 1); gtk_widget_set_halign (__widget_toolbar_show_help_icon, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __widget_toolbar_show_help_icon, 1, 3, 1, 1); gtk_widget_set_halign (__widget_toolbar_show_property_label, GTK_ALIGN_FILL); gtk_grid_attach (GTK_GRID (table), __widget_toolbar_show_property_label, 0, 4, 1, 1); #else gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_stick_icon, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_menu_icon, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_help_icon, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); gtk_table_attach (GTK_TABLE (table), __widget_toolbar_show_property_label, 0, 1, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND), 4, 0); #endif #if GTK_CHECK_VERSION(3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8); #else hbox = gtk_hbox_new (FALSE, 8); #endif gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); // Create the Input Window setup block frame = gtk_frame_new (_("Input window")); gtk_widget_show (frame); gtk_container_set_border_width (GTK_CONTAINER (frame), 4); gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(3, 0, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); #else vbox = gtk_vbox_new (FALSE, 4); #endif gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); __widget_lookup_table_embedded = gtk_check_button_new_with_mnemonic (_("E_mbedded lookup table")); gtk_widget_show (__widget_lookup_table_embedded); gtk_box_pack_start (GTK_BOX (vbox), __widget_lookup_table_embedded, FALSE, FALSE, 0); __widget_lookup_table_vertical = gtk_check_button_new_with_mnemonic (_("_Vertical lookup table")); gtk_widget_show (__widget_lookup_table_vertical); gtk_box_pack_start (GTK_BOX (vbox), __widget_lookup_table_vertical, FALSE, FALSE, 0); frame = gtk_frame_new (_("Misc")); gtk_widget_show (frame); gtk_container_set_border_width (GTK_CONTAINER (frame), 4); gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(3, 0, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); #else vbox = gtk_vbox_new (FALSE, 4); #endif gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); __widget_show_tray_icon = gtk_check_button_new_with_mnemonic (_("Show tra_y icon")); gtk_widget_show (__widget_show_tray_icon); gtk_box_pack_start (GTK_BOX (vbox), __widget_show_tray_icon, FALSE, FALSE, 0); __widget_default_sticked = gtk_check_button_new_with_mnemonic (_("Stick _windows")); gtk_widget_show (__widget_default_sticked); gtk_box_pack_start (GTK_BOX (vbox), __widget_default_sticked, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #else hbox = gtk_hbox_new (FALSE, 0); #endif gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); label = gtk_label_new_with_mnemonic (_("_Font:")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); #if GTK_CHECK_VERSION(3, 14, 0) gtk_widget_set_margin_start (label, 4); gtk_widget_set_margin_end (label, 4); #else gtk_misc_set_padding (GTK_MISC (label), 4, 0); #endif __widget_font = gtk_button_new_with_label ("default"); gtk_widget_show (__widget_font); gtk_container_set_border_width (GTK_CONTAINER (__widget_font), 4); gtk_box_pack_start (GTK_BOX (hbox), __widget_font, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), __widget_font); // Connect all signals. g_signal_connect ((gpointer) __widget_toolbar_show_behaviour, "changed", G_CALLBACK (on_toolbar_show_behaviour_changed), NULL); g_signal_connect ((gpointer) __widget_toolbar_auto_snap, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_auto_snap); g_signal_connect ((gpointer) __widget_toolbar_hide_timeout, "value_changed", G_CALLBACK (on_default_spin_button_changed), &__config_toolbar_hide_timeout); g_signal_connect ((gpointer) __widget_toolbar_show_factory_icon, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_factory_icon); g_signal_connect ((gpointer) __widget_toolbar_show_factory_name, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_factory_name); g_signal_connect ((gpointer) __widget_toolbar_show_stick_icon, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_stick_icon); g_signal_connect ((gpointer) __widget_toolbar_show_menu_icon, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_menu_icon); g_signal_connect ((gpointer) __widget_toolbar_show_help_icon, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_help_icon); g_signal_connect ((gpointer) __widget_toolbar_show_property_label, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_toolbar_show_property_label); g_signal_connect ((gpointer) __widget_lookup_table_embedded, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_lookup_table_embedded); g_signal_connect ((gpointer) __widget_lookup_table_vertical, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_lookup_table_vertical); g_signal_connect ((gpointer) __widget_default_sticked, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_default_sticked); g_signal_connect ((gpointer) __widget_show_tray_icon, "toggled", G_CALLBACK (on_default_toggle_button_toggled), &__config_show_tray_icon); g_signal_connect ((gpointer) __widget_font, "clicked", G_CALLBACK (on_font_selection_clicked), NULL); // Set all tooltips. #if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text (__widget_toolbar_show_behaviour, _("If option \"Always\" is selected, " "the toolbar will always be shown on the screen. " "If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. " "If option \"Never\" is selected, it will never be shown.")); gtk_widget_set_tooltip_text (__widget_toolbar_auto_snap, _("If this option is checked, " "the toolbar will be snapped to " "the screen border.")); gtk_widget_set_tooltip_text (__widget_toolbar_hide_timeout, _("The toolbar will be hidden out after " "this timeout is elapsed. " "This option is only valid when " "\"Always show\" is selected. " "Set to zero to disable this behavior.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_factory_icon, _("If this option is checked, " "the input method icon will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_factory_name, _("If this option is checked, " "the input method name will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_stick_icon, _("If this option is checked, " "the stick icon will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_menu_icon, _("If this option is checked, " "the menu icon will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_help_icon, _("If this option is checked, " "the help icon will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_toolbar_show_property_label, _("If this option is checked, " "the text label of input method properties will be showed on the toolbar.")); gtk_widget_set_tooltip_text (__widget_lookup_table_embedded, _("If this option is checked, " "the lookup table will be embedded into " "the input window.")); gtk_widget_set_tooltip_text (__widget_lookup_table_vertical, _("If this option is checked, " "the lookup table will be displayed " "vertically.")); gtk_widget_set_tooltip_text (__widget_show_tray_icon, _("If this option is checked, " "the tray icon will be showed on the desktop's taskbar.")); gtk_widget_set_tooltip_text (__widget_default_sticked, _("If this option is checked, " "the toolbar, input and lookup table " "windows will be sticked to " "its original position.")); gtk_widget_set_tooltip_text (__widget_font, _("The font setting will be used in " "the input and lookup table windows.")); #else gtk_tooltips_set_tip (__widget_tooltips, __widget_toolbar_show_behaviour, _("If option \"Always\" is selected, " "the toolbar will always be shown on the screen. " "If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. " "If option \"Never\" is selected, it will never be shown."), NULL); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_auto_snap, _("If this option is checked, " "the toolbar will be snapped to " "the screen border.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_hide_timeout, _("The toolbar will be hidden out after " "this timeout is elapsed. " "This option is only valid when " "\"Always show\" is selected. " "Set to zero to disable this behavior.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_factory_icon, _("If this option is checked, " "the input method icon will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_factory_name, _("If this option is checked, " "the input method name will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_stick_icon, _("If this option is checked, " "the stick icon will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_menu_icon, _("If this option is checked, " "the menu icon will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_help_icon, _("If this option is checked, " "the help icon will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_toolbar_show_property_label, _("If this option is checked, " "the text label of input method properties will be showed on the toolbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_lookup_table_embedded, _("If this option is checked, " "the lookup table will be embedded into " "the input window.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_lookup_table_vertical, _("If this option is checked, " "the lookup table will be displayed " "vertically.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_show_tray_icon, _("If this option is checked, " "the tray icon will be showed on the desktop's taskbar.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_default_sticked, _("If this option is checked, " "the toolbar, input and lookup table " "windows will be sticked to " "its original position.", NULL)); gtk_tooltip_set_tip (__widget_tooltips, __widget_font, _("The font setting will be used in " "the input and lookup table windows.", NULL)); #endif window = page; setup_widget_value (); } return window; } void setup_widget_value () { if (__widget_toolbar_show_behaviour) { if (__config_toolbar_always_hidden) { gtk_combo_box_set_active ( GTK_COMBO_BOX (__widget_toolbar_show_behaviour), SCIM_TOOLBAR_SHOW_NEVER); } else if (__config_toolbar_always_show) { gtk_combo_box_set_active ( GTK_COMBO_BOX (__widget_toolbar_show_behaviour), SCIM_TOOLBAR_SHOW_ALWAYS); } else { gtk_combo_box_set_active ( GTK_COMBO_BOX (__widget_toolbar_show_behaviour), SCIM_TOOLBAR_SHOW_ON_DEMAND); } } if (__widget_toolbar_auto_snap) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_auto_snap), __config_toolbar_auto_snap); } if (__widget_toolbar_hide_timeout) { gtk_spin_button_set_value ( GTK_SPIN_BUTTON (__widget_toolbar_hide_timeout), __config_toolbar_hide_timeout); gtk_widget_set_sensitive ( __widget_toolbar_hide_timeout, __config_toolbar_always_show); } if (__widget_toolbar_show_factory_icon) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_factory_icon), __config_toolbar_show_factory_icon); } if (__widget_toolbar_show_factory_name) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_factory_name), __config_toolbar_show_factory_name); } if (__widget_toolbar_show_stick_icon) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_stick_icon), __config_toolbar_show_stick_icon); } if (__widget_toolbar_show_menu_icon) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_menu_icon), __config_toolbar_show_menu_icon); } if (__widget_toolbar_show_help_icon) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_help_icon), __config_toolbar_show_help_icon); } if (__widget_toolbar_show_property_label) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_toolbar_show_property_label), __config_toolbar_show_property_label); } if (__widget_lookup_table_embedded) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_lookup_table_embedded), __config_lookup_table_embedded); } if (__widget_lookup_table_vertical) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_lookup_table_vertical), __config_lookup_table_vertical); } if (__widget_default_sticked) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_default_sticked), __config_default_sticked); } if (__widget_show_tray_icon) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (__widget_show_tray_icon), __config_show_tray_icon); } if (__widget_font) { gtk_button_set_label ( GTK_BUTTON (__widget_font), __config_font.c_str ()); } } void load_config (const ConfigPointer &config) { if (!config.null ()) { __config_toolbar_always_hidden = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_HIDDEN), __config_toolbar_always_hidden); __config_toolbar_always_show = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_SHOW), __config_toolbar_always_show); __config_toolbar_auto_snap = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_AUTO_SNAP), __config_toolbar_auto_snap); __config_toolbar_hide_timeout = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_HIDE_TIMEOUT), __config_toolbar_hide_timeout); __config_toolbar_show_factory_icon = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_ICON), __config_toolbar_show_factory_icon); __config_toolbar_show_factory_name = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_NAME), __config_toolbar_show_factory_name); __config_toolbar_show_stick_icon = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_STICK_ICON), __config_toolbar_show_stick_icon); __config_toolbar_show_menu_icon = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_MENU_ICON), __config_toolbar_show_menu_icon); __config_toolbar_show_help_icon = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_HELP_ICON), __config_toolbar_show_help_icon); __config_toolbar_show_property_label = config->read (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_PROPERTY_LABEL), __config_toolbar_show_property_label); __config_lookup_table_embedded = config->read (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_EMBEDDED), __config_lookup_table_embedded); __config_lookup_table_vertical = config->read (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_VERTICAL), __config_lookup_table_vertical); __config_default_sticked = config->read (String (SCIM_CONFIG_PANEL_GTK_DEFAULT_STICKED), __config_default_sticked); __config_show_tray_icon = config->read (String (SCIM_CONFIG_PANEL_GTK_SHOW_TRAY_ICON), __config_show_tray_icon); __config_font = config->read (String (SCIM_CONFIG_PANEL_GTK_FONT), __config_font); setup_widget_value (); __have_changed = false; } } void save_config (const ConfigPointer &config) { if (!config.null ()) { config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_HIDDEN), __config_toolbar_always_hidden); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_ALWAYS_SHOW), __config_toolbar_always_show); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_AUTO_SNAP), __config_toolbar_auto_snap); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_HIDE_TIMEOUT), __config_toolbar_hide_timeout); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_ICON), __config_toolbar_show_factory_icon); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_FACTORY_NAME), __config_toolbar_show_factory_name); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_STICK_ICON), __config_toolbar_show_stick_icon); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_MENU_ICON), __config_toolbar_show_menu_icon); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_HELP_ICON), __config_toolbar_show_help_icon); config->write (String (SCIM_CONFIG_PANEL_GTK_TOOLBAR_SHOW_PROPERTY_LABEL), __config_toolbar_show_property_label); config->write (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_EMBEDDED), __config_lookup_table_embedded); config->write (String (SCIM_CONFIG_PANEL_GTK_LOOKUP_TABLE_VERTICAL), __config_lookup_table_vertical); config->write (String (SCIM_CONFIG_PANEL_GTK_SHOW_TRAY_ICON), __config_show_tray_icon); config->write (String (SCIM_CONFIG_PANEL_GTK_DEFAULT_STICKED), __config_default_sticked); config->write (String (SCIM_CONFIG_PANEL_GTK_FONT), __config_font); __have_changed = false; } } bool query_changed () { return __have_changed; } static void on_default_spin_button_changed (GtkSpinButton *spinbutton, gpointer user_data) { int *value = static_cast (user_data); if (value) { *value = gtk_spin_button_get_value_as_int (spinbutton); __have_changed = true; } } static void on_default_toggle_button_toggled (GtkToggleButton *togglebutton, gpointer user_data) { bool *toggle = static_cast (user_data); if (toggle) { *toggle = gtk_toggle_button_get_active (togglebutton); __have_changed = true; } } static void on_toolbar_show_behaviour_changed (GtkComboBox *combobox, gpointer user_data) { gint active; active = gtk_combo_box_get_active (combobox); switch (active) { case SCIM_TOOLBAR_SHOW_ALWAYS: __config_toolbar_always_show = true; __config_toolbar_always_hidden = false; break; case SCIM_TOOLBAR_SHOW_ON_DEMAND: __config_toolbar_always_show = false; __config_toolbar_always_hidden = false; break; case SCIM_TOOLBAR_SHOW_NEVER: __config_toolbar_always_show = false; __config_toolbar_always_hidden = true; break; default: __config_toolbar_always_show = true; __config_toolbar_always_hidden = false; break; } if (__widget_toolbar_hide_timeout) { gtk_widget_set_sensitive ( __widget_toolbar_hide_timeout, !__config_toolbar_always_hidden && __config_toolbar_always_show); } if (__widget_toolbar_auto_snap) { gtk_widget_set_sensitive ( __widget_toolbar_auto_snap, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_factory_icon) { gtk_widget_set_sensitive ( __widget_toolbar_show_factory_icon, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_factory_name) { gtk_widget_set_sensitive ( __widget_toolbar_show_factory_name, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_stick_icon) { gtk_widget_set_sensitive ( __widget_toolbar_show_stick_icon, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_menu_icon) { gtk_widget_set_sensitive ( __widget_toolbar_show_menu_icon, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_help_icon) { gtk_widget_set_sensitive ( __widget_toolbar_show_help_icon, !__config_toolbar_always_hidden); } if (__widget_toolbar_show_property_label) { gtk_widget_set_sensitive ( __widget_toolbar_show_property_label, !__config_toolbar_always_hidden); } __have_changed = true; } static void on_font_selection_clicked (GtkButton *button, gpointer user_data) { #if GTK_CHECK_VERSION(3, 2, 0) GtkWidget *font_selection = gtk_font_chooser_dialog_new (_("Select Interface Font"), NULL); gint result; if (__config_font != "default") { gtk_font_chooser_set_font( GTK_FONT_CHOOSER (font_selection), __config_font.c_str ()); } result = gtk_dialog_run (GTK_DIALOG (font_selection)); if (result == GTK_RESPONSE_OK) { gchar *fontname = gtk_font_chooser_get_font ( GTK_FONT_CHOOSER (font_selection)); __config_font = String (fontname); g_free(fontname); gtk_button_set_label ( GTK_BUTTON (__widget_font), __config_font.c_str ()); __have_changed = true; } gtk_widget_destroy (font_selection); #else GtkWidget *font_selection = gtk_font_selection_dialog_new (_("Select Interface Font")); gint result; if (__config_font != "default") { gtk_font_selection_dialog_set_font_name ( GTK_FONT_SELECTION_DIALOG (font_selection), __config_font.c_str ()); } result = gtk_dialog_run (GTK_DIALOG (font_selection)); if (result == GTK_RESPONSE_OK) { __config_font = String ( gtk_font_selection_dialog_get_font_name ( GTK_FONT_SELECTION_DIALOG (font_selection))); gtk_button_set_label ( GTK_BUTTON (__widget_font), __config_font.c_str ()); __have_changed = true; } gtk_widget_destroy (font_selection); #endif } /* vi:ts=4:nowrap:expandtab */ scim-master/po/000077500000000000000000000000001415264260100137215ustar00rootroot00000000000000scim-master/po/Makevars000066400000000000000000000034751415264260100154260ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(GETTEXT_PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = James Su # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = http://sourceforge.net/projects/scim # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = scim-master/po/Makevars.template000066400000000000000000000034161415264260100172330ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = scim-master/po/POTFILES.in000066400000000000000000000033271415264260100155030ustar00rootroot00000000000000extras/gtk_immodule/gtkimcontextscim.cpp extras/gtk_immodule/imscim.cpp extras/panel/scim_panel_gtk.cpp extras/setup/scim-setup.desktop.in extras/setup/scim_setup_helper.cpp extras/setup/scim_setup_module.cpp extras/setup/scim_setup_ui.cpp modules/Config/scim_simple_config.cpp modules/Config/scim_socket_config.cpp modules/Filter/scim_sctc_filter.cpp modules/FrontEnd/scim_socket_frontend.cpp modules/FrontEnd/scim_x11_frontend.cpp modules/FrontEnd/scim_x11_ic.cpp modules/IMEngine/scim_rawcode_imengine.cpp modules/IMEngine/scim_socket_imengine.cpp modules/SetupUI/scim_frontend_setup.cpp modules/SetupUI/scim_imengine_setup.cpp modules/SetupUI/scim_panel_gtk_setup.cpp src/scim_backend.cpp src/scim_chartraits.cpp src/scim_compose_key.cpp src/scim_config_agent.cpp src/scim_config_base.cpp src/scim_config_module.cpp src/scim_connection.cpp src/scim.cpp src/scim_debug.cpp src/scim_event.cpp src/scim_filter.cpp src/scim_filter_manager.cpp src/scim_filter_module.cpp src/scim_frontend.cpp src/scim_frontend_module.cpp src/scim_global_config.cpp src/scim_helper.cpp src/scim_helper_launcher.cpp src/scim_helper_manager.cpp src/scim_helper_manager_server.cpp src/scim_helper_module.cpp src/scim_hotkey.cpp src/scim_iconv.cpp src/scim_imengine.cpp src/scim_imengine_module.cpp src/scim_keyboard_layout_data.h src/scim_keyevent_data.h src/scim_launcher.cpp src/scim_lookup_table.cpp src/scim_module.cpp src/scim_object.cpp src/scim_panel_agent.cpp src/scim_panel_client.cpp src/scim_private.cpp src/scim_signals.cpp src/scim_slot.cpp src/scim_socket.cpp src/scim_transaction.cpp src/scim_utility.cpp tests/scim_test_helper.cpp tests/scim_test_imengine.cpp utils/scimkeyselection.cpp utils/scimstringview.c utils/scimtrayicon.c utils/scim_x11_utils.cpp scim-master/po/as.po000066400000000000000000001427661415264260100147040ustar00rootroot00000000000000# translation of as.po to Assamese # Assamese translations for SCIMpackage. # Copyright (C) 2008 Amitakhya Phukan # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Amitakhya Phukan , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:24+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method platform " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ইংৰাজী/চাবিৰ ফলক" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM ৰ সহায়" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "নিবেশ সংযোগক্ষেত্ৰ আৰু টুলবাৰ একেলগে লগাওক/নলগাওক । " #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM আৰু বৰ্ত্তমানৰ নিবেশ পদ্ধতিৰ বিষয়ে এটা চমু সহায় দেখুৱাওক ।" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "আদেশ তালিকা দেখুৱাওক ।" #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "বিন্যাস পুনঃ তোলক" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "সংযোগক্ষেত্ৰ একেলগে লগাওক" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "টুলবাৰ লুকাওক" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "সহায় ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "প্ৰস্থান" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM প্ৰতিষ্ঠা" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK ৱিজেট লাইব্ৰেৰীৰ ওপৰত আধাৰিত ঐক্যবদ্ধ কৰা প্ৰতিষ্ঠাৰ সৰঞ্জাম ।" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "পেনেল" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "অতিৰিক্ত" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM নিবেশ পদ্ধতিৰ প্ৰতিষ্ঠা" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method platform \n" "\n" "GUI প্ৰতিষ্ঠাৰ সৰঞ্জাম\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s অংশৰ কাৰণে প্ৰতিষ্ঠা ।" #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "চলি থকা অৱস্থাত সকলো বিন্যাস পুনঃ তুলি ল'ব পৰা নাযায় । সকলো নতুন বিন্যাস " "কাৰ্যকৰ কৰিবলৈ SCIM ক পুনৰাৰম্ভ কৰিব'লৈ নাপাহৰিব ।" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "সৰল-পাৰম্পৰিক চীনালৈ ৰূপান্তৰ" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "সৰল আৰু পাৰম্পৰিক চীনাৰ মাজত ৰূপান্তৰ" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "পাৰম্পৰিক- সৰল চীনালৈ ৰূপান্তৰ" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "কোনো ৰূপান্তৰ নহয়" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "সৰলৰ পৰা পাৰম্পৰিকলৈ" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "সৰল চীনাক পাৰম্পৰিক চীনালৈ ৰূপান্তৰ" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "পাৰম্পৰিকৰ পৰা সৰললৈ" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "পাৰম্পৰিক চীনাক সৰল চীনালৈ ৰূপান্তৰ" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Hot Keys:\n" "\n" " Control+u:\n" " Multibyte encoding আৰু Unicode ৰ মাজত সাল সলনি ।\n" "\n" " Esc:\n" " নিবেশ পদ্ধতি পুনঃ স্থাপন কৰক ।\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "বৰ্ত্তমানৰ নিবেশ পদ্ধতিৰ অৱস্থা । সলনি কৰিবলৈ টিপক ।" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "অজ্ঞাত" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "সৰ্বব্যাপী প্ৰতিষ্ঠা" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "সকলো FrontEnd অংশই ব্যৱহাৰ কৰা সৰ্বব্যাপী বিকল্প প্ৰতিষ্ঠা কৰক, X11 FrontEnd, " "GTK IMModule, QT IMModule ইত্যাদিৰ সৈতে ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ট্ৰিগাৰ (_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ট্ৰিগাৰৰ চাবি বাচক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM নিবেশ পদ্ধতি আৰম্ভ/বন্ধ কৰিব লগা চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক " "সম্পাদন কৰিবলৈ ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "আৰম্ভ কৰক (_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "আৰম্ভৰ চাবি নিৰ্ব্বাচন কৰক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM নিবেশ পদ্ধতি আৰম্ভ কৰিব লগা চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক সম্পাদন " "কৰিবলৈ ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "বন্ধ কৰক (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "বন্ধৰ চাবি নিৰ্ব্বাচন কৰক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM নিবেশ পদ্ধতি বন্ধ কৰিব লগা চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক সম্পাদন " "কৰিবলৈ ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "পিছৰ নিবেশ পদ্ধতি (_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "পিছৰ নিবেশ পদ্ধতিৰ চাবি নিৰ্ব্বাচন কৰক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "পিছৰ নিবেশ পদ্ধতিলৈ সলনি কৰিব লগা চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক সম্পাদন " "কৰিবলৈ ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "পূৰ্বৰ নিবেশ পদ্ধতি (_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "পিছৰ নিবেশ পদ্ধতিৰ চাবি নিৰ্ব্বাচন কৰক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "পূৰ্বৰ নিবেশ পদ্ধতিলৈ সলনি কৰিব লগা চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক " "সম্পাদন কৰিবলৈ ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "নিবেশ পদ্ধতিৰ তালিকা দেখুৱাওক (_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "নিবেশ পদ্ধতি তালিকাৰ চাবিক দেখুওৱা নিৰ্ব্বাচন কৰক" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "নিবেশ পদ্ধতিৰ তালিকা দেখুওৱাৰ চাবিৰ ঘটনা । সোঁফালৰ বুটাম টিপক তাক সম্পাদন " "কৰিবলৈ ।" #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "বিকল্পসমূহ" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "চাবিৰ ফলকৰ পৰিকল্পনা (_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "আপোনাৰ বৰ্ত্তমানে ব্যৱহৃত চাবিৰ ফলকৰ পৰিকল্পনা নিৰ্ব্বাচন কৰিব লাগে যাতে " "নিবেশ পদ্ধতি, যিসকলে চাবিৰ ফলকৰ পৰিকল্পনাৰ বিষয়ে চিন্তাকৰে, সঠিকভাবে কাম কৰে ।" #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "গ্ৰাহকৰ সংযোগক্ষেত্ৰত Preedit String প্ৰোথিত কৰক (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, এটা স্বাধীন সংযোগক্ষেত্ৰ সলনি, preedit string " "পোনেপোনে গ্ৰাহকৰ নিবেশ সংযোগক্ষেত্ৰত দেখুৱা যাব ।" #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "সকলো অনুপ্ৰয়োগত একেই নিবেশ পদ্ধতি ব্যৱহাৰ কৰক (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, অকল এটা নিবেশ পদ্ধতিহে একে সময়ত সকলো অনুপ্ৰয়োগৰ " "দ্বাৰা ব্যৱহাৰযোগ্য হ'ব । ন'হ'লে বিভিন্ন অনুপ্ৰয়োগে বেলেগ বেলেগ নিবেশ পদ্ধতি " "ব্যৱহাৰ কৰিব পাৰে ।" #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Hotkeys" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "আপুনি ইয়াত নিবেশ পদ্ধতি সক্ৰিয়/নিষ্ক্ৰীয় কৰিব পাৰে আৰু নিবেশ পদ্ধতি সমূহৰ " "বাবে hotkey সমূহ নিৰ্ধাৰিত কৰিব পাৰে ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "সংস্থাপিত নিবেশ পদ্ধতিৰ সেৱা:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Hotkey ৰ সম্পাদন (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "নিৰ্বাচিত নিবেশ পদ্ধতিৰ সৈতে সম্বন্ধিত Hotkey সমূহৰ সম্পাদন কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "ফিল্টাৰ নিৰ্ব্বাচন কৰক (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "এই নিবেশ পদ্ধতিৰ সৈতে সংযুক্ত ফিল্টাৰ সমূহ নিৰ্ব্বাচন কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "বিস্তাৰিত কৰক (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "সকলো ভাষাৰ শ্ৰেণীৰ বিস্তাৰ কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "সংকোচন কৰক (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "সকলো ভাষাৰ শ্ৰেণীক সংকোচন কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "সকলোকে সক্ৰিয় কৰক (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "সকলো নিবেশ পদ্ধতি সক্ৰিয় কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "সকলোকে নিষ্ক্ৰীয় কৰক (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "সকলো নিবেশ পদ্ধতি নিষ্ক্ৰীয় কৰক ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "নাম" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "সক্ৰিয়" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ফিল্টাৰ" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ভাষা" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "বিৱৰণ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s ৰ বাবে Hotkey ৰ সম্পাদন কৰক" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s ৰ বাবে ফিল্টাৰ নিৰ্ব্বাচন কৰক" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "ওপৰলৈ যাওক (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "তললৈ যাওক (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x লাইব্ৰেৰীৰ ভিত্তিক পেনেল ডেমন ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "সদায়ে" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "দাবী কৰোঁতে" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "কেতিয়াও নহয়" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "টুলবাৰ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "দেখুৱাওক (_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Auto s_nap" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "নিবেশ পদ্ধতিৰ আইকণ দেখুৱাওক (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "নিবেশ পদ্ধতিৰ নাম দেখুৱাওক (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "সময়ৰ বিৰতি লুকুৱাওক (_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "stick আইকণ দেখুৱাওক (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "তালিকাৰ আইকণ দেখুৱাওক (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "সহায়ৰ আইকণ দেখুৱাওক (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "গুণৰ লেবেল দেখুৱাওক (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "নিবেশৰ সংযোগক্ষেত্ৰ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "প্ৰোথিত বিচৰাৰ টেবুল (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "লম্বীয় বিচৰাৰ টেবুল (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "বিবিধ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ট্ৰে'ৰ আইকণ দেখুৱাওক (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "সংযোগক্ষেত্ৰক আঠা লগাওক (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ফ'ন্ট (_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"সদায়ে\" বিকল্প নিৰ্ব্বাচন কৰিলে, টুলবাৰ সদায়ে পৰ্দ্দাত দেখুওৱা হ'ব । \"দাবী " "কৰোঁতে\" বিকল্প নিৰ্ব্বাচিত হ'লে, অকল SCIM সক্ৰিয় কৰাৰ সময়তহে দেখুৱা হ'ব । " "\"কেতিয়াও নহয়\" বিকল্প নিৰ্বাচিত হ'লে, ইয়াক কেতিয়াও দেখুওৱা নহয় ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, টুলবাৰক পৰ্দ্দাৰ কাষত লগোৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "এই সময় বিৰতিৰ পিছত টুলবাৰ লুকাই যাব । এই বিকল্প তেতিয়াহে বৈধ যেতিয়া \"সদায় " "দেখুৱাওক\" নিৰ্বাচিত হয় । এই আচৰণ নিষ্ক্ৰীয় কৰিবলৈ শুণ্যলৈ নিৰ্ধাৰিত কৰক ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, নিবেশ পদ্ধতিৰ আইকণ টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, নিবেশ পদ্ধতিৰ নাম টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, stick আইকণ টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, তালিকাৰ আইকণ টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, সহায়ৰ আইকণ টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, নিবেশ পদ্ধতিৰ গুণৰ আখৰৰ লেবেল টুলবাৰত দেখুৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, বিচৰাৰ টেবুল নিবেশ সংযোগক্ষেত্ৰত প্ৰোথিত হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "এই বিকল্প নিৰ্ব্বাচন কৰিলে, বিচৰাৰ টেবুল লম্বীয়ভাবে দেখুওৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, ট্ৰে আইকণ ডেষ্কট'পৰ টাস্কবাৰত দেখুওৱা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "এই বিকল্প নিৰ্ব্বাচন কৰিলে, টুলবাৰ,নিবেশ আৰু বিচৰাৰ টেবুল প্ৰাৰম্ভিক স্থানত " "লাগি যাব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "নিবেশ আৰু বিচৰাৰ টেবুলৰ সংযোগক্ষেত্ৰত ফ'ন্টৰ পছন্দ ব্যৱহাৰ কৰা হ'ব ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "সংযোগক্ষেত্ৰৰ ফ'ন্ট নিৰ্ব্বাচন কৰক" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ইংৰাজী/ইউৰুপীয়" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ইংৰাজী (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "বেলজিয়ান" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ক্ৰোয়েচিয়ান" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "ছেক" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "ছেক (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ডেনিশ্ব" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ডাচ্" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ভ'ৰাক" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "এস্টোনিয়ান" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ফিনিশ্ব" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ফৰাচী" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ফৰাচী (কানাডিয়ান)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ফৰাচী (ছুইৎজাৰ্লেন্ড)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "জাৰ্মান" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "জাৰ্মান (deadkeys ৰ সৈতে)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "জাৰ্মান (ছুইছ)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "গ্ৰীক" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "হাঙ্গেৰিয়ান" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ইটালিয়ান" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "জাপানী" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "নৰৱেজিয়ান" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "পোলিশ" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "প'ৰ্টুগীছ" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "প'ৰ্টুগীছ (ব্ৰাজিল)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "প'ৰ্টুগীছ (ব্ৰাজিল US স্বৰভঙ্গি)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ৰুচীয়" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "স্ল'ভাক" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "স্ল'ভাক (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "স্লোভেনিয়ান" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "স্পেনিশ্ব" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "স্পেনিশ্ব (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "স্পেনিশ্ব (লেটিন আমেৰিকা)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "ছুইডিশ" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "টুৰস্কীয়" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ইংৰাজী (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "আইচ্‌লেণ্ডিক" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "লিথুৱেনিয়ান" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "উক্ৰেইনিয়ান" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "আমহাৰিক" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "আৰবীয়" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "আৰবীয় (ইজিপ্ত)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "আৰবীয় (লেবানন)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "অসমীয়া" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "আজাৰবেইজানি" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "বেলাৰুচীয়" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "বুল্গাৰিয়ান" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "বঙালী" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "বঙালী (ভাৰত)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "তিব্বতীয়" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "বোচ্নিয়ান" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "কেটেলান" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "ৱেল্‌ছ" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "ডিৱেহি" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ইংৰাজী" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ইংৰাজী (অস্ট্ৰেলিয়ান)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ইংৰাজী (কানাডিয়ান)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ইংৰাজী (ব্ৰিটিশ্ব)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ইংৰাজী (আয়াৰলেন্ড)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ইংৰাজী (অ্যামেৰিকান)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "স্পেনিশ্ব (মেক্সিকো)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "বাস্ক" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "পাৰ্চিয়ান" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "আইৰিশ্ব" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "গেলিচিয়ান" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "গুজ্ৰাটি" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "হিব্ৰিউ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "হিন্দী" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "আৰ্মেনিয়ান" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ইন্টাৰলিঙ্গুৱা" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ইন্ডোনেচিয়ান" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "জৰ্জিয়ান" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "কাজাখ" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "কেম্বোদিয়ান" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "কন্নড়" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "ক'ৰীয়ান" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "লাওথিয়ান" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "লাট্‌ভিয়ান" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "মেছিডোনিয়ান" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "মলয়ালম" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "মঙ্গোলিয়ান" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "মৰাঠি" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "মলয়" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "বাৰ্মিছ" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "নেপালি" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "নৰৱেজিয়ান (নিনৰ্স্ক)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "নৰৱেজিয়ান (বকমল)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ওৰীয়" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "পাঞ্জাবি" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "ৰোমানিয়ান" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "ছিংহালা" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "আল্বানিয়ান" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "ছাৰ্বিয়ান" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "ছুইডিশ (ফিনলেন্ড)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "টামিল" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "তেলুগু" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "থাই" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "উইঘুৰ" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "উৰ্দু" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "উজ্বেক" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "ভিয়েটনামীয়" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "ৱেলুন" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "য়িদ্দিশ্ব" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "চীনা" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "চীনা (সৰল)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "চীনা (পাৰম্পৰিক)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "অন্য" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "নিৰ্বাচিত চাবি (_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "চাবিৰ কোড:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "পৰিবৰ্তন কৰা:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "প্ৰথমে এটা চাবিৰ কোড দিয়ক ।" #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "এটা চাবি টিপক (বা এটা চাবিৰ জোট) ।\n" "চাবি এৰিলে এই সম্বাদ বন্ধ কৰা হ'ব ।" #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "এটা চাবি ধৰক ।" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "চাবিৰ নিৰ্ব্বাচন" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "কাৰ্ছাৰৰ স্থান" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "আখৰত ভৰোৱা কাৰ্ছাৰৰ বৰ্ত্তমান অৱস্থান ।" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "সৰ্বাধিক দৈৰ্ঘ্য" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "এই আখৰৰ প্ৰদৰ্শনৰ বাবে আখৰৰ সৰ্বাধিক দৈৰ্ঘ্য । শুণ্য যদি সৰ্বাধিক নহয় ।" #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "সৰ্বাধিক প্ৰস্থ" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "এই আখৰৰ প্ৰদৰ্শনৰ বাবে সৰ্বাধিক প্ৰস্থ ।" #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ফ্ৰেম আছে" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "আখৰৰ প্ৰদৰ্শনত FALSE হ'লে বাহিৰৰ প্ৰৱণ কোণ আঁতৰুৱা হ'ব ।" #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "কাৰ্ছাৰ আঁকক" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE হ'লে ব্লিংকিং কাৰ্ছাৰ আঁকক ।" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "কাৰ্ছাৰ স্বয়ংক্ৰিয়ভাবে চলাওক ।" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE হ'লে মাউছ টিপিলে কাৰ্ছাৰৰ স্থান নিজেই চলাব ।" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "আগবঢ়া বুটাম টিপাৰ ঘটনা" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE হ'লে আগবঢ়াৰ বুটাম টিপাৰ ঘটনাত ব্যৱহাৰকৰোঁতাৰ অনুপ্ৰয়োগলৈ যাব ।" #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "আখৰক খাপ খোৱাবলৈ বিজেটক স্বয়ংক্ৰিয়ভাবে পুনঃ আকাৰ দিয়ক" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE হ'লে স্বয়ংক্ৰিয়ভাবে পুনঃ আকাৰ দিয়া সক্ৰিয় হ'ব ।" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "আখৰত প্ৰস্থ" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "আখৰৰ প্ৰদৰ্শনত ৰিক্ত স্থানৰ বাবে এৰিব লগা আখৰৰ সংখ্যা ।" #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "স্ক্ৰ'ল কৰাৰ আৰম্ভণি" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "আখৰৰ প্ৰদৰ্শনত পৰ্দ্দাৰ বাওঁফাললৈ স্ক্ৰ'ল কৰিব লগা পিক্সেলৰ সংখ্যা" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "টেক্সট" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "আখৰৰ প্ৰদৰ্শনৰ বিষয়বস্তু" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "দিক্‌বিন্যাস" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ট্ৰে'ৰ দিক্‌বিন্যাস ।" scim-master/po/bn_IN.po000066400000000000000000001514321415264260100152540ustar00rootroot00000000000000# translation of bn_IN.po to Bengali INDIA # Bengali translations for SCIM package. # Copyright (C) 2008 Runa Bhattacharjee # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Runa Bhattacharjee , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:25+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "স্মার্ট কমন ইনপুট মেথড (SCIM) প্ল্যাটফর্ম " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) ২০০২-২০০৫ জেমস সু \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ইংরেজি/কি-বোর্ড" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM সহায়তা" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ইনপুট উইন্ডো ও টুল-বার আটক/মুক্ত করুন।" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "" "SCIM এবং বর্তমান ইনপুট পদ্ধতি সংক্রান্ত সংক্ষিপ্ত সহায়ক তথ্য প্রদর্শন করা হবে।" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "কমান্ড মেনু প্রদর্শন করা হবে" #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) ২০০২-২০০৫ জেমস সু " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "কনফিগারেশন পুনরা লোড করুন" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "উইন্ডো আটক করা হবে" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "টুল-বার আড়াল করা হবে" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "সাহায্য ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "প্রস্থান" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM প্রস্তুতি" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK উইজেট লাইব্রেরির উপর ভিত্তি করে নির্মিত প্রস্তুতি ব্যবস্থা।" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "প্রেক্ষাপট (FrontEnd)" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "ইনপুট পদ্ধতির ইঞ্জিন (IMEngine)" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "প্যানেল" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "অতিরিক্ত সামগ্রী" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM ইনপুট পদ্ধতি প্রস্তুতি" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " স্মার্ট কমন ইনপুট মেথড (SCIM) প্ল্যাটফর্ম \n" "\n" "GUI প্রস্তুতি ব্যবস্থা\n" "\n" "\n" "\n" "স্বত্বাধিকার ২০০২-২০০৪, জেমস সু <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s মডিউলের প্রস্তুতি" #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "সব কনফিগারেশন ততক্ষনাৎ নতুন করে লোড করা হয় না। এই কারণে, কনফিগারেশনের সকল " "পরিবর্তন প্রয়োগ করার জন্য SCIM পুনরায় আরম্ভ করা বাঞ্ছনীয়।" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "সরলীকৃত-পারম্পরিক চীনা রূপান্তর" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "সরলীকৃত চীনা ও পারম্পরিক চীনার মধ্যে রূপান্তর করুন" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "সরলীকৃত-পারম্পরিক চীনা রূপান্তর" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "রূপান্তর করা হবে না" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "সরলীকৃত থেকে পারম্পরিক" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "সরলীকৃত চীনা থেকে পারম্পরিক চীনাতে রূপান্তর করুন" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "পারম্পরিক থেকে সরলীকৃত" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "পারম্পরিক চীনা থেকে সরলীকৃত চীনাতে রূপান্তর করুন" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "জেমস সু " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) ২০০২-২০০৬ জেমস সু " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "হট কি:\n" "\n" " Control+u:\n" " মাল্টি-বাইট এনকোডিং ও Unicode-র মধ্যে পরিবর্তন করুন\n" "\n" " Esc:\n" " ইনপুট পদ্ধতির মান পুনরায় নির্ধারণ করুন।\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "বর্তমানে ব্যবহৃত ইনপুট পদ্ধতির অবস্থা। পরিবর্তনের জন্য ক্লিক করুন।" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "অজানা" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "সার্বজনীন বৈশিষ্ট্য" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "সকল FrontEnd মডিউল যেমন X11 FrontEnd, GTK IMModule, QT IMModule প্রভৃতি " "দ্বারা ব্যবহৃত সার্বজনীন বিকল্পের মান নির্ধারণ করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ট্রিগার: (_T)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ট্রিগার-কি নির্বাচন করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ইনপুট পদ্ধতি সক্রিয়/নিষ্ক্রিয় করতে ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য " "ডানদিকে অবস্থিত বাটন ক্লিক করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "সক্রিয় করুন: (_O)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "সক্রিয় করার কি (key) নির্বাচন করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ইনপুট পদ্ধতি সক্রিয় করতে ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য ডানদিকে " "অবস্থিত বাটন ক্লিক করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "নিষ্ক্রিয় করুন: (_f)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "নিষ্ক্রিয় করার কি (key) নির্বাচন করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ইনপুট পদ্ধতি নিষ্ক্রিয় করতে ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য " "ডানদিকে অবস্থিত বাটন ক্লিক করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "পরবর্তী ইনপুট পদ্ধতি (_N)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "পরবর্তী ইনপুট পদ্ধতি নির্বাচনের জন্য কি (key) চিহ্নিত করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "পরবর্তী ইনপুট পদ্ধতি প্রয়োগ করতে ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য " "ডানদিকে অবস্থিত বাটন ক্লিক করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "পূর্ববর্তী ইনপুট পদ্ধতি: (_P)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "পূর্ববর্তী ইনপুট পদ্ধতি নির্বাচনের জন্য কি (key) চিহ্নিত করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "পূর্ববর্তী ইনপুট পদ্ধতি প্রয়োগ করতে ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য " "ডানদিকে অবস্থিত বাটন ক্লিক করুন।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ইনপুট পদ্ধতি সংক্রান্ত মেনু প্রদর্শন করা হবে: (_m)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ইনপুট পদ্ধতির মেনু প্রদর্শনের কি (key) নির্বাচন করুন" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ইনপুট পদ্ধতির মেনু প্রদর্শনের জন্য ব্যবহৃত কি-র কর্ম। পরিবর্তন করার জন্য " "ডানদিকে অবস্থিত বাটন ক্লিক করুন।" #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "বিবিধ বিকল্প" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "কি-বোর্ডের বিন্যাস: (_K)" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "কি-বোর্ড বিন্যাস প্রয়োগকারী ইনপট পদ্ধতি দ্বারা সঠিকরূপে কর্ম সঞ্চালনের জন্য " "আপনার ব্যবহৃত কি-বোর্ড বিন্যাস নির্বাচন করুন।" #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "ক্লায়েন্ট উইন্ডোর মধ্যে প্রি-এডিট স্ট্রিং এমবেড করুন (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "মান নির্বাচিত হলে, ক্লায়েন্ট ইনপুট উইন্ডোর মধ্যে প্রি-এডিট পংক্তি প্রদর্শন " "করা হবে। অন্যথা স্বতন্ত্র ভাসমান উইন্ডো রূপে প্রদর্শন করা হবে।" #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "সর্বধরনের অ্যাপ্লিকেশন দ্বারা একই ইনপুট পদ্ধতি ব্যবহার করা হবে (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "এই বিকল্প নির্বাচিত হলে সর্বধরনের অ্যাপ্লিকেশন দ্বারা এক সময়ে শুধুমাত্র একটি " "সুনির্দিষ্ট ইনপুট পদ্ধতি ব্যবহার করা হবে। অন্যথা ভিন্ন অ্যাপ্লিকেশন দ্বারা " "ভিন্ন ইনপুট পদ্ধতি ব্যবহার করা সম্ভব।" #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "হট-কি" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "এই ডায়লগের মধ্যে বিভিন্ন ইনপুট পদ্ধতি সক্রিয়/নিষ্ক্রিয় এবং সেগুলির জন্য হট-কি " "নির্ধারণ করা যাবে।" #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "বর্তমানে ইনস্টল করা ইনপুট পদ্ধতি পরিসেবা:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "হট-কি সম্পাদনা (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "নির্বাচিত ইনপুট পদ্ধতির সাথে যুক্ত হট-কি সম্পাদনা করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "ফিল্টার নির্বাচন করুন (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "চিহ্নিত ইনপুট পদ্ধতির সাথে যুক্ত করার জন্য ফিল্টার নির্বাচন করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "প্রসারণ (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "সব ভাষার বিভাগ প্রসারণ করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "সংকুচন (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "সব ভাষার বিভাগ সংকুচন করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "সকল সক্রিয় করুন (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "সকল ইনপুট পদ্ধতি সক্রিয় করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "সকল নিষ্ক্রিয় করুন (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "সকল ইনপুট পদ্ধতি নিষ্ক্রিয় করুন।" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "নাম" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "সক্রিয় করুন" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ফিল্টার" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ভাষা" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "বিবরণ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s-র হট-কি সম্পাদনা করুন" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s-র ফিল্টার নির্বাচন করুন" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "উপরে স্থানান্তর (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "নীচে স্থানান্তর (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x লাইব্রেরির উপর ভিত্তি করে নির্মিত প্যানেল ডেমন।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "সর্বদা" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "প্রয়োজন অনুসারে" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "কখনো নয়" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "টুল-বার" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "প্রদর্শন করা হবে: (_S)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "স্বয়ংক্রিয় স্ন্যাপ (_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "ইনপুট পদ্ধতির আইকন প্রদর্শন করা হবে (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "ইনপুট পদ্ধতির নাম প্রদর্শন করা হবে (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "সময়ের মেয়াদ আড়াল করা হবে: (_o)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "আটক করার আইকন প্রদর্শন করা হবে (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "মেনুর আইকন প্রদর্শন করা হবে (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "সাহায্যের আইকন প্রদর্শন করা হবে (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "বৈশিষ্ট্য চিহ্নকারী লেবেল প্রদর্শিত হবে (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ইনপুট উইন্ডো" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "এমবেড করা অনুসন্ধানের টেবিল (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "উলম্ব দিশায় অনুসন্ধানের টেবিল (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "বিবিধ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ট্রে-আইকন প্রদর্শন করা হবে (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "উইন্ডো আটক করা হবে (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ফন্ট: (_F)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"সর্বদা\" নির্বাচিত হলে পর্দার মধ্যে সর্বদা টুল-বার প্রদর্শন করা হবে। " "\"প্রয়োজন অনুসারে\" নির্বাচিত হলে SCIM সক্রিয় হলে টুল-বার প্রদর্শিত হবে এবং " "\"কখনো নয়\" নির্বাচিত হলে এটি কখনো প্রদর্শন করা হবে না।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "এই বিকল্পটি নির্বাচিত হলে পর্দার প্রান্তে টুল-বার আটক করা হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "সময়ের মেয়াদ উত্তীর্ণ হলে টুল-বার আড়াল করা হবে। \"সর্বদা\" প্রদর্শন নির্বাচিত " "হলে এই বিকল্পোর মান বৈধ হবে। এই আচরণ পরিবর্তনের জন্য মান শূণ্য নির্ধারণ করুন।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে ইনপুট পদ্ধতির আইকন প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে ইনপুট পদ্ধতির নাম প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে আটক করার আইকন প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে মেনু আইকন প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে সহায়তার আইকন প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "এই বিকল্পটি নির্বাচিত হলে টুল-বারের মধ্যে ইনপুট পদ্ধতির বৈশিষ্ট্যের লেবেল " "প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "এই বিকল্পটি নির্বাচিত হলে ইনপুট উইন্ডোর মধ্যে অনুসন্ধানের টেবিল এমবেড করা হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "এই বিকল্পটি নির্বাচিত হলে, অনুসন্ধানের টেবিলটি উলম্ব দিশায় প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "এই বিকল্পটি নির্বাচিত হলে ডেস্কটপের টাস্ক-বারের মধ্যে ট্রে-আইকন প্রদর্শিত হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "এই বিকল্পটি নির্বাচিত হলে টুল-বার, ইনপুট ও অনুসন্ধান টেবিলের উইন্ডোগুলি, মূল " "অবস্থানে আটক করা হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "ফন্টের চিহ্নিত বৈশিষ্ট্যগুলি ইনপুট ও অনুসন্ধান টেবিল উইন্ডোর মধ্যে ব্যবহার " "করা হবে।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "প্রেক্ষাপটে ব্যবহৃত ফন্ট নির্বাচন করুন" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ইংরেজি/ইউরোপিয়ান" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ইংরেজি (মার্কিন)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "বেলজিয়ান" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ক্রোয়েশিয়ান" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "চেক" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "চেক (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ড্যানিশ" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ডাচ" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ডিভোরাক (Dvorak)" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "এস্তোনিয়ান" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ফিনিশ" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ফ্রেঞ্চ" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ফ্রেঞ্চ (কানাডিয়ান)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ফ্রেঞ্চ (সুইৎজারল্যান্ড)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "জার্মান" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "জার্মান (লুপ্ত-কি সহ)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "জার্মান (সুইস)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "গ্রিক" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "হাঙ্গেরিয়ান" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ইটালিয়ান" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "জাপানি" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "নরওয়েজিয়ান" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "পোলিশ" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "পোর্তুগিজ" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "ব্রাজিলিয়ান পোর্তুগিজ " #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "পোর্তুগিজ (ব্রাজিল মার্কিন স্বরাঘাত চিহ্ন)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "রুশি" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "স্লোভাক" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "স্লোভাক (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "স্লোভেনিয়ান" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "স্প্যানিশ" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "স্প্যানিশ (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "স্প্যানিশ (লাতিন আমেরিকা)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "সুইডিশ" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "তুর্কি" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ইংরেজি (যুক্তরাজ্য)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "আইসল্যান্ডিক" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "লিথুয়েনিয়ান" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ইউক্রেনিয়ান" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "আমহারিক" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "আরবি" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "আরবি (মিশর)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "আরবি (লেবানোন)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "অসমীয়া" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "আজারবাইজানি" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "বেলারুশিয়ান" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "বুলগেরিয়ান" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "বাংলা" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "বাংলা (ভারত)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "তিব্বতি" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "বসনিয়ান" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "ক্যাটালান" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "ওয়েলশ" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "দিভেহি" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ইংরেজি" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ইংরেজি (অস্ট্রেলিয়ান)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ইংরেজি (কানাডিয়ান)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ইংরেজি (ব্রিটিশ)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ইংরেজি (আয়ারল্যান্ড)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ইংরেজি (আমেরিকান)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "স্প্যানিশ (মেক্সিকো)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "বাস্ক" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "ফার্সি" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "আইরিশ" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "গেলিশিয়ান" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "গুজরাতি" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "হিব্রু" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "হিন্দি" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "আর্মেনিয়ান" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ইন্টারলিঙ্গুয়া" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ইন্দোনেশিয়ান" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "জর্জিয়ান" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "কাজাখ" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "ক্যাম্বোডিয়ান" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "কন্নড়" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "কোরিয়ান" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "লাওথিয়ান" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "লাটভিয়ান" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "মেসিডোনিয়ান" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "মালায়ালম" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "মঙ্গোলিয়ান" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "মারাঠি" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "মালায়" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "বার্মিজ" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "নেপালি" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "নরওয়েজিয়ান (নিনোরস্ক)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "নরওয়েজিয়ান (বোকমাল)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ওরিয়া" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "পাঞ্জাবি" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "রোমেনিয়ান" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "সিংহলা" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "আলবেনিয়ান" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "সার্বিয়ান" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "সুইডিশ (ফিনল্যান্ড)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "তামিল" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "তেলুগু" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "থাই" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "উইগুর" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "উর্দু" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "উজবেক" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "ভিয়েতনামিস" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "ওয়ালুন" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "ইড্ডিশ" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "চিনা" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "চিনা (সরলীকৃত)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "চিনা (পারম্পরিক)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "অন্যান্য" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "নির্বাচিত কি: (_K)" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "কি-র কোড:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "পরিবর্তক:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "মুক্ত (_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "মিটা (_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "সুপার (_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "হাইপার (_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "অনুগ্রহ করে প্রথমে একটি কি-কোড উল্লেখ করুন।" #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "অনুগ্রহ করে একটি কি (অথবা কি সংকলন) টিপুন।\n" "কি-টি মুক্ত করা হলে এই ডায়লগটি বন্ধ করা হবে।" #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "কি চিহ্নিত করুন।" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "কি নির্বাচন" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "কার্সারের অবস্থান" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "সন্নিবেশ নির্দেশক কার্সারের বর্তমান অবস্থান অক্ষর দ্বারা নির্ধারিত।" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "সর্বোচ্চ দৈর্ঘ্য" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "পংক্তি অনুযায়ী প্রদর্শনের ক্ষেত্রে সর্বাধিক অক্ষর সংখ্যা। সর্বাধিক মান " "নির্ধারণ না করতে হলে শূণ্য ব্যবহৃত হবে।" #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "প্রস্থের সর্বোচ্চ মাপ" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "পংক্তি অনুযায়ী প্রদর্শনের ক্ষেত্রে সর্বাধিক প্রস্থের মাপ।" #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ফ্রেম বিশিষ্ট" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "" "পংক্তি অনুযায়ী প্রদর্শনের ক্ষেত্রে বাহির প্রান্তের বিভেল বাতিল করার জন্য " "FALSE নির্ধারণ করুন।" #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "কার্সার আকাঁ হবে" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "ঝিলিক সহ কার্সার প্রদর্শনের জন্য TRUE মান ব্যবহার করা আবশ্যক।" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "কার্সারের স্থান স্বয়ংক্রিয়রূপে পরিবর্তন করা হবে" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "মাউস ক্লিক করার ফলে স্বয়ংক্রিয়রূপে কার্সারের অবস্থান পরিবর্তনের জন্য TRUE মান " "আবশ্যক।" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "বাটন টেপার সাথে যুক্ত ঘটনা অনুবর্তন করা হবে" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "ব্যবহারকারীর প্রোগ্রামে বাটন টেপার সাথে যুক্ত ঘটনা অনুবর্তন করার জন্য মান " "TRUE আবশ্যক।" #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "পংক্তির মাপ অনুযায়ী উইজেটের মাপ স্বয়ংক্রিয়রূপে পরিবর্তন করা হবে" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "স্বয়ংক্রিয় মাপ পরিবর্তন সক্রিয় করার জন্য TRUE মান বাঞ্ছনীয়।" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "অক্ষর অনুযায়ী প্রস্থের মাপ" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "" "পংক্তি অনুযায়ী প্রদর্শনের ক্ষেত্রে যে সংখ্যক অক্ষরের জন্য স্থান ফাঁকা রাখা " "হবে।" #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "স্ক্রোলের অফ-সেট মান" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "পংক্তি অনুযায়ী প্রদর্শন ক্ষেত্রের যে পরিমাণ অংশ পর্দার বাঁদিক থেকে আড়াল হয়ে " "যাবে তা পিক্সেল অনুযায়ী ব্যক্ত করা হবে" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "টেক্সট" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "পংক্তি অনুযায়ী প্রদর্শনক্ষেত্রে প্রদর্শিত বিষয়বস্তু" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "দিশা" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ট্রে-র দিশা" scim-master/po/boldquot.sed000066400000000000000000000003311415264260100162440ustar00rootroot00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g scim-master/po/ca.po000066400000000000000000001237411415264260100146540ustar00rootroot00000000000000# Traducció del scim al Català # This file is distributed under the same license as the scim package. # David Planella Molas , 2008. # Joan Duran , 2008. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:26+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Plataforma de mètode d'entrada comú intel·ligent " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Anglès/teclat" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Ajuda de l'SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Enganxa/desenganxa la finestra d'entrada i la barra d'eines." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Mostra una breu ajuda sobre l'SCIM i el mètode d'entrada actual." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Mostra el menú d'ordres." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Torna a carregar la configuració" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Finestres enganxoses" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Amaga la barra d'eines" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Ajuda..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Surt" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Configuració de l'SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "Utilitat de configuració integrada basada en la biblioteca de ginys del GTK." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Quadre" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Configuració de l'SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Plataforma de mètode d'entrada comú intel·ligent " "\n" "\n" "Interfície gràfica de la utilitat de " "configuració\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su " "<suzhe@tsinghua.org.cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "La configuració dels mòduls %s." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "No tota la configuració es tornarà a carregar immediatament. No oblideu de " "reiniciar l'SCIM per a permetre que la configuració nova tingui efecte." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Conversió de xinès simplificat-tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Converteix entre xinès simplificat i xinès tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "XS-XT" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Conversió de xinès simplificat-tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Sense conversió" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Simplificat a tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Converteix xinès simplificat a xinès tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Tradicional a simplificat" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Converteix xinès tradicional a xinès simplificat" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "XS->XT" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "XT->XS" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "CODI BRUT" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Dreceres de teclat:\n" "\n" " Control+U:\n" " commuta entre la codificació Multibyte i la Unicode.\n" "\n" " Esc:\n" " reinicia el mètode d'entrada.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "L'estat del mètode d'entrada actual. Feu clic per a canviar-lo." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Desconegut" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Configuració global" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Configura les opcions globals utilitzades per tots els mòduls FrontEnd, " "incloent l'X11 FrontEnd, el GTK IMModule, el QT IMModule, etc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Activador:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Seleccioneu les tecles d'activació" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Les tecles d'esdeveniment per a activar/desactivar el mètode d'entrada SCIM. " "Feu clic al botó de la dreta per a editar-les." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "A_ctiva:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Seleccioneu les tecles d'activació" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Les tecles d'esdeveniment per a activar el mètode d'entrada SCIM. Feu clic al " "botó de la dreta per a editar-les." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Desactiva:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Seleccioneu les tecles de desactivació" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Les tecles d'esdeveniment per a desactivar el mètode d'entrada SCIM. Feu clic " "al botó de la dreta per a editar-les." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "Mètode d'entrada _següent:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Seleccioneu les tecles del mètode d'entrada següent" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Les tecles d'esdeveniment per a commutar al mètode d'entrada següent. Feu " "clic al botó de la dreta per a editar-les." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "Mètode d'entrada _anterior:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Seleccioneu les tecles del mètode d'entrada anterior" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Les tecles d'esdeveniment per a commutar al mètode d'entrada anterior. Feu " "clic al botó de la dreta per a editar-les." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Mostra el _menú del mètode d'entrada:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Seleccioneu les tecles per a mostrar el menú del mètode d'entrada" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Les tecles d'esdeveniment per a mostrar el menú del mètode d'entrada. Feu " "clic al botó de la dreta per a editar-les." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Opcions" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "Disposició de _teclat:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Hauríeu de triar la disposició de teclat que utilitzeu actualment de manera " "que els mètodes d'entrada, que depenen de la disposició del teclat, puguin " "funcionar correctament." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Incrusta cadenes preeditades a la finestra del client" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Si aquesta opció està activada, la cadena de preedició es mostrarà " "directament a la finestra d'entrada del client enlloc d'una finestra flotant " "independent." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Comparteix el mateix mètode d'entrada entre totes les aplicacions" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Si aquesta opció està activada, llavors totes les aplicacions poden utilitzar " "a la vegada l'únic mètode d'entrada. Altrament, cada aplicació pot utilitzar " "un mètode d'entrada diferent." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Dreceres de teclat" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Aquí podeu habilitar/inhabilitar els mètodes d'entrada i establir les " "dreceres de teclat per als mètodes d'entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Els serveis del mètode d'entrada instal·lats:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Edi_ta les dreceres" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "" "Edita les dreceres de teclat associades amb el mètode d'entrada seleccionat." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Selecciona els _filtres" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Selecciona els filtres que s'adjuntaran a aquest mètode d'entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "A_mplia" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Amplia totes les categories de llenguatge." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "R_edueix" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Redueix totes les categories de llenguatge." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "_Habilita'ls tots" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Habilita tots els mètodes d'entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Inhabilita'ls tots" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Inhabilita tots els mètodes d'entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nom" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Habilitat" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtres" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Idiomes" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Descripció" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Edita les dreceres per a %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Seleccioneu els filtres per a %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Mou am_unt" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Mou a_vall" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Un dimoni del quadre basat en la biblioteca GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Sempre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Segons demanda" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Mai" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Barra d'eines" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Mostra:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "D_esplaça automàticament" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Mostra la _icona del mètode d'entrada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Mostra el _nom del mètode d'entrada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Temps d'espera per a amaga_r:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Mostra la icona d'engan_xar" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Mostra la i_cona de menú" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Mostra la icona d'a_juda" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Mostra l'eti_queta de propietats" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Finestra d'entrada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Taula de cerca incr_ustada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "Taula de cerca _vertical" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Miscel·lània" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Mostra la icona a la _safata" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "En_ganxa les finestres" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Tipus de lletra:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Si s'ha seleccionat l'opció «Sempre», la barra d'eines sempre es mostrarà a " "la pantalla. Si s'ha seleccionat l'opció «Segons demanda», només es mostrarà " "quan el SCIM estigui activat. Si s'ha seleccionat l'opció «Mai», llavors mai " "es mostrarà." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Si aquesta opció està activada, la barra d'eines es desplaçarà a la cantonada " "de la pantalla." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "La barra d'eines s'amagarà quan s'acabi el temps d'espera. Aquesta opció " "només és vàlida quan s'ha seleccionat l'opció «Mostra sempre». Estableix a " "zero per a inhabilitar aquest comportament." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Si aquesta opció està activada, la icona del mètode d'entrada es mostrarà a " "la barra d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Si aquesta opció està activada, el nom del mètode d'entrada es mostrarà a la " "barra d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Si aquesta opció està activada, la icona d'enganxar es mostrarà a la barra " "d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Si aquesta opció està activada, la icona de menú es mostrarà a la barra " "d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Si aquesta opció està activada, la icona d'ajuda es mostrarà a la barra " "d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Si aquesta opció està activada, l'etiqueta de text de les propietats del " "mètode d'entrada es mostrarà a la barra d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Si aquesta opció està activada, la taula de cerca s'incrustarà a la finestra " "d'entrada." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Si aquesta opció està activada, la taula de cerca es mostrarà verticalment." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Si aquesta opció està activada, la icona de la safata es mostrarà a la barra " "d'eines." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Si aquesta opció està activada, la barra d'eines, l'entrada i la taula de " "cerca s'enganxaran a la seva posició original." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "El tipus de lletra especificat que s'utilitzarà a les finestres d'entrada i " "de la taula de cerca." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Seleccioneu el tipus de lletra de la interfície" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Anglès/europeu" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Anglès (EUA)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belga" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Croat" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Txec" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Txec (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Danès" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Holandès" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estonià" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finès" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Francès" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Francès (canadenc)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Francès (suís)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Alemany" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Alemany (amb tecles mortes)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Alemany (suís)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Grec" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Hongarès" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italià" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japonès" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Noruec" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polac" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portuguès" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portuguès (brasiler)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portuguès (accents EUA de Brasil)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Rus" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Eslovac" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Eslovac (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Eslovè" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Espanyol" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Espanyol (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Espanyol (Amèrica llatina)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Suec" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turc" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Anglès (Regne Unit)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandès" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lituà" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ucraïnès" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amhàric" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Àrab" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Àrab (Egipte)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Àrab (Líban)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamès" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Àzeri" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Bielorús" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Búlgar" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengalí" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengalí (Índia)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetà" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosnià" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Català" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Gal·lès" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Anglès" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Anglès (australià)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Anglès (canadenc)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Anglès (britànic)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Anglès (irlandès)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Anglès (americà)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "Esperanto" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Espanyol (mexicà)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Basc" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Persa" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irlandès" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Gallec" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebreu" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armeni" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesi" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgià" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazakh" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Cambodjà" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Coreà" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laosià" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Letó" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macedoni" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malaialam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongol" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malai" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Burmès" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalès" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Noruec (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Noruec (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Romanès" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Singalès" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanès" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbi" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Suec (finlandès)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Tailandès" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uigur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdú" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbek" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamita" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Való" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Jiddisch" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Xinès" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Xinès (simplificat)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Xinès (tradicional)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Altre" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "_Tecles seleccionades:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Codi de tecla:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modificadors:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "Tecla de c_ontrol" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "Tecla d'a_lternativa" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "Tecla de ma_júscules" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "Alli_bera" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "Sú_per" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Híper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Primer hauríeu d'introduir un codi de tecla." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Premeu una tecla (o una combinació de tecles).\n" "Aquest diàleg es tancarà quan s'alliberi la tecla." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Captura una tecla" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Selecció de tecles" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Posició del cursor" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "La posició actual del cursor d'inserció en caràcters." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Longitud màxima" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Número màxim de caràcters per a aquesta visualització de la cadena. El valor " "zero significa que no hi ha màxim." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Amplada màxima" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Amplada màxima de visualització de la cadena." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Té marc" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "" "Si és fals, el marc exterior és suprimit de la visualització de la cadena." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Dibuixa un cursor" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Si és cert, es dibuixa un cursor parpellejant." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Mou automàticament el cursor" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "Si és cert, es mourà automàticament la posició del cursor en fer clic amb el " "ratolí." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "El botó d'avançar activa l'esdeveniment" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "Si és cert, el botó d'avançar activa l'esdeveniment a l'usuari del programa." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Redimensiona automàticament el giny per a ajustar la cadena" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Si és cert, s'activarà el redimensionament automàtic." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Amplada en caràcters" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "" "Número de caràcters a deixar en blanc en la visualització de la cadena." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Òfset de desplaçament" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Número de píxels de la visualització de la cadena desplaçats fora de la " "pantalla cap a l'esquerra" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Text" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Els continguts de la visualització de la cadena" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientació" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "L'orientació de la safata." scim-master/po/cs.po000066400000000000000000001222121415264260100146660ustar00rootroot00000000000000# translation of cs.po to Czech # translation of cs.po to cs_CZ # translation of scim.po to cs_CZ # This file is distributed under the same license as the SCIM package. # Copyright (C) 2005 TKlara Cihlarova , 2005. # Klara Cihlarova , 2005. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:28+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "SCIM platforma" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Angličtina/klávesnice" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Nápověda SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Přišpendlit/odšpendlit vstupní okno a nástrojovou lištu." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Zobrazí krátkou nápovědu o aktuální vstupní metodě." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Zobrazí nabídku příkazů." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Obnovit konfiguraci" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Přišpendlit okno" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Skrýt lištu" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Nápověda..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Ukončit" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Nastavit SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Grafické rozhraní založené na knihovně GTK Widget." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Rozhraní" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Panel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Rozšíření" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Nastavení vstupní metody SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" "Smart Common Input Method platforma \n" "\n" "Grafické rozhraní\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Nastavení %s modulů." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "Ne všechna nastavení lze zavést za běhu. Nezapomeňte SCIM restartovat." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Převod zjednodušená - tradiční čínština" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Převod mezi zjednodušenou čínštinou a tradiční čínštinou" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Převod zjednodušená - tradiční čínština" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Bez převodu" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Ze zjednodušené do tradiční" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Převést zjednodušenou čínštinu do tradiční čínštiny" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Z tradiční do zjednodušené" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Převést tradiční čínštinu do zjednodušené čínštiny" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW KÓD" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Klávesové zkratky:\n" "\n" "\n" " Control+u:\n" " přepnutí mezi Multibyte a Unicode kódováním.\n" "\n" " Esc:\n" " zrušení vstupní metody.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Stav aktuální vstupní metody. Změnu provedete kliknutím." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Neznámé" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Obecná nastavení" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Nastavení klávesový zkratek používaných moduly včetně X11, GTK, IMModule, " "GTK IMModule, QT IMModule atd." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Spouštění:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Zvolte spouštěcí klávesy" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové události zapínající/vypínající SCIM vstupní metodu. Úpravu " "provedete kliknutím na tlačítko vpravo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Zapnout:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Zvolte spouštěcí klávesy" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové události zapínající SCIM vstupní metodu. Úpravu provedete " "kliknutím na tlačítko vpravo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Vypnout:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Zvolte vypínací klávesy" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové události vypínající SCIM vstupní metodu. Úpravu provedete " "kliknutím na tlačítko vpravo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Další vstupní metoda:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Zvolte klávesy další vstupní metody" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Klávesové události přepínající na další vstupní metodu. Úpravu provedete " "kliknutím na tlačítko vpravo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Předchozí vstupní metoda:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Zvolte klávesy předchozí vstupní metody" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Klávesové události přepnutí do předcházející vstupní metody. Úpravu " "provedete kliknutím na tlačítko vpravo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "_Zobrazit nabídku vstupní metody:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Zvolte klávesy zobrazení nabídky vstupní metody" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Klávesové události k zobrazení nabídky vstupní metody. Úpravu provedete " "kliknutím na tlačítko vpravo." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Volby" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Rozložení klávesnice:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Zde můžete nastavit své rozložení klávesnice tak, aby zvolené vstupní metody " "fungovaly korektně." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Vložit předpřipravený řetězec do klientského okna" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Pokud zvolíte tuto možnost, zobrazí se předpřipravený řetězec přímo v " "klientském vstupním okně než v nezávislém plovoucím okně." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Zdílet vstupní metody u všech aplikací" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Pokud tuto volbu zaškrtnete, bude se u všech aplikací používat pouze jeden " "typ vstupní metody. V opačném případě se u každé aplikace může použije jiná." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Klávesové zkratky" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Zde můžete povolit/zakázat vstupní metody a nastavit jejich klávesové " "zkratky." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Služby nainstalované vstupní metody:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Upravit _klávesové zkratky" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Úprava klávesových zkratek spojených se zvolenou vstupní metodou." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Zvolit _filtry" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Zvolte filtry spojené s touto vstupní metodou." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Rozbalit" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Zobrazení všech jazykových kategorií." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Zabalit" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Skrytí všech jazykových kategorií." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "_Povolit vše" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Povolit všechny vstupní metody." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Zakázat vše" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Zakázat všechny vstupní metody." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Název" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Stav" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtry" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Jazyky" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Popis" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Upravit klávesové zkratky %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Zvolte filtry pro %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Posunout na_horu" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Posunout _dolů" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Démon zapuštěný do panelu založený na knihovně GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Vždy" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Na požádání" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Nikdy" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Nástrojová lišta" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Zobrazit:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Automatické přicvaknutí" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Zobrazit ikonu _vstupní metody" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Zobrazit _název vstupní metody" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Délka _zobrazení::" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Zobrazit ikonu _přilepení" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Zobrazit ikonu _nabídky" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Zobrazit ikonu _nápovědy" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Zobrazit _vlastnosti" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Vstupní okno" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "_Vložená vyhledávací tabulka" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "V_ertikální vyhledávací tabulka" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Různé" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Pohltit ikonu do panelu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Přišpendlit _okno" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Písmo:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Pokud jste zvolili \"Vždy\", bude lišta vždy zobrazena. V případě \"Na " "požádání\" bude vždy po deaktivaci SCIM skryta. U volby \"Nikdy\" se " "nezobrazí nikdy." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Pokud zvolíte tuto možnost, bude nástrojová lišta přichycena k okraji " "pracovní plochy." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Lišta se skryje po uplynutí zadaného času. Tato volba je platná pouze pokud " "jste současně zvolili \"Vždy zobrazit'\". Funkci vypnete nastavením na " "hodnotu 0." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "Pokud zvolíte tuto možnost, objeví se na liště ikona metody." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "Pokud zvolíte tuto možnost, objeví se na liště název vstupní metody." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "Pokud zvolíte tuto možnost, objeví se na liště ikona přišpendlení." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "Pokud zvolíte tuto možnost, objeví se na liště ikona nabídky." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "Pokud zvolíte tuto možnost, objeví se na liště ikona nápovědy." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Pokud zvolíte tuto možnost, objeví se na liště ikona vlastností vstupní " "metody." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Pokud zvolíte tuto možnost, připojí se vstupního okna vyhledávací tabulka." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "Pokud zvolíte tuto možnost, zobrazí se vyhledávací tabulka vertikálně." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "Pokud zvolíte tuto možnost, zapustí se ikona programu do panelu." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Pokud zvolíte tuto možnost, lišta nástrojů, vstupní okno a vyhledávací " "tabulka se přišpendlí do původní pozice." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "Nastavení písma v okně vstupu a ve vyhledávací tabulce." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Zvolte písmo rozhraní" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Angličtina/Evropa" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Angličtina (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belgičtina" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Chorvatština" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Čeština" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Čeština (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Dánština" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Nizozemské" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estonština" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finština" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Francouzština" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Francouzština (kanadská)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Francouzština (švýcarská)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Němčina" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Němčina (s mrtvými klávesami)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Němčina (švýcarská)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Řečtina" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Maďarština" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italština" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japonština" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norština" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polština" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugalština" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugalština (brazilská)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugalština (brazilská)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Ruština" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slovenština" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slovenština (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Slovinština" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Španělština" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Španělština (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Španělština (jihoamerická)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Švédština" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turečtina" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Angličtina (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandština" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Litevština" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ukrajinština" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amharština" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabština" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabština (egyptská)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabština (libanonská)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Ásámština" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbajdžánština" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Běloruština" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulharština" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengálština" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengálština (indická)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetština" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosenština" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Katalánština" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Welština" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Angličtina" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Angličtina (australská)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Angličtina (kanadská)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Angličtina (britská)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Angličtina (irská)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Angličtina (americká)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Španělština (mexická)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Baskičtina" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Perština" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irština" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galština" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gudžarádština" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebrejština" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindština" #: ../src/scim_utility.cpp:746 #, fuzzy msgid "Armenian" msgstr "Rumunština" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonézština" #: ../src/scim_utility.cpp:753 #, fuzzy msgid "Georgian" msgstr "Němčina" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazaština" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Khmerština" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannadština" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Korejština" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laoština" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lotyšština" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Makedonština" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malajámština" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongolština" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Maráthština" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malajština" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepálština" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norština (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norština (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Orijština" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Pandžábština" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Rumunština" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albánština" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Srbština" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Švédština (finská)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamilština" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugština" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thajština" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Ujgurština" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdština" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbečtina" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamština" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Walloon" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Jidiš" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Čínština" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Čínština (zjednodušená)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Čínština (tradiční)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Ostatní" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Zvolené _klávesy:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Kód klávesy:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modifikátor:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Uvolnit" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Zadejte prosím nejdřív kód klávesy." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Stiskněte klávesu (nebo kombinaci kláves).\n" "Dialog se zavře po uvolnění kláves." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Zachycení klávesy." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Výběr kláves" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Pozice kurzoru" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Aktuální pozice vkládacího kurzoru mezi znaky." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Maximální délka" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Maximální počet znaků při zobrazení řetězce. Nula, pokud není nic nastaveno." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Maximální šířka" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Maximální šířka pohledu na řetězec." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "S rámem" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE odstraní zkosení." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Vykreslit kurzor" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE vykreslí blikající kurzor." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Automatické přesunutí kurzoru" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE automaticky přemístí kurzor při kliknutí myší." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Předání událost stisknutí tlačítka" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE předá událost stisknutí tlačítka programu." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Automatická změna velikosti widgetu podle řetězce" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE povolí automatickou změnu velikosti." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Šířka znaků" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Počet znaků, pro které se v řetězci vynechá místo." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Scroll offset" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Počet pixelů v zobrazeném řetězci při přesunu vlevo" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Text" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Obsahy zobrazeného řetězce" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientace" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Orientace panelu." scim-master/po/de.po000066400000000000000000001244521415264260100146610ustar00rootroot00000000000000# translation of de.po to # This file is distributed under the same license as the scim package. # Copyright (C) 2004 Jan Hefti # # # Jan Hefti , 2004. # Jan Hefti , 2005. # PGP-KeyID: 0x037FD3CF , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-10 21:48+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method Plattform " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(c) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Deutsch/Tastatur" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Hilfe zu SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Eingabefenster und Symbolleiste festsetzen/verschiebbar machen." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Zeige eine kurze Hilfe zu SCIM und zur gewählten Eingabemethode." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Befehlsmenü anzeigen." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(c) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Einstellungen neu laden" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Werkzeugleiste festsetzen" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Symbolleiste verstecken" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Hilfe ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Beenden" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Einrichtung von SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "Integriertes Einrichtungswerkzeug, das auf der GTK Widget-Bibliothek beruht." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Benutzeroberfläche" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "Eingabemethoden" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Kontrollleiste" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Einstellungen der SCIM-Eingabemethoden" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method-Plattform \n" "\n" "Grafisches Einrichtungswerkzeug\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Einstellungen der %s-Module." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Nicht alle Einstellungen können bei laufendem Programm neu geladen werden. " "Starten Sie bitte SCIM neu, damit alle Änderungen übernommen werden." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Umwandlung vereinfachtes/traditionelles Chinesisch" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Vereinfachtes in traditionelles Chinesisch umwandeln und umgekehrt" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "VC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Umwandlung vereinfachtes->traditionelles Chinesisch" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Keine Umwandlung" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Vereinfacht zu traditionell" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Vereinfachtes Chinesisch in traditionelles Chinesisch umwandeln" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Traditionell zu vereinfacht" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Traditionelles Chinesisch in vereinfachtes Chinesisch umwandeln" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "VC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->VC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "Unicode Rohdaten" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(c) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Tastenkürzel:\n" "\n" " Steuerung+u:\n" " Umschalten zwischen Multibyte-Codierung und Unicode.\n" "\n" " Esc:\n" " Eingabemethode zurücksetzen.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "" "Der Status der aktuell verwendeten Eingabemethode. Klicken Sie diesen an, um " "ihn zu ändern." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Unbekannt" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Globale Einstellungen" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Stellen Sie die globalen Optionen ein, die von allen FrontEnd-Modulen " "beachtet werden, einschließlich dem X11 FrontEnd, GKT IMModule, QT IMModule, " "usw." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Auslöser:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Tasten zum Auslösen auswählen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tastenkombinationen, mit denen die Eingabemethode SCIM an- und ausgeschaltet " "wird. Klicken Sie zum Ändern auf den rechten Knopf." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Einschalten:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Tasten zum Einschalten auswählen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tastenkombinationen, mit denen die Eingabemethode SCIM eingeschaltet wird. " "Klicken Sie zum Ändern auf den rechten Knopf." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "A_usschalten" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Tasten zum Ausschalten auswählen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tastenkombinationen, mit denen die Eingabemethode SCIM ausgeschaltet wird. " "Klicken Sie zum Ändern auf den rechten Knopf." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Nächste Eingabemethode:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "" "Wählen Sie die Tastenkombinationen, um zur nächsten Eingabemethode zu " "wechseln" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Tastenkombinationen, mit denen zur nächsten Eingabemethode gewechselt wird. " "Klicken Sie zum Ändern auf den rechten Knopf." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Vorherige Eingabemethode:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "" "Wählen Sie die Tastenkombinationen, um zur vorherigen Eingabemethode zu " "wechseln" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Tastenkombinationen, mit denen zur vorherigen Eingabemethode gewechselt " "wird. Klicken Sie zum Ändern auf den rechten Knopf." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Zeige _Auswahlmenü für Eingabemethoden:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "" "Wählen Sie die Tastenkürzel, um das Auswahlmenü für Eingabemethoden " "anzuzeigen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Tastenkombinationen, mit denen das Auswahlmenü für Eingabemethoden angezeigt " "wird. Klicken Sie zum Ändern auf den rechten Knopf." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Optionen" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Tastaturlayout" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Sie sollten hier Ihr derzeit verwendetes Tastaturlayout einstellen, so dass " "Eingabemethoden, die vom Tastaturlayout abhängig sind, korrekt funktionieren." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Roheingabe ins Client-Fenster einbetten" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Wenn diese Option gewählt ist, wird die Roheingabe - die bisher eingegebenen " "Zeichen vor einer endgültigen Auswahl - ins Client-Eingabefenster " "eingebettet und nicht in einem Extrafenster angezeigt." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "Dieselbe Eingabemethode in _allen Anwendungen verwenden." #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Wenn diese Option aktiviert ist, wird ein und dieselbe Eingabemethode von " "allen Anwendungen gleichzeitig verwendet. Andernfalls kann jede Anwendung " "eine andere Eingabemethode verwenden." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Tastenkombinationen" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Hier können Sie die installierten Eingabemethoden aktivieren/deaktivieren " "und ihnen Tastenkürzel zuordnen." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Installierte Eingabemethoden:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "_Tastenkürzel ändern" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "" "Stellen Sie die mit der gewählten Eingabemethode assoziierten Tastenkürzel " "ein." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "_Filter auswählen" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "" "Wählen Sie die Filter, die dieser Eingabemethode zugeordnet werden sollen." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "Er_weitern" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Erweitern Sie alle Sprachgruppen." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "Ein_klappen" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Klappen Sie alle Sprachgruppen ein." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Alle _aktivieren" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Alle Eingabemethoden aktivieren." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "Alle _deaktivieren" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Alle Eingabemethoden deaktivieren." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Name" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Aktivieren" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filter" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Sprachen" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Beschreibung" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Tastenkürzel für %s ändern" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Filter für %s wählen" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Nach _oben" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Nach _unten" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "" "Ein Kontrollleisten-Hilfsprogramm, das auf der GTK+-2.x-Bibliothek beruht." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Immer" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Auf Anforderung" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Nie" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Symbolleiste" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Zeige:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Automatisch ein_rasten" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Symbol für die Eingabe_methode anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "_Name der Eingabemethode anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "_Ausblenden nach (sek):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Symbol »Immer im _Vordergrund« anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Symbol »_Menü« anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Symbol »_Hilfe« anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "_Bezeichnung der Eigenschaften anzeigen" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Eingabefenster" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Ein_gebettete Auswahlliste" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Vertikale Auswahlliste" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Verschiedenes" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Symbol im _Benachrichtigungsfeld anzeigen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Fenster behält _Position" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Schriftart:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Wenn »Immer« gewählt ist, wird die Symbolleiste immer auf dem Bildschirm " "angezeigt. Bei »Auf Anforderung« wird sie nur angezeigt, wenn SCIM aktiviert " "ist. Bei »Nie« wird sie niemals angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Wenn diese Option gewählt ist, wird die Symbolleiste am Bildschirmrand " "eingerastet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Die Symbolleiste wird versteckt, nachdem die angegebene Zeit vergangen ist. " "Diese Option ist nur verfügbar, wenn »Immer anzeigen« gewählt ist. Geben Sie " "»0« ein, um dieses Verhalten zu unterdrücken. " #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Wenn diese Option gewählt ist, wird das Symbol der aktuellen Eingabemethode " "auf der Symbolleiste angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Wenn diese Option gewählt ist, wird der Name der aktuellen Eingabemethode " "auf der Symbolleiste angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Wenn diese Option gewählt ist, wird das Symbol »Immer im Vordergrund halten« " "auf der Symbolleiste angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Wenn diese Option gewählt ist, wird das Symbol »Menü« auf der Symbolleiste " "angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Wenn diese Option gewählt ist, wird das Symbol »Hilfe« auf der Symbolleiste " "angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Wenn diese Option gewählt ist, werden die Bezeichnungen der einzelnen " "Eigenschaften der Eingabemethode auf der Symbolleiste angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Wenn diese Option gewählt ist, wird die Auswahlliste ins Eingabefenster " "eingebettet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Wenn diese Option gewählt ist, wird die Auswahlliste senkrecht angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Wenn diese Option gewählt ist, wird ein Symbol in der Kontrollleiste " "angezeigt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Wenn diese Option gewählt ist, werden Symbolleiste, Eingabefenster und " "Auswahlliste immer an ihren jeweiligen Ausgangspositionen gehalten." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "Die eingestellte Schriftart wird in Eingabefenster und Auswahlliste " "verwendet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Schriftart für die Benutzeroberfläche wählen" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Deutsch/Europäisch" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Englisch (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belgisch" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Kroatisch" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Tschechisch" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Tschechisch (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Dänisch" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Niederländisch" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estnisch" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finnisch" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Französisch" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Französisch (Kanada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Französisch (Schweiz) " #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Deutsch" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Deutsch (mit Deadkeys)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Deutsch (Schweiz)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Griechisch" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Ungarisch" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italienisch" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japanisch" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norwegisch" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polnisch" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugiesisch" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugiesisch (Brasilien, US, Akzente)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Russisch" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slowakisch" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slovakisch (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Slowenisch" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Spanisch" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Spanisch (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Spanisch (Lateinamerika)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Schwedisch" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Türkisch" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Englisch (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Isländisch" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Litauisch" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ukrainisch" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amharisch" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabisch" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabisch (Ägypten)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabisch (Libanon)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamesisch" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Aserbaidschanisch" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Weißrussisch" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulgarisch" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengalisch" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengalisch (Indien)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetisch" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosnisch" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Katalanisch" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Walisisch" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Englisch" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Englisch (Australien)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Englisch (Kanada)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Englisch (Großbritannien)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Englisch (Irland)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Englisch (USA)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Spanisch (Mexiko)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Baskisch" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Persisch" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irisch" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galizisch" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebräisch" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armenisch" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesisch" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgisch" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kasachisch" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Kambodschanisch" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Koreanisch" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laotisch" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lettisch" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Mazedonisch" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malajalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongolisch" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malaysisch" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Burmesisch" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalesisch" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norwegisch (Nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norwegisch (Bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Orija" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Pandschabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Rumänisch" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Sinhala" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanisch" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbisch" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Schwedisch (Finnland)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamilisch" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thai" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uigurisch" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Usbekisch" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamesisch" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Wallonisch" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Jiddisch" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Chinesisch" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Chinesisch (vereinfacht)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Chinesisch (traditionell)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Sonstige" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Gewählte _Tasten:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Tastencode:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Sondertasten:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Strg" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "_Alt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Umschalt" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Loslassen" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "Su_per" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Bitte geben Sie zuerst einen Tastencode ein." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Drücken Sie eine Taste (oder eine Tastenkombination).\n" "Dieser Dialog wird geschlossen, wenn die Tasten gelöst werden." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Erfassen der Tasten." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Tastenauswahl" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Zeigerposition" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Die aktuelle Zeigerposition (in Zeichen gerechnet)." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Maximale Länge" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "Maximale Anzahl angezeigter Zeichen. »0« bedeutet unbegrenzt." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Maximale Breite" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Maximale Breite der angezeigten Zeichenkette." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Mit Rahmen" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "" "»Nein« entfernt den umgebenden Rahmen von der angezeigten Zeichenkette." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Zeiger anzeigen" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Wenn »ja«, wird ein blinkender Zeiger angezeigt." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Zeiger automatisch verschieben" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "Wenn »ja«, wird der Zeiger bei einem Mausklick automatisch verschoben." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Knopfdruck zum Übertragen" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "Wenn »ja«, wird der gewählte Ausdruck beim jeweiligen Knopfdruck zum " "Programm übertragen." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Anzeigefläche automatisch an Zeichenkette anpassen" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Bei »ja« ist die automatische Größenanpassung aktiviert." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Breite in Zeichen" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Anzahl der Zeichen, für die in der Anzeige Platz gelassen werden soll." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Verschiebeversatz" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Anzahl der Pixel, um die die Anzeige außerhalb des Bildschirms nach links " "verschoben wird" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Text" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Inhalt der Zeichenkettenanzeige" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Ausrichtung" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Die Ausrichtung des Systemabschnitts der Kontrollleiste." scim-master/po/en@boldquot.header000066400000000000000000000024711415264260100173530ustar00rootroot00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # scim-master/po/en@quot.header000066400000000000000000000022631415264260100165110ustar00rootroot00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # scim-master/po/es.po000066400000000000000000001243651415264260100147030ustar00rootroot00000000000000# translation of es.po to # Spanish translations for SCIM package. # Copyright (C) 2008 THE l'S COPYRIGHT HOLDER # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Chester Cheng , 2008. # Angela Garcia , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:38+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Plataforma de método de entrada común inteligente" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Inglés/Teclado" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Ayuda SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Pegue/despegue la ventana de entrada y la barra de herramientas." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Muestra una breve ayuda sobre SCIM y el método de entrada actual." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Muestra el menú de comandos." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Recarga la configuración" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Pega ventanas" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Oculta la barra de herramientas" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Ayuda ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Salir" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Configuración de SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "Utilidad de configuración integrada con base en la biblioteca GTK Widget." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Panel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Configuración del método de entrada SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Plataforma del método de entrada común inteligente<" "/span> \n" "\n" "Utilidad para configuración del GUI<" "/span>\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "La configuración para los módulos %s." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "No toda la configuración se puede volver a cargar de inmediato. No olvide " "volver a iniciar SCIM para permitir que toda la configuración nueva tenga " "efecto." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Conversión de chino simplificado - tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Convertir entre chino simplificado y chino tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "CS-CT" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Conversión chino simplificado-tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "No Conversión" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Simplificado a tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Convertir chino simplificado a chino tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Tradicional a simplificado" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Convertir chino tradicional a chino simplificado " #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "CS->CT" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "CT->CS" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "CÖDIGO BRUTO" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Teclas rápidas:\n" "\n" " Control+u:\n" " cambia entre la codificación Multibyte y Unicode.\n" "\n" " Esc:\n" " reestablece el método de entrada.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "El estatus del método de entrada actual. Haga click para cambiarlo." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Desconocido" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Configuración global " #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Configure las opciones globales que los módulos All FrontEnd utilizan " "incluyendo X11 " "FrontEnd, GTK IMModule, QT IMModule etc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Activa:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Selecciona las teclas que activan" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Los eventos clave que prenden/apagan el método de entrada SCIM. Haga click en " "el botón de la derecha para modificarlo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "Prender_:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Selecciona las teclas para prender" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Los eventos clave que activan el método de entrada SCIM. Haga click en el " "botón de la derecha para modificarlo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "Apagar_:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Selecciona las teclas para apagar" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Los eventos clave para apagar el método de entrada SCIM. Haga click en el " "botón de la derecha para modificarlo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Próximo método de entrada:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Seleccione las siguientes teclas de método de entrada" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Los eventos clave para cambiar al siguiente método de entrada. Haga click en " "el método de la derecha para modificarlo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Método de entrada anterior:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Seleccione las teclas anteriores del método de entrada " #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Los eventos clave para cambiar al método de entrada anterior. Haga click en " "el botón a la derecha para modificarlo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Muestra el menú_método de entrada:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Selecciona las teclas del menú de método de entrada que se muestran" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Los eventos clave que muestran el menú del método de entrada. Haga click en " "el botón de la derecha para modificarlo." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Opciones" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Distribución del teclado:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Debe seleccionar la distribución del teclado que está utilizando actualmente " "de manera que los métodos de entrada que si se relacionan con el teclado " "puedan funcionar correctamente." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Incluir cadena de preedición en la ventana del cliente" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Si está opción está selecionada, la cadena de preedición se presentará " "directamente en la ventana de entrada del cliente en vez de tener una ventana " "flotante independiente. " #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Comparte el mismo método de entrada entre todas las aplicaciones" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Si esta opción está seleccionada entonces el único método puede ser utilizado " "por todas las aplicaciones al mismo tiempo. De otra manera cada aplicación " "puede utilizar un método de entrada diferente. " #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Teclascalientes" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Puede habilitar/deshabilitar los métodos de entrada y un grupo de teclas " "calientes para los métodos de entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Los servicios instalados del método de entrada:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Modificar_Teclascalientes" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "" "Modificar las teclas calientes asociadas con el método de entrada " "seleccionado." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Seleccionar _Filtros" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Seleccionar los filtros que se adjuntarán a este método de entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Expandir" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Expandir todas las categorias de idiomas." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Contrae" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Contrae todas las categorias de idiomas." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "H_abilita todos" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Habilita todos los métodos de entrada" #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Deshabilita todos" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Deshabilita todos los métodos de entrada." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nombre" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Habilitar" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtros" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Idiomas" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Descripción" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Modificar las teclas calientes para %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Seleccionar filtros para %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Arriba _" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Abajo_" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Un demonio de panel basado en la biblioteca GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Siempre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Por demanda" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Nunca" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Barra de herramientas" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Muestra:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Auto s_nap" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Muestra el icono del _método de entrada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Muestra el nombre del método de entrad_a" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Esconde tiempo_espera:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Muestra icono p_egar" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Muestra el icono m_enú" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Muestra el icono de _ayuda" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Muestra etiqueta _propiedad" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Ventana de entrada" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Tabla de búsqueda i_ncluída" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "Tabla de búsqueda _Vertical" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Misc" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Muestra el icono bande_ja" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Incluye _ventanas" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Tipo de letra:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Si la opción \"Siempre\" se selecciona entonces la barra de herramientas " "aparece en la pantalla. Si se escoge la opción \"Por demanda\" entonces sólo " "aparecerá cuando SCIM se active. Si se selecciona la opción \"Nunca\" " "entonces nunca se muestra." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Si está opción está seleccionada entonces la barra de herramientas se moverá " "al borde de la pantalla." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "La barra de herramientas estará escondida después que el tiempo de expiración " "se haya acabado. Esta opción sólo es válida cuando se selecciona \"Mostrar " "siempre\". Configúrela como cero para deshabilitar este comportamiento." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Si esta opción está seleccionada entonces el icono del método de entrada " "aparecerá en la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Si está opción ha sido seleccionada entonces el nombre del método de entrada " "aparecerá en la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Si está opción ha sido seleccionada entonces el icono de pegar aparecerá en " "la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Si está opción ha sido seleccionada entonces el icono del menú aparecerá en " "la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Si está opción ha sido seleccionada entonces el icono de ayuda aparecerá en " "la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Si está opción ha sido seleccionada entonces la etiqueta del texto de las " "propiedades del método de entrada aparecerán en la barra de herramientas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Si está opción ha sido seleccionada entonces la tabla de búsqueda será " "incluida en la ventana de entrada." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Si está opción ha sido seleccionada entonces la tabla de búsqueda aparecerá " "verticalmente." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Si está opción ha sido seleccionada entonces el icono de bandeja aparecerá en " "la barra de tareas del escritorio." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Si está opción ha sido seleccionada entonces las ventanas de la tabla de " "búsqueda y de entrada se pondrán en su posición original." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "El tipo de letra especificado se utilizará en las ventanas de la tabla de " "búsqueda y de entrada." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Selección del tipo de letra de la interfaz" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Inglés/Europeo" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Inglés (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belga" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Croata" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Checo" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Checo (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Danés" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Holandés" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estonio" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finlandés" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Francés" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Francés (Canadiense)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Francés (Suizo)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Alemán" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Alemán (con teclas muertas)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Alemán (Suizo)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Griego" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Húngaro" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italiano" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japonés" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Noruego" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polaco" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugués" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugués (Brasil)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugés (acento USA Brasil)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Ruso" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Eslovaco" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Eslovaco (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Esloveno" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Español" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Español (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Español (Latin America)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Sueco" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turco" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Inglés (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandés" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lituano" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ucraniano" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amárico" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Árabe" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Árabe (Egipto)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Árabe (Líbano)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Asamés" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbaiyano" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Beloruso" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Búlgaro" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengali" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengali (India)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetano" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosnio" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalán" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Galés" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Inglés" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Inglés (Australiano)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Inglés (Canadiense)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Inglés (Británico)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Inglés (Irlandés)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Inglés (Americano)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Español (Méjico)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Vasco" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Persa" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irlandés" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Gallego" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebreo" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Indi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armenio" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesio" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgiano" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazakh" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Cambodiano" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Coreano" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laosiano" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Latvian" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macedonio" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayo" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongol" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malayo" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Birmano" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalés" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Noruego (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Noruego (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Rumano" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Sinhala" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanés" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbio" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Sueco (Finlandia)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Tailandés" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uighur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbek" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamita" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Walloon" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Yidish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Chino" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Chino (simplificado)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Chino (tradicional)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Otro" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Teclas_seleccionadas:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Código clave:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modificadores:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Introduzca un código de clave primero." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Presione una tecla (o una combinación de teclas).\n" "Este dialogo se cerrará cuando se deje de presionar la tecla." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Tomar un tecla." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Selección de teclas" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Posición del cursor" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "La posición actual del cursor de inserción en caracteres" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Longitud máxima" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Número máximo de caracteres para esta vista de cadena. Es cero si no hay un " "máximo. " #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Ancho máximo" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Ancho máximo con esta vista de caracteres." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Tiene marco" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "Si es falso remueve el marco exterior de la vista de caracteres." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Diseñar cursor" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Si es verdadero diseña un cursor que parpadea." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Cursor de movimiento automático" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "Si es verdadero el cursor se mueve automáticamente cuando el ratón hace click." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Botón avanzar presiona evento" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "Si es verdadero el botón para avanzar presiona evento para programa de " "usuario." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Modifica el tamaño automáticamente para que quepa en la cadena" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Si es verdadero modifica el tamaño de manera automática." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Ancho en caracteres" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Número de caracteres para dejar espacio en la vista de cadena." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Contrarestar el desplazamiento hacia arriba o abajo" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Número de pixeles de la vista de cadena a la izquierda para contrarestar el " "desplazamiento hacia arriba o abajo" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Texto" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "El contenido de la vista de cadena" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientación" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "La orientación de la bandeja." scim-master/po/fi.po000066400000000000000000001215251415264260100146650ustar00rootroot00000000000000# Finnish translation for scim # Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 # This file is distributed under the same license as the scim package. # Timo Jyrinki , 2006. # note: GFTT is at http://www.gnome.fi/ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:39+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method -alusta " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "englanti/näppäimistö" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM-ohje" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Kohdista tai poista syöttöikkunan ja työkalurivun kohdistus." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Näytä lyhyt ohje SCIMistä sekä nykyinen syöttötapa." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Näytä komentovalikko." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Lataa asetukset uudelleen" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Kohdista ikkunat" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Piilota työkalupalkki" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Ohje ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Poistu" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM-asetukset" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK-elementtikirjastoon perustuva asetusohjelma." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Edustaohjelma" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Paneeli" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Ekstra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM syöttötapojen valinta" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method -alusta \n" "\n" "Graafinen asetusohjelma\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Asetukset moduulille \"%s\"." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Kaikkia asetuksia ei voida vaihtaa lennossa. Käynnistä SCIM uudelleen " "ottaaksesi kaikki uudet asetukset käyttöön." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Yksinkertaistetun/perinteisen kiinan muunnos" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Muunna yksinkertaistetun ja perinteisen kiinan välillä" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "yk-pk" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Yksinkertaistetun/perinteisen kiinan muunnos" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Ei muunnosta" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Yksinkertaistetusta perinteiseksi" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Muunna yksinkertaistettu kiina perinteiseksi kiinaksi" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Perinteisestä yksinkertaistetuksi" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Muunna perinteisestä kiinasta yksinkertaistetuksi kiinaksi" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "yk->pk" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "pk->yk" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Pikanäppäimet:\n" "\n" " Ctrl+u:\n" " vaihda monitavukoodauksen ja Unicoden välillä.\n" "\n" " Esc:\n" " palauta syöttötavan oletusarvot.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Nykyisen syöttötavan tila. Napsauta vaihtaaksesi." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Tuntematon" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Globaalit asetukset" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Aseta yleiset kaikkien edustaohjelmien käyttämät asetukset, mukaanlukien " "X11-, GTK-, IMModule-, QT IMModule-ohjelmat" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Liipaisin" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Valitse liipaisinnäppäimet" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Näppäintapahtumat jotka ottavat käyttöön / poistavat käytöstä SCIM-" "syöttötavan. Napsauta oikealla olevaa painiketta muokataksesi sitä." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "Ota _käyttöön" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Valitse \"ota käyttöön\"-näppäimet" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Näppäintapahtumat jotka ottavat SCIM-syöttötavan käyttöön. Napsauta oikealla " "olevaa painiketta muokataksesi sitä." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Poista käytöstä:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Valitse \"poista käytöstä\"-näppäimet" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Näppäintapahtumat jotka poistavat SCIM-syöttötavan käyttöstä. Napsauta " "oikealla olevaa painiketta muokataksesi sitä." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Seuraava syöttötapa:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Valitse \"seuraava syöttötapa\"-näppäimet" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Näppäintapahtumat joilla vaihdetaan seuraavaan syöttötapaan. Napsauta " "painiketta oikealla muokataksesi." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Edellinen syöttötapa:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Valitse \"edellinen syöttötapa\"-näppäimet" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Näppäintapahtumat joilla vaihdetaan edelliseen syöttötapaan. Napsauta " "painiketta oikealla muokataksesi." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Näytä syöttötapa_valikko" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Valitse näppäimet joilla syöttötapavalikko näytetään" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Näppäintapahtumat joilla syöttötapavalikko näytetään. Napsauta painiketta " "oikealla muokataksesi." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Valinnat" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Näppäimistöasettelu" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Valitse nykyinen näppäimistöasettelu tässä, jotta näppäimistöasettelusta " "välittävät syöttötavat toimisivat oikein." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Sisällytä \"preedit\"-merkkijono asiakasikkunaan" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Jos tämä on valittu, \"preedit\"-merkkijono näytetään suoraan " "asiakasikkunassa erillisen kelluvan ikkunan sijaan." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Jaa sama syöttötapa kaikkien ohjelmien kanssa" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Jos tämä on valittu, yhtä syöttötapaa käytetään kaikissa ohjelmissa. Muutoin " "eri syöttötapa voidaan valita eri ohjelmille." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Pikanäppäimet" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Voit ottaa käyttöön / pois käytöstä syöttötapoja ja asettaa pikanäppäimiä " "syöttötavoille." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Asennetut syöttötapapalvelut:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Muokkaa _pikanäppäimiä" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Muokkaa valittuun syöttötapaan liittyviä pikanäppäimiä." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Valitse _suotimet" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Valitse suotimet jotka liitetään tähän syöttötapaan." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Laajenna" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Laajenna kaikki kieliluokat" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Supista" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Supista kaikki kieliluokat" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Ota _käyttöön kaikki" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Ottaa kaikki syöttötavat käyttöön." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Poista käytöstä kaikki" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Poistaa kaikki syöttötavat käytöstä." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nimi" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Ota käyttöön" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Suotimet" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Kielet" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Kuvaus" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Muokkaa pikanäppäimiä: %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Valitse suotimet: %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Siirrä _ylös" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Siirrä _alas" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x-kirjastoon perustuva paneelisovellus" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Aina" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Tarvittaessa" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Ei koskaan" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Työkalupalkki" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Näytä:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Automaattinen k_ohdistus" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Näytä _syöttötapakuvake" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Näytä syöttätavan _nimi" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Piilota aika_katkaisu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Näytä _tikkukuvake" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Näytä _valikkokuvake" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Näytä o_hjekuvake" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Näytä ominaisuusnimi_ö" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Syöttöikkuna" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "S_ulautettu etsintätaulukko" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Pystysuuntainen etsintätaulukko" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Muut" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Näytä _ilmoitusalueen kuvake" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Koh_dista ikkunat" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Kirjasin:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Jos valinta \"aina\" on valittu, työkalupalkki näytetään aina ruudulla. Jos " "\"tarvittaessa\" on valittu, se näytetään vain SCIMin ollessa aktiivisena. " "Valinnalla \"Never\" palkkia ei näytetä koskaan." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "Jos tämä on valittu, työkalupalkki kohdistetaan ruudun reunaan." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Työkalupalkki piilotetaan kun määritelty aika on kulunut. Tämä valinta on " "kelvollinen vain jos \"Näytä aina\" on valittu. Aseta nollaksi poistaaksesi " "piilotuksen käytöstä." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "Jos tämä on valittu, syöttötapakuvake näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "Jos tämä on valittu, syöttötavan nimi näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "Jos tämä on valittu, kohdistuskuvake näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "Jos tämä on valittu, valikkokuvake näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "Jos tämä on valittu, ohjekuvake näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Jos tämä on valittu, syöttötapa-asetusten teksti näytetään työkalupalkissa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "Jos tämä on valittu, etsintätaulukko sisällytetään syöttöikkunaan." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "Jos tämä on valittu, etsintätaulukko näytetään pystysuuntaisesti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Jos tämä on valittu, ilmoitusalueen kuvake näytetään työpöydän " "työkalupalkissa" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Jos tämä on valittu, työkalupalkki, syöttö- ja etsintätaulukkoikkunat " "kohdistetaan alkuperäisiin sijainteihinsa." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "Kirjasinasetusta käytetään syöttötapa- ja etsintätaulukkoikkunoihin." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Valitse käyttöliittymän kirjasin" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "englanti/eurooppalainen" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "englanti (USA)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "belgia" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "kroatia" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "tšekki" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "tšekki (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "tanska" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "hollanti" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "viro" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "suomi" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ranska" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Ranska (Kanada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Ranska (Sveitsi)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "saksa" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Saksa (kuolleilla näppäimillä)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Saksa (sveitsiläinen)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "kreikka" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "unkari" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "italia" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "japani" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "norja" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "puola" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "portugali" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "portugali (Brasilia)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "portugali (Brasilia/US-aksenttimerkit)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "venäjä" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "slovakki" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "slovakia (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "sloveeni" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "espanja" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "espanja (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "espanja (latinalainen amerikka)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "ruotsi" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "turkki" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "englanti (Iso-Britannia)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "islanti" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "liettua" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ukraina" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "amhara" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "arabia" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "arabia (Egypti)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "arabia (Libanon)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "assami" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "azeri" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "valkovenäjä" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "bulgaria" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "bengali" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "bengali (Intia)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "tiibetti" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "bosnia" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "katalaani" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "wales" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "englanti" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "englanti (Australia)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "englanti (Kanada)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "englanti (Iso-Britannia)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "englanti (Irlanti)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "englanti (amerikanenglanti)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "espanja (Mexico)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "baski" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "persia" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "irlanti" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "galicia" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "gudžarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "heprea" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "hindi" #: ../src/scim_utility.cpp:746 #, fuzzy msgid "Armenian" msgstr "romania" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "indonesia" #: ../src/scim_utility.cpp:753 #, fuzzy msgid "Georgian" msgstr "saksa" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "kazak" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "kampodia/khmer" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "korea" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "laos" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "latvia" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "makedonia" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "malajalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "mongolia" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "malaiji" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "nepali" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "norja (nykynorja)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "norja (kirjanorja)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "oriya" #: ../src/scim_utility.cpp:772 #, fuzzy msgid "Punjabi" msgstr "panjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "romania" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "albania" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "serbia" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "ruotsi (Suomi)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "tamili" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "thai" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "uiguuri" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "uzbekki" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "vietnam" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "valloni" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "jiddiš" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "kiina" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "kiina (yksinkertaistettu)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "kiina (perinteinen)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Muu" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Valitus _näppäimet:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Näppäinkoodi:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Pohjassa olevat näppäimet:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Syötä näppäinkoodi ensin." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Paina näppäintä (tai näppäinyhdistelmää).\n" "Tämä ikkuna sulkeutuu kun näppäin vapautetaan." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Odotetaan näppäintä." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Näppäimen valinta" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Kohdistimen paikka" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Syöttökohdistimen nykyinen paikka merkeissä." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Suurin pituus" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "Suurin määrä merkkejä tälle merkkijononäytölle. Nolla, jos ei aseteta." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Suurin leveys" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Suurin leveys tälle merkkijononäytölle." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Reunus" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE poistaa ulkopuolisen reunan merkkijononäytöstä." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Piirrä kohdistin" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE piirtää vilkkuvan kohdistimen." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Kohdistimen siirto" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE siirtää kohdistinta automaattisesti hiiren napsautukseta." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Edelleenlähetä painikkeen painallus" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE lähettää painikkeen painalluksen edelleen käyttäjäohjelmalle." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Muuta elementin kokoa merkkijonon mukaan" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE Automaattinen koon muuttaminen käytössä." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Leveys merkeissä" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Merkkijononäyttöön jätettävän tyhjän tilan määrä merkeissä." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Vieritysmäärä" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Merkkijonon vierityksen määrä pikseleissä" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Teksti" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Merkkijononäytön sisältö" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Suunta" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Ilmoitusalueen suunta." scim-master/po/fr.po000066400000000000000000001240321415264260100146720ustar00rootroot00000000000000# translation of fr.po to French # This file is distributed under the same license as the scim package. # Copyright (C) 2004 James Su . # # Damien Menanteau , 2005. # Ronald Stroethoff , 2009. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:39+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Plateforme Smart Common Input Method" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" " :\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Français/Clavier" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Aide SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Epingle la fenêtre de saisie et la barre d'outils." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Affiche une aide succincte sur SCIM et la méthode de saisie courante." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Afficher le menu des commandes." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Recharger la Configuration" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Epingler les Fenêtres" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Masquer la Barre d'Outils" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Aide ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Quitter" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Configuration de SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Utilitaire de configuration intégré basé sur la librairie GTK Widget." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Interface" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "Moteur de Saisie" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Panneau" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Configuration de la Méthode de Saisie SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Plateforme Smart Common Input Method \n" "\n" "Utilitaire de Configuration\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Configuration des modules %s." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Certains des paramètres de configuration ne peuvent pas être pris en compte " "automatiquement. N'oubliez pas de redémarrer SCIM afin que toutes les " "nouvelles valeurs de configuration soient prises en compte." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Conversion Chinois Simplifié-Traditionnel" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Conversion entre chinois simplifié et chinois traditionnel" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "CS-CT" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Conversion Chinois Simplifié-Traditionnel" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Pas de conversion" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Simplifié vers Traditionnel" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Conversion du chinois simplifié en chinois traditionnel" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Traditionnel vers Simplifié" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Conversion du chinois traditionnel en chinois simplifié" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "CS->CT" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "CT->CS" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "CODE BRUT" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Racourcis :\n" "\n" " Ctrl+u :\n" " bascule entre encodage Multi-octets et Unicode.\n" "\n" " Echap :\n" " réinitialise la méthode de saisie.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Etat de la méthode de saisie courante. Cliquer pour la modifier." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Inconnu" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Configuration globale" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Configurer des options globales utilisées par tous les modules frontaux, " "incluant le frontal X11, GTK IMModule, QT IMModule etc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Déclencheur :" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Sélectionner les touches d'activation" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Touches pour activer/désactiver SCIM. Cliquer sur le bouton de droite pour " "les modifier." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Activer:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Sélectionner les touches d'activation" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Touches pour activer SCIM. Cliquer sur le bouton de droite pour les modifier." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "Désac_tiver:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Sélectionner les touches de désactivation" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Touches pour désactiver SCIM. Cliquer sur le bouton de droite pour les " "modifier." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "Méthode de saisie _Suivante :" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Sélectionner les touches pour la méthode de saisie suivante" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Touches pour aller à la méthode de saisie suivante. Cliquer sur le bouton de " "droite pour les modifier." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "Méthode de saisie _Précédente :" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Sélectionner les touches pour la méthode de saisie précédente" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Touches pour revenir à la méthode de saisie précédente. Cliquer sur le " "bouton de droite pour les modifier." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Accès au _Menu des méthodes de saisie :" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Sélectionner les touches pour accéder au menu des méthodes de saisie" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Touches pour accéder au menu des méthodes de saisie. Cliquer sur le bouton " "de droite pour les modifier." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Options" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Type de Clavier:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Indiquez ici le type de clavier que vous utilisez afin que les méthodes de " "saisie qui dépendent du type de clavier puissent fonctionner correctement." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Insérer les chaîne en préédition dans la fenêtre cliente" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Quand cette option est sélectionnée, la table de préédition est affichée " "directement dans la fenêtre de saisie, et non pas dans une fenêtre " "indépendante." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Partage de la même méthode de saisie entre toutes les applications" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Quand cette option est sélectionnée, la même méthode de saisie peut être " "utilisée par toutes les applications en même temps. Dans le cas contraire, " "chaque application utilise sa propre méthode de saisie." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Raccourcis" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Ici, vous pouvez activer/désactiver les méthodes de saisie et les jeux de " "raccourcis pour les méthodes de saisie." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Services de méthode de saisie installés :" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Editer les _Raccourcis" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Editer les raccourcis associés à la méthode de saisie sélectionnée." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Sélectionner les _Filtres" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Sélectionner les Filtres à associer à cette méthode de saisie." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Ouvrir" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Ouvrir toutes les catégories de langage." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Refermer" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Fermer toutes les catégories de langage." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Tout Activer" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Activer toutes les méthodes de saisie." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "Tout Désactiver" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Désactiver toutes les méthodes de saisie." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nom" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Activer" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtres" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Langues" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Description" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Editer les raccourcis pour %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Sélectionner les filtres pour %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "_Monter" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "_Descendre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Un panneau serveur basé sur la librairie GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Toujours" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "A la demande" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Jamais" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Barre d'Outils" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Afficher" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Aligne_ment automatique" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Affichage icône méthode de _saisie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Affichage _nom méthode de saisie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "_Délai avant masquage :" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Affichage icône d'épin_glage fenêtre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Afficher l'icône de m_enu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Affichage icône d'_aide" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Affichage label de p_ropriété" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Fenêtre de saisie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Table de recherche _embarquée" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "Table de recherche _verticale" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Divers" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Affichage icône barre de _tâches" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Epinglage _fenêtres" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "P_olice :" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Quand l'option \"Toujours\" est sélectionnée, la barre d'outils est affichée " "en permanence à l'écran. Quand l'option \"A la demande\" est sélectionnée, " "la barre d'outils est affichée uniquement lorsque SCIM est activé. Quand " "l'option \"Jamais\" estsélectionnée, la barre d'outils n'est jamais affichée." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Quand cette option est sélectionnée, la barre d'outil s'aligne " "automatiquement sur le bord de l'écran." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "La barre d'outils sera masquée automatiquement après l'expiration de ce " "délai. Cette option n'est valide que si l'option \"Afficher Toujours\" est " "sélectionnée. Une valeur de délai de 0 supprime ce comportement." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Quand cette option est sélectionnée, l'icône de la méthode de saisie est " "inséré dans la barre d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Quand cette option est sélectionnée, le nom de la méthode de saisie est " "inséré dans la barre d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Quand cette option est sélectionnée, l'icône d'épinglage de fenêtre est " "inséré dans la barre d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Quand cette option est sélectionnée, l'icône de menu est inséré dans la " "barre d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Quand cette option est sélectionnée, l'icône d'aide est inséré dans la barre " "d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Quand cette option est sélectionnée, le label des propriétés de la méthode " "de saisie est inséré dans la barre d'outils." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Quand cette option est sélectionnée, la table de recherche est embarquée " "dans la fenêtre de saisie." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Quand cette option est sélectionnée, la table de recherche est affichée " "verticalement." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Quand cette option est sélectionnée, l'icône est inséré dans la barre de " "tâches du bureau." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Quand cette option est sélectionnée, les fenêtres de saisie et de recherche " "sont maintenues à leur position originale." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "La police de caractères configurée est utilisée dans les fenêtres de saisie " "et de recherche." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Police de Caractères" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Français/Européen" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Anglais (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belge" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Croate" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Tchèque" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Tchèque (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Danois" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Néerlandais" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estonien" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finnois" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Français" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Français (Canada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Français (Suisse)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Allemand" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Allemand (avec touches mortes)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Allemand (Suisse)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Grec" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Hongrois" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italien" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japonais" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norvégien" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polonais" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugais" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugais (Brésil accents US)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Russe" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slovaque" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slovaque (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Slovène" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Espagnol" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Espagnol (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Espagnol (Amérique latine)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Suédois" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turc" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Anglais (GB)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandais" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lituanien" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ukrainien" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amharique" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabe" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabe (Egypte)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabe (Liban)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamais" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbaïdjanais" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Biélorusse" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulgare" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengali" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengali (Inde)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibétain" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosniaque" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalan" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Gallois" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Maldivien" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Anglais" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Anglais (Australie)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Anglais (Canada)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Anglais (Royaume Uni)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Anglais (Irlande)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Anglais (Etats-Unis)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Espagnol (Mexique)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Basque" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Perse" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irlandais" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galicien" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hébreu" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Arménien" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonésien" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Géorgien" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazakh" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Khmer" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannara" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Coréen" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laotien" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Letton" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macédonien" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongol" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malais" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Birman" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Népalais" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norvégien (Nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norvégien (Bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Roumain" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Singhalais" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanais" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbe" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Suédois (Finlande)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamoul" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thaï" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uighur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Ourdou" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Ouzbèque" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamien" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Wallon" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Yiddish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Chinois" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Chinois (simplifié)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Chinois (traditionnel)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Autre" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "_Touches Sélectionnées :" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Code Touche:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modificateurs:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "_Alt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Maj" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Relâche" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Veuillez d'abord entrer un code de touche." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Appuyer sur une touche (ou une combinaison de touches).\n" "Cette fenêtre se fermera dès que la touche sera relâchée." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Capture de touche." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Sélection de Touche" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Position du Curseur" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Position courante du curseur d'insertion dans les caractères." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Longueur maximale" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Nombre maximum de caractères pour cette vue de chaîne de caractères. Zero si " "pas de maximum." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Largeur maximale" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Largeur maximale de cette vue de chaîne de caractères." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Avec Cadre" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FAUX supprime le cadre extérieur de la vue de chaîne de caractères." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Affichage du curseur" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "VRAI Affichage d'un curseur clignotant." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Déplacement automatique du curseur" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "VRAI Déplacement automatique de la position du curseur sur clic de souris." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Transmission événement d'appui de bouton" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "VRAI Fait suivre les événements d'appui de bouton vers le programme client." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Redimensionnement automatique à la taille de la chaîne" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "VRAI Redimensionnement automatique activé." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Largeur en caractères" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "" "Nombre de caractères à laisser vides dans la vue de chaîne de caractères." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Décalage" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Nombre de pixels de la vue de chaîne de caractères décalés à gauche en " "dehors de l'écran" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Texte" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Le contenu de la vue de chaîne de caractères" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientation" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Orientation du tiroir." scim-master/po/gu.po000066400000000000000000001425551415264260100147100ustar00rootroot00000000000000# translation of gu.po to Gujarati # Gujarati translations for SCIM package. # Copyright (C) 2008 Ankit Patel # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Ankit Patel , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:40+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "સ્માર્ટ કોમન ઈનપુટ મેથડ પ્લેટફોર્મ " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "અંગ્રેજી/કીબોર્ડ" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM મદદ" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ઈનપુટ વિન્ડો અને સાધનપટ્ટી ચોંટાડો/દૂર કરો." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM અને વર્તમાન ઈનપુટ પદ્ધતિ વિશે સંક્ષિપ્ત મદદ બતાવો." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "આદેશ મેનુ બતાવો." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "રૂપરેખાંકન પુનઃલાવો" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "વિન્ડો ચોંટાડો" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "સાધનપટ્ટી છુપાવો" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "મદદ ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "બહાર નીકળો" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM સુયોજન" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK વિજેટ લાઈબ્રેરી પર આધારીત સંકલિત સુયોજન ઉપયોગીતા." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "અગ્રઅંત" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "પેનલ" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "વધારાનું" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM ઈનપુટ પદ્ધતિ સુયોજન" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " સ્માર્ટ કોમન ઈનપુટ મેથડ પ્લેટફોર્મ \n" "\n" "GUI સુયોજન ઉપયોગીતા\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su " "<suzhe@tsinghua.org.cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s મોડ્યુલો માટે સુયોજન." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "નોંધ કરો કે બધું રૂપરેખાંકન વૈશ્વિકપણે પુનઃલાવી શકાશે. SCIM ને નવું " "રૂપરેખાંકન અસરમાં લાવવા માટે પુનઃશરૂ કરવાનું ભૂલશો નહિં." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "સરળ-પારંપરિક ચીની વાર્તાલાપ" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "સરળ ચીની અને પારંપરિક ચીની વચ્ચેનો વાર્તાલાપ" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "સરળ-પારંપરિક ચીની વાર્તાલાપ" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "કોઈ વાર્તાલાપ નથી" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "સરળથી પારંપરિક" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "સરળ ચીનીને પારંપરિક ચીનીમાં ફેરવો" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "પારંપરિકથી સરળ" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "પારંપરિક ચીનીને સરળ ચીનીમાં ફેરવો" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "હોટ કીઓ:\n" "\n" " Control+u:\n" " મલ્ટીબાઈટ એનકોડીંગ અને યુનિકોડ વચ્ચે બદલો.\n" "\n" " Esc:\n" " ઈનપુટ પદ્ધતિ પુનઃસુયોજીત કરો.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "વર્તમાન ઈનપુટ પદ્ધતિની પરિસ્થિતિ. તેને બદલવા માટે ક્લિક કરો." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "યુનિકોડ" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "અજ્ઞાત" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "વૈશ્વિક સુયોજન" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "બધા અગ્રઅંત મોડ્યુલો, X11 અગ્રઅંત, GTK IMModule, QT IMModule વગેરોનો સમાવેશ " "કરીને તેમના દ્વારા વાપરવામાં આવતા વૈશ્વિક વિકલ્પો સુયોજીત કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ટ્રીગર (_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ટ્રીગર કીઓ પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ઈનપુટ પદ્ધતિ ચાલુ/બંધ કરવાની કી ઘટનાઓ. તેમાં ફેરફાર કરવા માટે બટનના જમણે " "ક્લિક કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "ચાલુ કરો (_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "ચાલુ કરો કીઓ પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ઈનપુટ પદ્ધતિ ચાલુ કરવા માટેની કી ઘટનાઓ. તેમાં ફેરફાર કરવા માટે બટનના " "જમણે ક્લિક કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "બંધ કરો (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "બંધ કરો કીઓ પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ઈનપુટ પદ્ધતિ બંધ કરવા માટેની કી ઘટનાઓ. તેમાં ફેરફાર કરવા માટે બટનના જમણે " "ક્લિક કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "આગળની ઈનપુટ પદ્ધતિ (_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "આગળની ઈનપુટ પદ્ધતિ કીઓ પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "આગળની ઈનપુટ પદ્ધતિમાં બદલવા માટેની કી ઘટનાઓ. તેમાં ફેરફારા કરવા માટે બટનના " "જમણે ક્લિક કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "પહેલાંની ઈનપુટ પદ્ધતિ (_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "પહેલાંની ઈનપુટ પદ્ધતિ કીઓ પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "પહેલાંની ઈનપુટ પદ્ધતિમાં બદલવા માટેની કી ઘટનાઓ. તેમાં ફેરફાર કરવા માટે બટનના " "જમણે ક્લિક કરો." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ઈનપુટ પદ્ધતિ મેનુ બતાવો (_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ઈનપુટ પદ્ધતિ મેનુ કીઓ બતાવવા માટે પસંદ કરો" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ઈનપુટ પદ્ધતિ મેનુ બતાવવા માટેની કી ઘટનાઓ. તેમાં ફેરફાર કરવા માટે બટનના જમણે " "ક્લિક કરો." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "વિકલ્પો" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "કીબોર્ડ લેઆઉટ (_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "તમારે તમારું વર્તમાનમાં પસંદિત કીબોર્ડ લેઆઉટ અંહિ વાપરવું જોઈએ કે જેથી ઈનપુટ " "પદ્ધતિઓ, કે જેઓ કીબોર્ડ લેઆઉટની કાળજી લે છે, તે યોગ્ય રીતે કામ કરી શકે." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Preedit શબ્દમાળાને ક્લાઈન્ટ વિન્ડોમાં જડો (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો preedit શબ્દમાળા ક્લાઈન્ટ ઈનપુટ વિન્ડોમાં સીધી જ " "દર્શાવવામાં આવશે, સ્વતંત્ર તરતી વિન્ડોમાં બતાવવાની જગ્યાએ." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "એક જ ઈનપુટ પદ્ધતિ બધા કાર્યક્રમોમાં વહેંચો (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો પછી માત્ર એક ઈનપુટ પદ્ધતિ બધા કાર્યક્રમો દ્વારા " "એક જ સમયે વાપરી શકાય. નહિંતર અલગ ઈનપુટ પદ્ધતિ દરેક કાર્યક્રમ દ્વારા વાપરી " "શકાય." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "હોટકીઓ" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "તમે ઈનપુટ પદ્ધતિઓ સક્રિય/નિષ્ક્રિય કરી શકો છો અને ઈનપુટ પદ્ધતિઓ માટે હોટ કીઓ " "અંહિ સુયોજીત કરી શકો છો." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "સ્થાપિત ઈનપુટ પદ્ધતિ સેવાઓ:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "હોટકીઓમાં ફેરફાર કરો (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "પસંદિત ઈનપુટ પદ્ધતિ સાથે સંકળાયેલ હોટકીઓમાં ફેરફાર કરો." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "ગાળકો પસંદ કરો (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "ગાળકો પસંદ કરો કે જેઓ આ ઈનપુટ પદ્ધતિ સાથે જોડાયેલ હશે." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "વિસ્તૃત કરો (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "બધા ભાષા વર્ગો વિસ્તૃત કરો." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "ભેગું કરો (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "બધા ભાષા વર્ગો ભેગા કરો" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "બધું સક્રિય કરો (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "બધી ઈનપુટ પદ્ધતિઓ સક્રિય કરો." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "બધું નિષ્ક્રિય કરો (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "બધી ઈનપુટ પદ્ધતિઓ નિષ્ક્રિય કરો." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "નામ" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "સક્રિય કરો" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ગાળકો" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ભાષાઓ" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "વર્ણન" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s માટેની હોટકીઓમાં ફેરફાર કરો" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s માટે ગાળકો પસંદ કરો" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "ઉપર ખસેડો (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "નીચે ખસેડો (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x લાઈબ્રેરી પર આધારિત પેનલ ડિમન." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "હંમેશા" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "જરૂરીયાત પર" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ક્યારેય નહિં" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "સાધનપટ્ટી" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "બતાવો (_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "આપોઆપ સ્નેપ (_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "ઈનપુટ પદ્ધતિ ચિહ્ન બતાવો (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "ઈનપુટ પદ્ધતિ નામ બતાવો (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "સમયસમાપ્તિ છુપાવો (_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "સ્ટીક ચિહ્ન બતાવો (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "મેનુ ચિહ્ન બતાવો (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "મદદ ચિહ્ન બતાવો (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "ગુણધર્મ લેબલ બતાવો (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ઈનપુટ વિન્ડો" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "જડિત લુકઅપ કોષ્ટક (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "ઊભું લુકઅપ કોષ્ટક (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "મિશ્રિત" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ટ્રે ચિહ્ન બતાવો (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "વિન્ડો ચોંટાડો (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ફોન્ટ (_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "જો \"હંમેશા\" વિકલ્પ પસંદ થયેલ હોય, તો સાધનપટ્ટી સ્ક્રીન પર હંમેશા બતાવવામાં " "આવશે. જો \"જરૂરીયાત પ્રમાણે\" વિકલ્પ પસંદ થયેલ હોય, તો તે બતાવવામાં આવશે " "જ્યારે SCIM સક્રિય કરેલ હોય. જો \"ક્યારેય નહિં\" વિકલ્પ પસંદ થયેલ હોય, તો તે " "ક્યારેય બતાવવામાં આવશે નહિં." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો સાધનપટ્ટી સ્ક્રીન કિનારી પર સ્નેપ કરવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "સાધનપટ્ટી આ સમયસમાપ્તિ પૂરી થાય પછી છુપાવી દેવામાં આવશે. આ વિકલ્પ માત્ર " "ત્યારે જ માન્ય છે જ્યારે \"હંમેશા બતાવો\" પસંદ થયેલ હોય. આ વર્તણૂક નિષ્ક્રિય " "કરવા માટે શૂન્યમાં સુયોજીત કરો." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો ઈનપુટ પદ્ધતિ ચિહ્ન સાધનપટ્ટી પર બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો ઈનપુટ પદ્ધતિ નામ સાધનપટ્ટી પર બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો ચિહ્ન ચોંટાડો સાધનપટ્ટી પર બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "જો આ વિકલ્પ ચકાસાયેલ હોય, તો મેનુ ચિહ્ન સાધનપટ્ટી પર બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "જો આ વિકલ્પ ચકાસાયેલ હોય, તો મદદ ચિહ્ન સાધનપટ્ટી પર બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો ઈનપુટ પદ્ધતિ ગુણધર્મોનું લેબલ સાધનપટ્ટી પર " "બતાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો લુકઅપ કોષ્ટક ઈનપુટ વિન્ડોમાં જડવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "જો આ વિકલ્પ ચકાસાયેલ હોય, તો લુકઅપ કોષ્ટક ઊભું દર્શાવવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો ટ્રે ચિહ્ન ડેસ્કટોપની ક્રિયાપટ્ટી પર બતાવવામાં " "આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "જો આ વિકલ્પ ચકાસાયેલ હોય, તો સાધનપટ્ટી, ઈનપુટ અને લુકઅપ કોષ્ટક વિન્ડો તેના " "મૂળ સ્થાને ચોંટાડવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "ફોન્ટ સુયોજન ઈનપુટ અને લુકઅપ કોષ્ટક વિન્ડોમાં વાપરવામાં આવશે." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "ઈન્ટરફેસ ફોન્ટ પસંદ કરો" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "અંગ્રેજી/યુરોપીય" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "અંગ્રેજી (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "બેલ્જીયન" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ક્રોશિયાઈ" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "ચેક" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "ચેક (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ડેનિશ" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ડચ" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "દ્વોરાક" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "ઈસ્ટોનિયાઈ" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ફિનિશ" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ફ્રેંચ" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ફ્રેંચ (કેનેડિયાઈ)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ફ્રેંચ (સ્વીઝરલેન્ડ)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "જર્મન" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "જર્મનલ (મૃતકીઓ સાથે)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "જર્મન (સ્વીઝ)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ગ્રીક" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "હંગેરિયાઈ" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ઈટાલી" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "જાપાની" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "નોર્વેજીયન" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "પોલિશ" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "પોર્ટુગીઝ" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "પોર્ટુગીઝ (બ્રાઝિલ)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "પોર્ટુગીઝ (બ્રાઝિલ US એક્સન્ટો)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "રશિયા" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "સ્લોવેક" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "સ્લોવેક (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "સ્લોવેનિયા" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "સ્પેનિશ" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "સ્પેનિશ (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "સ્પેનિશ (લેટીન અમેરિકા)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "સ્વેડીશ" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "તુર્કીશ" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "અંગ્રેજી (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "આઈલેન્ડીક" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "લિથુઆનિયાઈ" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "યુક્રેનિયાઈ" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "અમ્હારીક" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "અરેબી" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "અરેબી (ઈજીપ્ત)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "અરેબી (લેબનન)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "આસામી" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "અઝરબૈજાની" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "બેલારુસિયાઈ" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "બલ્ગેરિયાઈ" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "બંગાલી" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "બંગાલી (ભારત)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "તિબેટિયાઈ" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "બોસ્નિયાઈ" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "કેટલાન" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "વેલ્શ" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "દિવેહી" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "અંગ્રેજી" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "અંગ્રેજી (ઓસ્ટ્રેલિયાઈ)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "અંગ્રેજી (કેનેડિયાઈ)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "અંગ્રેજી (બ્રીટિશ)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "અંગ્રેજી (આર્યલેન્ડ)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "અંગ્રેજી (અમેરીકી)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "સ્પેનિશ (મેક્સિકો)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "બાસ્ક" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "પર્સિયન" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ઈરીશ" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "ગાલિસીયન" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "ગુજરાતી" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "હિબ્રુ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "હિંદી" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "અર્મેનિયાઈ" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ઈન્ટરલીંગુઆ" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ઈન્ડોનેશિયાઈ" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "જ્યોર્જીયાઈ" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "કઝાખ" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "કમ્બોડિયાઈ" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "કન્નડા" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "કોરિયાઈ" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "લાઓથીયાઈ" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "લેટવિયન" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "મેકેડોનિયા" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "મલયાલમ" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "મોંગોલિયાઈ" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "મરાઠી" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "મલય" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "બર્મીઝ" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "નેપાળી" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "નોર્વેજીયાઈ (ન્યાર્નોસ્ક)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "નોર્વેજીયાઈ (બુકમાલ)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ઓરિયા" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "પંજાબી" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "રોમાનિયાઈ" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "સિંહાલા" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "અલ્બાનિયાઈ" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "સર્બિયન" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "સ્વેડીશ (ફિનલેન્ડ)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "તમિલ" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "તેલુગુ" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "થાઈ" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ઉઈઘુર" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ઉર્દુ" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ઉઝબેક" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "વિયેતનામી" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "વાલુન" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "યીડીશ" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "ચીની" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "ચીની (સરળ)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "ચીની (પારંપરિક)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "અન્ય" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "પસંદિત કીઓ (_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "કી કોડ:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "સુધારકો:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "છોડો (_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "મેટા (_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "સુપર (_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "હાયપર (_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "મહેરબાની કરીને કી કોડ પ્રથમ દાખલ કરો." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "કી દબાવો (અથવા કી જોડાણ).\n" "આ સંવાદ બંધ કરવામાં આવશે જ્યારે કી મુક્ત થાય." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "કી મેળવી રહ્યા છીએ." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "કી પસંદગી" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "કર્સર સ્થાન" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "દાખલ કર્સરનું વર્તમાન સ્થાન અક્ષરોમાં." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "મહત્તમ લંબાઈ" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "આ શબ્દમાળા દેખાવ માટે મહત્તમ સંખ્યાના અક્ષરો. જો કોઈ મહત્તમ ના હોય તો શૂન્ય." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "મહત્તમ પહોળાઈ" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "આ શબ્દમાળાના દેખાવ માટે મહત્તમ પહોળાઈ." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ને ચોકઠું છે" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE શબ્દમાળા દેખાવમાંથી કોણની બહારનું દૂર કરે છે." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "કર્સર દોરો" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE દોરો ઝબૂકતું કર્સર." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "કર્સર આપોઆપ ખસેડો" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE જ્યારે માઉસ ક્લિક કરી રહ્યા હોય ત્યારે કર્સર સ્થાન આપોઆપ ખસેડો." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "બટન દબાવો ઘટના આગળ ધપાવો" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE વપરાશકર્તા કાર્યક્રમ માટે બટન દબાવો ઘટના આગળ ધપાવો." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "શબ્દમાળામાં બંધબેસાડવા માટે વિજેટનું માપ આપોઆપ બદલો" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE આપોઆપ માપ બદલવાનું ચાલુ." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "પહોળાઈ અક્ષરોમાં" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "શબ્દમાળા દેખાવમાં જગ્યા છોડવા માટે અક્ષરોની સંખ્યા." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "ઓફસેટ સરકાવો" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "સ્ક્રીનની ડાબી બાજુએ સરકાવેલ શબ્દમાળા દેખાવના પિક્સેલોની સંખ્યા" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "લખાણ" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "શબ્દમાળા દેખાવના સમાવિષ્ટો" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "દિશા" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ટ્રેની દિશા." scim-master/po/hi.po000066400000000000000000001426441415264260100146740ustar00rootroot00000000000000# translation of hi.po to Hindi # Hindi translations for SCIM package. # Copyright (C) 2008 Rajesh Ranjan , 2008 # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Rajesh Ranjan , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:40+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "स्मार्ट कॉमन इनपुट मेथड प्लेटफॉर्म " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "अंग्रेज़ी/कुंजीपटल" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM मदद" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "इनपुट विंडो व औजारपेची से स्टिक/अनस्टिक करें." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM व मौजूदा इनपुट विधि के बारे में संक्षिप्त मदद दिखाएं." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "कमांड मेन्यू दिखाएँ." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "विन्यास फिर लोड करें" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "स्टिक विंडोज़" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "औज़ार पट्टी छुपाएँ" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "मदद ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "बाहर निकलें" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM सेटअप" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK विज़ेट लाइब्रेरी पर आधारित एकीकृत सेटअप उपयोगिता." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "पटल" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "अतिरिक्त" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM इनपुट विधि सेटअप" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " स्मार्ट कॉमन इनपुट मेथड प्लेटफॉर्म \n" "\n" "GUI सेटअप उपयोगिता\n" "\n" "\n" "\n" "कॉपीराइट 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s मॉड्यूल के लिए सेटअप." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "सभी विन्यास को तत्काल फिर लोड नहीं किया जा सकता है. SCIM को फिर आरंभ करना सभी " "नए विन्यास के प्रभावी होने के क्रम में न भूलें." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "सरलीकृत - परंपरागत चीनी वार्तालाप" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "सरलीकृत चीनी और परंपरागत चीनी के बीच बदलें" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "सरलीकृत-परंपरागत चीनी वार्तालाप" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "कोई वार्तालाप नहीं" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "सरलीकृत से परंपरागत" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "सरलीकृत चीनी से परंपरागत चीनी में बदलें" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "परंपरागत से सरलीकृत" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "परंपरागत चीनी से सरलीकृत चीनी में बदलें" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "हॉटी की:\n" "\n" " Control+u:\n" " मल्टीबाइट एनकोडिंग और युनीकोड के बीच स्विच करता है.\n" "\n" " Esc:\n" " इनपुट विधि फिर सेट करता है.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "मौजूदा इनपुट विधि की स्थिति. इसे बदलने के लिए क्लिक करें." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "यूनिकोड" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "अज्ञात" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "वैश्विक सेटअप" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "सभी FrontEnd मॉड्यूल के द्वारा प्रयुक्त वैश्विक विकल्प को सेटअप करता है, X11 " "FrontEnd, GTK IMModule, QT IMModule आदि के साथ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ट्रिगर (_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ट्रिगर कुंजी चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इनपुट विधि चालू/बंद करने के लिए बीज घटना. इसे संपादित करने के लिए दाहिने " "ओर बटन पर क्लिक करें." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "चालू करता है (_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "चालू करें कुंजी को चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इनपुट विधि को चालू करने के लिए कुंजी घटना. इसे संपादित करने के लिए बटन " "पर दाहिने क्लिक करें." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "बंद करें (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "बंद करें कुंजी चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इनपुट विधि को बंद करने की बीज घटना. इसे संपादित करने के लिए बटन पर " "दाहिने क्लिक करें." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "अगली इनपुट विधि (_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "अगला इनपुट विधि कुंजी चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "अगला इनपुट विधि में बदलने के लिए कुंजी घटना. इसे संपादित करने के लिए बटन पर " "दाहिने क्लिक करें." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "पिछला इनपुट विधि (_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "पिछला इनपुट विधि कुंजी चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "पिछला इनपुट विधि में बदलने के लिए कुंजी घटना. इसे संपादित करने के लिए बटन पर " "दाहिने क्लिक करें." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "इनपुट विधि मेन्यू दिखाएं (_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "इनपुट विधि मेन्यू कुंजी दिखाएं को चुनें" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "इनपुट विधि मेनूय दिखाने के लिए कुंजी घटना. इसे संपादित करने के लिए बटन पर " "दाहिने क्लिक करें." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "विकल्प" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "कुंजीपटल अभिन्यास (_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "आपको अभी प्रयुक्त कुंजीपटल लेआउट को यहां चुनना चाहिए ताकि इनपुट विधि, " "कुंजीपटल लेआउट को कौन ध्यान देता है, ठीक से काम कर सके." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "क्लाइंट विंडो में अंतःस्थापित पूर्वसंपादित स्ट्रिंग (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "यदि यह विकल्प जांचा जाता है, क्लाइंट इनपुट विंडो में पूर्वसंपादित स्ट्रिंग " "सीधे दिखाया जायेगा, बजाय स्वतंत्र प्लावित विंडो के." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "सभी अनुप्रयोगों के लिए समान इनपुट विधि साझा करता है (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "यदि यह विकल्प जांचा गया है, तब सिर्फ एक इनपुट विधि को सभी अनुप्रयोग के द्वारा " "समान समय पर प्रयुक्त किया जा सकता है. अन्यथा भिन्न इनपुट विधि हर अनुप्रयोग के " "प्रयोग किया जा सकता है." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "हॉट कुंजी" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "आप इनपुट विधि सक्रिय/निष्क्रिय कर सकते हैं और इनपुट विधि के लिए यहां हॉटकी " "सेट कर सकते हैं." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "अधिष्ठापित इनपुट विधि सेवा:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "हॉटकी संपादित करें (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "चयनित इनपुट विधि के साथ जुड़े हॉटकी को संपादित करें." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "फिल्टर चुनें (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "फिल्टर चुनें जो इनपुट विधि इनपुट विधि से जोड़ी जायेगी." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "फैलाएं (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "सभी भाषा श्रेणियों को विस्तार दें." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "सिकोड़ें (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "सभी भाषा श्रेणियों को सिकोड़ें." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "सभी सक्रिय करें (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "सभी इनपुट विधि को सक्रिय करें." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "सभी निष्क्रिय करें (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "सभी इनपुट विधि निष्क्रिय करें." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "नाम" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "सक्रिय" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "फ़िल्टर" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "भाषाएँ" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "वर्णन" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s के लिए हॉटकी संपादित करें" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s के लिए फिल्टर चुनें" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "ऊपर खिसकाएँ (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "नीचे खिसकाएँ (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x लाइब्रेरी पर आधारित पैनल डेमॉन." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "हमेशा" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "मांग आधारित" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "कभी नहीं" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "औजार पट्टी" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "दिखाएँ (_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "स्वचालित स्नैप (_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "इनपुट विधि प्रतीक दिखाएँ (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "इनपुट विधि नाम दिखाएं (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "मियाद छिपाएं (_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "स्टिक प्रतीक दिखाएँ (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "मेन्यू प्रतीक दिखाएँ (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "मदद प्रतीक दिखाएँ (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "गुण लेबल दिखाएं (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "इनपुट विंडो" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "अंतःस्थापित लुकअप तालिका (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "लम्बवत लुकअप तालिका (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "विविध" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ट्रे प्रतीक दिखाएँ (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "स्टिक विंडोज (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "फ़ॉन्ट (_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "यदि \"हमेशा\" विकल्प चुना जाता है, औजारपेटी को हमेशा स्क्रीन पर दिखाया " "जायेगा. यदि \"मांग आधारित\" चुना जाता है, यह सिर्फ तभी दिखाया जायेगा जब SCIM " "सक्रिय किया जाता है. यदि विकल्प \"कभी हीं\" चुना जाता है, यह कभी नहीं दिखाया " "जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "यदि विकल्प जांचा जाता है, औजारपेटी स्क्रीन बोर्डर में स्नैप किया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "मियाद बीतने के बाद औजारपेटी छिपाया जायेगा. यह विकल्प तभी वैध है जब \"हमेशा " "दिखाएँ\" चुना जाता है. इस आचरण को निष्क्रिय करने के लिए शून्य पर सेट करें." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "यदि यह विकल्प जांचा जाता है, इनपुट विधि प्रतीक को औजारपेटी पर दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "यदि यह विकल्प जांचा जाता है, इनपुट विधि नाम को औजारपेटी पर दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "यदि यह विकल्प जांचा जाता है, स्टिक प्रतीक को औजारपेटी पर दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "यदि यह विकल्प जांचा जाता है, मेन्यू प्रतीक को औजारपेटी पर दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "यदि यह विकल्प जांचा जाता है, मदद प्रतीक को औजारपेटी पर दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "यदि यह विकल्प जांचा जाता है, इनपुट विधि गुण का पाठ स्तर को औजारपेटी पर दिखाया " "जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "यदि यह विकल्प जांचा जाता है, इनपुट विंडो में लुकअप सारमी को अंतःस्थापित किया " "जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "यदि यह विकल्प जांचा जाता है, लुकअप सारणी को लंबवत रूप से दिखाया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "यदि यह विकल्प जांचा जाता है, ट्रे प्रतीक को डेस्कटॉप औजारपेटी पर दिखाया " "जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "यदि यह विकल्प जांचा जाता है, औजारपेटी, इनपुट और लुकअप सारणी को इसकी मौलिक " "स्थिति में स्टिक किया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "इनपुट व लुकअप सारणी विंडो में फॉन्ट सेटिंग को प्रयोग किया जायेगा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "अंतरफलक फ़ॉन्ट चुनें" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "अंग्रेज़ी/यूरोपीय" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "अंग्रेज़ी (यूएस)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "बेल्जियाई" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "क्रोएशियाई" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "चेक" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "चेक (क्वर्टी)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "डैनिश" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "डच" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ड्वोराक" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "इस्तोनियाई" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "फिनिश" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "फ्रेंच" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "फ्रेंच (कनाडियन)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "फ्रेन्च (स्विज़र्लान्ड)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "जर्मन" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "जर्मन (मृतकुंजी के साथ)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "जर्मन (स्विस)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "युनानी" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "हंगेरियाई" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "इतालवी" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "जापानी" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "नार्वेजियाई" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "पालिश" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "पुर्तगाली" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "पोर्चुगीस (ब्रेज़िल)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "पुर्तगाली (ब्राजील यूएस ध्वनि)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "रूसी" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "स्लोवाक" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "स्लोवाक (क्वर्टी)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "स्लोविनियाई" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "स्पेनी" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "स्पेनी (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "स्पेनी (लातिन अमेरिका)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "स्वीडिश" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "तुर्की" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "अंग्रेजी (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "आइसलैंडिक" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "लिथुआनियाई" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "उक्रेनियाई" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "अम्हारिक" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "अरबी" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "अरबी (मिश्र)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "अरेबिक (लेबनॉन)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "असामी" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "अजरबेजानी" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "बेलारूसी" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "बुल्गारियाई" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "बंगाली" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "बंगाली (भारत)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "तिब्बती" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "बोस्नियाई" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "केटेलन" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "वेल्श" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "दिवेही" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "अंग्रेज़ी" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "अंग्रेज़ी (ऑस्ट्रेलियन)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "अंग्रेजी (कैनाडियन)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "अंग्रेजी (ब्रिटिश)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "अंग्रेज़ी (आयरलैंड)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "अंग्रेजी (अमरीकी)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "स्पेनिश (मेक्सिको)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "बॉस्क" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "पारसी" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "आइरिश" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "गेलिसियन" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "गुजराती" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "हिब्रू" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "हिन्दी" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "आर्मेनियाई" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "अंतरभाषायी" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "इंडोनेशियाई" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "ज्यॉर्जियाई" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "कज़ाक" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "कंबोडियाई" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "कन्नड़" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "कोरियाई" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "लाओथियन" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "लातवियाई" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "मकदूनियाई" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "मलयालम" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "मंगोलियन" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "मराठी" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "मलय" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "बर्मी" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "नेपाली" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "नार्वेजियन (न्य्नोर्स्क)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "नार्वेजियन (बोकमाल)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "उड़िया" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "पंजाबी" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "रोमेनियाई" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "सिंहला" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "अल्बेनियन" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "सर्वियन" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "स्वीडिश (फिनलॉन्ड)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "तमिल" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "तेलुगु" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "थाई" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "यूघर" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "उर्दू" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "उज्बेक" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "विएतनामी" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "वालून" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "यिड्डिष" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "चीनी" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "चीनी (सरलीकृत)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "चैनीस (परम्परागत)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "अन्य" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "चयनित कुंजी (_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "कुंजी कोड:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "रूपांतरक:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "जारी करें (_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "मेटा (_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "सुपर (_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "हाइपर (_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "कृपया पहले कुंजी कोड दाखिल करें." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "कुंजी दबाएं (या कुंजी युग्म).\n" "यह संवाद बंद हो जायेगा जब कुंजी मुक्त किया जाता है." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "कुंजी पकड़ रहा है." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "कुंजी चुनाव" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "संकेतक स्थिति" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "प्रविष्टि संकेतक की संप्रतीक में वर्तमान स्थिति" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "अधिकतम लम्बाई" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "इस स्ट्रिंग दृश्य के लिए संप्रतीक की अधिकतम संख्या. शून्य यदि कोई अधिकतम नहीं " "है." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "अधिकतम चौड़ाई" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "इस स्ट्रिंग दृष्य की अधिकतम चौड़ाई." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "फ्रेम है" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "स्ट्रिंग दृश्य से गलत bevel के बाहर हटाता है." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "कर्सर खीचें" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "सही टिमटिमाता कर्सर खींचता है." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "स्वचालित गतियुक्त कर्सर" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "जब माउस क्लिक करता है तो सही कर्सर स्थिति को स्वतः चलाता है." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "अग्रसारित बटन प्रेस घटना" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "उपयोक्ता प्रोग्राम में सही अग्रसारित बटन प्रेस घटना." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "स्ट्रिंग में सटीक बैठने के लिए विजेट को स्वतः फिर आकार दें" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE स्वतः फिर आकार देना चालू." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "संप्रतीक में चौड़ाई" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "स्ट्रिंग दृश्य के लिए स्थान छोड़ने के लिए संप्रतीक की संख्या." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "स्क्रोल आफसेट" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "बाएँ स्क्रीन के स्क्रॉल दृश्य की पिक्सेल की संख्या" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "पाठ" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "स्ट्रिंग दृश्य की सामग्री" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "दिशा" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ट्रै का अभिमुखन." scim-master/po/insert-header.sin000066400000000000000000000012401415264260100171630ustar00rootroot00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } scim-master/po/it.po000066400000000000000000001237611415264260100147070ustar00rootroot00000000000000# translation of it.po to Italian # This file is distributed under the same license as the SCIM package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # Federico Zenith , 2004, 2005. # Francesco Valente , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:45+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Piattaforma del metodo intelligente di inserimento comune" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Inglese/Tastiera" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Aiuto di SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "" "Aggancia o sgancia la finestra di inserimento e la barra degli strumenti." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Visualizza un breve aiuto su SCIM e il metodo di inserimento attuale." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Mostra menu dei comandi." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Ricarica configurazione" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Aggancia finestre" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Nascondi la barra degli strumenti" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Aiuto..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Esci" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Configurazione di SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "Strumento di configurazione integrato basato sulla libreria di oggetti GTK." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Interfaccia" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Pannello" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Configurazione del metodo di inserimento SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" "Piattaforma del metodo di inserimento comune " "intelligente \n" "\n" "Programma di configurazione GUI\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "La configurazione per %s moduli." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Non tutte le configurazioni possono essere ricaricate al volo. Non " "dimenticarti di riavviare SCIM per permettere a tutte le nuove " "configurazioni di avere effetto." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Conversione tra cinese semplificato e tradizionale" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Converti tra cinese semplificato e cinese tradizionale" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "CS-CT" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Conversione tra cinese semplificato e tradizionale" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Senza conversione" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Da semplificato a tradizionale" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Converti cinese semplificato in cinese tradizionale" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Da tradizionale a semplificato" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Converti cinese tradizionale in cinese semplificato" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "CS->CT" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "CT->CS" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "CODICE GREZZO" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Tasti rapidi:\n" "\n" " Control+u:\n" " passa tra la codifica multibyte e Unicode.\n" "\n" " Esc:\n" " reimposta il metodo di inserimento.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Lo stato del metodo di inserimento attuale. Fai clic per cambiarlo." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Sconosciuto" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Configurazione globale" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Configura le opzioni globali usate da tutti i moduli di interfaccia, inclusi " "l'interfaccia X11, i moduli di inserimento di GTK e QT, ecc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "A_ttivatore:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Seleziona i tasti di attivazione" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Le combinazioni di tasti per accendere o spegnere il metodo di inserimento. " "Fai clic sul pulsante a destra per modificarle." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Accendi:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Seleziona i tasti di accensione" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Le combinazioni di tasti per far partire il metodo di inserimento. Fai clic " "sul pulsante a destra per modificarle." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Spegni:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Seleziona i tasti di spegnimento" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Le combinazioni di tasti per far fermare il metodo di inserimento. Fai clic " "sul pulsante a destra per modificarle." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "Metodo di i_nserimento successivo:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Seleziona i tasti del metodo di inserimento successivo" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Le combinazioni di tasti per passare al metodo di inserimento successivo. " "Fai clic sul pulsante a destra per modificarle." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "Metodo di inserimento _precedente:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Seleziona i tasti del metodo di inserimento precedente" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Le combinazioni di tasti per passare al metodo di inserimento precedente. " "Fai clic sul pulsante a destra per modificarle." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "_Mostra il menu del metodo di inserimento:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Seleziona i tasti del menu del metodo di inserimento" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Le combinazioni di tasti per mostrare il menu del metodo di inserimento. Fai " "clic sul pulsante sulla destra per modificarle." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Opzioni" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "Schema della _tastiera:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Dovresti scegliere qui la tastiera che usi adesso, in modo che i metodi di " "inserimento, che ne dipendono, funzionino correttamente." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Incorpora la pr_emodifica delle stringhe nella finestra del client" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Se questa opzione è segnata, la stringa di premodifica sarà visualizzata " "direttamente nella finestra di inserimento del client, piuttosto che in una " "finestra libera." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "Condividi lo _stesso metodo di inserimento in tutte le applicazioni" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Se questa opzione è segnata, si potrà usare un solo metodo di inserimento in " "tutte le applicazioni allo stesso tempo. Altrimenti, ogni applicazione potrà " "usare un metodo di inserimento diverso." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Tasti rapidi" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Qui puoi abilitare o disabilitare i metodi di inserimento e impostare i loro " "tasti rapidi." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "I servizi di metodo di inserimento installati:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Modi_fica tasti rapidi" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "" "Modifica i tasti rapidi associati con il metodo di inserimento selezionato." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Seleziona _filtri" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "" "Seleziona i filtri che saranno allegati a questo metodo di inserimento." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Espandi" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Espandi tutte le categorie delle lingue." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Contrai" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Contrai tutte le categorie delle lingue." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "A_bilita tutti" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Abilita tutti i metodi di inserimento." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Disabilita tutti" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Disabilita tutti i metodi di inserimento." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nome" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Abilita" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtri" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Lingue" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Descrizione" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Modifica i tasti rapidi per: %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Seleziona i filtri per: %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Sposta in s_u" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Sposta in _giù" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Un demone di pannello basato sulle librerie GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Sempre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "A richiesta" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Mai" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Barra degli strumenti" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "Mo_stra:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Agga_ncia automaticamente" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Mostra icona del metodo di _inserimento" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Mostra nome del metodo di ins_erimento" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Nasc_ondi scadenza:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Mostra icona dell'agganciamen_to" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Mostra icona del m_enu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Mostra icona dell'ai_uto" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Mostra etichetta delle _proprietà" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Finestra di inserimento" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Tabella di riferi_mento incorporata" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "Tabella di riferimento _verticale" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Varie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Mostra icona del vasso_io" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Aggancia _finestre" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Carattere:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Se l'opzione \"Sempre\" è segnata, la barra degli strumenti sarà sempre " "visualizzata sullo schermo. Se è segnata l'opzione \"A richiesta\", sarà " "mostrata solo quando viene attivato SCIM. Se è segnata l'opzione \"Mai\", " "non sarà mai mostrata." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Se questa opzione è segnata, la barra degli strumenti sarà agganciata al " "bordo dello schermo." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "La barra degli strumenti sarà nascosta dopo che sarà passato questo tempo. " "Questa opzione è valida solo quando \"Visualizza sempre\" è segnato. Imposta " "a zero per disabilitare questo comportamento." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Se questa opzione è segnata, l'icona del metodo di inserimento sarà mostrata " "nella barra degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Se questa opzione è segnata, il nome del metodo di inserimento sarà mostrato " "nella barra degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Se questa opzione è segnata, l'icona dell'agganciamento sarà mostrata sulla " "barra degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Se questa opzione è segnata, l'icona del menu sarà mostrata nella barra " "degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Se questa opzione è segnata, l'icona dell'aiuto sarà mostrata nella barra " "degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Se questa opzione è segnata, l'etichetta di testo del metodo di inserimento " "sarà mostrata nella barra degli strumenti." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Se questa opzione è segnata, la tabella di riferimento sarà incorporata " "nella finestra di inserimento." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Se questa opzione è segnata, la tabella di riferimento sarà mostrata " "verticalmente." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Se questa opzione è segnata, l'icona del vassoio sarà mostrata nel pannello " "del desktop." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Se questa opzione è segnata, la barra degli strumenti, le finestre di " "inserimento e della tabella di riferimento saranno agganciate alla loro " "posizione originale." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "L'impostazione del carattere sarà usata nelle finestre di inserimento e " "della tabella di riferimento." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Seleziona il carattere dell'interfaccia" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Inglese/Europeo" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Inglese (USA)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belga" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Croato" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Ceco" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Ceco (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Danese" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Olandese" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estone" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finlandese" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Francese" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Francese (canadese)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Francese (Svizzera)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Tedesco" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Tedesco (con tasti morti)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Tedesco (svizzero)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Greco" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Ungherese" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italiano" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Giapponese" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norvegese" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polacco" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portoghese" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portoghese (Brasile con accenti US)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Russo" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slovacco" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slovacco (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Sloveno" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Spagnolo" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Spagnolo (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Spagnolo (America latina)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Svedese" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turco" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Inglese (GB)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandese" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lituano" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ucraino" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amarico" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabo" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabo (Egitto)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabo (Libano)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamese" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbaigiano" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Bielorusso" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulgaro" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengalese" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengalese (India)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetano" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosniaco" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalano" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Gallese" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Inglese" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Inglese (australiano)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Inglese (canadese)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Inglese (britannico)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Inglese (Irlanda)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Inglese (americano)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Spagnolo (Messico)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Basco" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Persiano" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irlandese" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galiziano" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Ebraico" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armeno" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesiano" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgiano" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazako" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Cambogiano" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Coreano" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laotiano" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lettone" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macedone" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongolo" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malese" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Burmese" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalese" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norvegese (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norvegese (bokmål)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Romeno" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Sinhala" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanese" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbo" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Svedese (Finlandia)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Tailandese" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uighur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbeko" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamita" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Vallone" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Yiddish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Cinese" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Cinese (semplificato)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Cinese (tradizionale)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Altro" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Tasti sele_zionati:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Codice del tasto:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modificatori:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Rilascio" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Inserisci prima un codice del tasto." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Premi un tasto (o una combinazione di tasti).\n" "Questa finestra sarà chiusa quando il tasto sarà rilasciato." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Cattura di un tasto." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Selezione dei tasti" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Posizione del cursore" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "La posizione attuale del cursore di inserimento in caratteri." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Lunghezza massima" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Il numero massimo di caratteri per questa vista stringhe. Zero se non ce n'è." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Larghezza massima" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Larghezza massima di questa vista stringhe." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Ha cornice" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "Se falso, rimuove la cornice esterna dalla vista stringhe." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Disegna cursore" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Se vero, disegna un cursore lampeggiante." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Spostamento automatico del cursore" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "Se vero, sposta automaticamente la posizione del cursore quando si fa clic " "con il mouse." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Inoltra evento di pressione di pulsante" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "Se vero, inoltra evento di pressione di pulsante al programma utente." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Ridimensiona automaticamente l'oggetto per adattarsi alla stringa" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Se vero, attiva il ridimensionamento automatico." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Larghezza in caratteri" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Numero di caratteri per cui lasciare spazio nella vista stringhe." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Scostamento dello scorrimento" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Numero di pixel nella vista stringhe scorsi a sinistra dello schermo" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Testo" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Il contenuti della vista stringhe" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientazione" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "L'orientazione del vassoio." scim-master/po/ja.po000066400000000000000000001235771415264260100146720ustar00rootroot00000000000000# translation of ja.po to Japanese # Japanese translation for SCIM # Copyright (C) 2004, 2008 Free Software Foundation, Inc. # # James Su , 2004. # Kiyoto Hashida , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:45+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method platform" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "英語/キーボード" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIMヘルプ" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "入力ウィンドウ・ツールバーを固定する/固定しない" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIMと現在の入力メソッドについて簡単なヘルプを表示します" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "コマンドメニューを表示" #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "設定をリロード" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "ウィンドウを固定" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "ツールバーを隠す" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "ヘルプ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "終了" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIMを設定" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK Widget library に基づく統合設定ユーティリティ" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "フロントエンド" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMエンジン" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "パネル" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "その他" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM入力メソッドの設定" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method platform \n" "\n" "GUI セットアップユーティリティ\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s モジュールの設定" #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "すぐに有効にならない設定項目があります。\n" "すべての変更を有効にするにはSCIMを再起動して下さい。" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "簡体-繁体中国語相互変換" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "簡体中国語と繁体中国語を相互変換する" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "簡体-繁体" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "簡体-繁体中国語相互変換" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "変換しない" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "簡体から繁体へ" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "簡体中国語を繁体中国語に変換する" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "繁体から簡体へ" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "繁体中国語を簡体中国語に変換する" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "(C) 2002-2004 James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "簡体->繁体" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "繁体->簡体" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "ホットキー:\n" "\n" " Control+u:\n" " マルチバイトエンコード/ユニコードの切替え\n" "\n" " Esc:\n" " 入力メソッドをリセット\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "現在の入力モード。変更するにはここをクリックして下さい。" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "ユニコード" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "不明" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "全体設定" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "全てのフロントエンドモジュール(X11 FrontEnd/GTK-Immoduele/Qt-Immoduleを含む)" "で使用する全体オプションを設定" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "開始/終了(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "開始/終了キーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "入力メソッドを開始/終了するキー。変更する\n" "場合は右のボタンをクリックして下さい。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "開始(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "開始キーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "入力メソッドを開始するキー。変更する場合は\n" "右のボタンをクリックして下さい。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "終了(_F):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "終了キーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "入力メソッドを終了するキー。変更する場合は\n" "右のボタンをクリックして下さい。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "次の入力メソッド(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "次の入力メソッドキーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "次の入力メソッドに切替えるキー。変更する場合は\n" "右のボタンをクリックして下さい。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "前の入力メソッド(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "前の入力メソッドキーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "前の入力メソッドに切替えるキー。変更する場合は\n" "右のボタンをクリックして下さい。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "入力メソッドメニューを表示(_M):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "入力メソッドメニュー表示キーの設定" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "入力メソッドメニューを表示させるキー。変更する\n" "場合は右のボタンをクリックして下さい。" #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "オプション" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "キーボード配列(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "キーボード配列を認識する入力メソッドが正しく動作するように、現在使用されてい" "るキーボード配列を選んでください。" #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "未確定文字列を入力対象クライアントのウィンドウに表示(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "このオプションを有効にすると、未確定文字列は独立した入力ウィンドウにではなく" "入力対象クライアントに直接表示されます。" #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "全てのアプリケーションで同一入力メソッドを使用(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "このオプションを有効にすると、同一の入力メソッドを全てのアプリケーションで使" "用できるようになります。アプリケーションごとに別々の入力メソッドを使用する場" "合はこのオプションを無効にして下さい。" #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "ホットキー" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "入力メソッドの有効/無効とホットキーの設定を行います。" #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "インストールされている入力メソッド:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "ホットキー(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "この入力メソッドに切り替えるホットキーを編集" #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "フィルター(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "この入力メソッドで使用するフィルターを選択" #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "開く(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "全ての言語グループを展開する" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "閉じる(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "全ての言語グループを閉じる" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "全て有効(_N)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "全ての入力メソッドを有効にする" #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "全て無効(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "全ての入力メソッドを無効にする" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "名称" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "有効にする" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "フィルター" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "言語" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "説明" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s のホットキーを編集" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s のフィルターを編集" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "上に移動(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "下に移動(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.xライブラリによるパネルデーモン" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "常に" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "開始時に" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "しない" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "ツールバー" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "表示(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "オートスナップ(_N)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "入力メソッドのアイコンを表示(_I)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "入力メソッドの名称を表示(_U)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "オートハイド(_O):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "スティックアイコンを表示(_T)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "メニューアイコンを表示(_E)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "ヘルプアイコンを表示(_H)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "プロパティーラベルを表示(_P)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "入力ウィンドウ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "候補ウィンドウを埋め込む(_M)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "候補ウィンドウを縦に表示(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "その他" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "トレーアイコンを表示(_Y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "ウィンドウを固定(_W)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "フォント(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"常に\"を選ぶと、SCIMがアクティブでない時もツールバーが表示されます。\"開始" "時に\"を選ぶと、SCIMがアクティブな時だけ表示されます。\"しない\"を選ぶと、" "SCIMがアクティブな時もツールバーは表示されません。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "このオプションを有効にするとツールバーが\n" "自動的にスクリーンの端に移動します。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "ここで設定した時間が経過するとツールバーは自動的に消えます。このオプションは" "表示に\"常に\"が選択されている場合にのみ有効です。オートハイドを無効にするに" "は値をゼロにして下さい。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "このオプションを有効にすると入力メソッドの\n" "アイコンがツールバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "このオプションを有効にすると入力メソッドの\n" "名称がツールバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "このオプションを有効にするとスティックアイコンが\n" "ツールバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "このオプションを有効にするとメニューアイコンが\n" "ツールバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "このオプションを有効にするとヘルプアイコンが\n" "ツールバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "このオプションを有効にすると入力メソッドの\n" "プロパティーがツールバーにテキスト表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "このオプションを有効にすると候補ウィンドウが\n" "入力ウィンドウの中に表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "このオプションを有効にすると候補ウィンドウが\n" "縦に表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "このオプションを有効にするとトレーアイコンが\n" "タスクバーに表示されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "このオプションを有効にするとツールバーと入力/候補ウィンドウが\n" "本来の表示位置に固定されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "このフォント設定は入力/候補ウィンドウに適用されます。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "インターフェイスのフォントを選択" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "英語/ヨーロッパ言語" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "英語(US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "ベルギー" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "クロアチア語" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "チェコ語" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "チェコ語(qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "デンマーク語" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "オランダ語" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "エストニア語" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "フィンランド語" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "フランス語" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "フランス語(カナダ)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "フランス語(スイス)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "ドイツ語" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "ドイツ語(deadkeyあり)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "ドイツ語(スイス)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ギリシャ語" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "ハンガリー語" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "イタリア語" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "日本語" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "ノルウェー語" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "ポーランド語" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "ポルトガル語" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "ポルトガル語(ブラジル)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "ポルトガル語(ブラジルUSアクセント)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ロシア語" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "スロバキア語" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "スロバキア語(qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "スロベニア語" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "スペイン語" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "スペイン語(CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "スペイン語(ラテンアメリカ)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "スウェーデン語" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "トルコ語" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "英語(UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "アイスランド語" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "リトアニア語" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ウクライナ語" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "アムハラ語" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "アラビア語" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "アラビア語(エジプト)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "アラビア語(レバノン)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "アッサム語" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "アゼルバイジャン語" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "白ロシア語" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "ブルガリア語" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "ベンガル語" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "ベンガル語(インド)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "チベット語" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "ボスニア語" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "カタロニア語" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "ウェールズ語" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "ディベヒ語" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "英語" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "英語(オーストラリア)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "英語(カナダ)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "英語(イギリス)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "英語(アイルランド)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "英語(アメリカ)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "スペイン語(メキシコ)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "バスク語" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "ペルシア語" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "アイルランド語" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "ガリシア語" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "グジャラート語" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "ヘブライ語" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "ヒンディー語" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "アルメニア語" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "インターリングア" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "インドネシア語" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "グルジア語" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "カザフスタン語" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "クメール語" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "カンナダ語" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "ハングル" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "ラオス語" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "ラトヴィア語" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "マケドニア語" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "マラヤーラム語" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "モンゴル語" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "マラーティー語" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "マレー語" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "ビルマ語" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "ネパール語" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "ノルウェー語(ニューノルスク)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "ノルウェー語(ボックモール)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "オリヤー語" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "パンジャブ語" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "ルーマニア語" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "シンハラ語" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "アルバニア語" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "セルビア語" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "スウェーデン語(フィンランド)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "タミル語" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "テルグ語" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "タイ語" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ウィグル語" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ウルドゥー語" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ウズベク語" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "ベトナム語" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "ワロン語" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "イディッシュ語" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "中国語" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "簡体中国語" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "繁体中国語" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "その他" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "設定済のキー:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "キーコード:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "モディファイア:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "リリース(_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "キーコードを先に入力して下さい。" #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "キー(もしくは複数のキーの組合せ)を押して下さい。\n" "キーをリリースするとこのダイアログは閉じます。" #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "キー選択" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "キー選択" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "カーソル位置" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "現在のカーソル位置" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "最大の長さ" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "String viewウィジェットの最大表示文字数。無制限の場合は0を指定して下さい。" #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "最大幅" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "String viewウィジェットの最大表示幅" #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "フレーム有りかどうか" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSEを指定した場合、文字表示ウィジェットの縁取りを描画しません。" #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "カーソルを描画する" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUEを指定した場合、カーソルを点滅させます。" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "カーソルの自動移動" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUEを指定した場合、マウスクリックされた位置にカーソルが移動します。" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "マウスボタンのイベントを送る" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUEの場合はマウスボタンのイベントをユーザプログラムに送ります。" #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "文字列に合わせてウィジェットのサイズを自動調整" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUEを指定した、場合はウィジェットサイズを自動的に調整します。" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "文字の幅" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "String viewウィジェットに表示する文字数" #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "スクロールオフセット" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "String viewウィジェットが画面左端に畳み込まれた際の表示ピクセル数" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "テキスト" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "String viewウィジェットの内容" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "方向" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "トレイの方向" scim-master/po/kn.po000066400000000000000000001501011415264260100146670ustar00rootroot00000000000000# translation of kn.po to Kannada # translation of kn.po to # Kannada translations for SCIM package. # Copyright (C) 2008 hankar Prasad # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Shankar Prasad , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:50+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "ಸ್ಮಾರ್ಟ್ ಕಾಮನ್ ಇನ್‍ಪುಟ್ ಮೆಥಡ್ ಪ್ಲಾಟ್‍ಫಾರ್ಮ್ " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ಇಂಗ್ಲೀಷ್/ಕೀಬೋರ್ಡ್" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM ಸಹಾಯ" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ಆದಾನ ವಿಂಡೋ ಹಾಗು ಉಪಕರಣ ಪಟ್ಟಿಯನ್ನು ಸ್ಟಿಕ್/ಅನ್‍ಸ್ಟಿಕ್ ಮಾಡು." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM ಬಗ್ಗೆ ಹಾಗು ಈಗಿನ ಆದಾನ ಕ್ರಮದ ಬಗ್ಗೆ ಒಂದು ಸಂಕ್ಷಿಪ್ತ ಸಹಾಯವನ್ನು ತೋರಿಸು." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "ಆಜ್ಞಾ ಪರಿವಿಡಿಯನ್ನು ತೋರಿಸು." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "ಸಂರಚನೆಯನ್ನು ಪುನಃ ಲೋಡ್ ಮಾಡು" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "ಸ್ಟಿಕ್ ವಿಂಡೋಗಳು" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "ಉಪಕರಣಪಟ್ಟಿಯನ್ನು ಅಡಗಿಸು" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "ಸಹಾಯ ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "ನಿರ್ಗಮಿಸು" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM ಸೆಟ್ಅಪ್" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK ವಿಜೆಟ್ ಲೈಬ್ರರಿ ಆಧರಿತವಾದ ಸಂಘಟಿತಗೊಂಡ ಸೆಟ್ಅಪ್ ಸೌಲಭ್ಯ." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "ಫ್ರಂಟ್ಎಂಡ್" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMಎಂಜಿನ್" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "ಫಲಕ" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "ಹೆಚ್ಚುವರಿ" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM ಆದಾನ ಕ್ರಮ ಸೆಟ್ಅಪ್" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " ಸ್ಮಾರ್ಟ್ ಕಾಮನ್ ಇನ್‍ಪುಟ್ ಮೆಥಡ್ ಪ್ಲಾಟ್‍ಫಾರ್ಮ್ \n" "\n" "GUI ಸೆಟ್ಅಪ್ ಉಪಕರಣ\n" "\n" "\n" "\n" "ಹಕ್ಕು 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s ಘಟಕಗಳ ಸೆಟ್ಅಪ್." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "ಒಂದೇ ಬಾರಿಗೆ ಎಲ್ಲಾ ಸಂರಚನೆಯನ್ನು ಪುನಃಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಎಲ್ಲಾ ಹೊಸ ಸಂರಚನೆಗಳು " "ಪರಿಣಾಮಕಾರಿಯಾಗಲು ಅನುವಾಗುವಂತೆ SCIM ಅನ್ನು ಪುನರಾರಂಭಿಸಲು ಮರೆಯದಿರಿ." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "ಸಿಂಪ್ಲಿಫೈಡ್ - ಟ್ರೆಡೀಶನಲ್ ಚೈನೀಸ್ ಬದಲಾವಣೆ" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "ಸಿಂಪ್ಲಿಫೈಡ್ ಹಾಗು ಟ್ರೆಡೀಶನಲ್ ಚೈನೀಸ್ ನಡುವೆ ಬದಲಾಯಿಸು" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "ಸಿಂಪ್ಲಿಫೈಡ್ - ಟ್ರೆಡೀಶನಲ್ ಚೈನೀಸ್ ಬದಲಾವಣೆ" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "ಯಾವುದೆ ಬದಲಾವಣೆಗಳಿಲ್ಲ" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "ಸಿಂಪ್ಲಿಫೈಡ್‍ನಿಂದ ಟ್ರೆಡೀಶನಲ್‍ಗೆ" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "ಸಿಂಪ್ಲಿಫೈಡ್ ಚೈನೀಸ್ ಅನ್ನು ಟ್ರೆಡೀಶನಲ್ ಚೈನೀಸ್‍ಗೆ ಬದಲಾಯಿಸು" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "ಟ್ರೆಡೀಶನಲ್‍ನಿಂದ ಸಿಂಪ್ಲಿಫೈಡ್‍ಗೆ" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "ಟ್ರೆಡೀಶನಲ್ ಚೈನೀಸ್ ಅನ್ನು ಸಿಂಪ್ಲಿಫೈಡ್ ಚೈನೀಸ್‍ಗೆ ಬದಲಾಯಿಸು" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "ರಾ ಕೋಡ್" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "ಹಾಟ್ ಕೀಲಿಗಳು:\n" "\n" " Control+u:\n" " ಮಲ್ಟಿಬೈಟ್ ಎನ್ಕೋಡಿಂಗ್ ಹಾಗು ಯೂನಿಕೋಡ್‍ ನಡುವೆ ಬದಲಾಯಿಸಲು.\n" "\n" " Esc:\n" " ಆದಾನ ಕ್ರಮವನ್ನು(ಇನ್‍ಪುಟ್ ಮೆಥೆಡ್) ಮರುಹೊಂದಿಸಲು.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "ಪ್ರಸ್ತುತ ಇರುವ ಆದಾನ(ಇನ್‍ಪುಟ್) ಕ್ರಮದ ಸ್ಥಿತಿ. ಬದಲಾಯಿಸಲು ಕ್ಲಿಕ್ಕಿಸಿ." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "ಯುನಿಕೋಡ್" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "ಅಜ್ಞಾತ" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "ಜಾಗತಿಕ ಸೆಟ್ಅಪ್" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "X11 ಫ್ರಂಟ್ಎಂಡ್, GTK IMಮಾಡ್ಯೂಲ್, QT IMಮಾಡ್ಯೂಲ್ ಇತರೆಯಂತಹವನ್ನು ಒಳಗೊಂಡ ಎಲ್ಲಾ " "ಫ್ರಂಟ್ಎಂಡ್ ಘಟಕಗಳಿಂದ ಬಳಸಲಾಗುವ ಜಾಗತಿಕ ಆಯ್ಕೆಗಳನ್ನು ಹೊಂದಿಸು." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ಟ್ರಿಗರ್(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ಟ್ರಿಗರ್ ಕೀಲಿಗಳನ್ನು ಆರಿಸಿ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ಆದಾನ ಕ್ರಮವನ್ನು ಆನ್/ಆಫ್ ಮಾಡುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ " "ಗುಂಡಿಯ ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "ಆನ್ ಮಾಡು(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "ಆನ್ ಮಾಡುವ ಕೀಲಿಗಳನ್ನು ಆರಿಸು" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ಆದಾನ ಕ್ರಮವನ್ನು ಆನ್ ಮಾಡುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ ಗುಂಡಿಯ " "ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "ಆಫ್ ಮಾಡು(_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "ಆಫ್ ಮಾಡುವ ಕೀಲಿಗಳನ್ನು ಆರಿಸು" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ಆದಾನ ಕ್ರಮವನ್ನು ಆಫ್ಸ್ ಮಾಡುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ ಗುಂಡಿಯ " "ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "ಮುಂದಿನ ಆದಾನ ಕ್ರಮ(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "ಮುಂದಿನ ಆದಾನ ಕ್ರಮದ ಕೀಲಿಗಳನ್ನು ಆರಿಸಿ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "ಮುಂದಿನ ಆದಾನ ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ ಗುಂಡಿಯ " "ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "ಹಿಂದಿನ ಆದಾನ ಕ್ರಮ(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "ಹಿಂದಿನ ಆದಾನ ಕ್ರಮದ ಕೀಲಿಗಳನ್ನು ಆರಿಸಿ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "ಹಿಂದಿನ ಆದಾನ ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ ಗುಂಡಿಯ " "ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ಆದಾನ ಕ್ರಮದ ಪರಿವಿಡಿಯನ್ನು(ಮೆನು) ತೋರಿಸು(_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ಆದಾನ ಕ್ರಮದ ಪರಿವಿಡಿಯನ್ನು ತೋರಿಸುವ ಕೀಲಿಯನ್ನು ಆರಿಸಿ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ಆದಾನ ಕ್ರಮ ಪರಿವಿಡಿಯನ್ನು ತೋರಿಸುವ ಕೀಲಿಗಳು. ಇದನ್ನು ಸಂಪಾದಿಸಲು ಬಲಭಾಗದಲ್ಲಿನ ಗುಂಡಿಯ " "ಮೇಲೆ ಕ್ಲಿಕ್ಕಿಸಿ." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "ಆಯ್ಕೆಗಳು" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸ(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "ಕೀಲಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಬಳಸುವ ಆದಾನ ಕ್ರಮಗಳು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು ನೀವು ಈಗ ಬಳಸುತ್ತಿರುವ " "ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಇಲ್ಲಿ ಆರಿಸಬೇಕು." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "ಪ್ರಿಎಡಿಟ್ ವಾಕ್ಯವನ್ನು ಕ್ಲೈಂಟ್ ವಿಂಡೋದಲ್ಲಿ ಅಡಕಗೊಳಿಸು(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಪ್ರಿಎಡಿಟ್ ವಾಕ್ಯವು ಪ್ರತ್ಯೇಕ ಫ್ಲೋಟ್ ವಿಂಡೋದಲ್ಲಿ " "ಕಾಣಿಸಿಕೊಳ್ಳುವ ಬದಲಾಗಿ, ನೇರವಾಗಿ ಕ್ಲೈಂಟ್ ಆದಾನ ವಿಂಡೋದಲ್ಲಿಯೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "ಇದೆ ಆದಾನ ಕ್ರಮವನ್ನು ಬೇರೆ ಅನ್ವಯಗಳೊಂದಿಗೆ ಹಂಚಿಕೋ(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಕೇವಲ ಒಂದು ಆದಾನ ಕ್ರಮವು ಒಮ್ಮೆಗೆ ಎಲ್ಲಾ ಅನ್ವಯಗಳಿಂದ " "ಬಳಸಲ್ಪಡುತ್ತದೆ. ಇಲ್ಲದೆ ಹೋದಲ್ಲಿ ಪ್ರತಿ ಅನ್ವಯಗಳೂ ಪ್ರತ್ಯೇಕ ಆದಾನ ಕ್ರಮಗಳನ್ನು " "ಬಳಸಬಹುದಾಗಿರುತ್ತದೆ." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "ಹಾಟ್‍ಕೀಲಿಗಳು" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "ನೀವು ಆದಾನಕ್ರಮಗಳನ್ನು ಶಕ್ತ/ಅಶಕ್ತಗೊಳಿಸಿ, ಆದಾನಕ್ರಮಗಳಿಗಾಗಿ ಹಾಟ್‍ಕೀಲಿಗಳನ್ನು ಇಲ್ಲಿ " "ಹೊಂದಿಸಬಹುದಾಗಿದೆ." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "ಅನುಸ್ಥಾಪಿತಗೊಂಡ ಆದಾನ ಕ್ರಮದ ಸೇವೆಗಳು:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "ಹಾಟ್‍ಕೀಲಿಗಳನ್ನು ಸಂಪಾದಿಸು(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "ಆಯ್ಕೆ ಮಾಡಲಾದ ಆದಾನ ಕ್ರಮಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಹಾಟ್‍ಕೀಲಿಗಳನ್ನು ಸಂಪಾದಿಸಿ." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "ಶೋಧಕಗಳನ್ನು ಆಯ್ಕೆಮಾಡು(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "ಈ ಆದಾನ ಕ್ರಮಕ್ಕೆ ಲಗತ್ತಿಸಬೇಕಿರುವ ಶೋಧಕವನ್ನು ಆರಿಸಿ." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "ವಿಸ್ತರಿಸು(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "ಎಲ್ಲಾ ಭಾಷಾ ವರ್ಗಗಳನ್ನು ವಿಸ್ತರಿಸಿ." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "ಕುಗ್ಗಿಸು(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "ಎಲ್ಲಾ ಭಾಷಾ ವರ್ಗಗಳನ್ನು ಕುಗ್ಗಿಸು." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "ಎಲ್ಲವನ್ನೂ ಶಕ್ತಗೊಳಿಸು(_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "ಎಲ್ಲಾ ಆದಾನಕ್ರಮಗಳನ್ನು ಶಕ್ತಗೊಳಿಸು." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "ಎಲ್ಲವನ್ನೂ ಅಶಕ್ತಗೊಳಿಸು(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "ಎಲ್ಲಾ ಆದಾನಕ್ರಮಗಳನ್ನು ಅಶಕ್ತಗೊಳಿಸು." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "ಹೆಸರು" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "ಶಕ್ತಗೊಳಿಸು" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ಶೋಧಕಗಳು" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ಭಾಷೆಗಳು" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "ವಿವರಣೆ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s ಗಾಗಿ ಹಾಟ್‍ಕೀಲಿಗಳನ್ನು ಸಂಪಾದಿಸು" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s ಗಾಗಿ ಶೋಧಕಗಳನ್ನು ಆರಿಸು" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "ಮೇಲಕ್ಕೆ ಚಲಿಸು(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "ಕೆಳಕ್ಕೆ ಚಲಿಸು(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x ಲೈಬ್ರರಿ ಆಧರಿತವಾದ ಒಂದು ಫಲಕ ಡೆಮನ್." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "ಕೋರಿದಾಗ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ಎಂದಿಗೂ ಇಲ್ಲ" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "ಉಪಕರಣಪಟ್ಟಿ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "ತೋರಿಸು(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "ಸ್ವಯಂಚಾಲಿತ ಸ್ನಾಪ್(_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "ಆದಾನ ಕ್ರಮದ ಚಿಹ್ನೆಯನ್ನು ತೋರಿಸು(_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "ಆದಾನ ಕ್ರಮದ ಹೆಸರನ್ನು ತೋರಿಸು(_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "ಕಾಲಾವಧಿ ತೀರಿದ್ದನ್ನು ಅಡಗಿಸು(_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "ಸ್ಟಿಕ್ ಚಿಹ್ನೆಯನ್ನು ತೋರಿಸು(_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "ಪರಿವಿಡಿ ಚಿಹ್ನೆಯನ್ನು ತೋರಿಸು(_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "ಸಹಾಯ ಚಿಹ್ನೆಯನ್ನು ತೋರಿಸು(_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "ಗುಣಲಕ್ಷಣಗಳ ಲೇಬಲ್ ಅನ್ನು ತೋರಿಸು(_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ಆದಾನ ವಿಂಡೋ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "ಅಡಕಗೊಂಡ ಲುಕ್ಅಪ್ ಪಟ್ಟಿ(_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "ಲಂಬ ಲುಕ್ಅಪ್ ಪಟ್ಟಿ(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "ಇತರೆ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ಟ್ರೇ ಚಿಹ್ನೆಯನ್ನು ತೋರಿಸು(_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "ಸ್ಟಿಕ್ ವಿಂಡೋಗಳು(_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ಅಕ್ಷರಶೈಲಿ(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ\" ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಉಪಕರಣಪಟ್ಟಿಯು ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ ತೆರೆಯ " "ಮೇಲೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. \"ಕೋರಿದಾಗ\" ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, SCIM ಸಕ್ರಿಯಗೊಂಡಾಗ " "ಮಾತ್ರ ಅದು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. \"ಎಂದಿಗೂ ಬೇಡ\" ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಅದನ್ನು " "ಎಂದೂ ಸಹ ತೋರಿಸಲಾಗುವುದಿಲ್ಲ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಉಪಕರಣಪಟ್ಟಿಯು ತೆರೆಯ ಅಂಚಿಗೆ ಸ್ನ್ಯಾಪ್ ಮಾಡಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "ಈ ಕಾಲಾವಧಿ ತೀರುವಿಕೆಯು ಮುಗಿದ ನಂತರ ಉಪಕರಣ ಪಟ್ಟಿಯು ಅಡಗಿಸಲ್ಪಡುತ್ತದೆ. \"ಪ್ರತಿ ಬಾರಿಯೂ " "ತೋರಿಸು\" ಅನ್ನು ಆರಿಸಿದಾಗ ಮಾತ್ರ ಈ ಆಯ್ಕೆಯು ಮಾನ್ಯವಾಗಿರುತ್ತದೆ. ಈ ವರ್ತನೆಯನ್ನು " "ಅಶಕ್ತಗೊಳಿಸಲು ಇದನ್ನು ಶೂನ್ಯಕ್ಕೆ ಹೊಂದಿಸಿ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಆದಾನ ಕ್ರಮದ ಚಿಹ್ನೆಯು ಉಪಕರಣ ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಆದಾನ ಕ್ರಮದ ಹೆಸರು ಉಪಕರಣ ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಸ್ಟಿಕ್ ಚಿಹ್ನೆಯು ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಪರಿವಿಡಿ ಚಿಹ್ನೆಯು ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಸಹಾಯ ಚಿಹ್ನೆಯು ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಆದಾನ ಕ್ರಮದ ಗುಣಲಕ್ಷಣಗಳ ಪಠ್ಯ ಲೇಬಲ್ ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ " "ತೋರಿಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಲುಕ್ಅಪ್ ಪಟ್ಟಿಯು ಆದಾನ ವಿಂಡೋದಲ್ಲಿ ಅಡಕವಾಗಿಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಲುಕ್ಅಪ್ ಪಟ್ಟಿಯು ಲಂಬವಾಗಿ ತೋರಿಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಟ್ರೇ ಚಿಹ್ನೆಯು ಗಣಕತೆರೆಯ ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ " "ತೋರಿಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಲ್ಲಿ, ಉಪಕರಣಪಟ್ಟಿ, ಆದಾನ ಹಾಗು ಲುಕ್ಅಪ್ ಪಟ್ಟಿ ವಿಂಡೋಗಳು ಅವುಗಳ " "ಮೂಲ ಸ್ಥಾನದಲ್ಲಿಯೆ ಇರಿಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "ಆದಾನ ಹಾಗು ಲುಕ್ಅಪ್ ಪಟ್ಟಿ ವಿಂಡೋಗಳಲ್ಲಿ ಅಕ್ಷರಶೈಲಿಯ ಸಂಯೋಜನೆಗಳು ಬಳಸಲ್ಪಡುತ್ತದೆ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "ಸಂಪರ್ಕಸಾಧನದ ಅಕ್ಷರಶೈಲಿಯನ್ನು ಆರಿಸಿ" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ಇಂಗ್ಲೀಷ್/ಯುರೋಪಿಯನ್" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ಇಂಗ್ಲೀಷ್ (ಯುಎಸ್)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "ಬೆಲ್ಜಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ಕ್ರೊಯೇಶಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "ಚೆಕ್" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "ಚೆಕ್ (ಕ್ವೆರ್ಟಿ)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ಡ್ಯಾನಿಷ್" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ಡಚ್" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ಡಿವೋರಾಕ್" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "ಎಸ್ಚೋನಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ಫಿನ್ನಿಷ್" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ಫ್ರೆಂಚ್" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ಫ್ರೆಂಚ್ (ಕೆನಡಿಯನ್)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ಫ್ರೆಂಚ್ (ಸ್ವಿಟ್ಜರ್ಲ್ಯಾಂಡ್)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "ಜರ್ಮನ್" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "ಜರ್ಮನ್ (ಡೆಡ್‍ಕೀಗಳೊಂದಿಗೆ)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "ಜರ್ಮನ್ (ಸ್ವಿಸ್)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ಗ್ರೀಕ್" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "ಹಂಗೇರಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ಇಟಾಲಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "ಜಪಾನೀಸ್" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "ನಾರ್ವೇಯಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "ಪೋಲಿಷ್" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "ಪೋರ್ಚುಗೀಸ್" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "ಪೋರ್ಚುಗೀಸ್(ಬ್ರೆಜಿಲಿಯನ್)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "ಪೋರ್ಚುಗೀಸ್ (ಬ್ರಝಿಲ್ ಯುಎಸ್ ಆಕ್ಸೆಂಟ್ಸ್‍)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ರಷಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "ಸ್ಲೋವಾಕ್" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "ಸ್ಲೋವಾಕ್ (ಕ್ವೆರ್ಟಿ)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "ಸ್ಲೋವೇನಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "ಸ್ಪ್ಯಾನಿಷ್" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "ಸ್ಪ್ಯಾನಿಷ್ (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "ಸ್ಪ್ಯಾನಿಷ್ (ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕಾ)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "ಸ್ವೀಡಿಷ್" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "ಟರ್ಕಿಶ್" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ಇಂಗ್ಲೀಷ್ (ಯುಕೆ)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "ಐಸ್‍ಲ್ಯಾಂಡಿಕ್" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "ಲಿತುವಾನಿಯನ್" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ಯುಕ್ರೇನಿಯನ್" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "ಆಮ್‍ರಿಕ್" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "ಅರೇಬಿಕ್" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "ಅರೇಬಿಕ್ (ಈಜಿಪ್ಟ್‍)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "ಅರೇಬಿಕ್ (ಲೆಬನಾನ್)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "ಅಸ್ಸಾಮೀಸ್" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "ಅಝರ್‍ಬೈಜಾನಿ" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "ಬೆಲಾರುಸಿಯನ್" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "ಬಲ್ಗೇರಿಯನ್" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "ಬಂಗಾಳಿ" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "ಬಂಗಾಳಿ(ಭಾರತ)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "ಟಿಬೇಟಿಯನ್" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "ಬೋಸ್ನಿಯನ್" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "ಕ್ಯಾಟಲಾನ್" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "ವೆಲ್ಷ್" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "ಡಿವೇಹಿ" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ಇಂಗ್ಲೀಷ್" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ಇಂಗ್ಲೀಷ್ (ಆಸ್ಟ್ರೇಲಿಯನ್)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ಇಂಗ್ಲೀಷ್ (ಕೆನಡಿಯನ್)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ಇಂಗ್ಲೀಷ್ (ಬ್ರಿಟೀಷ್)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ಇಂಗ್ಲೀಷ್ (ಐರ್ಲ್ಯಾಂಡ್)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ಇಂಗ್ಲೀಷ್ (ಅಮೇರಿಕನ್)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "ಸ್ಪ್ಯಾನಿಷ್ (ಮೆಕ್ಸಿಕೋ)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "ಬಾಸ್ಕ್ಯೂ" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "ಪರ್ಷಿಯನ್" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ಐರಿಶ್" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "ಗೆಲೇಶಿಯನ್" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "ಗುಜರಾತಿ" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "ಹೀಬ್ರೂ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "ಹಿಂದಿ" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "ಅರ್ಮೇನಿಯನ್" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ಇಂಟರ್ಲಿಂಗುವಾ" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ಇಂಡೋನೇಷಿಯನ್" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "ಜಾರ್ಜಿಯನ್" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "ಕಝಾಕ್" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "ಕಾಂಬೋಡಿಯನ್" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "ಕನ್ನಡ" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "ಕೊರಿಯನ್" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "ಲಾವೋತಿಯನ್" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "ಲಾಟ್ವಿಯನ್" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "ಮೆಸಡೋನಿಯನ್" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "ಮಲಯಾಳಂ" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "ಮಂಗೋಲಿಯನ್" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "ಮರಾಠಿ" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "ಮಲೇಯ್" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "ಬರ್ಮೀಸ್" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "ನೇಪಾಲಿ" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "ನಾರ್ವಿಜನ್ (ನೂನಾರ್ಸ್ಕ್‍)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "ನಾರ್ವಿಜನ್ (ಬೋಕ್‍ಮಲ್)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ಒರಿಯಾ" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "ಪಂಜಾಬಿ" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "ರೊಮೇನಿಯನ್" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "ಸಿಂಹಳ" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "ಅಲ್ಬೇನಿಯನ್" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "ಸರ್ಬಿಯನ್" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "ಸ್ವೀಡಿಷ್ (ಫಿನ್‍ಲ್ಯಾಂಡ್)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "ತಮಿಳು" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "ತೆಲುಗು" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "ಥಾಯ್" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ವಿಗೂರ್" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ಉರ್ದು" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ಉಝ್ಬೇಕ್" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "ವಿಯೆಟ್ನಾಮೀಸ್" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "ವಲೂನ್" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "ಯಿದ್ದಿಶ್" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "ಚೈನೀಸ್" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "ಚೀನೀಸ್(ಸಿಂಪ್ಲಿಫೈಡ್)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "ಚೈನೀಸ್(ಟ್ರೆಡೀಶನಲ್)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "ಇತರೆ" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "ಆಯ್ದ ಕೀಲಿಗಳು(_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "ಕೀಲಿ ಕೋಡ್:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "ಮಾರ್ಪಡಕಗಳು:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "ಬಿಟ್ಟುಬಿಡು(_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "ಮೆಟಾ(_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "ಸೂಪರ್(_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "ಹೈಪರ್(_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "ದಯವಿಟ್ಟು ಮೊದಲು ಒಂದು ಕೀಲಿ ಕೋಡನ್ನು ನಮೂದಿಸಿ." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "ಒಂದು ಕೀಲಿಯನ್ನು (ಅಥವ ಬೇರೊಂದು ಕೀಲಿಯ ಒಟ್ಟಿನ ಕೀಲಿಯನ್ನು) ಒತ್ತಿ.\n" "ಕೀಲಿಯನ್ನು ಬಿಟ್ಟ ನಂತರ ಈ ಸಂವಾದವು ಮುಚ್ಚಲ್ಪಡುತ್ತದೆ." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "ಒಂದು ಕೀಲಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುವುದು." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "ಕೀಲಿಯ ಆಯ್ಕೆ" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "ತೆರೆಸೂಚಕದ ಸ್ಥಾನ" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "ಸೇರಿಸುವ(ಇನ್‍ಸರ್ಶನ್) ತೆರೆಸೂಚಕದ ಈಗಿನ ಸ್ಥಾನ, ಅಕ್ಷರಗಳಲ್ಲಿ." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "ಗರಿಷ್ಟ ಉದ್ದ" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "ಈ ವಾಕ್ಯ ನೋಟಕ್ಕಾಗಿನ ಗರಿಷ್ಟ ಸಂಖ್ಯೆಯ ಅಕ್ಷರಗಳು. ಯಾವುದೆ ಗರಿಷ್ಟ ಮಿತಿ ಸೂಚಿಸದೆ " "ಹೋದಲ್ಲಿ ಸೊನ್ನೆ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "ಗರಿಷ್ಟ ಅಗಲ" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "ಈ ವಾಕ್ಯ ನೋಟದ ಗರಿಷ್ಟ ಅಗಲ." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ಚೌಕಟ್ಟನ್ನು ಹೊಂದಿದೆ" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE ಆಗಿದ್ದಲ್ಲಿ ವಾಕ್ಯ ನೋಟದಿಂದ ಬಿವೆಲ್‍ನ ಹೊರಗೆ ತೆಗೆದು ಹಾಕುತ್ತದೆ." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "ಡ್ರಾ ತೆರೆಸೂಚಕ" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE ಆಗಿದ್ದಲ್ಲಿ ಮಿಣುಕುವ ತೆರೆಸೂಚಕವನ್ನು ಎಳೆಯುತ್ತದೆ." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "ತೆರೆಸೂಚಕವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸ್ಥಳಾಂತರಗೊಳಿಸು" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "" "TRUE ಆಗಿದ್ದಲ್ಲಿ ಮೌಸನ್ನು ಕ್ಲಿಕ್ಕಿಸಿದಾಗ ತೆರೆಸೂಚಕದ ಸ್ಥಾನವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ " "ಬದಲಾಗುತ್ತದೆ." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "ಫಾರ್ವಾರ್ಡ್ ಗುಂಡಿ ಒತ್ತುವಿಕೆ" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "TRUE ಆಗಿದ್ದಲ್ಲಿ ಬಳಕೆದಾರ ಪ್ರೊಗ್ರಾಂಗಾಗಿನ ಫಾರ್ವಾರ್ಡ್ ಗುಂಡಿಯ ಒತ್ತಲ್ಪಡುವುದು." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "ವಾಕ್ಯಕ್ಕೆ ಹೊಂದಿಕೊಳ್ಳುವಂತೆ ವಿಜೆಟ್‍ನ ಸ್ವಯಂ ಗಾತ್ರ ಬದಲಾವಣೆ" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE ಸ್ವಯಂ ಗಾತ್ರಬದಲಾವಣೆ ಆನ್." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "ಅಗಲ, ಅಕ್ಷರಗಳಲ್ಲಿ" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "ವಾಕ್ಯ ನೋಟದಲ್ಲಿ ಅದಕ್ಕೆ ಜಾಗ ತೆರವುಗೊಳಿಸಲು ಬೇಕಿರುವ ಅಕ್ಷರಗಳ ಸಂಖ್ಯೆ." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "ಚಲನೆ ಆಫ್‍ಸೆಟ್" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "ತೆರೆಯ ಎಡಭಾಗಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಿದ ವಾಕ್ಯ ನೋಟದಲ್ಲಿನ ಪಿಕ್ಸೆಲ್‍ಗಳ ಸಂಖ್ಯೆ" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "ಪಠ್ಯ" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "ವಾಕ್ಯ ನೋಟದ ಒಳವಿಷಯಗಳು" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "ಓರಿಯಂಟೇಶನ್" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ಟ್ರೇಯ ಓರಿಯಂಟೇಶನ್." scim-master/po/ko.po000066400000000000000000001202471415264260100147000ustar00rootroot00000000000000# translation of ko.po to Korean # translation of ko. # Copyright (C) 2004 THE ko'S COPYRIGHT HOLDER # This file is distributed under the same license as the SCIM package. # # # Kitae , 2005. # Choe Hwanjin , 2005. # Eunju Kim , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:52+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "스마트 일반 입력 방식 플랫폼 " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 제임스 수 \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "영어/키보드" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM 도움말" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "입력창과 도구상자 고정/비고정합니다." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM 과 현재 입력 방법에 대한 간단한 도움말을 보여줍니다." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "명령 메뉴를 보여줍니다." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 제임스 수 " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "설정 새로 불러오기" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "윈도우 고정" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "도구바 숨김" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "도움말 ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "끝내기" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM 설정" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK 라이브러리 기반의 설정 프로그램" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "프론트엔드" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "입력기엔진" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "패널" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "기타" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM 입력기 설정" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " 스마트 일반 입력 방식 플랫폼 \n" "\n" "GUI 설정 프로그램\n" "\n" "\n" "\n" "Copyright 2002-2004, 제임스 수 <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s 모듈을 위한 설정." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "모든 환경 설정을 새로 불러오진 못 합니다. 새로운 환경설정을 모두 적용하기 위" "해서는 SCIM을 다시 시작해야 합니다." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "중국어 간체-번체 변환" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "중국어를 간체와 번체로 변환" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "간체-번체" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "중국어 간체-번체 변환" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "변환하지 않음" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "중국어 간체에서 번체로" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "중국어 간체에서 번체로 변환 " #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "중국어 번체에서 간체로 " #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "중국어 번체에서 간체로 변환" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "제임스 수 " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "간체->번체" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "번체->간체" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 제임스 수 " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "단축키:\n" "\n" " Control+u:\n" " 멀티바이트 인코딩과 유니코드간 전환.\n" "\n" " Esc:\n" " 입력기 초기화.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "현재 입력 상태입니다. 바꾸길 원하시면 클릭하십시오." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "유니코드" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "알수없음" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "전체 설정" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "X11, GTK 입력모듈, QT 입력모듈 등 모든 프론트엔드에대한 전체 설정을 합니다." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "전환키(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "전환키 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM 입력방식을 끄고/켜기 위한 키 설정입니다. 우측 단추를 클릭하고 수정하세" "요." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "활성화(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "활성화키 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "SCIM 입력방식을 켜기 위한 키 설정. 우측 단추를 클릭하고 수정하세요." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "끄기(_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "끄기 키 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "SCIM 입력방식을 끄기 위한 키 설정. 우측 단추를 클릭하고 수정하세요." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "다음 입력방식(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "다음 입력 방식으로 바꾸는데 사용할 키 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "다음 입력방식으로 전환을 위한 키설정. 오른쪽 단추를 클릭하고 수정하세요." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "이전 입력방식(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "이전 입력방식을 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "이전 입력방식으로 전환을 위한 키 설정. 우측 단추를 클릭하고 수정하세요." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "입력방식 방법 보여줌(_M)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "입력 방식 보여줌 메뉴 키 선택" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "입력방식 메뉴를 보여줌 설정. 오를쪽 단추를 클릭하고 수정하세요." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "옵션" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "키보드 레이아웃(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "현재 사용하는 키보드 레이아웃을 선택하세요, 그래야만 사용하려는 입력방법들이 " "정확히 작동할수 있습니다." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "조합중인 글자를 클라이언트 윈도우에서 보여줌(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "이 옵션을 켜면, 조합중인 글자가 독립된 창에서 보이지 않고 입력창에서 바로 보" "이게됩니다." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "모든 프로그램에 같은 입력 방법을 공유(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "이 옵션을 켜면 단하나의 입력 방법을 모든 프로그램에서 동시에 사용하게됩니다. " "선택하지 않으면 각각의 프로그램에서 다른 입력 방법이 적용됩니다." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "단축키" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "각 입력 방법들과 단축키를 활성화하거나, 비활성화 할수 있습니다." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "설치된 입력기 서비스: " #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "단축키 수정(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "선택된 입력 방식에 관련된 단축키 수정." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "필터 선택" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "현재 입력 방법에 연결될 필터 선택." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "확장(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "모든 언어 카테고리를 확장 " #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "축소(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "모든 언어 카테고리를 축소." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "모두 활성화(_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "모든 입력 방법을 활성화 " #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "모두 비활성화(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "모든 입력 모듈 비활성화" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "이름" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "활성화" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "필터" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "언어" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "설명" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s 단축키 수정" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s(을)를 위한 필터 선택" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "위로(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "아래로(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x 라이브러리를 기반으로 한 패널 디먼" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "항상" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "필요할때" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "전혀안함" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "도구바" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "보이기(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "자동 스냅(_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "입력방식 아이콘 보임(_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "입력방식 이름 보임(_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "숨기기 시간 제한(_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "고정 아이콘 보임(_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "메뉴 아이콘 보임(_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "도움말 아이콘 보임(_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "속성 상태 보임(_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "입력창" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "내장된 미리보기 테이블 사용(_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "미리보기 테이블 세로로 보기(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "기타" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "트레이 아이콘 보이기(_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "창 고정(_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "글꼴(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"항상\" 옵션이 선택되면 도구상자는 항상 화면에 보이게 됩니다. \"필요할때\" " "옵션이 선택되면 SCIM이 활성화 됐을 때만 보이게 됩니다. \"전혀안함\" 옵션을 선" "택하면 전혀 보이지 않게 됩니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "이 설정을 선택하면, 도구상자가 화면 가장자리에 맞춰 움직이게 됩니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "일정 시간이 지나면 도구상자가 사라질 것입니다. 이 옵션은 \"항상 보임\" 옵션" "이 선택 되어 있을때 작동합니다. 0으로 설정하면 작동하지 않습니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "이 옵션을 선택하면, 입력방법 아이콘이 도구상자에 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "이 옵션을 선택하면, 입력방법의 이름이 도구상자에 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "이 옵션을 선택하면, 고정 아이콘이 도구상자에 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "이 옵션을 선택하면, 메뉴 아이콘이 도구상자에 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "이 옵션을 선택하면, 도구창에 도움말 아이콘이 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "이 옵션을 선택하면, 입력 방식의 속성들을 도구상자에서 볼 수 있습니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "이 옵션을 선택하면, 미리보기 테이블이 입력창에 바로 붙을 것입니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "이 옵션을 선택하면, 미리보기 테이블이 세로로 나타납니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "이 옵션을 선택하면, 트레이 아이콘이 데스크탑 테스크바에 보이게 됩니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "이 옵션을 선택하면, 도구상자, 입력창과 미리보기창들의 위치가 고정됩니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "글꼴 설정은 입력창과 미리보기 테이블 창에 사용됩니다." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "글꼴 선택" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "영어/유럽어" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "영어 (미국)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "벨기에어" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "크로아티아어" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "체코어" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "체코어 (쿼티)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "덴마크어" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "네델란드어" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "드보락" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "에스토니아어" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "핀란드어" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "프랑스어" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "프랑스어 (캐나다)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "프랑스어 (스위스)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "독일어" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "독일어 (데드키 포함)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "독일어 (스위스)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "그리스어" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "헝가리어" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "이탈리아어" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "일본어" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "노르웨이어" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "폴란드어" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "포르투갈어" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "포르투갈어 (브라질)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "포루투갈어 (브라질 미국 엑센트)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "러시아어" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "슬로바키아어" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "슬로바키아어 (쿼티)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "슬로베니아어" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "스페인어" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "스페인어 (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "스페인어 (라틴 아메리카)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "스웨덴어" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "터키어" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "영어 (영국)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "아이스랜드어" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "리투아니아어" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "우크라이나어" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "암하라어" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "아랍어" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "아랍어 (이집트)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "아랍어 (레바논)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "아삼어" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "아제르바이아잔어" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "벨로루시어" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "불가리어" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "벵갈어" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "뱅갈어 (인도)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "티벳어" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "보스니아어" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "카탈로니아어" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "웨일즈어" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "디베히어 " #: ../src/scim_utility.cpp:724 msgid "English" msgstr "영어" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "영어 (호주)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "영어 (캐나다)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "영어 (영국)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "영어 (아일랜드)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "영어 (미국)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "스페인어 (멕시코)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "바스크어" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "페르시아어" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "아일랜드어" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "갈리시아어" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "구자라트어" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "히브리어" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "힌두어" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "아르메니아어 " #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "국제어" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "인도네시아어" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "그루지아어 " #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "카자흐어" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "캄보디아어" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "칸나다어" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "한국어" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "라오스어" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "라트비아어" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "마케도니아어" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "말라얄람어" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "몽골어" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "마라타어" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "말레이어" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "버마어 " #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "네팔어" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "노르웨이어 (뉘노르스크)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "노르웨이어 (부크말)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "오리야어" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "펀자브어" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "루마니아어" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "신할라어 " #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "알바니아어" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "세르비아어" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "스웨덴어 (핀란드)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "타밀어" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "텔루구어" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "태국어 " #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "위그루어" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "우르두어" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "우즈베키스탄어" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "베트남어" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "와론어" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "이디시어" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "중국어" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "중국어 (간체)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "중국어 (번체)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "기타" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "선택된 키(_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "키 코드:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "수정:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "놓음(_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "키 코드를 입력하십시오." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "키를 누르십시오(또는 키의 조합을).\n" "키 선택 후 이창은 자동으로 닫힙니다." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "키를 기록합니다." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "키 선택" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "커서 위치" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "문자열에서 커서의 현재 위치." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "최대 길이" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "문자열를 보기 위한 최대 문자수, 0은 제한 없음." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "최대폭" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "문자열 보기의 최대 넓이." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "프레임을 가짐" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "거짓으로 설정하면 문자열 보기의 외각 경사가 없어집니다." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "커서 그리기" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "참으로 설정하면 커서를 깜빡이게 합니다." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "자동 커서 이동" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "참으로 설정하면 마우스 클릭시 자동으로 커서가 이동합니다." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "버튼 프레스 이벤트를 전달함" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "참으로 설정하면 버튼 프레스 이벤트를 사용자 프로그램에 전달." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "문자열에 크기에 따라 위젯 크기 자동 조절" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "참으로 설정하면 자동으로 크기가 변합니다." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "폭(글자 단위)" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "문자열 보기에서 공간을 만들기위해 사용할 글자수." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "스크롤 단위" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "화면 좌측으로 부터 문자열 보기에서 스크롤을 위한 픽셀수" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "본문" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "문자열 보기의 내용" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "방향" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "트레이의 방향." scim-master/po/ml.po000066400000000000000000001576221415264260100147060ustar00rootroot00000000000000# translation of ml.po to # Malayalam translations for SCIM package. # Copyright (C) 2008 Ani Peter # This file is distributed under the same license as the SCIM package. # Automatically generated, 2008. # Ani Peter , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:55+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "സ്മാര്‍ട്ട് കോമണ്‍ ഇന്‍പുട്ട് മെഥേഡ് പ്ലാറ്റ്ഫോം" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 ജെയിംസ് സൂ \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ഇംഗ്ലീഷ്/കീബോര്‍ഡ്" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "സ്കിം സഹായം" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ടൂള്‍ബാറും ഇന്‍പുട്ട് ജാലകവും സ്റ്റിക്/അണ്‍സ്റ്റിക് ചെയ്യുക." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "" "സ്കിമിനെപ്പറ്റിയും നിലവിലുള്ള ഇന്‍പുട്ട് മെഥേഡിനെപ്പറ്റിയും ഒരു ലഘു " "സഹായവിവരണം കാണിക്കുക" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "കമാന്‍ഡ് മെനു കാണിക്കുക." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 ജെയിംസ് സൂ " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "സജ്ജീകരണം വീണ്ടും ലഭ്യമാക്കുക" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "സ്റ്റിക്ക് ജാലകങ്ങള്‍" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "ടൂള്‍ബാര്‍ അദൃശ്യമാക്കുക" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "സഹായം ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "പുറത്ത് കടക്കുക" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "സ്കിം ക്രമികരണം" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "GTK വിഡ്ജറ്റ് ലൈബ്രറിയുടെ അടിസ്ഥാനത്തിലുള്ള കൂടിക്കലര്‍ന്ന ക്രമികരണ പ്രയോഗം" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "സ്കിം" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "ഫ്രണ്ട്എന്‍ഡ്" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "പാനല്‍" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "എക്സ്ട്രാ" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "സ്കിം ഇന്‍പുട്ട് മെഥേഡ് ക്രമികരണം" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " സ്മാര്‍ട്ട് കോമണ്‍ ഇന്‍പുട്ട് മെഥേഡ് പ്ലാറ്റഫോം " "\n" "\n" "GUI ക്രമികരണ പ്രയോഗം\n" "\n" "\n" "\n" "പകര്‍പ്പവകാശം 2002-2004, ജെയിംസ് സൂ " "<suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s ഘടകങ്ങള്‍ക്കുള്ള ക്രമികരണം." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "എല്ലാ ക്രമികരണങ്ങളും വീണ്ടും ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല. പുതിയ ക്രമികരണങ്ങള്‍ " "കമ്പ്യൂട്ടറില്‍ " "സൂക്ഷിക്കുന്നതിനായി വീണ്ടും സ്കിം ആരംഭിക്കുവാന്‍ പ്രത്യേകം ഓര്‍ക്കുക." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "സിംപ്ലിഫൈഡ്-ട്രഡീഷണല്‍ ചൈനീസ് വേര്‍തിരിക്കല്‍" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "സിംപ്ലിഫൈഡ് ചൈനീസും ട്രഡീഷനല്‍ ചൈനീസും തമ്മില്‍ മാറ്റുക" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "സിംപ്ലിഫൈഡ്-ട്രഡീഷനല്‍ ചൈനീസ് വേര്‍തിരിക്കല്‍" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "വേര്‍തിരിക്കല്‍ ലഭ്യമല്ല" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "സിംപ്ലിഫൈഡില്‍ നിന്നും ട്രഡീഷണലിലേക്ക്" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "സിംപ്ലിഫൈഡ് ചൈനീസിനെ ട്രഡീഷണല്‍ ചൈനീസിലേക്ക് വേര്‍തിരിക്കുക" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "ട്രഡീഷണലില്‍ നിന്നും സിംപ്ലിഫൈഡിലേക്ക്" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "ട്രഡീഷണല്‍ ചൈനീസിനെ സിംപ്ലിഫൈഡ് ചൈനീസിലേക്ക് വേര്‍തിരിക്കുക" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "ജെയിംസ് സൂ " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "റോ കോഡ്" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 ജെയിംസ് സൂ " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "ഹോട്ട്കീകള്‍:\n" "\n" " Control+u:\n" " മള്‍ട്ടിബൈറ്റ് എന്‍കോഡിങും യൂണികോഡും മാറി ഉപയോഗിക്കുവാന്‍ സാധിക്കുന്നു.\n" "\n" " Esc:\n" " ഇന്‍പുട്ട് മെഥേഡ് വീണ്ടും ക്രമികരിക്കുന്നു.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "" "നിലവിലുള്ള ഇന്‍പുട്ട് മെഥേഡിന്റെ നിലവാരം. മാറ്റുന്നതിനായി ക്ലിക്ക് ചെയ്യുക." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "യൂണികോഡ്" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "അപരിചിതം" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "ഗ്ലോബല്‍ ക്രമികരണം" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "X11 ഫ്രണ്ട് എന്‍ഡ്, GTK IMModule, QT IMModule എന്നിവ ഉള്‍പ്പ‍ടെയുള്ള എല്ലാ " "ഫ്രണ്ട് " "എന്‍ഡ് ഘടകങ്ങളും ഉപയോഗിക്കുന്ന ഗ്ലോബല്‍ ഉപാധികള്‍ ക്രമികരിക്കുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_ട്രിഗ്ഗര്‍:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ട്രിഗ്ഗര്‍ കീകള്‍ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "സ്കിം ഇന്‍പുട്ട് മെഥേഡ് ഓണ്‍/ഓഫ് ചെയ്യുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_ഓണ്‍ ചെയ്യുക:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "ഓണ്‍ ചെയ്യുന്നതിനുള്ള കീ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "സ്കിം ഇന്‍പുട്ട് മെഥേഡ് ഓണ്‍ ചെയ്യുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_ഓഫ് ചെയ്യുക:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "ഓഫ് ചെയ്യുന്നതിനുള്ള കീ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "സ്കിം ഇന്‍പുട്ട് മെഥേഡ് ഓഫ് ചെയ്യുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_അടുത്ത ഇന്‍പുട്ട് മെഥേഡ്:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "അടുത്ത ഇന്‍പുട്ട് മെഥേഡിനുള്ള കീ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "അടുത്ത ഇന്‍പുട്ട് മെഥേഡിലേക്ക് മാറുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_മുമ്പുള്ള ഇന്‍പുട്ട് മെഥേഡ്:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "മുമ്പുള്ള ഇന്‍പുട്ട് മെഥേഡിനുള്ള കീ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "മുമ്പുള്ള ഇന്‍പുട്ട് മെഥേഡിലേക്ക് മാറുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ഇന്‍പുട്ട് മെഥേഡ് _മെനു കാണിക്കുക:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ഇന്‍പുട്ട് മെഥേഡ് മെനു കാണിക്കുന്നതിനുള്ള കീ തിരഞ്ഞെടുക്കുക" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ഇന്‍പുട്ട് മെഥേഡ് മെനു കാണിക്കുന്നതിനുള്ള കീകള്‍. അതില്‍ മാറ്റം " "വരുത്തുന്നതിനായി " "വലത്ത് വശത്തുള്ള ബട്ടണില്‍ അമര്‍ത്തുക." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "ഉപാധികള്‍" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_കീബോര്‍ഡ് ശൈലി:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "നിങ്ങളുടെ ശരിയായ ഇന്‍പുട്ട് മെഥേഡ് ശരിയായി പ്രവര്‍ത്തിക്കുന്നതിന് നിലവില്‍ " "നിങ്ങള്‍ " "ഉപയോഗിക്കുന്ന കീബോര്‍ഡ് ശൈലി തിരഞ്ഞെടുക്കുക." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "ക്ലൈന്റ് ജാലകത്തിലേക്ക് പ്രീഎഡിറ്റ് സ്ട്രിങ് _അടക്കം ചെയ്തിരിക്കുന്നു" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തിട്ടുണ്ട് എങ്കില്‍, മറ്റൊരു ഫ്ലോട്ട് ജാലകത്തിന് പകരം, " "പ്രീഎഡിറ്റ് സ്ട്രിങ് " "നേരിട്ട് ക്ലൈന്റ് ഇന്‍പുട്ട് ജാലകത്തില്‍ ദൃശ്യമാകുന്നു." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "എല്ലാ പ്രയോഗങ്ങള്‍ക്കും ഒരേ ഇന്‍പുട്ട് മെഥേഡ് _പങ്ക് വയ്ക്കുക" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തിട്ടുണ്ട് എങ്കില്‍, ഒരേ സമയത്ത് പല പ്രയോഗങ്ങള്‍ക്ക് ഒരു " "ഇന്‍പുട്ട് മെഥേഡ് " "ഉപയോഗിക്കുവാന്‍ മാത്രമേ സാധിക്കൂ. അല്ലെങ്കില്‍, ഓരോ പ്രയോഗങ്ങള്‍ക്കും പല " "ഇന്‍പുട്ട് മെഥേഡുകള്‍ " "ഉപയോഗിക്കുവാന്‍ സാധിക്കുന്നു." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "ഹോട്ട്കീകള്‍" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "ഇന്‍പുട്ട് മെഥേഡുകള്‍ സജ്ജമാക്കുകയോ നിഷ്ക്രിയമാക്കുകയോ ചെയ്ത് അവയ്ക്കുള്ള " "ഹോട്ട്കീകള്‍ " "ഇവിടെ ക്രമികരിക്കാം." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്തിട്ടുള്ള ഇന്‍പുട്ട് മെഥേഡ് സര്‍വീസുകള്‍:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "_ഹോട്ട്കീകളില്‍ മാറ്റം വരുത്തുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "" "തിരഞ്ഞെടുത്ത ഇന്‍പുട്ട് മെഥേഡുമായി ബന്ധപ്പെട്ട ഹോട്ട്കീകളില്‍ മാറ്റം വരുത്തുക." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "_ഫില്‍‌റ്ററകുള്‍ തിരഞ്ഞെടുക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "" "ഈ ഇന്‍പുട്ട് മെഥേഡില്‍ ചേര്‍ത്തിട്ടുള്ള ഫില്‍‌റ്ററകുള്‍ തിരഞ്ഞെടുക്കുക." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_നിവര്‍ത്തിവയ്ക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "ഭാഷയുടെ എല്ലാ വിഭാഗങ്ങളും നിവര്‍ത്തി വയ്ക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_ഒതുക്കിവയ്ക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "ഭാഷയുടെ എല്ലാ വിഭാഗങ്ങളും ഒതുക്കിവയ്ക്കുക." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "എല്ലാം _സജ്ജമാക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "എല്ലാ ഇന്‍പുട്ട് മെഥേഡുകളും സജ്ജമാക്കുക." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "എല്ലാം _നിഷ്ക്രിയമാക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "എല്ലാ ഇന്‍പുട്ട് മെഥേഡുകളും നിഷ്ക്രിയമാക്കുക." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "പേര്" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "സജ്ജമാക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ഫില്‍‌റ്ററുകള്‍" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ഭാഷകള്‍" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "വിവരണം" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s-നുള്ള ഹോട്ട്കീകളില്‍ മാറ്റം വരുത്തുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s-നുള്ള ഫില്‍‌റ്ററുകള്‍ തിരഞ്ഞെടുക്കുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "_മുകളിലേക്ക് നീങ്ങുക" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "_താഴേക്ക് നീങ്ങുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x ലൈബ്രറിയുടെ അടിസ്ഥാനത്തിലുള്ള ഒരു പാനല്‍ ഡെമണ്‍." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "എപ്പോഴും" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "ആവശ്യമനുസരിച്ച്" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ഒരിക്കലും ഇല്ല" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "ടൂള്‍ബാര്‍" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_കാണിക്കുക:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "ഓട്ടോ _സ്നാപ്പ്" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "_ഇന്‍പുട്ട് മെഥേഡിനുള്ള പ്രതിരൂപം കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "_ഇന്‍പുട്ട് മെഥേഡിന്റെ പേര് കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "അദൃശ്യമാകുന്നതിനുള്ള _സമയം:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "_സ്റ്റിക് പ്രതിരൂപം കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "_മെനുവിനുള്ള പ്രതിരൂപം കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "_സഹായത്തിനുള്ള പ്രതിരൂപം കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "_വിശേഷണങ്ങളുടെ ലേബല്‍ കാണിക്കുക" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ഇന്‍പുട്ട് ജാലകം" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "_ഇതിലടക്കം ചെയ്തിരിക്കുന്ന ലുക്കപ്പ് ടേബിള്‍" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_വെര്‍ട്ടിക്കല്‍ ലുക്കപ്പ് ടേബിള്‍" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "പലവക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ട്രേ_യ്ക്കുള്ള പ്രതിരൂപം കാണിക്കുക" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "സ്റ്റിക് _ജാലകങ്ങള്‍" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_ലിപി:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"എപ്പോഴും\" എന്ന ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, സ്ക്രീനില്‍ ടൂള്‍ബാര്‍ " "എപ്പോഴും ലഭ്യമാകുന്നു. " "\"ആവശ്യമുള്ളപ്പോള്‍\" ആണ് തിരഞ്ഞെടുത്ത ഉപാധി എങ്കില്‍, സ്കിം സജീവമാകുമ്പോള്‍ " "മാത്രം ഇത് " "ലഭ്യമാകുന്നു. \"ഒരിക്കലും ഇല്ല\" എന്നാണ് തിരഞ്ഞെടുത്തത് എങ്കില്‍, ഒരിക്കലും " "അത് ലഭ്യമാകുന്നതല്ല." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, സ്ക്രീനിന്റെ അതിരിലേക്ക് ടൂള്‍ബാര്‍ " "ചേര്‍ക്കുന്നതാണ്." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "സമയപരിധിയ്ക്ക് ശേഷം ടൂള്‍ബാര്‍ അദൃശ്യമാകുന്നു. \"എപ്പോഴും കാണിക്കുക\" എന്നത് " "തിരഞ്ഞെടുത്താല്‍ മാത്രമേ ഇത് ലഭ്യമാകൂ. ആവശ്യമില്ലെങ്കില്‍ ഇതു് പൂജ്യമായി " "ക്രമികരിക്കുക." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ഇന്‍പുട്ട് മെഥേഡിനുള്ള പ്രതിരൂപം ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ഇന്‍പുട്ട് മെഥേഡിന്റെ പേര് ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, സ്റ്റികിനുള്ള പ്രതിരൂപം ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, മെനുവിനുള്ള പ്രതിരൂപം ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, സഹായത്തിനുള്ള പ്രതിരൂപം ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു്." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ഇന്‍പുട്ട് മെഥേഡിന്റെ വിശേഷണങ്ങള്‍ " "ടൂള്‍ബാറില്‍ " "കാണിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ലുക്കപ്പ് ടേബിള്‍ ഇന്‍പുട്ട് ജാലകത്തില്‍ " "അടക്കം " "ചെയ്യുന്നതാണ്." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ലുക്കപ്പ് ടേബിള്‍ നേരെ ദൃശ്യമാകുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ഡസ്ക്ടോപ്പിന്റെ ടാസ്ക്ബാറില്‍ ട്രേയുടെ " "പ്രതിരൂപം " "കാണിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "ഈ ഉപാധി തിരഞ്ഞെടുത്തു എങ്കില്‍, ടൂള്‍ബാര്‍, ഇന്‍പുട്ട്, ലുക്കപ്പ് ടേബിളുകള്‍ " "എല്ലാം യഥാര്‍ത്ഥ " "സ്ഥാനങ്ങളില്‍ ചേര്‍ക്കപ്പെടുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "ഇന്‍പുട്ട്, ലോക്കപ്പ് ടേബിള്‍ ജാലകം എന്നിവയില്‍ ലിപിയുടെ ക്രമികരണം " "ഉപയോഗിക്കുന്നു." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "സംയോജകഘടകത്തിനുള്ള ലിപി തിരഞ്ഞെടുക്കുക" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ഇംഗ്ലീഷ്/യൂറോപ്പിയന്‍" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ഇംഗ്ലീഷ് (യുഎസ്)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "ബെല്‍ജിയന്‍" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ക്രൊയേഷ്യന്‍" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "ചെക്ക്" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "ചെക്ക് (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ഡാനിഷ്" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ഡച്ച്" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ദ്വോരക്" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "എസ്റ്റോണിയന്‍" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ഫിന്നിഷ്" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ഫ്രഞ്ച്" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ഫ്രഞ്ച് (കനേഡിയന്‍)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ഫ്രഞ്ച് (സ്വിറ്റ്സര്‍ലാന്‍ഡ്)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "ജര്‍മന്‍" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "ജര്‍മന്‍ (ഡെഡ് കീകള്‍ക്കൊപ്പം)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "ജര്‍മന്‍ (സ്വിസ്സ്)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ഗ്രീക്ക്" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "ഹംഗേറിയന്‍" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ഇറ്റാലിയന്‍" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "ജാപ്പനീസ്" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "നോര്‍വീജിയന്‍" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "പോളിഷ്" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "പോര്‍ച്ചുഗീസ്" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "പോര്‍ച്ചുഗീസ് (ബ്രസീല്‍)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "പോര്‍ച്ച്യുഗീസ് (ബ്രസീല്‍ യുഎസ് ആക്സെന്റ്)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "റഷ്യന്‍" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "സ്ലോവാക്" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "സ്ലോവാക്ക് (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "സ്ലോവേനിയന്‍" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "സ്പാനിഷ്" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "സ്പാനിഷ് (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "സ്പാനിഷ് (ലാറ്റിന്‍ അമേരിക്കാ)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "സ്വീഡിഷ്" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "ടര്‍ക്കിഷ്" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ഇംഗ്ലീഷ് (യുകെ)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "ഐസ്‌ലാഡിക്" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "ലിഥുവേനിയന്‍" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "യുക്രേനിയന്‍" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "അംഹാറിക്" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "അറബിക്" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "അറബിക് (ഈ‍ജിപ്റ്റ്)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "അറബിക് (ലെബനന്‍)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "ആസാമീസ്" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "അസര്‍ബൈജാനി" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "ബെലറൂഷ്യന്‍" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "ബള്‍ഗേറിയന്‍" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "ബംഗാള" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "ബംഗാളി (ഇന്ത്യ)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "ടിബെറ്റിയന്‍" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "ബോസ്നിയന്‍" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "കാറ്റളന്‍" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "വെല്‍ഷ്" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "ദിവേഹി" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ഇംഗ്ലീഷ്" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ഇംഗ്ലീഷ് (ഓസ്ട്രേലിയന്‍)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ഇംഗ്ലീഷ് (കനേഡിയന്‍)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ഇംഗ്ലീഷ് (ബ്രിട്ടീഷ്)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ഇംഗ്ലീഷ് (ഐര്‍ലന്‍ഡ്)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ഇംഗ്ലീഷ് (അമേരിക്കന്‍)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "സ്പാനിഷ് (മെക്സിക്കോ)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "ബാസ്ക്" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "പേര്‍ഷ്യന്‍" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ഐറിഷ്" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "ഗലീഷ്യന്‍" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "ഗുജറാത്തി" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "ഹിബ്രൂ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "ഹിന്ദി" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "അര്‍മേനിയന്‍" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ഇന്റര്‍ലിഗ്വല്‍" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ഇന്‍ഡോനേഷ്യന്‍" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "ജോര്‍ജിയന്‍" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "കസക്" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "കമ്പോടിയന്‍" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "കന്നഡാ" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "കൊറിയന്‍" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "ലാവോഥിയന്‍" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "ലാട്‌വിയന്‍" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "മസിഡോണിയന്‍" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "മലയാളം" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "മംഗോളിയന്‍" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "മറാഠി" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "മലയ്" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "ബര്‍മീസ്" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "നേപ്പാളി" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "നോര്‍വീജിയന്‍ (നൈനോര്‍സ്ക്)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "നോര്‍വീജിയന്‍ (ബോക്മാല്‍)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ഒറിയാ" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "പഞ്ചാബി" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "റൊമേനിയന്‍" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "സിന്‍ഹാലാ" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "അല്‍ബാനിയന്‍" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "സെര്‍ബിയന്‍" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "സ്വീഡിഷ് (ഫിന്‍ലാന്‍ഡ്)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "തമിഴ്" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "തെലുങ്കു" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "ഥായി" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ഊയിഗര്‍" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ഉര്‍ദു" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ഉസ്ബെക്" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "വിയറ്റ്നാമീസ്" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "വാലൂണ്‍" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "യിദ്ദിഷ്" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "ചൈനീസ്" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "ചൈനീസ് (സിംപ്ലിഫൈഡ്)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "ചൈനീസ് (ട്രഡീഷണല്‍)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "മറ്റുള്ളവ" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "തിരഞ്ഞെടുത്ത _കീകള്‍:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "കീ കോഡ്:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "മോഡിഫയറുകള്‍:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_റിലീസ്" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_മെറ്റാ" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "_സൂപ്പര്‍" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_ഹൈപ്പര്‍" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "ഒരു കീ കോഡ് ആദ്യം നല്‍കുക." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "ഒരു കീ അമര്‍ത്തുക (അല്ലെങ്കില്‍ പലകീകള്‍ ഉപയോഗിക്കുക).\n" "കീ റിലീസ് ചെയ്യുമ്പോള്‍ ഈ ഡയലോഗില്‍ നിന്നും പുറത്ത് കടക്കുന്നു." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "ഒരു കീ തിരഞ്ഞെടുക്കുക." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "കീ തിരഞ്ഞെടുക്കല്‍" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "കഴ്സറിന്റെ സ്ഥാനം" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "അക്ഷരങ്ങളുടെ ഇടയില്‍ ചേര്‍ക്കുന്നതിന് കഴ്സറിന്റെ സ്ഥാനം." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "ഏറ്റവും കൂടുതല്‍ നീളം." #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "ഈ സ്ട്രിങ് കാഴ്ചയിലുള്ള അക്ഷരങ്ങളുടെ ഏറ്റവും കൂടിയ എണ്ണം. കൂടുതല്‍ " "ഇല്ലയെങ്കില്‍ 0." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "ഏറ്റവും കൂടുതല്‍ വീതി" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "ഈ സ്ട്രിങ് കാഴ്ചയുടെ ഏറ്റവും കൂടുതല്‍ വീതി." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ഫ്രെയിം ഉണ്ടു്." #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "സ്ട്രിങ് കാഴ്ചയില്‍ നിന്നും പുറത്തുള്ള ചെരിവ് ഫോള്‍സ് നീക്കുന്നു." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "കര്‍സര്‍ വരയ്ക്കുക" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "ട്രൂ ഡ്രോ ബ്ളിങ്കിങ് കര്‍സര്‍." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "കര്‍സര്‍ സ്വയം നീങ്ങുക" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "മൌസ് ക്ലിക്ക് ചെയ്യുമ്പോള്‍ കര്‍സറിന്റെ സ്ഥാനം ട്രൂ സ്വയമേ മാറ്റുന്നു." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "മുമ്പോട്ടുള്ള ബട്ടണ്‍ പ്രസ്സ് ഇവന്റ്" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "യൂസര്‍ പ്രോഗ്രാമിനുള്ള ട്രൂ ഫോര്‍വേര്‍ഡ് ബട്ടണ്‍ പ്രസ്സ് ഇവന്റ്." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "സ്ട്രിങ് വിഡ്ജറ്റില്‍ ഒതുക്കുന്നതിനായി സ്വയം വ്യാപ്തി ശരിയാക്കുക" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "ട്രൂ ഓട്ടോ റീസൈസ് ഓണ്‍ ആണ്." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "വ്യാപ്തി അക്ഷരങ്ങളില്‍" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "സ്ട്രിങ് കാഴ്ചയില്‍ എത്ര അക്ഷരങ്ങള്‍ക്കുള്ള സ്പെയിസ് വിടണം." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "സ്ക്രോള്‍ ഓഫ്സെറ്റ്" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "സ്ക്രീനിന്റെ ഇടത്തേക്ക് സ്ട്രിങ് കാഴ്ചയില്‍ നീക്കിയിരിക്കുന്ന പിക്സലുകളുടെ " "എണ്ണം" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "വാചകം" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "സ്ട്രിങ് കാഴ്ചയുടെ ഉള്ളടക്കം" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "ക്രമികരണം" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ട്രേയുടെ ക്രമികരണം." scim-master/po/mr.po000066400000000000000000001414631415264260100147100ustar00rootroot00000000000000# translation of mr.po to marathi # Marathi translations for SCIM package. # Copyright (C) 2008 Sandeep Shedmake # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Sandeep Shedmake , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:58+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method प्लॅटफॉर्म " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "इंग्रजी/कळफलक" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM मदत" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "इंपुट चौकट व साधपट्टी जोडा/जोडू नका." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM व सद्याचे इंपुट पध्दती विषयी मदत दर्शवा." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "आदेश मेन्यु दर्शवा." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "संयोजना पुन्हदाखल करा" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "चौकट चिकटवा" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "साधनपट्टी लपवा" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "मदत ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "बाहेर पडा" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM मांडणी" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK विजेट लायब्ररीवर आधारीत एकाग्र मांडणी उपकार्यक्रम." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "पृष्ठदृश्य" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "पटल" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "अगाऊ" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM इंपुट पध्दती मांडणी" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method प्लॅटफॉर्म \n" "\n" "GUI मांडणी उपकार्यक्रम\n" "\n" "\n" "\n" "प्रतिकृती अधिकार 2002-2004, James Su " "<suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s विभाग करीता मांडणी." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "सर्व संयोजना पुन्ह दाखल केले जाऊ शकत नाही. नविन संयोजनाचा प्रभाव पडण्याकरीता " "SCIM पुन्हा सुरू करायला विसरू नका." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "सुधारीत- पारंपारीक चायनीज भाषांतर" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "सुधारीत चायनीज व पारंपारीक चायनीज मधील रूपांतर" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "सुधारीत-पारंपारीक चायनीज रूपांतर" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "रूपांतर नाही" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "सुधारीत ते पारंपारीक" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "सुधारीत चायनीजचे पारंपारीक चायनीज मध्ये रूपांतर करा" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "पारंपारीक ते सुधारीत" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "पारंपारीक चायनीज ते सुधारीत चायनीज असे रूपांतर करा" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "जलद कळ:\n" "\n" " Control+u:\n" " बहुबाईट ऐंकोडींग व युनीकोड पैकी निवडा.\n" "\n" " Esc:\n" " इंपुट पध्दती पुन्हस्थापीत करा.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "सद्याच्या इंपुट पध्दतीची स्थिती. बदलविण्याकरीता त्यावर क्लिक करा." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "युनिकोड" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "अपरिचित" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "जागतीक मांडणी" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "X11 FrontEnd, GTK IMModule, QT IMModule इत्यादी यांस गृहीत धरून, सर्व पृष्ठ " "विभाग द्वारे वापरलेले जागतीक पर्याय स्थापीत करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ट्रीग्गर (_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ट्रीग्गर कळ निवडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इंपुट पध्दती चालू/बंद करण्याकरीताचे कळ घटना. संपादीत करण्याकरीता बटणावर " "क्लिक करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "कार्यान्वीत करा (_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "कार्यान्वीत करीताचे कळ नविडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इंपुट पध्दती कार्यान्वीत करीताचे कळ घटना. उजवीकडील बटणावर संपादन करीता " "किल्क करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "बंद करा (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "अकार्यान्वीत करीताचे कळ निवडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM इंपुट पध्दती बंद करण्याचे कळ घटना. संपादन करीता उजवीवरील बटणावर क्लिक " "करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "पुढची इंपुट पध्दती (_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "पुढटी इंपुट पध्दती कळ निवडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "पुढच्या इंपुट पध्दतीवर जाण्याकरीताचे कळ घटना. संपादन करीता उजवीकडील बटणावर " "क्लिक करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "पूर्वीची इंपुट पध्दती (_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "पूर्वीचे इंपुट पध्दती कळ निवडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "पूर्वीच्या इंपुट पध्दतीवर जाण्याकरीताचे कळ घटना. संपादान करीता उजवीकडील " "बटणावर क्लिक करा." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "इंपुट पध्दती मेन्यु दर्शवा (_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "इंपुट पध्दती मेन्यु कळ दर्शविण्याकरीता निवडा" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "इंपुट पध्दती मेन्यु दर्शविण्याकरीताचे कळ घटना. संपादन करीता उजवीकडील बटणावर " "क्लिक करा." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "पर्याय" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "कळफलकची मांडणी (_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "तुम्ही सद्या वापरलेले कळफलक मांडणी निवडली पाहिजे ज्यामुळे इंपुट पध्दती, जे " "कळफलक मांडणीची काळजी घेतात, योग्यरित्या कार्य करेल." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "क्लाऐंट चौकटीत Preedit अक्षरमाळा अंतर्भूत करा (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "हा पर्याय निवडल्यास, क्लाऐंट इंपुट चौकटीत preedit अक्षरमाळा स्वतंत्र फ्लोट " "चौकट ऐवजी प्रत्यक्षरित्या दर्शविले जाईल." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "सर्व अनुप्रयोग अंतर्गत समान इंपुट पध्दती सहभागीय करा (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "हा पर्याय निवडल्यास, फक्त एक इंपुट पध्दती सर्व अनुप्रयोग द्वारे एकाच वेळी " "वापरले जाऊ शकते. किंवा प्रत्येक अनुप्रयोग द्वारे विविध इंपुट पध्दती वापरले " "जाईल." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "हॉटकी" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "तुम्ही इंपुट पध्दती कार्यान्वीत/अकार्यान्वीत करू शकता व हॉटकीची मांडणी येथे " "निश्चित करू शकता." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "प्रतिष्ठापीत इंपुट पध्दती सेवा:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "हॉटकी संपादीत करा (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "निवडलेल्या इंपुट पध्दतीशी संबंधीत हॉटकीचे संपादन करा." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "फिल्टर निवडा (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "या इंपुट पध्दतीला जुळविण्याकरीताचे फिल्टर निवडा." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "वाढवा (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "सर्व भाषा श्रेणी विस्तारीत करा." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "नष्ट करा (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "सर्व भाषा विभाग नष्ट करा." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "सर्व कार्यान्वीत करा (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "सर्व इंपुट पध्दती कार्यान्वीत करा." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "सर्व अकार्यान्वीत करा (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "सर्व इंपुट पध्दती अकार्यान्वीत करा." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "नाव" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "कार्यान्वित" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "गाळक" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "भाषा" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "वर्णन" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s करीता हॉटकी संपादीत करा" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s करीता फिल्टर निवडा" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "वर हलवा (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "खाली हलवा (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x लायब्ररी वर आधारीत पट्टल डीमन." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "नेहमी" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "मांगणी वरून" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "कधीच नाही" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "साधनपट्टी" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "दर्शवा (_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "स्वतःप्रत घ्या (_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "इंपुट पध्दती चिन्ह दर्शवा (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "इंपुट पध्दती नाव दर्शवा (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "कालबाह्यता लपवा (_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "चिकटाऊ चिन्ह दर्शवा (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "मेन्यु चिन्ह दर्शवा (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "मदत चिन्ह दर्शवा (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "गुणधर्म लेबल दर्शवा (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "इंपुट पध्दती" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "अंतर्भूतीत लुकअप टेबल" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "उभे लुकअप टेबल (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "मिश्र" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ट्रे चिन्ह दर्शवा (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "चौकट चिकटवा (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "फॉन्ट (_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "पर्याय \"नेहमी\" निवडल्यास, साधनपट्टी नेहमी पडद्यावर दर्शविले जाईल. \"मांगणी " "वरून\" निवडल्यास, फक्त SCIM कार्यान्वीत असल्यावरच दर्शविले जाईल. \" कधीच " "नाही\" निवडल्यास, ते कधिही दर्शविले जाणार नाही." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "हा पर्याय निवडल्यास, साधनपट्टीची प्रतिकृती पडदा किन्नार घेतली जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "कालबाह्य झाल्यास साधनपट्टी लपविले जाईल. हा पर्याय \"नेहमी दर्शवा\" " "निवडल्यावरच वैध असते. ही वागणूक अकार्यान्वीत करण्याकरीता शून्य करीता निश्चित " "करा." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "हा पर्याय निवडल्यास, साधनपट्टीवर इंपुट पध्दती चिन्ह दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "हा पर्याय निवडल्यास, साधनपट्टीवर इंपुट पध्दती नाव दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "हा पर्याय निवडल्यास, साधनपट्टीवर चिकटवा चिन्ह दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "हा पर्याय निवडल्यास, साधनपट्टीवर मेन्यु चिन्ह दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "हा पर्याय निवडल्यास, साधनपट्टीवर मदत चिन्ह दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "हा पर्याय निवडल्यास, इंपुट पध्दती गुणधर्माचे पाठ्य लेबल साधनपट्टीत दर्शविले " "जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "हा पर्याय निवडल्यास, लुकअप टेबल इंपु चौकटीत अंतर्भूत केले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "हा पर्याय निवडल्यास, लुकअप टेबल उभ्यारित्या दर्शविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "हा पर्याय तपसाले असल्यास, ट्रे चिन्ह डेस्कटॉप कार्यपट्टीवर चिकटविले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "हे पर्याय निवडल्यास, साधनपट्टी, इंपुट व लुकअप टेबल चौकट मुळ स्थिती करीताच " "जोडले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "इंपुट व लुकअप टेबल चौकट मध्ये फॉन्ट संयोजना वापरले जाईल." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "संवाद फॉन्ट निवडा" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "इंग्रजी/युरोपीयन" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "इंग्रजी (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "बेल्जीअन" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "क्रोएशिअन" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "चेक" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "चेक (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "डॅनिश" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "डच" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ड्वोराक" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "एस्टोनियन" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "फिन्निश" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "फ्रेंच" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "फ्रेंच (कनेडीयन)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "फ्रेंच (स्वीट्जरलैंड)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "जर्मन" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "जर्मन (deadkeys सह)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "जर्मन (स्विस)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ग्रीक" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "हंगेरियन" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "इटालियन" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "जपानी" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "नार्वेजियन" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "पोलिश" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "पॉर्ट्यूगीज" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "पॉर्ट्यूगीज (ब्राजील)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "पॉर्ट्यूगीज (ब्राजील US उच्चार प्रकार)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "रशियन" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "स्लोवाक" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "स्लोवाक (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "स्लोवेनियन" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "स्पॅनिश" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "स्पॅनीश (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "स्पॅनीश (लॅटीन अमेरीका)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "स्वीडिश" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "तुर्किश" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "इंग्रजी (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "आइसलँडिक" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "लुथिआनिअन" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "यूक्रेनियन" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "अम्हेरिक" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "अरेबिक" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "अरेबिक (ईजीप्ट)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "अरेबीक (लेबनॉन)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "असामी" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "अझेरबाइजानी" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "बेलारशियन" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "बल्गेरियन" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "बंगाली" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "बंगाली (भारत)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "टिबेटियन" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "बॉस्नीयन" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "कॅटालॉन" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "वेल्श" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "डीवेही" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "इंग्रजी" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "इंग्रजी (ऑस्ट्रेलीयन)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "इंग्रजी (कनाडियन)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "इंग्रजी (ब्रिटिश)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "इंग्रजी (आयरलॅन्ड)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "इंग्रजी (अमेरीकन)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "स्पानीश (मेक्सीको)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "बास्क" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "पर्शियन" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "आयरिश" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "गॅलीशीयन" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "गुजराती" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "हिब्रू" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "हिंदी" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "आर्मेनिअन" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "इंटरलींगुआ" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "इंडोनेशियन" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "जॉर्जीअन" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "कजाक" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "कम्बोडीयन" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "कन्नड" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "कोरियन" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "लोअशीयन" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "लॅटविअन" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "मेसीडोनियन" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "मल्यालम" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "मंगोलीयन" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "मराठी" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "मलय" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "बर्मीस" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "नेपाली" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "नॉर्ववेजीयन (नींनोर्स्क)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "नॉर्ववेजीयन (बॉकमल)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ओरिया" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "पंजाबी" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "रोमानिअन" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "सिंहला" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "अल्बेनीयन" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "सर्बीयन" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "स्वीडीश (फींलॅन्ड)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "समिळ" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "तेलुगु" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "थाई" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "उईघर" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "उर्दू" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "उज्बेक" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "वियेतनामी" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "वल्लून" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "यिद्दिश" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "चायनिज" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "चायनीज (सुधारीत)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "चायनीज (पारंपारीक)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "इतर" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "निवडलेल्या कळ (_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "कळ कोड:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr " ..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "संपादक:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "Ctrl (_C)" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "Alt (_l)" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "Shift (_S)" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "प्रकाशन (_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "मेटा" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "उच्च (_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "हायपर (_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "कृपया पहिले की कोड प्रविष्ट करा." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "कळ (किंवा कळ प्रकार दाबा).\n" "हा संवाद कळ सोडल्यावर बंद केला जाईल." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "कळ ओढा." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "कळ निवड" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "कर्सरची जागा" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "अक्षरांमध्ये प्रदशीत कर्सरची वर्तमान स्थिती." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "कमाल लांबी" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "या अक्षरमाळा दृश्य करीता कमाल अक्षारांची संख्या. कमाल नसल्यास शून्य." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "कमाल रूंदी" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "या अक्षरमाळा दृश्याची कमाल रूंदी." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "चौकट आहे" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "खोटे अक्षर दृश्य पासून बाहेरील bevel काढूण टाकतो." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "कर्सर रेखाटा" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "खरे असल्यास लुकलुकणारे कर्सर रेखाटतो." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "स्वरित्या हालणारा कर्सर" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "खरे असल्यास माउस किल्क करतेवेळी कर्सरची जागा हलवा." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "पुढे जा बटण दाबल्यावरतीची घटना" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "खरे असल्यास वापरकर्ता कार्यक्रमास पुढे जा बटण दाब घटना कार्यन्वीत करा." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "अक्षरमाळा घट्ट बसविण्याकरीता स्वत: विजेटला पुन्ह आकार द्या" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "खरे स्व आकार बदलवा कार्यान्वीत." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "अक्षरमालेची लांबी" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "अक्षरमाळा दृश्य करीता अक्षरकरीता जागा सोडा." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "स्क्रोल ओफसेट" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "अक्षरमाळा दृश्य मधील एकूण पीक्सेल पडद्यास डावीकडे हलवीले" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "पाठ्य" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "अक्षरमाळाचे अनुक्रम पहा" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "दिशा" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ट्रे ची दिशा." scim-master/po/nl.po000066400000000000000000001233201415264260100146730ustar00rootroot00000000000000# translation of nl.po to Nederlands # Copyright (C) Ronald Stroethoffi , 2007. # This file is distributed under the same license as the scim package. # Ronald Stroethoff , 2007, 2008, 2015. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-10 21:46+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Invoer-methode Plattform " #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(c) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Nederlands/toetsenbord" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM handboek" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Invoer-venster en de werkbalk vastzetten/verschuifbaar maken." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Toepasselijke help voor SCIM en de huidige invoer-methode tonen." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Commandoregel tonen." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(c) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Instellingen opnieuw laden" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Venster vastzetten" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Werkbalk verbergen" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Help ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Afsluiten" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "SCIM Invoer-methode" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "Het Smart Common Input Method platform instellen" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM instellen" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Geïntegreerde setup dat op de GTK-widget bibliotheek is gebaseerd." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "Invoer-methode" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Paneel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Instellingen voor de SCIM-invoer-methode" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method-Plattform \n" "\n" "GUI instellingen\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "De %s-Module instellen." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Niet alle instellingen kunnen geladen worden. SCIM moet opnieuw gestart " "worden om alle nieuwe instellingen te laden." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Traditioneel Versimpeld Chinees conversie" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Conversie Versimpeld tussen Traditioneel Chinees" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "VC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Versimpeld Traditioneel Chinees conversie" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Geen conversie" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Versimpeld naar Traditioneel" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Conversie Versimpeld Chinees naar Traditioneel Chinees" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Traditioneel naar versimpeld" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Conversie Traditioneel Chinees naar Versimpeld Chinees" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "VC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->VC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(c) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Sneltoetsen:\n" "\n" " Control+u:\n" " Omschakelen tussen Multibyte-Codering en Unicode.\n" "\n" " Esc:\n" " Invoer-methode terug zetten.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "" "De status van de huidige invoer-methode. Klik op deze om het te veranderen." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Onbekend" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Algemene instellingen" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Algemene instellingen die door alle FrontEnd-modules gebruikt worden, " "inclusief de X11 FrontEnd, GKT IMModule, QT IMModule, enz." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Trigger:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Trigger-toetsen kiezen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Toets-combinaties, waarmee u de SCIM-invoer-methode IN- en UIT-" "schakelt. Klik op de rechterknop om dit te veranderen." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Inschakelen:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Kies de inschakel toets." #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Toetscombinatie om de SCIM invoer-methode in te schakelen. Klik op de " "rechterknop om te veranderen." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Uitschakelen:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "UIT-schakeltoetsen kiezen" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Toetscombinatie waarmee u de invoer-methode SCIM schakelt. Klik op " "de rechterknop om te veranderen." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "Volge_nde invoer-methode:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Kies een toetscombinatie om naar de volgende invoer-methode te gaan." #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Met deze toetscombinatie, gaat men naar de volgende invoer-methode. klik op " "de rechterknop om te veranderen." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Vorige invoer-methode:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Kies de toetscombinatie om naar de vorige invoer-methode te gaan" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Met deze toetscombinatie gaat men naar de vorige invoer-methode. Klik op de " "rechterknop om te veranderen." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Toon het keuze-_menu voor invoer-methoden:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Kies de toetsen voor het tonen van het invoer-methode kies-menu" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Toetscombinatie's voor het tonen van het invoer-methode kies-menu. Klik " "rechts voor het instellen." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Opties" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Toetsenbord indeling:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Kies hier de huidige gebruikte toetsenbord-indeling, zodat invoer-methoden, " "die van het toetsenbord-indeling afhankelijk zijn, goed werken." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Invo_er direct in programma-venster tonen." #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Wanneer voor u deze optie kiest, dan ziet u de invoer direct in het programma-" "venster, in plaats van in een extra invoer-venster." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Dezelfde invoer-methode voor alle programma's gebruiken." #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Wanneer dit gekozen is, wordt een en dezelfde invoer-methode voor alle " "programma's gebruikt. Wanneer dit niet gekozen is, dan kunt u voor elke " "programma " "een andere invoer-methode kiezen." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Sneltoetsen" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Hier kunt u de geïnstalleerde invoer-methoden IN- en UIT-schakelen " "en sneltoetsen ervoor kiezen." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Geïnstalleerde invoer-methoden:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "_Sneltoetsen instellen" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Sneltoetsen voor de gekozen invoer-methode instellen." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "_Filter selecteren" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Kies de filter, die aan deze invoer-methode verbonden moet worden." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "Uitbr_eiden" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Alle taalgroepen uitbreiden." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Inklappen" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Alle taalgroepen inklappen" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Alles i_nschakelen" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Alle invoer-methoden inschakelen." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "Alles _uitschakelen" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Alle invoer-methoden uitschakelen." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Naam" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Aanzetten" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filter" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Talen" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Omschrijving" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Sneltoetsen voor %s instellen" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Filter voor %s selecteren" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Naar _boven" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Naar _onderen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Een hulp-programma met panelen, gebaseerd op de GTK+-2.x-bibliotheek." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Altijd" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Op verzoek" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Nooit" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Werkbalk" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Toon:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Auto s_nap" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Icoon voor _invoer-methode tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Namen van de inv_oer-methoden tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "_Onzichtbaar maken na (sec):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Icoon altijd _tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "M_enu-icoon tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "_Help-icoon tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Eigenscha_ppen-label tonen" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Invoer-venster" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "I_nterne opzoek-tabel" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Verticale opzoek-tabel" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Diversen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Tra_y icoon tonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "_Venster op plaats vastzetten" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Lettertype:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Wanneer \"Altijd\" is gekozen, wordt de werkbalk altijd op het scherm " "getoond. Wanneer \"op verzoek\" is gekozen, wordt de werkbalk alleen getoond " "wanneer SCIM actief is. Wanneer \"Nooit\" is gekozen, wordt de werkbalk " "nooit getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Wanneer deze optie is gekozen, wordt de werkbalk aan de rand van het " "beeldscherm vastgeklikt" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "De werkbalk wordt onzichtbaar na afloop van de ingestelde tijd. Deze optie " "is alleen beschikbaar wanneer \"altijd tonen\" is gekozen.Zet de tijd op nul " "(0) om dit gedrag uit te schakelen." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Wanneer deze optie is gekozen, wordt het icoon van de huidige invoer-methode " "in de werkbalk getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Wanneer deze optie is gekozen, wordt de naam van de huidige invoer-methode " "in de werkbalk getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Wanneer deze optie is gekozen, wordt het sticky-icoon op de werkbalk getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "Wanneer deze optie is gekozen, wordt het menu in de werkbalk getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Wanneer deze optie is gekozen, wordt het hulp-icoon in de werkbalk getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Wanneer deze optie is gekozen, wordt naam van de invoer-methode getoond in " "de werkbalk." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Wanneer deze optie is gekozen, wordt de opzoek-tabel in het invoer-venster " "getoond" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "Wanneer deze optie is gekozen wordt de opzoek-tabel verticaal getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Wanneer deze optie is gekozen, zal het icoon van de werkbalk in het " "systeemvak getoond." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Wanneer deze optie is gekozen, worden de werkbalk, het invoer-venster en de " "opzoektabel op deze plaats vastgezet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "Dit gekozen lettertype wordt in het invoer-venster en in het opzoek-tabel " "gebruikt." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Interface-lettertype kiezen" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Nederlands/Europees" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "Starten HelperManager mislukt: eindigend..." #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "Starten HelperManager mislukt" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "Mislukt" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "Ongewone programma einde" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "Het eindigde met een bericht" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "Programma start met onbekende fout " #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Engels (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belgisch" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Kroatisch" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Tsjechisch" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Tsjechisch (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Deens" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Nederlands" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estlands" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Fins" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Frans" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Frans (Canada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Frans (Schwitsers) " #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Duits" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Duits (met deadkeys)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Duits (Schwitsers)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Grieks" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Hongaars" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italiaans" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japans" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Noors" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Pools" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugees" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugees (Brazilië, US, accent)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Russisch" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slowaaks" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slowaaks (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Sloveens" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Spaans" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Spaans (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Spaans (Latijns Amerika)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Zweeds" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turks" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Engels (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "IJslands" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Litouws" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Oekraïens" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "socket aanmaken" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "bestand bestaat al en is niet verwijderbaar" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "syscall" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "Afsluiten" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "bestand bestaat al en is geen socket" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "een ander server-proces luistert al op deze socket" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "kon de eigenschappen van dit bestand niet wijzigen" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "Voortzetting" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "socket aanmaken mislukt" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "syscall mislukt" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amhaars" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabisch" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabisch (Egyptisch)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabisch (Libanees)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamitisch" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbeidzjaans" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Wit-Russisch" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulgaars" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengaals" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengaals (India)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetaans" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosnisch" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalaans" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Welsh" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Engels" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Engels (Australië)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Engels (Canada)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Engels (Groot Brittannië)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Engels (Ierland)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Engels (USA)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "Esperanto" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Spaans (Mexico)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Baskisch" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Perzisch" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Iers" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galisch" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebreeuws" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armeens" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesisch" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgisch" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazachs" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Cambodjaans" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Koreaans" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laothian" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lets" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macedonisch" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongools" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Maleis" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Birmaans" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalees" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Noors (Nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Noors (Bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Roemeens" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "Sindhi" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Singalees" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanees" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Servisch" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Zweeds (Finland)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thais" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Oeigoers" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Oezbeeks" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamees" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Waals" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Jiddisch" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Chinees" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Chinees (versimpeld)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Chinees (traditioneel)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Overige" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "Test" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "Een test helper." #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "TEST" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "(C) 2002-2004 James Su " #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Ge_kozen toetsen:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Toets Code:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Wijziging-toetsen:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "_Alt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Vrijgeven" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "Ca_psLock" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Geef eerst een toets-code op." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Druk eerst een toets in (of een toetscombinatie).\n" "Dit dialoog sluit zich, bij het loslaten van de toets." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Een toets pakken." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Toetsen selectie" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Cursor positie" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "De huidige positie van de cursor (in karakters)." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Maximale lengte" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "Maximale aantal getoonde karakters. »0« betekend onbegrensd." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Maximale Breedte" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Maximale Breedte van de getoonde letterreeks." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Met kader" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "\"Nee\" verwijdert de buitenste rand van de getoonde letter-reeks." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Cursor tonen" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Met \"JA\" wordt een knipperende cursor getoond." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Cursor automatisch verplaatsen" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "Bij \"ja\" wordt de cursor automatisch verschoven." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Drukknop voor het doorgeven" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "" "Bij \"ja\" wordt de gekozen uitdrukking met elke druk op een toets aan het " "programma doorgegeven." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Venster-formaat automatisch aan teken-lengte aanpassen" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Bij \"ja\" is de automatische grootte-aanpassing ingeschakeld." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Breedte in tekens" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Aantal tekens waarvoor ruimte gelaten wordt." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Scroll-instelling" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Aantal pixels, waarmee de tekenreeks weergave buiten het scherm naar links " "verschoven wordt" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Tekst" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Inhoud van de tekenreeks weergave" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Oriëntatie" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "De oriëntatie van de werkbalk." scim-master/po/pa.po000066400000000000000000001371761415264260100147000ustar00rootroot00000000000000# translation of pa.po to Punjabi # This file is distributed under the same license as the SCIM package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # # Amanpreet Singh Alam , 2005. # Jaswinder Singh , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:58+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "ਸਮਾਰਟ ਕਾਮਨ ਇੰਪੁੱਟ ਮੈਥਡ ਪਲੇਟਫਾਰਮ" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ਅੰਗਰੇਜ਼ੀ/ਕੀ-ਬੋਰਡ" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM ਸਹਾਇਤਾ" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ਇੰਪੁੱਟ ਝਰੋਖਾ ਅਤੇ ਸੰਦ-ਪੱਟੀ ਸਟਿੱਕੀ/ਨਾ-ਸਟਿੱਕੀ ਹੈ।" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM ਅਤੇ ਮੌਜੂਦਾ ਇੰਪੁੱਟ ਢੰਗ ਬਾਰੇ ਸੰਖੇਪ ਸਹਾਇਤਾ ਵਿਖਾਓ।" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "ਕਮਾਂਡ ਮੇਨ ਵੇਖਾਓ।" #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "ਸੰਰਚਨਾ ਮੁੜ-ਲੋਡ" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "ਸਟਿੱਕੀ ਝਰੋਖੇ" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "ਸੰਦ-ਪੱਟੀ ਓਹਲੇ" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "ਸਹਾਇਤਾ ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "ਬਾਹਰ" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM ਸੈਟਅੱਪ" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK ਵਿਦਗਿਟ ਲਾਇਬਰੇਰੀ 'ਤੇ ਅਧਾਰਤ ਸੈਟਅੱਪ ਸਹੂਲਤ ਹੈ।" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "ਮੁੱਖ-ਭਾਗ" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "ਪੈਨਲ" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "ਹੋਰ" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM ਇੰਪੁੱਟ ਢੰਗ ਸੈਟਅੱਪ" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " ਸਮਾਰਟ ਕਾਮਨ ਇੰਪੁੱਟ ਮੈਂਥਡ ਪਲੇਟਫਾਰਮ \n" "\n" "GUI ਸੈਟਅੱਪ ਸਹੂਲਤ\n" "\n" "\n" "\n" "ਕਾਪੀਰਾਈਟ 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s ਮੈਡਿਊਲ ਲਈ ਸੈਟਅੱਪ ਹੈ।" #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "ਸਭ ਸੰਰਚਨਾ ਨੂੰ ਇੱਕ-ਦਮ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਨਵੀਂ ਸੰਰਚਨਾ ਨੂੰ ਪਰਭਾਵੀ ਹੋਣ ਲਈ " "SCIM ਨੂੰ ਮੁੜ-" "ਚਾਲੂ ਕਰਨਾ ਨਾ ਭੁੱਲੋ।" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "ਸਧਾਰਨ-ਮੂਲ ਚੀਨੀ ਤਬਦੀਲੀ" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "ਸਧਾਰਨ ਚੀਨੀ ਅਤੇ ਮੂਲ ਚੀਨੀ ਵਿੱਚ ਤਬਦੀਲੀ" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "ਸਧਾਰਨ-ਮੂਲ ਚੀਨੀ ਤਬਦੀਲੀ" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "ਕੋਈ ਤਬਦੀਲੀ ਨਹੀਂ" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "ਸਧਾਰਨ ਤੋਂ ਮੂਲ" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "ਸਧਾਰਨ ਚੀਨੀ ਤੋਂ ਮੂਲ ਚੀਨੀ ਤਬਦੀਲ" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "ਮੂਲ ਤੋਂ ਸਧਾਰਨ" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "ਮੂਲ ਚੀਨੀ ਤੋਂ ਸਧਾਰਨ ਚੀਨੀ ਅਨੁਵਾਦ" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "ਕੱਚਾ ਕੋਡ" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "ਹਾਟ ਸਵਿੱਚਾਂ:\n" "\n" " Control+u:\n" " ਬਹੁ-ਬਾਈਟ ਇੰਕੋਡਿੰਗ ਅਤੇ ਯੂਨੀਕਰੋਡ ਵਿੱਚ ਤਬਦੀਲ ਹੋਣ ਲਈ।\n" "\n" " Esc:\n" " ਇੰਪੁੱਟ ਢੰਗ ਮੁੜ-ਸੈਟ ਕਰਨ ਲਈ।\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "ਮੌਜੂਦਾ ਇੰਪੁੱਟ ਢੰਗ ਦੀ ਸਥਿਤੀ ਹੈ। ਤਬਦੀਲ ਕਰਨ ਲਈ ਦਬਾਉ।" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "ਯੂਨੀਕੋਡ" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "ਅਣਜਾਣ" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "ਗਲੋਬਲ ਸੈਟਅੱਪ" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "ਸਭ ਮੁੱਖ ਮੈਡਿਊਲ ਰਾਹੀਂ ਵਰਤੇ ਜਾਦੇ ਗਲੋਬਲ ਚੋਣ ਸੈਟਅੱਪ, ਜਿਸ ਵਿੱਚ X11 ਮੁੱਖ ਭੂਮੀ, GTK " "IMModule, QT " "IMModule ਆਦਿ" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ਤਬਦੀਲ(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ਤਬਦੀਲੀ ਸਵਿੱਚ ਚੁਣੋ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ਇੰਪੁੱਟ ਢੰਗ ਨੂੰ ਚਾਲੂ/ਬੰਦ ਕਰਨ ਲਈ ਕੁੰਜੀ ਘਟਨਾ ਹੈ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ " "ਬਟਨ ਨੂੰ ਦਬਾਉ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "ਚਾਲੂ ਕਰੋ(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "ਚਾਲੂ ਕਰਨ ਵਾਲੀਆਂ ਕੁੰਜੀਆਂ ਚੁਣੋ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ਇੰਪੁੱਟ ਢੰਗ ਚਾਲੂ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਦੀ ਚੋਣ ਕਰੋ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ " "ਬਟਨ ਨੂੰ ਦਬਾਉ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "ਬੰਦ ਕਰੋ(_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "ਬੰਦ ਕਰਨ ਵਾਲੀਆਂ ਕੁੰਜੀਆਂ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ਇੰਪੁੱਟ ਢੰਗ ਬੰਦ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਦੀ ਚੋਣ ਕਰੋ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ " "ਬਟਨ ਨੂੰ ਦਬਾਉ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "ਅੱਗੇ ਇੰਪੁੱਟ ਢੰਗ(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "ਅੱਗੇ ਇੰਪੁੱਟ ਢੰਗ ਦੀ ਚੋਣ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਚੁਣੋ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "ਅੱਗੇ ਇੰਪੁੱਟ ਢੰਗ ਦੀ ਚੋਣ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਦੀ ਚੋਣ ਕਰੋ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ " "ਬਟਨ ਨੂੰ ਦਬਾਉ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "ਪਿੱਛੇ ਇੰਪੁੱਟ ਢੰਗ(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "ਪਿਛਲਾ ਇੰਪੁੱਟ ਢੰਗ ਕੁੰਜੀਆਂ ਚੁਣੋ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "ਪਿਛਲਾ ਇੰਪੁੱਟ ਢੰਗ ਚਾਲੂ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਦੀ ਚੋਣ ਕਰੋ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ " "ਬਟਨ ਨੂੰ ਦਬਾਉ।" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ਇੰਪੁੱਟ ਢੰਗ ਮੇਨੂ ਵੇਖਾਓ(_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ਇੰਪੁੱਟ ਢੰਗ ਮੇਨੂ ਵੇਖਾਉਣ ਲਈ ਕੁੰਜੀਆਂ ਚੁਣੋ" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ਇੰਪੁੱਟ ਢੰਗ ਮੇਨੂ ਵੇਖਾਉਣ ਲਈ ਕੁੰਜੀਆਂ ਦੀ ਚੋਣ ਕਰੋ। ਇਸ ਨੂੰ ਸੋਧਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ ਬਟਨ " "ਨੂੰ ਦਬਾਉ।" #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "ਚੋਣ" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "ਕੀ-ਬੋਰਡ ਖਾਕਾ(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "ਤੁਹਾਨੂੰ ਇੱਥੇ ਆਪਣਾ ਮੌਜੂਦਾ ਕੀ-ਬੋਰਡ ਖਾਕੇ ਦੀ ਚੋਣ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਤਾਂ ਕਿ ਇੰਪੁੱਟ " "ਢੰਗ, ਜੋ ਕਿ ਕੀ-ਬੋਰਡ " "ਖਾਕੇ ਦਾ ਖਿਆਲ ਰੱਖਦਾ ਹੈ, ਠੀਕ ਤਰਾਂ ਕੰਮ ਕਰ ਸਕੇ।" #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "ਕਲਾਂਈਟ ਝਰੋਖੇ 'ਚ ਪਹਿਲਾਂ-ਸੋਧ ਸਤਰ(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਕਲਾਂਈਟ ਇੰਪੁੱਟ ਝਰੋਖੇ ਵਿੱਚ ਪਹਿਲਾਂ-ਸੋਧ ਸਤਰ ਸਿੱਧੀ ਵਿਖਾਈ " "ਜਾਵੇਗਾ, ਨਾ ਕਿ ਇੱਕ ਆਜ਼ਾਦ ਤਰਦੇ ਝਰੋਖਾ।" #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "ਸਭ ਕਾਰਜਾਂ 'ਚ ਇੱਕੋ ਹੀ ਇੰਪੁੱਟ ਢੰਗ ਵਰਤੋਂ(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਸਿਰਫ਼ ਇੱਕ ਹੀ ਇੰਪੁੱਟ ਢੰਗ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਵੇਗੀ, ਜੋ ਕਿ " "ਇੱਕ ਸਮੇਂ ਸਭ " "ਕਾਰਜਾਂ ਲਈ ਵਰਤਿਆ ਜਾਵੇਗਾ। ਨਹੀਂ ਤਾਂ ਹਰ ਕਾਰਜ ਲਈ ਵੱਖਰਾ ਢੰਗ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਸੀ।" #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "ਹਾਟ-ਸਵਿੱਚ" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "ਤੁਸੀਂ ਇੱਥੇ ਇੰਪੁੱਟ ਢੰਗ ਯੋਗ/ਅਯੋਗ ਕਰ ਅਤੇ ਇੰਪੁੱਟ ਢੰਗ ਲਈ ਹਾਟ-ਸਵਿੱਚਾਂ ਸੈਟ ਕਰ ਸਕਦੇ " "ਹੋ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "ਇੰਸਟਾਲ ਹੋਈਆਂ ਇੰਪੁੱਟ ਢੰਗ ਸੇਵਾਵਾਂ:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "ਹਾਟ-ਸਵਿੱਚ ਸੋਧ(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "ਚੁਣੇ ਇੰਪੁੱਟ ਢੰਗ ਨਾਲ ਸਬੰਧਤ ਹਾਟ-ਕੁੰਜੀਆਂ ਦੀ ਸੋਧ ਕਰੋ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "ਫਿਲਟਰ ਚੁਣੋ(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "ਫਿਲਟਰ ਦੀ ਚੋਣ ਕਰੋ, ਜੋ ਕਿ ਇਸ ਇੰਪੁੱਟ ਢੰਗ ਨਾਲ ਜੋੜਿਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "ਫੈਲਾਓ(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "ਸਭ ਭਾਸ਼ਾ ਵਰਗ ਫੈਲਾਓ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "ਸਮੇਟੋ(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "ਸਭ ਭਾਸ਼ਾ ਵਰਗ ਸਮੇਟੋ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "ਸਭ ਯੋਗ(_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "ਸਭ ਇੰਪੁੱਟ ਢੰਗ ਯੋਗ ਕਰਦਾ ਹੈ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "ਸਭ ਆਯੋਗ(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "ਸਭ ਇੰਪੁੱਟ ਢੰਗ ਆਯੋਗ ਹਨ।" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "ਨਾਂ" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "ਯੋਗ" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "ਫਿਲਟਰ" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "ਭਾਸ਼ਾਵਾਂ" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "ਵੇਰਵਾ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s ਲਈ ਹਾਟ-ਸਵਿੱਚ ਸੋਧ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s ਲਈ ਫਿਲਟਰ ਚੁਣੋ" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "ਉੱਪਰ ਜਾਓ(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "ਹੇਠਾਂ ਜਾਓ(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x ਲਾਇਬਰੇਰੀ 'ਤੇ ਪੈਨਲ ਡੈਮਨ ਹੈ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "ਹਮੇਸ਼ਾ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "ਲੋੜ ਸਮੇਂ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ਕਦੇ ਨਹੀਂ" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "ਸੰਦ-ਪੱਟੀ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "ਵੇਖਾਓ(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "ਸਵੈ ਸਨੈਪ(_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "ਇੰਪੁੱਟ ਆਈਕਾਨ ਢੰਗ ਆਈਕਾਨ ਵੇਖਾਓ(_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "ਇੰਪੁੱਟ ਢੰਗ ਨਾਂ ਵੇਖਾਓ(_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "ਸਮਾਂ-ਅੰਤਰਾਲ ਓਹਲੇ(_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "ਚਿਪਕੇ ਆਈਕਾਨ ਵੇਖਾਓ(_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "ਮੇਨੂ ਆਈਕਾਨ ਵੇਖਾਓ(_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "ਸਹਾਇਤਾ ਆਈਕਾਨ ਵੇਖਾਓ(_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "ਵਿਸ਼ੇਸ਼ਤਾ ਲੇਬਲ ਵੇਖਾਓ(_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ਇੰਪੁੱਟ ਝਰੋਖਾ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "ਸ਼ਾਮਲ ਖੋਜ ਸਾਰਣੀ(_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "ਲੰਬਕਾਰੀ ਖੋਜ ਸਾਰਣੀ(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "ਫੁਟਕਲ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ਟਰੇ ਆਈਕਾਨ ਵੇਖਾਓ(_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "ਝਰੋਖੇ ਚੇਪੋ(_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ਫੋਂਟ(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "ਜੇਕਰ \"ਹਮੇਸ਼ਾ\" ਚੋਣ ਯੋਗ ਕੀਤੀ ਗਈ ਤਾਂ, ਸੰਦ-ਪੱਟੀ ਨੂੰ ਹਮੇਸ਼ਾ ਪਰਦੇ 'ਤੇ ਵਿਖਾਇਆ " "ਜਾਵੇਗਾ। ਜੇਕਰ \"ਲੋੜ ਸਮੇਂ\" ਦੀ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਹੀ ਵੇਖਾਇਆ ਜਾਵੇਗਾ, ਜਦੋਂ SCIM ਦੇ " "ਸਰਗਰਮ ਹੋਵੇਗਾ। ਜੇਕਰ \"ਕਦੇ ਨਹੀਂ\" ਦੀ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਇਸ ਨੂੰ ਕਦੇ ਨਹੀਂ ਵੇਖਾਇਆ " "ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਸੰਦ-ਪੱਟੀ ਸਕਰੀਨ ਹਾਸ਼ੀਏ 'ਚ ਸਮੇਟੀ ਜਾਵੇਗੀ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "ਇਸ ਅੰਤਰਾਲ ਖਤਮ ਹੋਣ ਦੇ ਬਾਅਦ ਸੰਦ-ਪੱਟੀ ਨੂੰ ਓਹਲੇ ਕੀਤਾ ਜਾਵੇਗਾ। ਇਹ ਚੋਣ ਸਿਰਫ਼ ਤਾਂ ਹੀ " "ਠੀਕ ਹੈ, ਜੇਕਰ \"ਹਮੇਸ਼ਾ ਵੇਖਾਓ\" ਦੀ ਚੋਣ ਕੀਤੀ ਹੈ। ਇਸ ਵਿਹਾਰ ਨੂੰ ਅਯੋਗ ਕਰਨ ਲਈ ਜ਼ੀਰੋ " "(0) ਬਣਾਓ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਇੰਪੁੱਟ ਢੰਗ ਆਈਕਾਨ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਇਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਇੰਪੁੱਟ ਢੰਗ ਨਾਂ ਨੂੰ ਸੰਦ-ਪੱਟੀ 'ਚ ਚੁਣਿਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਸਟਿੱਕੀ ਆਈਕਾਨ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਇਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਮੇਨੂ ਆਈਕਾਨ ਨੂੰ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਇਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਸਹਾਇਤਾ ਆਈਕਾਨ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਇਆ ਜਾਦਾ ਹੈ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਇੰਪੁੱਟ ਢੰਗ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਪਾਠ ਲੇਬਲ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਇਆ " "ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਖੋਜ ਸਾਰਣੀ ਨੂੰ ਇੰਪੁੱਟ ਝਰੋਖੇ 'ਚ ਹੀ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਖੋਜ ਸਾਰਣੀ ਨੂੰ ਲੰਬਕਾਰੀ ਰੂਪ 'ਚ ਵਿਖਾਇਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਟਰੇ ਆਈਕਾਨ ਨੂੰ ਵੇਹੜੇ ਦੀ ਸੰਦ-ਪੱਟੀ 'ਚ ਵਿਖਾਉ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "ਜੇਕਰ ਇਹ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ, ਸੰਦ-ਪੱਟੀ, ਇੰਪੁੱਟ ਅਤੇ ਖੋਜ ਸਾਰਣੀ ਝਰੋਖੇ ਨੂੰ ਇਸ ਦੀ ਅਸਲੀ " "ਸਥਿਤੀ ਨਾਲ ਹੀ " "ਜੋੜੀ ਰੱਖਿਆ ਜਾਵੇਗਾ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "ਇੰਪੁੱਟ ਅਤੇ ਖੋਜ ਸਾਰਣੀ ਝਰੋਖੇ ਵਿੱਚ ਫੋਂਟ ਸੈਟਿੰਗ ਵਰਤੀ ਜਾਵੇਗੀ।" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "ਇੰਟਰਫੇਸ ਫੌਂਟ ਚੁਣੋ" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ਅੰਗਰੇਜ਼ੀ/ਯੂਰਪ" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਅਮਰੀਕੀ)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "ਬੈਲਜੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "ਕਰੋਆਟੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "ਸੀਜ਼ੇਕ" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "ਚੈੱਕ(ਕਿਉਵਰਟੀ)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "ਡੈਨਿਸ਼" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "ਡੱਚ" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "ਡਵੋਰਿਕ" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "ਈਸਟੋਨੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ਫੈਨਿਸ਼" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ਫਰੈਂਚ" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ਫਰੈਂਚ (ਕੈਨੇਡੀ)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ਫਰੈਂਚ (ਸਵਟਿਜ਼ਰਲੈਂਡ)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "ਜਰਮਨ" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "ਜਰਮਨ (ਡਿੱਡ ਸਵਿੱਚਾਂ ਨਾਲ)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "ਜਰਮਨ (ਸਵਿੱਸ)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "ਗਰੀਕ" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "ਹੂੰਗਾਰੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ਇਤਾਲਵੀ" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "ਜਾਪਾਨੀ" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "ਨਾਰਵੇਗੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "ਪੌਲਿਸ਼" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "ਪੁਰਤਗਾਲੀ" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "ਪੁਰਤਗਾਲੀ (ਬਰਾਜ਼ੀਲ)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "ਪੁਰਤਗਾਲੀ (ਬਰਾਜ਼ੀਲ ਅਮਰੀਕੀ ਢੰਗ)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ਰੂਸੀ" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "ਸਲੋਵਾਕ" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "ਸਲੋਵਾਕ(ਕਿਉਵਰਟੀ)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "ਸਲੋਵੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "ਸਪੇਨੀ" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "ਸਪੇਨੀ (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "ਸਪੇਨੀ (ਲੈਟਿਨ ਅਮਰੀਕੀ)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "ਸਵੈਡਿਸ਼" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "ਤੁਰਕੀ" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨੀਵੀਂ)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "ਆਈਸਲੈਂਡੀ" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "ਲੀਥੂਵਨੀਅਨ" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ਯੂਕਰੇਨੀ" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "ਅਮਹਾਰਿਕ" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "ਅਰਬੀ" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "ਅਰਬੀ (ਮਿਸਰ)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "ਅਰਬੀ (ਲਿਬਨਾਨ)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "ਆਸਾਮੀ" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "ਅਜ਼ਰਬਾਈਜਾਨੀ" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "ਬੇਲਾਰੂਸੀ" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "ਬੁਲਗਾਰੀਅਨ" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "ਬੰਗਾਲੀ" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "ਬੰਗਾਲੀ (ਭਾਰਤ)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "ਤਿੱਬਤੀ" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "ਬੋਸਨੀਅਨ" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "ਕੈਟੇਲਨ" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "ਵੈਲਸ਼" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "ਡਿਵੇਹੀ" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ਅੰਗਰੇਜ਼ੀ" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਆਸਟਰੇਲੀਅਨ)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਕੈਨੇਡੀਅਨ)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨਵੀ)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਆਇਰਲੈਂਡ)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ਅੰਗਰੇਜ਼ੀ (ਅਮਰੀਕੀ)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "ਸਪੇਨੀ (ਮੈਕਸਿਕੋ)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "ਬਸਕਿਊ" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "ਪਰਸੀਅਨ" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ਇਰਿਸ਼" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "ਗਲੇਸ਼ੀਅਨ" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "ਗੁਜਰਾਤੀ" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "ਹੈਬਰਿਊ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "ਹਿੰਦੀ" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "ਅਰਮਾਨੀਆਈ" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ਇੰਟਰਲਿੰਗੂਆ" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ਇੰਡੋਨੇਸ਼ੀਆਈ" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "ਜੀਓਰਜੀਅਨ" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "ਕਜ਼ਾਖ" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "ਕੰਬੋਡੀਅਨ" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "ਕੰਨੜ" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "ਕੋਰੀਅਨ" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "ਲਿਊਥੀਅਨ" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "ਲਾਟਵੀਅਨ" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "ਮੈਕਡੋਨੀਅਨ" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "ਮਾਲਿਆਲਮ" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "ਮੰਗੋਲੀਅਨ" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "ਮਰਾਠੀ" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "ਮਲਾਇਆ" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "ਬਰਮੀਸ" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "ਨੇਪਾਲੀ" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "ਨਾਰਵੇਗੀਅਨ (ਨਿਉਰਸਕ)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "ਨਾਰਵੇਗੀਅਨ (ਬੋਕਮਾਲ)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ਓੜੀਆ" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "ਪੰਜਾਬੀ" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "ਰੋਮਾਨੀਆਈ" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "ਸਿੰਨਹਾਲਾ" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "ਅਲਬਾਈਅਨ" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "ਸਰਬੀਅਨ" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "ਸਵੈਡਿਸ਼ (ਫਿਨਲੈਂਡ)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "ਤਾਮਿਲ" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "ਤੇਲਗੂ" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "ਥਾਈ" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ਊਘਰ" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ਊਰਦੂ" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ਉਜੇਬਕ" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "ਵੀਅਤਨਾਮੀ" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "ਵਾਲਿਸ਼" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "ਯਿਡਿੱਸ਼" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "ਚੀਨੀ" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "ਚੀਨੀ (ਸਧਾਰਨ)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "ਚੀਨੀ (ਮੂਲ)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "ਹੋਰ" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "ਚੁਣੀਆਂ ਸਵਿੱਚਾਂ(_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "ਸਵਿੱਚ ਕੋਡ:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "ਸੋਧਕ:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "ਜਾਰੀ(_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "ਮੈਟਾ(_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "ਸੁਪਰ(_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "ਹਾਈਪਰ(_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "ਪਹਿਲਾਂ ਇੱਕ ਸਵਿੱਚ ਕੋਡ ਦਿਓ।" #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "ਇੱਕ ਸਵਿੱਚ (ਜਾਂ ਇੱਕ ਸਵਿੱਚ ਜੋੜ) ਦਬਾਉ।\n" "ਇਹ ਵਾਰਤਾਲਾਪ ਇੱਕ ਸਵਿੱਚ ਦਬਾਉਣ ਨਾਲ ਬੰਦ ਹੋ ਜਾਵੇਗਾ।" #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "ਇੱਕ ਸਵਿੱਚ ਫੜੋ।" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "ਸਵਿੱਚ ਚੋਣ" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "ਕਰਸਰ ਸਥਿਤੀ" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "ਕਰਸਰ ਦੀ ਮੌਜੂਦਾ ਸਥਿਤੀ ਅੱਖਰਾਂ ਵਿੱਚ।" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "ਵੱਧ ਤੋ ਵੱਧ ਲੰਬਾਈ" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "ਇਸ ਸਤਰ ਝਲਕ ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ ਅੱਖਰਾਂ ਦੀ ਗਿਣਤੀ। ਜੇਕਰ ਵੱਧ ਤੋਂ ਵੱਧ ਨਾ ਹੋਇਆ ਤਾਂ ਸਿਫ਼ਰ " "ਹੋਵੇਗਾ।" #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "ਵੱਧ ਤੋਂ ਵੱਧ ਚੌੜਾਈ" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "ਇਸ ਸਤਰ ਝਲਕ ਦੀ ਵੱਧ ਤੋਂ ਵੱਧ ਚੌੜਾਈ ਹੈ।" #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "ਫਰੇਮ ਹੈ" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE ਨਾਲ ਸਤਰ ਝਲਕ ਤੋਂ ਬਾਹਰੀ bevel ਹਟਾਏ ਜਾਏਗਾ।" #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "ਕਰਸਰ ਬਣਾਓ" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE ਝਪਕਦੀ ਕਰਸਰ ਬਣਾਏਗਾ।" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "ਸਵੈ ਏਧਰ ਓਧਰ ਕਰਸਰ" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE ਮਾਊਸ ਦਬਾਉਣ ਨਾਲ ਕਰਸਰ ਨੂੰ ਸਵੈ-ਚਾਲਤ ਏਧਰ ਓਧਰ ਕੀਤਾ ਜਾਵੇਗਾ।" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "ਅੱਗੇ ਬਟਨ ਦਬਾਉਣ ਘਟਨਾ" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE ਉਪਭੋਗੀ ਪਰੋਗਰਾਮ ਲਈ ਅੱਗੇ ਬਟਨ ਦਬਾਉਣ ਘਟਨਾ ਹੈ।" #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "ਸਤਰ ਫਿੱਟ ਕਰਨ ਲਈ ਵਿਦਗਿਟ ਸਵੈ ਮੁੜ-ਅਕਾਰ" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE ਸਵੈ ਮੁੜ-ਅਕਾਰ ਚਾਲੂ ਹੈ।" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "ਅੱਖਰਾਂ ਵਿੱਚ ਚੌਡ਼ਾਈ" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "ਸਤਰ ਝਲਕ ਵਿੱਚ ਖਾਲੀ ਥਾਂ ਛੱਡਣ ਲਈ ਅੱਖਰਾਂ ਦੀ ਗਿਣਤੀ ਹੈ।" #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "ਸੰਤੁਲਨ ਸਕਰੋਲ" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "ਖੱਬੇ ਤੋਂ ਸਕਰੀਨ ਨੂੰ ਸਤਰ ਝਲਕ ਸਮੇਟਣ ਲਈ ਪਿਕਸਲਾਂ ਦੀ ਗਿਣਤੀ" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "ਪਾਠ" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "ਸਤਰ ਝਲਕ ਦਾ ਪਰਸੰਗ" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "ਸਥਿਤੀ" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ਟਰੇ ਦੀ ਸਥਿਤੀ ਹੈ।" scim-master/po/pt_BR.po000066400000000000000000001250371415264260100152770ustar00rootroot00000000000000# translation of pt_BR.po to Portuguese # Portuguese translations for SCIM package. # Copyright (C) 2008 THE l'S COPYRIGHT HOLDER # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Chester Cheng , 2008. # Glaucia Cintra , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 16:59+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Plataforma de Método de Inserção Inteligente Comum" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Inglês/Teclado" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Ajuda do SCIM " #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Aderir/Retirar a janela de inserção e a barra de ferramentas" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Exibir uma ajuda breve sobre o SCIM e o método de inserção atual" #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Exibir o menu de comando." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Recarregar Configuração" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Aderir Janelas" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Esconder Barra de Ferramentas" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Ajuda..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Sair" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Configuração do SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "" "Ferramenta de Configuração Integrada baseada na biblioteca do Dispositivo GTK" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Painel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Configuração do Método de Inserção do SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "The Setup for %s modules." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Nem todas as configurações podem ser recarregadas imediatamente. Não se " "esqueça de reiniciar o SCIM para permitir que todas as novas configurações " "sejam efetuadas." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Simplificado - Conversão do Chinês Tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Converção entre Chinês Simplificado e Chinês Tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "CS-CT" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Simplificado - conversão do Chinês Tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Sem Conversão" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Simplificado para Tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Converter Chinês Simplificado para Chinês Tradicional" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Tradicional para Simplificado" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Converter Chinês Tradicional para Chinês Simplificado" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "CS->CT" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "CT->CS" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "CÓDIGO BRUTO" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "O status do método de inserção atual. Clique para mudá-lo." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Desconhecido" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Global Setup (Instalação Mundial)" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Instalação das opções mundiais usadas por todos os módulos FrontEnd, " "incluindo X11 FrontEnd, GTK IMModule, QT IMModule, etc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Trigger (Gatilho):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Selecionar as teclas de gatilho" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "As teclas desligam e ligam o método de inserção do SCIM. Clique no botão ao " "lado direito para editá-lo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "Turn _On (Ligar):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Selecionar as teclas Turn On (Ligar)" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "A tecla liga o método de inserção do SCIM. Clique no botão ao lado direito " "para editá-lo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "Turn O_ff (Desligar):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Selecione as teclas Turn Off (Desligar)" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "A tecla desliga o método de inserção do SCIM. Clique no botão ao lado direito " "para editá-lo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Next input method: (Próximo método de inserção)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Seleciona as próximas chaves do método de inserção." #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "A chave muda para o próximo método de inserção. Clique no botão ao lado " "direito para editá-lo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Previous input method (Método de Inserção Anterior):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Seleciona as teclas do método de inserção anterior" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "A tecla muda para o método de inserção anterior. Clique no botão da direita " "para editá-lo." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Show input method_menu: (Exibir o menu do método de inserção)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Seleciona as teclas da exibição do menu do método de inserção" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "A tecla exibe o menu do método de inserção. Clique no botão ao lado direito " "para editá-lo." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Opções" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_ Keyboard Layout: (Layout do Teclado)" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Você deve usar o layout do seu teclado atual usado aqui para que os métodos " "de inserção funcionem corretamente." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "" "_Embed Preedit String into client window (Faixa de Pré-edição embutida na " "janela do cliente)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Se esta opção for verificada, a faixa de pré-edição será exibida diretamente " "na janela de inserção do cliente, ao invés de ser exibida em uma janela " "flutuante independente." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "" "__Share the same input method among all applications (Compartilhar o mesmo " "método de inserção entre todos os aplicativos)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Se esta opção for verificada, então somente um método de inserção pode ser " "usado por todos os aplicativos ao mesmo tempo. De outra forma, outros métodos " "de inserção poderiam ser usados por cada aplicativo." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Hotkeys" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Você pode habilitar/desabilitar os métodos de inserção e configurar hotkeys " "para inserir métodos aqui." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Os serviços instalados de método de inserção:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Edit _Hotkeys (Editar Hotkeys)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Edit Hotkeys associado com o método de inserção selecionado." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Select _Filters (Selecionar Filtros)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Selecionar os Filtros que serão anexados à este método de inserção." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Expand (Expandir)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Expandir todas as categorias dos idiomas." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Collapse (Recolher)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Recolher todas as categorias de idiomas." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "E_nable All (Habilitar Todos)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Habilitar todos os métodos de inserção." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Disable All (Desabilitar todos)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Desabilitar todos os métodos de inserção." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Nome" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Habilitar" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtros" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Idiomas" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Descrição" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Editar Hotkeys para %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Selecionar Filtros para %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Move_Up (Mover para Cima)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Move_Down (Mover para Baixo)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Um daemon de painel baseado na biblioteca GTK +-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Always (Sempre)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "On demand (sob encomenda)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Never (Nunca)" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Barra de Ferramentas" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Show: (Mostrar)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Auto s_nap" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Show _input method icon (Exibir ícone de método de inserção)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Show inp_ut method name (Exibir nome de método de inserção)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Hide time_out: (Esconder expiração da hora)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Show s_tick icon (Exibir ícone de adesão)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Show m_enu icon (Exibir ícone de menu)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Show _help icon (Exibir ícone de ajuda)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Show _property label (Exibir etiqueta de propriedade)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Janela de inserção" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "E_mbedded lookup table (Tabela de busca embutida)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Vertical lookup table (Tabela de busca vertical)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Misc" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Show tra_y icon (Exibir ícone de bandeja)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Stick _windows (Janela de Inserção)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Font (Fonte):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Se a opção \"Always\" (sempre) estiver selecionada, a barra de ferramenta " "sempre será exibida na tela. Se a opção \"On demand\" (sob pedido) estiver " "selecionada, ela será exibida somente quando o SCIM estiver ativado. Se a " "opção \"Never\" (nunca) estiver selecionada, ela nunca será exibida." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Se esta opção estiver selecionada, a barra de ferramentas estará na borda da " "tela." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "A barra de ferramentas estará escondida após este timeout expirar. Esta opção " "é válida somente quando \"Always show\" (sempre exibir) estiver selecionado. " "Ajuste para zero para ativar este comportamento." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Se esta opção estiver selecionada, o ícone do método de inserção será exibido " "na barra de ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Se esta opção estiver selecionada, o nome do método de inserção estará " "exposto na barra de ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Se esta opção estiver selecionada, o ícone de adesão estará exposto na barra " "de ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Se esta opção estiver selecionada, o ícone do menu estará exposto na barra de " "ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Se esta opção estiver selecionada, o ícone de ajuda estará exposto na barra " "de ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Se esta opção estiver selecionada, a etiqueta de texto das propriedades do " "método de inserção estarão expostos na barra de ferramentas." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Se esta opção estiver selecionada, a tabela de busca estará embutida na " "janela de inserção." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" "Se esta opção estiver selecionada, a tabela de busca estará exposta " "verticalmente." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Se esta opção estiver selecionada, o ícone da bandeja estará exposto na barra " "de tarefas do desktop." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Se esta opção estiver selecionada, a barra de ferramenta e as janelas da " "tabela de busca e inserção estarão em sua posição original." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "A configuração de fonte será usada nas janelas da tabela de busca e inserção." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Selecione a Fonte da Interface" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Inglês/Europeu" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Inglês (EUA)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Bélgo" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Croata" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Tcheco" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Tcheco (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Dinamarquês" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Holandês" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estoniano" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Dinamarquês" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Francês" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Francês (Canadense)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Francês (Suíça)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Alemão" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Alemão (com caracteres)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Alemão (Suíço)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Grego" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Húngaro" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italiano" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japonês" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norueguês" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polonês" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Português" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Português (acentos do Brasil)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Russo" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Eslovaco" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Eslováquio (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Esloveno" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Espanhol" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Espanhol (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Espanhol (América Latina)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Sueco" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turco" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Inglês (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Islandês" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lituano" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ucraniano" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amárico" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arábico" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arábico (Egito)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arábico (Líbano)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamês" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbaijão" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Belarusião" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Búlgaro" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengalês" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengalês (Índia)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetano" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bósnio" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalão" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Galês" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Inglês" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Inglês (Australiano)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Inglês (Canadense)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Inglês (Britânico)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Inglês (Irlandês)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Inglês (Americano)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Espanhol (México)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Basco" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Pérsio" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irlandês" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galiciano" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Guzerate" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebraico" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Armênio" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlíngua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonésio" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgiano" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Cazaquistão" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Cambódio" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Coreano" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laothian" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Letão" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Macedônio" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malaiala" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongol" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marati" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malaio" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Birmanês" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepalês" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norueguês (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norueguês (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Romênio" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Sinhala" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albano" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Sérvio" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Sueco (Finlândia)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugo" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Tailandês" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uighur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbeque" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamita" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Walloon" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Yiddish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Chinês" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Chinês (simplificado)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Chinês (tradicional)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Outro" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Selected _Keys (Teclas Selecionadas):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Key Code (Código da Tecla):" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modifiers (Modificadores):" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Por favor insira o Código da Tecla." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Insira a tecla (ou combinação de teclas).\n" "Este diálogo será fechado quando a tecla for liberada." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Obtendo uma tecla." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Seleção da Tecla" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Posição do Cursor" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "A posição atual do cursor de inserção nos caracteres." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Comprimento máximo" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Número máximo de caracteres para a visualização desta faixa. Zero se estiver " "no máximo." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Profundidade máxima" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Profundidade máxima para a visualização desta faixa." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Possui Quadro" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE remove as molduras da visualização da faixa." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Virar cursor" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE muda a iluminação do cursor " #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Cursor de movimento automático" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE move automaticamente a posição do cursor quando clicar no mouse" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "No evento de pressionar o Botão Próximo" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE no evento de pressionar o botão próximo para programa de usuário." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "" "Redefinir o tamanho automaticamente para que o dispositivo se ajuste à faixa" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE Redefinição automática ligada" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Profundidade em caracteres" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Número de caracteres para deixar espaço para a visualização da faixa." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Rolar Deslocamento" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "" "Número de pixels da visualização da faixa rolada para fora da tela à esquerda" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Texto" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "O conteúdo da visualização da faixa" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientação" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "A orientação da bandeja." scim-master/po/quot.sed000066400000000000000000000002311415264260100154020ustar00rootroot00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g scim-master/po/remove-potcdate.sin000066400000000000000000000006601415264260100175340ustar00rootroot00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } scim-master/po/ru.po000066400000000000000000001356041415264260100147200ustar00rootroot00000000000000# translation of ru.po # Russian translations for scim package. # Copyright (C) 2008 THE scim'S COPYRIGHT HOLDER # This file is distributed under the same license as the scim package. # # Automatically generated, 2008. # Chester Cheng , 2008. # Yulia Poyarkova , 2008. # AlexL , 2014 msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-19 21:08+0400\n" "PO-Revision-Date: 2014-11-19 21:26+0300\n" "Last-Translator: AlexL \n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: KBabel 1.11.4\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "платформа SCIM (Smart Common Input Method)" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 Джеймс Су \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 #: ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 #: ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Английский/ клавиатура" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Справка SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Прикрепить/ открепить окно ввода и панель инструментов." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Показать краткую справку по SCIM и текущему методу ввода." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Показать меню команд." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 Джеймс Су " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Перезагрузить конфигурацию" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Прикрепить окна" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Спрятать панель инструментов" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Помощь..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Выход" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "Метод ввода SCIM" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "Конфигурировать платформу SCIM (Smart Common Input Method)" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Настройка SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Встроенная утилита настройки создана на основе библиотеки GTK Widget." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Панель" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Экстра" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Настройка метода ввода SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org.cn>" msgstr "" " Платформа SCIM (Smart Common Input Method) \n" "\n" "Графическая утилита настройки\n" "\n" "\n" "\n" "Авторские права 2002-2004, Джеймс Су <suzhe@tsinghua.org.cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Настройка для модулей %s." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "Not all configuration can be reloaded on the fly. Don't forget to restart SCIM in order to let all of the new configuration take effect." msgstr "Не все настройки могут быть перезагружены на лету. Не забудьте перезапустить SCIM, чтобы новые установки вступили в силу." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Конвертация упрощенного китайского в традиционный" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Преобразование упрощенного китайского в традиционный" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "Упр.-Трад." #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Конвертация упрощенного китайского в традиционный" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Не преобразовывать" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Упрощенный в традиционный" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Преобразовать упрощенный китайский в традиционный" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Традиционный в упрощенный" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Преобразовать традиционный китайский в упрощенный" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "Джеймс Су " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "Упр.->Трад." #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "Трад.->Упр." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 Джеймс Су " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "«Горячие» клавиши:\n" "\n" " Control+U:\n" " переключение между кодировками Unicode и Multibyte.\n" "\n" " Esc:\n" " сброс метода ввода.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Статус текущего метода ввода. Нажмите для изменения." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Неизвестный" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Глобальные настройки" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "Setup the global options used by All FrontEnd modules, including X11 FrontEnd, GTK IMModule, QT IMModule etc." msgstr "Настройка глобальных параметров, используемых такими компонентами как X11 FrontEnd, GTK IMModule, QT IMModule и др." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Триггер:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Выберите клавиши триггера" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "The key events to turn on/off SCIM input method. Click on the button on the right to edit it." msgstr "Комбинации клавиш для включения и выключения метода ввода SCIM. Нажмите кнопку справа для их изменения." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "В_ключить:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Выберите клавиши включения" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "The key events to turn on SCIM input method. Click on the button on the right to edit it." msgstr "Комбинации клавиш, включающие метод ввода SCIM. Нажмите кнопку справа для изменения." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "В_ыключить:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Выберите клавиши выключения" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "The key events to turn off SCIM input method. Click on the button on the right to edit it." msgstr "Комбинации клавиш, включающие метод ввода SCIM. Нажмите кнопку справа для изменения." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Следующий метод ввода:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Выберите клавиши выбора следующего метода ввода" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "The key events to switch to the next input method. Click on the button on the right to edit it." msgstr "Комбинации клавиш для переключения следующего метода ввода. Нажмите кнопку справа для изменения." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "Пр_едыдущий метод ввода:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Выберите клавиши для предыдущего метода ввода" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "The key events to switch to the previous input method. Click on the button on the right to edit it." msgstr "Комбинации клавиш для выбора предыдущего метода ввода. Нажмите кнопку справа для изменения." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Показать меню _метода ввода:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Выберите комбинацию клавиш для отображения метода ввода" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "The key events to show the input method menu. Click on the button on the right to edit it." msgstr "Комбинации клавиш для отображения метода ввода. Нажмите кнопку справа для изменения." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Параметры" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Раскладка клавиатуры:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "You should choose your currently used keyboard layout here so that input methods, who care about keyboard layout, could work correctly." msgstr "Здесь следует выбрать вашу текущую раскладку клавиатуры, чтобы методы ввода работали корректно." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Поместить преформатированную строку в окно клиента" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "If this option is checked, the preedit string will be displayed directly in the client input window, rather than in a independent float window." msgstr "При выборе этой опции преформатированная строка будет отображена в окне ввода клиента, а не в отдельном всплывающем окне." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "Раз_делять метод ввода между приложениями" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "If this option is checked, then only one input method could be used by all applications at the same time.Otherwise different input method could be used by each application." msgstr "При выборе этой опции будет использоваться один метод ввода для всех приложений. В противном случае можно использовать различные методы." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "«Горячие» клавиши" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "You can enable/disable input methods and set hotkeys for input methods here." msgstr "Здесь вы можете включить/ выключить методы ввода и назначить «горячие» клавиши." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Установленные службы метода ввода:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Изменить «_горячие» клавиши" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Измените «горячие» клавиши, связанные с данным методом ввода." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Выбрать _фильтры" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Выберите фильтры для заданного метода ввода." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "Ра_звернуть" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Отобразить все группы языков." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "С_вернуть" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Свернуть все группы языков." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "В_ключить все" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Включить все методы ввода." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "В_ыключить все" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Выключить все методы ввода." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Имя" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Включить" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Фильтры" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Языки" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Описание" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Изменить «горячие» клавиши для %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Выбрать фильтры для %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "В_верх" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "В_низ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Демон панели создан на основе библиотеки GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Всегда" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "По требованию" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Никогда" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Панель инструментов" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Показать:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "_Автопривязка" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Показать _значок метода ввода" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Показать _имя метода ввода" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Спрятать _таймаут:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Показать значок пр_ивязки" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Показать значок мен_ю" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Показать значок помо_щи" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Показать метку _свойств" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Окно ввода" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Вст_роенная таблица поиска" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "В_ертикальная таблица поиска" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Прочее" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Показать значок в _панели задач" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Заблокировать о_кна" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Шрифт:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "If option \"Always\" is selected, the toolbar will always be shown on the screen. If option \"On demand\" is selected, it will only be shown when SCIM is activated. If option \"Never\" is selected, it will never be shown." msgstr "Если выбран вариант «Всегда», то панель инструментов будет всегда отображена. Если же выбрать «По требованию», то панель будет показана только при активации SCIM. «Никогда» отменит отображение панели." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "If this option is checked, the toolbar will be snapped to the screen border." msgstr "При выборе этой опции панель инструментов будет привязана к границе экрана." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "The toolbar will be hidden out after this timeout is elapsed. This option is only valid when \"Always show\" is selected. Set to zero to disable this behavior." msgstr "По истечению таймаута панель будет спрятана (только если опция имеет значение «Всегда»). Установка в 0 (ноль) отключит эту возможность." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "If this option is checked, the input method icon will be showed on the toolbar." msgstr "Если эта опция выбрана, то значок метода ввода будет отображен на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "If this option is checked, the input method name will be showed on the toolbar." msgstr "Если эта опция выбрана, то имя метода ввода будет отображено на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "If this option is checked, the stick icon will be showed on the toolbar." msgstr "Если эта опция выбрана, то значок привязки будет отображен на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "Если эта опция выбрана, то значок меню будет отображен на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "Если эта опция выбрана, то значок помощи будет отображен на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "If this option is checked, the text label of input method properties will be showed on the toolbar." msgstr "Если эта опция выбрана, то текстовая метка метода ввода будет отображена на панели инструментов." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "If this option is checked, the lookup table will be embedded into the input window." msgstr "Если эта опция выбрана, то в окно ввода будет встроена таблица поиска." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "If this option is checked, the lookup table will be displayed vertically." msgstr "Если эта опция выбрана, то таблица просмотра будет отображена вертикально." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "If this option is checked, the tray icon will be showed on the desktop's taskbar." msgstr "Если эта опция выбрана, то значок будет показан в панели задач." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "If this option is checked, the toolbar, input and lookup table windows will be sticked to its original position." msgstr "Если эта опция выбрана, то панель инструментов, окна таблицы поиска и ввода будут помещены в исходное положение." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "Настройки шрифта будут действительны для окон ввода и таблицы поиска." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Выбор шрифта интерфейса" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Английский/ Европа" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "Не удалось запустить менеджера-помощника: выход..." #: ../src/scim_helper_manager.cpp:162 #: ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 #: ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "Ошибка запуска менеджера-помощника" #: ../src/scim_helper_manager.cpp:162 #: ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 #: ../src/scim_socket.cpp:510 msgid "failed" msgstr "неудача" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "аварийное завершение процесса" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "завершение с сигналом" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "ошибка запуска неизвестного процесса" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Английский (США)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Бельгийский" #: ../src/scim_keyboard_layout_data.h:4594 #: ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Хорватский" #: ../src/scim_keyboard_layout_data.h:4595 #: ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Чешский" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Чешский (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 #: ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Датский" #: ../src/scim_keyboard_layout_data.h:4598 #: ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Голландский" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Дворак" #: ../src/scim_keyboard_layout_data.h:4600 #: ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Эстонский" #: ../src/scim_keyboard_layout_data.h:4601 #: ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Финский" #: ../src/scim_keyboard_layout_data.h:4602 #: ../src/scim_utility.cpp:738 msgid "French" msgstr "Французский" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Французский (Канада)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Французский (Швейцария)" #: ../src/scim_keyboard_layout_data.h:4605 #: ../src/scim_utility.cpp:721 msgid "German" msgstr "Немецкий" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Немецкий (со «слепыми» клавишами)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Немецкий (Швейцария)" #: ../src/scim_keyboard_layout_data.h:4608 #: ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Греческий" #: ../src/scim_keyboard_layout_data.h:4609 #: ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Венгерский" #: ../src/scim_keyboard_layout_data.h:4610 #: ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Итальянский" #: ../src/scim_keyboard_layout_data.h:4611 #: ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Японский" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Норвежский" #: ../src/scim_keyboard_layout_data.h:4613 #: ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Польский" #: ../src/scim_keyboard_layout_data.h:4614 #: ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Португальский" #: ../src/scim_keyboard_layout_data.h:4615 #: ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Португальский (Бразилия)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Португальский (Бразилия/США)" #: ../src/scim_keyboard_layout_data.h:4617 #: ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Русский" #: ../src/scim_keyboard_layout_data.h:4618 #: ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Словацкий" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Словацкий (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 #: ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Словенский" #: ../src/scim_keyboard_layout_data.h:4621 #: ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Испанский" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Испанский (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Испанский (Латинская Америка)" #: ../src/scim_keyboard_layout_data.h:4624 #: ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Шведский" #: ../src/scim_keyboard_layout_data.h:4625 #: ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Турецкий" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Английский (Великобритания)" #: ../src/scim_keyboard_layout_data.h:4627 #: ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Исландский" #: ../src/scim_keyboard_layout_data.h:4628 #: ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Литовский" #: ../src/scim_keyboard_layout_data.h:4629 #: ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Украинский" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 #: ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 #: ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "Создание сокета" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "файл существует, и не удалось удалить его" #: ../src/scim_socket.cpp:476 #: ../src/scim_socket.cpp:510 msgid "syscall" msgstr "системный вызов" #: ../src/scim_socket.cpp:478 #: ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "выход" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "файл существует и это не сокет" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "другой экземпляр сервера уже прослушивает этот сокет" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "невозможно изменить режим этого файла" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "продолжение" #: ../src/scim_socket.cpp:519 #: ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "Ошибка при создании сокета" #: ../src/scim_socket.cpp:519 #: ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "системный вызов завершился с ошибкой" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Амхарский" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Арабский" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Арабский (Египт)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Арабский (Ливан)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Ассамский" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Азербайджанский" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Белорусский" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Болгарский" #: ../src/scim_utility.cpp:712 #: ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Бенгальский" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Бенгали (Индия)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Тибетский" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Боснийский" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Каталонский" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Валлийский" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Дивехи" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Английский" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Английский (Австралия)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Английский (Канада)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Английский (Великобритания)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Английский (Ирландия)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Английский (США)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "Эсперанто" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Испанский (Мексика)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Баскский" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Персидский" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Ирландский" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Галисийский" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Гуджарати" #: ../src/scim_utility.cpp:742 #: ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Иврит" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Хинди" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Армянский" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Интерлингва" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Индонезийский" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Грузинский" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Казахский" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Камбоджийский" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Каннада" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Корейский" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Лаосский" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Латвийский" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Македонский" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Малаялам" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Монгольский" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Маратхи" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Малайский" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Бирманский" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Непальский" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Норвежский (нюнорск)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Норвежский (букмол)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Ория" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Панджаби" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Румынский" #: ../src/scim_utility.cpp:779 #: ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "Синдхи" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Сингальский" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Албанский" #: ../src/scim_utility.cpp:785 #: ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Сербский" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Шведский (Финляндия)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Тамильский" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Телугу" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Тайский" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Уйгурский" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Урду" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Узбекский" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Вьетнамский" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Валлонский" #: ../src/scim_utility.cpp:801 #: ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Идиш" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Китайский" #: ../src/scim_utility.cpp:804 #: ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Китайский (упрощенный)" #: ../src/scim_utility.cpp:805 #: ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Китайский (традиционный)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Другой" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "Тест" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "Помощник по тесту." #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "ТЕСТ" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "(C) 2002-2004 Джеймс Су " #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Выбранные _клавиши:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Код ключа:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Модификаторы:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "Ca_psLock" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Сначала введите комбинацию клавиш." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Нажмите клавишу (или комбинацию).\n" "Этот диалог будет закрыт, как только вы отпустите клавишу." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Запоминание комбинации." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Выбор клавиш" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Позиция курсора" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Текущая позиция вставки курсора." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Максимальная длина" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "Максимальное число символов в строке просмотра. Ноль, если не ограничено." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Максимальная ширина" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Максимальная ширина строки просмотра." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Есть рамка" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "Значение FALSE удаляет внешнюю рамку строки просмотра." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Прорисовка курсора" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Значение TRUE прорисовывает мерцающий курсор." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Автоперемещение курсора" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "Значение TRUE автоматически перемещает курсор при щелчке мыши." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Событие перенаправления нажатия кнопки" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "Значение TRUE перенаправляет событие нажатия клавиши программе пользователя." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Автоматическое изменение размера компонента, чтобы вместить строку" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Значение TRUE включает автоматическое изменение размера." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Ширина в символах" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Число символов, определяющих ширину строки просмотра." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Смещение прокрутки" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Число пикселей, на которое будет прокручен экран при смещении влево." #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Текст" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Содержимое строки просмотра" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Ориентация" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Ориентация лотка." #~ msgid "Are you sure you want to quit SCIM Setup?" #~ msgstr "Вы действительно хотите выйти из программы настройки SCIM?" #~ msgid "Setup utility for Smart Common Input Method platform" #~ msgstr "Утилита настройки для платформы SCIM" #~ msgid "Smart Common Input Method" #~ msgstr "Smart Common Input Method" scim-master/po/sk.po000066400000000000000000001217211415264260100147020ustar00rootroot00000000000000# Slovak translations of SCIM # This file is distributed under the same license as the SCIM package. # Copyright (C) 2007 Ivan Masár , 2007. # Ivan Masár , 2007. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:00+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "platforma Smart Common Input Method" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "angličtina/klávesnica" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Pomocník SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #, fuzzy #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Prichytiť/uvoľniť vstupné okno a panel nástrojov." #: ../extras/panel/scim_panel_gtk.cpp:1245 #, fuzzy #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Stručná pomoc o SCIM a aktuálnej vstupnej metóde." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Zobraziť ponuku príkazov." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Znovunačítať konfiguráciu" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Prichytávať okná" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Skryť panel nástrojov" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Pomoc..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Ukončiť" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Nastavenie SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 #, fuzzy msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Integrovaný nástroj založený na knižnici GTK Widget." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Frontend" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Panel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Nastavenie metódy vstupu SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " platforma Smart Common Input Method \n" "\n" "Grafický nástroj pre nastavenie\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, fuzzy, c-format msgid "The Setup for %s modules." msgstr "Nastavenie %s modulov." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "konverzia zjednodušená-tradičná čínština" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Konverzia medzi zjednodušenou čínštinou a tradičnou čínštinou" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "ZČ-TČ" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "konverzia zjednodušená-tradičná čínština" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "bez konverzie" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "zjednodušená na tradičnú" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "konverzia zjednodušenej čínštiny na tradičnú čínštinu" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "tradičná na zjednodušenú" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "konverzia tradičnej čínštiny na zjednodušenú čínštinu" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "ZČ->TČ" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TČ->ZČ" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "NESPRACOVANÝ KÓD" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 #, fuzzy msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Horúce klávesy:\n" "\n" " Control+u:\n" " Prepnúť medzi viacznakovým kódovaním a Unicode.\n" "\n" " Esc:\n" " Reset metódy vstupu.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Stav aktuálnej metódy vstupu. Zmeníte kliknutím." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "neznámy" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Globálne nastavenie" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 #, fuzzy msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Nastavenie globálnych volieb, ktoré používajú všetky frontend moduly vrátane " "frontendu X11, GTK IMModule, Qt IMModule atď." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Spúšťač:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Zvoliť spúšťacie klávesy" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 #, fuzzy msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové udalosti, ktoré majú vypnúť vstupnú metódu SCIM. Upravíte " "kliknutím pravého tlačidla." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "_Zapnúť:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Vyberte klávesy, ktoré zapnú" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 #, fuzzy msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové udalosti, ktoré majú zapnúť vstupnú metódu SCIM. Upravíte " "kliknutím pravého tlačidla." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "_Vypnúť:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Vyberte klávesy, ktoré vypnú" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 #, fuzzy msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Klávesové udalosti, ktoré majú vypnúť vstupnú metódu SCIM. Upravíte " "kliknutím pravého tlačidla." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Nasledujúca metóda vstupu:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Vybrať klávesy pre nasledovnú metódu vstupu" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 #, fuzzy msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Klávesové udalosti, ktoré majú prepnúť na nasledovnú vstupnú metódu SCIM. " "Upravíte kliknutím pravého tlačidla." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Predošlá metóda vstupu:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Vybrať klávesy pre predošlú metódu vstupu" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 #, fuzzy msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Klávesové udalosti, ktoré majú prepnúť na predošlú vstupnú metódu SCIM. " "Upravíte kliknutím pravého tlačidla." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Zobraziť _ponuku metód vstupu:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Vybrať klávesy pre zobrazenie ponuky metód vstupu" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 #, fuzzy msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Klávesové udalosti, ktoré majú zobraziť ponuku metód vstupu SCIM. Upravíte " "kliknutím pravého tlačidla." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Možnosti" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Rozloženie klávesnice:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #, fuzzy #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Zvoľte vaše aktuálne používané rozloženie klávesnice, aby vstupné metódy, " "ktoré závisia na rozložení klávesnice fungovali správne." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 #, fuzzy msgid "_Embed Preedit String into client window" msgstr "_Vložiť do klientského okna predpripravený reťazec" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #, fuzzy #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Umožniť zobrazenie predpripraveného reťazca priamo v klientskom okne " "namiesto nezávislého plávajúceho okna." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Používať rovnakú metódu vstupu vo všetkých aplikáciách" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #, fuzzy #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Umožniť použitie iba jednej metódy vstupu vo všetkých aplikáciách. inak bude " "možné použiť inú metódu vstupu v každej aplikácii." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Horúce klávesy" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 #, fuzzy msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "Zapnúť vypnúť vstupné metódy a nastaviť horúce klávesy." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Nainštalované služby vstupných metód." #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Upraviť _horúce klávesy" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #, fuzzy #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Upraviť horúce klávesy asociované so zvolenou vstupnou metódou." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Zvoliť _filtre" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #, fuzzy #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Zvoliť filtre, ktoré sa vzťahujú na so zvolenú vstupnú metódu." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Rozbaliť" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Rozbaliť všetky jazykové kategórie." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Zbaliť" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Zbaliť všetky jazykové kategórie." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Z_apnúť všetky" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Zapnúť všetky metódy vstupu." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Vypnúť všetky" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Vypnúť všetky metódy vstupu." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Názov" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Zapnúť" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filtre" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Jazyky" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Popis" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, fuzzy, c-format msgid "Edit Hotkeys for %s" msgstr "Upraviť horúce klávesy %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, fuzzy, c-format msgid "Select Filters for %s" msgstr "Nastaviť filtre %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Presunúť _hore" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Presunúť _dolu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Démon pre panel založený na knižnici GTK+-2.x." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Vždy" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Na požiadanie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Nikdy" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Panel nástrojov" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Zobraziť:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Automatické _prichytávanie" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Zobraziť _ikonu metódy vstupu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Zobraziť _názov metódy vstupu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Čas do _skrytia:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Zobraziť ikonu _prichytávania" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Zobraziť _ikonu ponuky" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Zobraziť _ikonu pomocníka" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Zobraziť štítok _vlastností" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Vstupné okno" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "_Vnorená vyhľadávacia tabuľka" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Zvislá vyhľadávacia tabuľka" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Rôzne" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Zobraziť ikonu v _oznamovacej oblasti" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Prichytávať _okná" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Písmo:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Ak je zvolená voľba \"Vždy\", panel nástojov bude stále zobrazený na " "obrazovke. Ak je zvolená voľba \"Na požiadanie\", zobrazí sa po aktivácii " "SCIM. Ak je zvolená voľba \"Nikdy\", nezobrazí sa nikdy." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Panel nástrojov sa skryje potom, čo vyprší tento interval. Táto voľba je " "účinná iba keď je zvolené \"Vždy zobrazovať\". Nastavením na nulu toto " "správanie vypnete." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "Zobrazoť ikonu vstupnej metódy na paneli nástrojov." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "Zobrazoť názov vstupnej metódy na paneli nástrojov." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "Zobrazoť textový popisok ikonu vstupnej metódy na paneli nástrojov." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "Zobrazoť ikonu v oznamovacej oblasti na ploche." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Donútiť okná panel nástrojov, vstup a vyhľadávacia tabuľka aby boli " "prichytené na svoju pôvodnú pozíciu." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #, fuzzy #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "Nastavenie písiem pre okná vstup a vyhľadávacia tabuľka ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Vybrať písmo rozhrania" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "angličtina/európska" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "angličtina (USA)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "chorvátčina" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "čeština" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "čeština (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "dánčina" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "holandčina" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "estónčina" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "fínčina" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "francúzština" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "francúzština (Kanada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "francúzština (Švajčiarsko)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "nemčina" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "nemčina (s mŕtvymi klávesmi)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "nemčina (Švajčiarsko)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "gréčtina" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "maďarčina" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "taliančina" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "japončina" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "nórčina" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "poľština" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "portugalčina" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "portugalčina (Brazília)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "portugalčina (Brazília)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ruština" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "slovenčina" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "slovenčina (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "slovinčina" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "španielčina" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "španielčina (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "španielčina (latinská Amerika)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "švédčina" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "turečtina" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "angličtina (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "islandčina" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "litovčina" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ukrajinčina" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "amharčina" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "arabčina" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "arabčina (Egypt)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "arabčina (Libanon)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "ásámčina" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "azerbajdžančina" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "bieloruština" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "bulharčina" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "bengálčina" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "bengálčina (India)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "tibetčina" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "bosniačtina" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "katalánčina" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "waleština" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "maldivčina" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "angličtina" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "angličtina (Austrália)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "angličtina (Kanada)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "angličtina (Británia)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "angličtina (Írsko)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "angličtina (USA)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "španielčina (Mexiko)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "baskičtina" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "perzština" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "írčina" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "galícijčina" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "gudžarátčina" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "hebrejčina" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "hindčina" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "arménčina" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "indonézština" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "gruzínčina" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "kazaština" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "kannadčina" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "kórejčina" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "lotyština" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "macedónčina" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "malajálamčina" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "mongolčina" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "maráthčina" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "malajčina" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "barmčina" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "nepálčina" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "nórsky nynorsk" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "nórsky bokmål" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "uríjčina" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "pandžábčina" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "rumunčina" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "sinhalčina" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "albánčina" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "srbčina" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "švédčina (Fínsko)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "tamilčina" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "telugčina" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "thajčina" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "ujgurčina" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "urdčina" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "uzbečtina" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "vietnamčina" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "valónčina" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "jidiš" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "čínština" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "čínština (zjednodušená)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "čínština (tradičná)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "iné" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Zvolené _klávesy:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Kód klávesu:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Modifikátory:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Uvoľnenie" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 #, fuzzy msgid "Please enter a Key Code first." msgstr "Prosím, najprv zadajte kód." #: ../utils/scimkeyselection.cpp:415 #, fuzzy msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Stlačte kláves (alebo kombináciu kláves).\n" "Tento dialóg sa zatvorí, keď pustíte kláves." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Zachytávanie klávesu." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Výber klávesu" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Poloha kurzora" #: ../utils/scimstringview.c:232 #, fuzzy msgid "The current position of the insertion cursor in chars." msgstr "Aktuálna poloha vkladacieho kurzora v znakoch." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Maximálna dĺžka" #: ../utils/scimstringview.c:242 #, fuzzy msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Maximálny počet znakov tohto pohľadu na reťazec. Nula znamená neobmedzený." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Maximálna šírka" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Maximálna šírka tohto pohľadu na reťazec." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Má rámec" #: ../utils/scimstringview.c:262 #, fuzzy msgid "FALSE removes outside bevel from string view." msgstr "FALSE odstráni vonkajší rámček z pohľadu na reťazec." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Vykresľovať kurzor" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE vykresľovať blikajúci kurzor." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Automatický posun kurzora" #: ../utils/scimstringview.c:278 #, fuzzy msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE automaticky presúvať kurzor počas klikania myšou." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Preposlanie udalosti stlačenia tlačidla" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE preposlanie udalosti stlačenia tlačidla používateľskému programu." #: ../utils/scimstringview.c:293 #, fuzzy msgid "Auto resize the widget to fit the string" msgstr "Automatická zmena veľkosti nástroja, aby sa reťazec zmestil." #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE automatická zmena veľkosti zapnutá." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Šírka v znakoch" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Počet znakov, koľko miesta vynechať v pohľade na reťazec." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Ofset posúvania" #: ../utils/scimstringview.c:312 #, fuzzy msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Počet pixelov v pohľade na reťazec pri presune doľava." #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Text" #: ../utils/scimstringview.c:322 #, fuzzy msgid "The contents of the string view" msgstr "Obsah pohľadu na reťazec" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Orientácia" #: ../utils/scimtrayicon.c:109 #, fuzzy msgid "The orientation of the tray." msgstr "Orientácia oznamovacej oblasti." scim-master/po/sv.po000066400000000000000000001216101415264260100147120ustar00rootroot00000000000000# Swedish translation for scim # Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 # This file is distributed under the same license as the scim package. # <>, 2006. # # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:01+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Scim-plattformen (Smart Common Input Method)" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Latinsk teckeninmatning" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Om Scim" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Fixera/lossa inmatningsfönstret och verktygsfältet" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Kortfattad information om Scim och om aktuell inmatningsmetod." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Visa kommandomenyn." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Återhämta inställningar" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Fixera fönster" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Dölj verktygsfältet" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Hjälp ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Avsluta" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Inställningar för Scim" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Inställningsverktyg byggt på GTK Widget-biblioteket." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "FrontEnd" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Panel" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Extra" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Inställningar för Scim" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Scim-plattformen (Smart Common Input Method) \n" "\n" "Grafiskt inställningsverktyg\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Inställningar för %s-moduler." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Många inställningar kräver att du startar om Scim innan du fortsätter,för " "att de skall börja verka." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Omvandling förenklad/traditionell kinesiska" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Omvandla förenklad kinesiska till traditionell och vice versa" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Omvandling förenklad/traditionell kinesiska" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Ingen omvandling" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Förenklad till traditionell" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Omvandla förenklad kinesiska till traditionell" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Traditionell till förenklad" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Omvandla traditionell kinesiska till förenklad" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "TANGENTKOD" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Snabbtangenter:\n" "\n" " Ctrl+u:\n" " Växla mellan multibytekodning and Unicode.\n" "\n" " Esc:\n" " återställ inmatningsmetod.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Aktuell inmatningsmetod. Klicka för att ändra." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Okänd" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Allmänna inställningar" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Allmänna inställningar som gäller alla användargränssnitt, t.ex. X11 " "FrontEnd, GTK IMModule, QT IMModule etc." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "Ak_tiveringstangent" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Välj aktiveringstangenter" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tangentkombinationer som öppnar och stänger SCIM-inmatningen. Klicka " "påknappen till höger för att ändra." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "Slå på (_o):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Välj på-kommando" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tangentkombinationer som öppnar SCIM-inmatningen. Klicka påknappen till " "höger för att ändra." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "Stäng av (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Välj på-kommando" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tangentkombinationer som stänger SCIM-inmatningen. Klicka påknappen till " "höger för att ändra." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Nästa inmatningsmetod:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Välj kommando för att hoppa till nästa" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Tangentkombinationer som växlar till nästa inmatningsmetod. Klicka påknappen " "till höger för att ändra." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "Föregående inmatningsmetod (_p):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Välj kommando för att hoppa till föregående" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Tangentkombinationer som växlar till föregående inmatningsmetod. Klicka " "påknappen till höger för att ändra." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Visa _meny med inmatningsmetoder:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Välj kommando för att visa menyn med inmatningsmetoder" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Tangentkombinationer som visar menyn med inmatningsmetoder. Klicka påknappen " "till höger för att ändra." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Alternativ" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "Tangentbordslayout (_k):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Här väljer du vilket slags tangentbord du har. Det är nödvändigt föratt " "vissa inmatningsmetoder skall fungera." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "Visa okonverterad_e latinska tecken i ditt arbetsfönster." #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Med det här alternativet förbockat kommer de latinska bokstäver du " "skriveratt visas direkt i fönstret du arbetar i. Annars visas de i ett popup-" "fönster." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "Använd _samma inmatningsmetod i alla program" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Med det här alternativet förbockat kommer bara en inmatningsmetod att " "användasi taget. Annars kan varje program använda olika metoder." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Kortkommandon" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "Slå av och på inmatningsmetoder och ange kortkommandon för olika " "inmatningsmetoder här." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Installerade inmatningsmetoder:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Redigera kortkommandon (_h)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Välj kortkommandon för vald inmatningsmetod." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Välj _filter" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Välj filter att använda till den här inmatningsmetoden." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "Visa allt (_e)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Visa alla inmatningsmetoder" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "Göm allt (_c)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Göm alla inmatningsmetoder." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Markera alla (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Gör alla inmatningsmetoder tillgängliga för användning." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "Avmarkera alla (_d)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Gör alla inmatningsmetoder otillgängliga för användning." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Namn" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Aktivera" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Filter" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Språk" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Beskrivning" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Välj kortkommando för %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Välj filter för %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Flytta _uppåt" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Flytta ne_dåt" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Paneldemon byggd på GTK+-2.x-biblioteket." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Alltid" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "På begäran" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Aldrig" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Verktygsfält" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "Vi_sa" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Fäst vid skärmka_nt" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Visa ikon för aktuell inmatningsmetod" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Visa namn på akt_uell inmatningsmetod" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Time_out för att dölja:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Vi_sa fixeringsikonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Visa m_enyikonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Visa _hjälpikonen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Visa inmatningsalternativ" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Inmatningsfönster" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "Infälld teckenväljare (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "_Vertikal teckenväljare" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Diverse" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Visa ikon i s_ystempanelen" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Fäst fönster (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "Typsnitt (_f)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Välj \"Alltid\" för att ständigt visa verktygsfältet på skärmen. Välj\"På " "begäran\" för att bara visa verktygsfältet när Scim är aktivt.Välj \"Never\" " "för att aldrig visa verktygsfältet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "Med det här alternativet förbockat är verktygsfältet alltid fäst mot " "skärmkanten." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Verktygsfältet döljs efter så här lång tid. Den här inställningen används " "baranär du har valt \"Alltid\" i menyn till vänster. Välj 0 för att aldrig " "döljaverktygsfältet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Med det här alternativet förkryssat, visas alltid ikonen för " "aktuellinmatningsmetod i verktygsfältet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "Med det här alternativet förkryssat, visas alltid namnet på " "aktuellinmatningsmetod i verktygsfältet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "Med det här alternativet förkryssat, visas häftstiftsikonen i verktygsfältet" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "Med det här alternativet förkryssat, visas menyikonen i verktygsfältet" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Med det här alternativet förkryssat, visas hjälpikonen i verktygsfältet." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Med det här alternativet förkryssat, visas en textlapp med " "inmatningsalternativi verktygsfältet" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "Med det här alternativet förkryssat, visas teckenväljaren infälld " "iinmatningsfönstret." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "Med det här alternativet förkryssat används en vertikal teckenväljare." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Med det här alternativet förkryssat visas panelikonen i " "skrivbordetssystempanel." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Med det här alternativet förkryssat fixeras verktygsfält, " "inmatningsfönsteroch teckenväljare på en given plats." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "Det typsnitt som kommer att användas i inmatnings- och teckenväljarfönster" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Välj typsnitt för användargränssnittet" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Västerländsk" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Engelsk (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belgisk" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Kroatiska" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Tjeckiska" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Tjeckisk (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Danska" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Holländska" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estniska" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Finska" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Franska" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Fransk (kanadensisk)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Fransk (schweizisk)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Tyska" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Tysk (med 'Tottaste')" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Tysk (Schweizisk)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Grekiska" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Ungerska" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "Italienska" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Japanska" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Norsk" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Polska" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Portugisiska" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Portugisiska (Brasilien)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Portugisisk (Brazilien, am. diakriter)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Ryska" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slovakiska" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slovakisk (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Slovenska" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Spanska" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Spansk (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Spansk (Latinamerika)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Svenska" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Turkiska" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Engelsk (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Isländska" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Litauiska" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Ukrainska" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amhariska" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "Arabiska" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "Arabiska (Egypten)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "Arabiska (Libanon)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamesiska" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "Azerbajdzjanska" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Vitryska" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bulgariska" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Bengali" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Bengali (Indien)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tibetanska" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bosniska" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Katalanska" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Kymriska" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Engelska" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Engelska (australiensisk)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Engelska (kanadensisk)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Engelska (brittisk)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Engelska (irländsk)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Engelska (amerikansk)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Spanska (Mexiko)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Baskiska" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Persiska" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Irländska" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galiciska" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebreiska" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hindi" #: ../src/scim_utility.cpp:746 #, fuzzy msgid "Armenian" msgstr "Rumänska" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Interlingua" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "Indonesiska" #: ../src/scim_utility.cpp:753 #, fuzzy msgid "Georgian" msgstr "Tyska" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazakisk" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Kambodjanska" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Koreanska" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Laotiska" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lettiska" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Makedonska" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mongolska" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malay" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nepali (Khaskura)" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Norska (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Norska (bokmål)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Rumänska" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "Albanska" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Serbiska" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Svenska (Finland)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telagu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thai" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uiguriska" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "Uzbekiska" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Vietnamesiska" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Vallonska" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Jiddish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Kinesiska" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Kinesiska (förenklad)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Kinesiska (traditionell)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Annat" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Valda _kortkommandon:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Tangentkod:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Specialtangenter:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Ange tangentkod först." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Tryck på en tangent eller på en tangentkombination.\n" "Den här rutan försvinner när du släpper tangenten." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Plockar tangent" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Tangentval" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Markörens position" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Markörens läge i texten, räknat i tecken." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Maxlängd" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Högsta antal tecken att visa i den här teckenraden. Välj 0 för att inte " "begränsa längden." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Maxbredd" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Maximal bredd för att visa den här teckenraden." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Med ram" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "Om FALSK tas ytterkanten bort från strängvyn." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Visa markör" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "Om SANT använd blinkande markör." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Flytta markören automatiskt" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "Flytta markören automatiskt vid musklick." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Direktmata tangenter" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "Skicka tangentnedtryckningar till användarprogrammet." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Anpassa storleken automatiskt till teckenraden." #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "Storleken anpassas automatiskt." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Bredd (antal tecken)" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Antal tecken att göra rum för i teckenraden." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Mjuk rullning" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Antal pixlar i teckenraden som rullat över vänsterkanten på skärmen" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Text" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Innehållet i teckenraden" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Riktning" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Panelens riktning." scim-master/po/ta.po000066400000000000000000001514211415264260100146710ustar00rootroot00000000000000# translation of ta.po to Tamil # Tamil translations for SCIM package. # Copyright (C) 2008 I. Felix # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # I. Felix , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:02+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "Smart Common Input Method தளம்" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ஆங்கிலம்/விசைப்பலகை" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM உதவி" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ஒட்டும்/ஒட்டாத உள்ளீடு சாளரம் மற்றும் கருவிப்பட்டை." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "SCIM மற்றும் நடப்பு உள்ளீடு முறை பற்றி சுருக்கமான உதவியை காட்டவும்." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "கட்டளை பட்டியை காட்டவும்." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "கட்டமைப்பை மீண்டும் ஏற்றுதல்" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "ஒட்டும் சாளரங்கள்" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "கருவிப்பட்டையை மறைத்தல்" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "உதவி ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "வெளியேறவும்" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM அமைவு" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK சாளர நூலகத்தை அடிப்படையாக கொண்ட ஒருங்கிணைக்கப்பட்ட அமைவு வசதி." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "முன்புலம்" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "பலகம்" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "மற்றவை" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM உள்ளீடு முறை அமைவு" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Smart Common Input Method platform \n" "\n" "வரைகலை அமைவு வசதி\n" "\n" "\n" "\n" "பதிப்புரிமை 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s தொகுதிகளுக்கான அமைவு." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "அனைத்து கட்டமைப்பு மீண்டும் ஏற்றப்படும். அனைத்து புதிய அமைவுகளும் செயல்பட " "SCIM ஐ மீண்டும் துவக்கவும்." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "எளிய-மரபு சீன உரையாடல்" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "எளிய மற்றும் மரபு சீனத்திற்கிடையே மாற்றம்" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "எளிய-மரபு சீன உரையாடல்" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "மாற்றம் இல்லை" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "எளிமையிலிருந்து மரபுக்கு" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "எளிய சீனத்திலிருந்து மரபு சீனத்திற்கு மாற்றுதல்" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "மரபிலிருந்து எளிமைக்கு" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "மரபு சீனத்திலிருந்து எளிய சீனத்திற்கு மாற்றுதல்" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "குறுக்குவிசைகள்:\n" "\n" " Control+u:\n" " பல பைட் குறிமுறையிலிருந்து ஒருங்குறிக்கு மாற்றுதல்.\n" "\n" " Esc:\n" " உள்ளீடு முறைக்கு மறு அமைவு செய்தல்.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "நடப்பு உள்ளீடு முறையின் நிலை. மாற்ற சொடுக்கவும்." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "யுனிக்கோடு" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "தெரியாத" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "முழுமையான அமைவு" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "X11 FrontEnd, GTK IMModule, QT IMModule போன்றவற்றையும் சேர்த்து, அனைத்து " "FrontEnd தொகுதிகளால் பயன்படுத்தப்பட்ட முழுமையான விருப்பங்களை அமைக்கவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "சொடுக்கி (_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "சொடுக்கி விசைகளை தேர்ந்தெடுக்கவும்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM உள்ளீடு முறையை இயக்கும்/நிறுத்தும் விசை நிகழ்வுகள். வலது பக்கம் " "இருக்கும் பொத்தானை சொடுக்கி இதனை திருத்தவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "இயக்குதல் (_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "இயக்கும் விசைகளை தேர்ந்தெடுத்தல்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM உள்ளீடு முறையை இயக்கும் விசை நிகழ்வுகள். வலது பக்கம் இருக்கும் பொத்தானை " "சொடுக்கி இதனை திருத்தவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "நிறுத்துதல் (_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "நிறுத்தும் விசைகளை தேர்ந்தெடுத்தல்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM உள்ளீடு முறையை நிறுத்தும் விசை நிகழ்வுகள். வலது பக்கம் இருக்கும் " "பொத்தானை சொடுக்கி இதனை திருத்தவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "அடுத்த உள்ளீடு முறை (_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "அடுத்த உள்ளீடு முறை விசைகளை தேர்ந்தெடுக்கவும்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "அடுத்த உள்ளீடு முறைக்கு மாற்றும் விசை நிகழ்வுகள். வலது பக்கம் இருக்கும் " "பொத்தானை சொடுக்கி இதனை திருத்தவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "முந்தைய உள்ளீடு முறை (_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "முந்தைய உள்ளீடு முறை விசைகளை தேர்ந்தெடுக்கவும்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "முந்தைய உள்ளீடு முறைக்கு மாற்றும் விசை நிகழ்வுகள். வலது பக்கம் இருக்கும் " "பொத்தானை சொடுக்கி இதனை திருத்தவும்." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "உள்ளீடு முறை பட்டியை காட்டுதல் (_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "உள்ளீடு முறை பட்டி விசைகளை காட்டுதலை தேர்ந்தெடுக்கவும்" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "உள்ளீடு முறை பட்டியை காட்டும் விசை நிகழ்வுகள். வலது பக்கம் இருக்கும் பொத்தானை " "சொடுக்கி இதனை திருத்தவும்." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "விருப்பங்கள்" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "விசைப்பலகை அமைப்பு (_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "நீங்கள் தற்போது பயன்படுத்திய விசைப்பலகை அமைப்பை இங்கு தேர்ந்தெடுக்க வேண்டும். " "எனவே விசைப்பலகை அமைப்புக்கு துணைபுரியும் உள்ளீடு முறைகள் சரியாக வேலை செய்யும்." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "கிளையன் சாளரத்தில் உட்பொதியப்பட்ட முன்திருத்தப்பட்ட சரம் (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "இந்த விருப்பம் தேர்ந்தெடுக்கப்பட்டால், முன் திருத்தப்பட்ட சரம் கிளையன் " "உள்ளீடு சாளரத்தில் நேரடியாக காட்டப்படும்." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "அனைத்து பயன்பாடுகளிலும் ஒரே உள்ளீடு முறையை பகிரவும் (_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "இந்த விருப்பம் தேர்ந்தெடுக்கப்பட்டால், தான் ஒரே ஒரு உள்ளீடு முறை அனைத்து " "பயன்பாடுகளால் ஒரே நேரத்தில் பயன்படுத்த முடியும். இல்லையெனில் வேறு உள்ளீடு " "முறை ஒவ்வொரு பயன்பாட்டிலும் பயன்படுத்தப்படும்." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "குறுக்குவிசைகள்" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "நீங்கள் உள்ளீடு முறைகளை செயல்படுத்தலாம்/நீக்கலாம் மற்றும் உள்ளீடு முறைகளுக்கு " "இங்கு குறுக்குவிசைகளை அமைக்கலாம்." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "நிறுவப்பட்ட உள்ளீடு முறை சேவைகள்:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "குறுக்குவிசைகளை திருத்துதல் (_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "தேர்ந்தெடுக்கப்பட்ட உள்ளீடு முறையுடன் குறுக்குவிசைகளை திருத்தவும்." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "வடிப்பிகளை தேர்ந்தெடுத்தல் (_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "இந்த உள்ளீடு முறையில் இணைக்கப்பட்ட வடிப்பிகளை தேர்ந்தெடுக்கவும்." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "விரிவாக்குதல் (_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "அனைத்து மொழி வகைகளையும் விரிவாக்குதல்" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "குறுக்குதல் (_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "அனைத்து மொழி வகைகளுக்கும் குறுக்குதல்" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "அனைத்தையும் செயல்படுத்தல் (_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "அனைத்து உள்ளீடு முறைகளையும் செயல்படுத்தல்." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "அனைத்தையும் செயல்நீக்கவும் (_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "அனைத்து உள்ளீடு முறைகளையும் செயல்நீக்கவும்" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "பெயர்" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "செயல்படுத்தல்" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "வடிப்பிகள்" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "மொழிகள்" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "விளக்கம்" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%sக்கு குறுக்கு விசைகளை திருத்துதல்" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%sக்கு வடிப்பிகளை தேர்ந்தெடுத்தல்" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "மேலே நகர்த்தல் (_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "கீழே நகர்த்தல் (_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x நூலகத்தை அடிப்படையாக கொண்ட ஒரு பலக டீமான்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "எப்போதும்" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "தேவையின்படி" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ஒருபோதும்" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "கருவிப்பட்டை" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "காட்டுதல் (_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "தானாக ஒட்டுதல் (_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "உள்ளீடு முறை சின்னத்தைக் காட்டுதல் (_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "உள்ளீடு முறை பெயரை காட்டுதல் (_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "நேரம் முடிதலை மறைத்தல் (_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "ஒட்டு சின்னத்தைக் காட்டுதல் (_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "பட்டி சின்னத்தைக் காட்டுதல் (_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "உதவி சின்னத்தைக் காட்டுதல் (_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "பண்பு லேபிளை காட்டுதல் (_p)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "உள்ளீடு சாளரம்" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "உட்பொதியப்பட்ட பார்வை அட்டவணை (_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "செங்குத்து பார்வை அட்டவணை (_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "மற்றவை" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "தட்டு சின்னத்தை காட்டுதல் (_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "ஒட்டும் சாளரங்கள் (_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "எழுத்துரு (_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "\"எப்போதும்\" என்ற விருப்பம் தேர்ந்தெடுக்கப்பட்டால், கருவிப்பட்டை எப்போதும் " "திரையில் தோன்றும். \"தேவையின் படி\" என்ற விருப்பம் தேர்ந்தெடுக்கப்பட்டால் " "SCIM செயல்படுத்தப்பட்டால் மட்டுமே காட்டப்படும். \"ஒருபோதும் இல்லை\" என்ற " "விருப்பம் தேர்ந்தெடுக்கப்பட்டால், அது ஒருபோதும் காட்டாது." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், கருவிப்பட்டை திரை எல்லையில் ஒட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "கருவிப்படை இந்த நேரம் முடிந்ததும் மறைக்கப்படும். இந்த விருப்பம் \"எப்போதும் " "காட்டவும்\" என்பது தேர்ந்தெடுக்கப்பட்டால் மட்டும் பயன்படும். இந்த செயல்நீக்க " "பூஜ்ஜியம் என அமைக்கவும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், உள்ளீடு முறை சின்னம் கருவிப்பட்டையில் " "காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், உள்ளீடு முறை பெயர் கருவிப்பட்டையில் " "காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், ஒட்டு சின்னம் கருவிப்பட்டையில் காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், பட்டி சின்னம் கருவிப்பட்டையில் காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், உதவி சின்னம் கருவிப்பட்டையில் காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், உள்ளீடு முறை பண்புகளின் உரை லேபிள் " "கருவிப்பட்டையில் காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், அட்டவணை உள்ளீடு சாளரத்தில் உட்பொதியப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "இந்த விருப்பம் சோதிக்கப்பட்டால், அட்டவணை செங்குத்தாக தோன்றும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், தட்டு சின்னம் பணிமேடை பணிபட்டையில் " "காட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "இந்த விருப்பம் சோதிக்கப்பட்டால், கருவிப்பட்டை, உள்ளீடு மற்றும் அட்டவணை " "சாளரங்கள் அதன் இடங்களில் ஒட்டப்படும்." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "எழுத்துரு அமைவு உள்ளீட்டில் பயன்படுத்தப்பட்டு அட்டவணை சாளரங்களில் தேடுகிறது." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "முகப்ப் எழுத்துருவை தேர்ந்தெடுத்தல்" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ஆங்கிலம்/ஐரோப்பா" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ஆங்கிலம் (அமெரிக்கா)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "பெல்ஜியன்" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "கிரோசியன்" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "செக்" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "செக் (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "டேனிஷ்" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "டச்சு" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "டோவ்ராக்" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "எஸ்தோனியன்" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ஃபினிஷ்" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "பிரென்சு" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "பிரஞ்சு (கனடியன்)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "பிரஞ்சு (சுவிஸ்சர்லாந்து)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "ஜெர்மன்" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "ஜெர்மன் (டெட்விசைகளுடன்)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "ஜெர்மன் (சுவிஸ்)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "கிரேக்கம்" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "ஹங்கேரியன்" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "இத்தாலியன்" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "ஜப்பானிய" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "நார்வேஜியன்" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "போலிஷ்" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "போர்ச்சுகீசியம்" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "போர்த்துகீஸ் (பிரேசில்)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "போர்த்துகீஸ் (பிரேசில் யுஎஸ் முறை)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "ரஷ்யன்" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "ஸ்லோவேக்" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "ஸ்லோவாக் (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "ஸ்லோவேனியன்" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "ஸ்பானிஷ்" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "ஸ்பேனிஷ் (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "ஸ்பேனிஷ் (லத்தீன் அமெரிக்கா)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "ஸ்வீடிஷ்" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "துருக்கி" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ஆங்கிலம் (பிரிட்டன்)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "ஐஸ்லாந்து" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "லித்துனியன்" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "உக்ரேனியன்" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "அம்ஹரிக்" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "அரேபியம்" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "அரேபிக் (எகிப்து)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "அரேபிக் (லிபனான்)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "அசாமி" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "அசர்பைஜானி" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "பெலாருஷியன்" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "பல்கேரியன்" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "பெங்காலி" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "பெங்காலி (இந்தியா)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "திபேத்தியன்" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "போஸ்னியன்" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "காட்டலான்" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "வெல்ஸ்" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "திவிஹி" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ஆங்கிலம்" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ஆங்கிலம் (ஆஸ்திரேலியன்)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ஆங்கிலம் (கனடியன்)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ஆங்கிலம் (பிரிட்டிஷ்)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ஆங்கிலம் (அயர்லாந்து)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ஆங்கிலம் (அமெரிக்கன்)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "ஸ்பேனிஷ் (மெக்ஸிகோ)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "பாஸ்க்யு" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "பெர்ஷியன்" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ஐரிஷ்" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "காலிசியன்" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "குஜராத்தி" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "எபிரேயம்" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "இந்தி" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "அர்மேனியன்" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "இன்டர்லிங்கா" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "இந்தோனேஷியன்" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "ஜார்ஜியன்" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "கசக்" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "கம்போடியன்" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "கன்னடம்" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "கொரியன்" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "லோதியன்" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "லுத்வேனியன்" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "மாசிடோனியன்" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "மலையாளம்" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "மங்கோலியன்" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "மராத்தி" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "மலாய்" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "பர்மிஸ்" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "நேபாளி" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "நார்வேனியன் (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "நார்வேனியன் (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ஒரியா" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "பஞ்சாபி" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "ரோமானியன்" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "சிங்களம்" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "அல்பனியன்" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "செர்பியன்" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "சுவீடிஸ் (பின்லாந்து)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "தமிழ்" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "தெலுங்கு" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "தாய்" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "உய்கர்" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "உருது" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "உஸ்பெக்" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "வியட்னாமியன்" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "வலூன்" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "ஈடிஷ்" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "சீனம்" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "சீனம் (எளியது)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "சீனம் (மரபார்ந்து)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "வேறு" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "தேர்ந்தெடுக்கப்பட்ட விசைகள் (_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "விசைக்குறியீடு:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "மாற்றிகள்:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "முதலில் ஒரு விசைக்குறியீட்டை உள்ளிடவும்." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "ஒரு விசையை (அல்லது ஒரு விசை கூட்டமைப்பை) அழுத்தவும். \n" "இந்த உரையாடல் விசையை விடும் போது மூடும்." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "ஒரு விசையை எடுத்தல்" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "விசை தேர்ந்தெடுத்தல்" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "நிலைகாட்டி இடம்" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "எழுத்துக்களில் உள்ளீடும் நிலைக்காட்டியின் நடப்பு நிலை." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "அதிகபட்ச எண்ணிக்கை" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "இந்த சர பார்வையின் அதிகபட்ச எழுத்துக்களின் எண்ணிக்கை. அதிகபட்சம் இல்லையெனில் " "பூஜ்ஜியம்." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "அதிகபட்ச அகலம்" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "இந்த சர பார்வையின் அதிகபட்ச அகலம்." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "சட்டம் உள்ளது" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "இல்லை சர பார்வையிலிருந்து வெளிப்புற பிவலை நீக்குகிறது." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "நிலைக்காட்டியை இழுத்தல்" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "ஆம் சிமிட்டும் நிலைக்காட்டியை இழுத்தல்" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "தானியக்க நிலைகாட்டு நகர்த்தல்" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "ஆம் சுட்டியை சொடுக்கும் போது தானாக நகரும் நிலைகாட்டி இடம்." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "முன்னோக்கு பொத்தான் அழுத்தும் நிகழ்வு" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "ஆம் பயனர் நிரலில் முன்னோக்கு பொத்தானை அழுத்தும் நிகழ்வு." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "தானாக சரம் சாளரத்தில் மறுஅளவு செய்யப்பட்டது" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "ஆம் தானியக்க மறு அமைவு உள்ளது." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "அகலம் எழுத்துக்களில்" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "சர பார்வையில் இடவெளி விட வேண்டிய எழுத்துக்களின் எண்ணிக்கை." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "உருளும் ஆப்செட்" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "சர பார்வையில் திரையில் உருளும் பிக்ஸலின் எண்ணிக்கை" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "உரை" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "சரப்பார்வையின் உள்ளடக்கங்கள்" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "திசையமைப்பு" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "தட்டின் திசையமைப்பு." scim-master/po/te.po000066400000000000000000001476031415264260100147040ustar00rootroot00000000000000# translation of te.po to Telugu # Telugu translations for SCIM package. # Copyright (C) 2008 Krishna Babu K # This file is distributed under the same license as the SCIM package. # # Automatically generated, 2008. # Krishna Babu K , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:03+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "" "స్మార్ట్‍ ఉమ్మడి ఇన్‌పుట్ పద్దతి ఫ్లాట్‌ఫాం " "చురకైన ఉమ్మడి ఎగుబడి పద్దతి వేదిక" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "ఇంగ్లీష్/కీబోర్డ్‍" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM సహాయం" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "ఇన్‌పుట్ విండో మరియు సాధనపట్టీని అతింకించు/పెకిలించు." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "" "SCIM గురించి మరియు ప్రస్తుత ఇన్‌పుట్ పద్దతి గురించి టూకీగా సహాయాన్ని చూపుము." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "ఆదేశము మెనూను చూపుము." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "ఆకృతీకరణను తిరిగినింపుము" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "విండోలను అతికించుము" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "సాధనపట్టీని మరుగునవుంచుము" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "సహాయము ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "బయటకు" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM అమరిక" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "GTK విడ్జట్ లైబ్రరి మీద ఆధరపడి సమగ్ర అమర్పు సౌలభ్యం." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "ఫ్రంట్ఎండ్" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "IMEngine" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "పానల్" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "ఎక్స్‍‌ట్రా" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM ఇన్‌పుట్ పద్దతి అమరిక" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " స్మార్ట్‍ ఉమ్మడి ఇన్‌పుట్ పద్దతి ఫ్లాట్‌ఫాం \n" "\n" "GUI అమర్పు సౌలభ్యం\n" "\n" "\n" "\n" "కాపీరైట్ 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s మాడ్యూల్స్‍ కొరకు అమరిక." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "ఆకృతీకరణ మొత్తం అప్పటికప్పుడే తిరిగిలోడు కాలేదు. కొత్త ఆకృతీకరణ మొత్తం " "ప్రభావితం " "అగుటకు SCIM ను పునఃప్రారంభించుట మర్చిపోవద్దు." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "సింప్లిఫైడ్-ట్రెడిషనల్ చైనీస్ కన్వర్షన్" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "సింప్లిఫైడ్ చైనీస్ మరియు ట్రెడిషనల్ చైనీస్ మద్య మార్చుము" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "సింప్లిఫైడ్-ట్రెడిషన్ చైనీస్ మార్పుదల" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "మార్పుదల లేదు" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "సింప్లిఫైడ్ నుండి ట్రెడిషనల్‌కు" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "సింప్లిఫైడ్ చైనీస్ నుండి ట్రెడిషనల్ చైనీస్‌కు మార్చుము" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "ట్రెడిషనల్ నుండి సింప్లిఫైడ్‌కు" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "ట్రెడిషనల్ చైనీస్ నుండి సింప్లిఫైడ్‌ చైనీస్‌కు మార్చుము" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "హాట్ కీలు:\n" "\n" " Control+u:\n" " మల్టీబైట్ ఎన్కోడింగ్ మరియు యూనికోడ్ మద్య మారుము.\n" "\n" " Esc:\n" " ఇన్‌పుట్ పద్దతిని తిరిగివుంచుము.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "ప్రస్తుత ఇన్‌పుట్ పద్దతి యొక్క స్థితి. మార్చుటకు దీని మార్చు." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "యూనికోడ్" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "తెలియని" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "సార్వత్రిక అమర్పు" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "అన్ని ఫ్రంట్ఎండ్ మాడ్యూల్స్‍ చేత ఉపయోగించబడే సార్వత్రిక ఐచ్చికాలను అమర్చుము, " "X11 " "ఫ్రంట్ఎండ్ కలుపుకుని, GTK IMModule, QT IMModule మొదలగునవి." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "ట్రిగ్గర్(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "ట్రిగ్గర్ కీలను ఎంపికచేసుకొనుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ఇన్‌పుట్ పద్దతిని ఆన్/ఆఫ్ చేయుటకు కీ ఘటనలు. దానిని సరికూర్చుటకు బటన్‌పైన " "కుడిప్రక్కన నొక్కుము." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "ఆన్ చేయుము(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "ఆన్‌చేయు కీలను ఎంపికచేయుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ఇన్‌పుట్ పద్దతిని ఆన్‌చేయుటకు కీ ఘటనలు. దానిని సరికూర్చుటకు బటన్ పైన " "కుడిప్రక్కన నొక్కుము." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "ఆఫ్ చేయుము(_f):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "ఆఫ్‌చేయు కీలను ఎంపికచేయుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "SCIM ఇన్‌పుట్ పద్దతులను ఆఫ్ చేయుటకు కీ ఘటనలు. దానిని సరికూర్చుటకు బటన్ పైన " "కుడిప్రక్కన నొక్కుము." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "తరువాతి ఇన్‌పుట్ పద్దతి(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "తరువాతి ఇన్‌పుట్ పద్దతి కీలను ఎంపికచేయుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "తరువాతి ఇన్‌పుట్ పద్దతికి మారుటకు కీ ఘటనలు. దీనిని సరికూర్చుటకు బటన్ పైన " "కుడిప్రక్కన నొక్కుము." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "మునుపటి ఇన్‌పుట్ పద్దతి(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "మునుపటి ఇన్‌పుట్ పద్దతి కీలను ఎంపికచేయుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "మునుపటి ఇన్‌పుట్ పద్దతికు మారుటకు కీ ఘటనలు. దీనిని సరికూర్చుటకు బటన్ పైన " "కుడిప్రక్కన నొక్కుము." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "ఇన్‌పుట్ పద్దతి మెనూను చూపుము(_m):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "ఇన్‌పుట్ పద్దతి మెనూ చూపు కీలను ఎంపికచేయుము" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "ఇన్‌పుట్ పద్దతి మెనూను చూపుటకు కీ ఘటనలు. దీనిని సరికూర్చుటకు బటన్ పైన " "కుడిప్రక్కన నొక్కుము." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "ఐచ్చికాలు" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "కీబోర్డ్‍ వాస్తు(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "మీరు ప్రస్తుతం ఉపయోగిస్తున్న కీబోర్డ్‍ వాస్తును ఎంచుకోవాలి అలా ఆ ఇన్‌పుట్ " "పద్దతులు, " "ఏవైతే కీబోర్డ్‍ వాస్తుగురించి బాధ్యతవహిస్తున్నాయో అవి, సరిగా పనిచేస్తాయి." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "కక్షిదారి విండోలోకి ఎంబెడ్ ప్రీఎడిట్ స్ట్రింగ్ (_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "ఈ ఐచ్చికం చెక్‌చేయబడితే, ప్రీఎడిట్ స్ట్రింగ్ స్వతంత్ర ఫ్లోట్ విండోలో " "ప్రదర్శితమగుట కన్నా, " "సూటిగా కక్షిదారి ఇన్‌పుట్ విండోలో ప్రదర్శితమౌతుంది." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "అన్ని అనువర్తనాలకు ఒకే ఇన్‌పుట్ పద్దతిని పంచుము(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "ఈ ఐచ్చికం చెక్‌చేయబడితే, అప్పడు ఒకే సమయంలో అన్ని అనువర్తనాల చేత ఒక ఇన్‌పుట్ " "పద్దతి " "మాత్రమే ఉపయోగించబడుతుంది. లేకపోతే ప్రతి అనువర్తనంచేత విభిన్న ఇన్‌పుట్ పద్దతి " "ఉపయోగించ " "బడుతుంది." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "హాట్‌కీలు" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "" "మీరు ఇన్‌పుట్ పద్దతులను చేతనం/అచేతనం చేయాలి మరియు ఇన్‌పుట్ పద్దతుల కొరకు ఇచట " "హాట్‌కీలను అమర్చవచ్చు." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "సంస్థాపించిన ఇన్‌పుట్ పద్దతి సేవలు:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "హాట్‌కీలను సరికూర్చుము(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "సంభందిత హాట్‌కీలను ఎంపికచేసిన ఇన్‌పుట్ పద్దతి తో సరికూర్చుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "వడపోతలను ఎంపికచేయుము(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "ఈ ఇన్‌పుట్ పద్దతికు అనుబందించబడు వడపోతలను ఎంపికచేయుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "విస్తరింపచేయుము(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "అన్ని భాషా వర్గములను విస్తరింపచేయుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "కూల్చుము(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "అన్ని భాషా వర్గములను కూల్చుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "అన్నిటిని చేతనంచేయుము(_n)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "అన్ని ఇన్‌పుట్ పద్దతులను చేతనంచేయుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "అన్నిటిని అచేతనంచేయుము(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "అన్ని ఇన్‌పుట్ పద్దతులను అచేతనంచేయుము." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "నామము" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "చేతనం" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "వడపోతలు" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "భాషలు" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "వివరణము" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "%s కొరకు హాట్‌కీలను సరికూర్చుము" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "%s కొరకు వ‍డపోతలను ఎంపికచేయుము" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "పైకి కదుపుము(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "క్రిందకు కదుపుము(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "GTK+-2.x లైబ్రరీ మీద ఆధారపడి ఒక పానల్ డెమోన్." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "ఎల్లప్పుడు" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "డిమాండ్ పైన" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "ఎప్పటికికాదు" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "సాధనపట్టి" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "చూపుము(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "స్వయంచాలక స్నాప్(_n)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "ఇన్‌పుట్ పద్దతి ప్రతిమను చూపుము(_i)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "ఇన్‌పుట్ పద్దతి నామమును చూపుము(_u)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "సమయం ముగింపును మరుగుపరచుము(_o):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "స్టిక్ ప్రతిమను చూపుము(_t)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "మెనూ ప్రతిమను చూపుము(_e)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "సహాయం ప్రతిమను చూపుము(_h)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "లక్షణం లేబుల్‌ను చూపుము(_P)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "ఇన్‌పుట్ విండో" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "ఎంబెడెడ్ లుక్అప్ పట్టిక(_m)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "నిలువు లుక్అప్ పట్టిక(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Misc" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "ట్రే ప్రతిమను చూపుము(_y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "స్టిక్ విండోలు(_w)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "ఫాంట్(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "ఐచ్చికం \"Always\" ఎంపికకాబడితే, తెరనందు సాధనపట్టీ ఎల్లప్పుడు చూపబడుతుంది. " "ఐచ్చికం \"On demand\" ఎంపికకాబడితే, అది SCIM చేతనం అయినప్పుడు మాత్రమే " "చూపబడుతుంది. ఐచ్చికం \"Never\" ఎంపిక కాబడితే, అది ఎప్పటికి చూపబడదు." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "ఈ ఐచ్చికం చెక్‌చేయబడితే, సాధనపట్టీ తెర అంచుకు స్నాప్ చేయబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "ఈ సమయనియమితి మించినతరువాత ఈ సాధనపట్టీ మరుగున వుంచబడుతుంది. " "\"Always show\" ఎంపికచేయబడితే మాత్రమే ఈ ఐచ్చికం చెల్లుతుంది.ఈ ప్రవర్తన " "అచేతనంచేయుటకు సున్నాకు అమర్చుము." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఇన్‌పుట్ పద్దతి ప్రతిమ సాధనపట్టీ పైన " "చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఇన్‌పుట్ పద్దతి నామము సాధనపట్టీ పైన చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "ఈ ఐచ్చికం చేక్‌చేయబడితే, స్టిక్ ప్రతిమ సాధనపట్టీ పైన చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "ఈ ఐచ్చికం చేక్‌చేయబడితే, మెనూ ప్రతిమ సాధనపట్టీపైన చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "ఈ ఐచ్చికం చేక్‌చేయబడితే, సాహాయపు ప్రతిమ సాధనపట్టీపైన చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఇన్‌పుట్ పద్దతి లక్షణాల యొక్క పాఠ్యము లేబుల్ " "సాధనపట్టీ " "పైన చూపబడతాయి." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, లుక్అప్ పట్టిక ఇన్‌పుట్ విండోలోనిక ఎంబెడెడ్ " "చేయబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఆ లుక్అప్ పట్టిక నిలువుగా ప్రదర్శితమౌతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఆ చెత్తకుండి ప్రతిమ డెస్క్‍‌టాప్ యొక్క టాస్క్‍‌బార్ " "పైన " "చూపబడుతుంది." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "ఈ ఐచ్చికం చేక్‌చేయబడితే, ఆ టూల్‌బార్, ఇన్‌పుట్ మరియు లుక్అప్ పట్టిక విండోలు " "వాటి వాస్తవ స్థానముకు అతికింపబడివుంటాయి." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "" "ఫాంట్ అమరికలు ఇన్‌పుట్ మరియు లుక్అప్ పట్టిక విండోస్‌నందు ఉపయోగించబడతాయి." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "అంతర్‌ఫలకం ఫాంట్ ఎంపికచేయుము" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "ఇంగ్లీష్/యూరోపియన్" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "ఇంగ్లీష్ (US)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "బెల్జియన్" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "క్రౌటెయిన్" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "చెక్" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "చెక్ (క్వెర్టి)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "డానిష్" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "డచ్" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "డ్వోర్క్‍" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "ఈస్టోనియన్" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "ఫిన్నిష్" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "ఫ్రెంచ్" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "ఫ్రెంచ్ (కెనడియన్)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "ఫ్రెంచ్ (స్విడ్జర్లాండ్)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "జర్మన్" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "జెర్మన్ (డెడ్‌కీస్ తో)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "జర్మన్ (స్విస్)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "గ్రీక్" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "హంగేరియన్" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "ఇటాలియన్" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "జపనీస్" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "నార్వేజియన్" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "పోలిష్" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "పోర్చుగీస్" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "పోర్చుగీస్ (బ్రెజిల్)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "పోర్చుగీస్ (బ్రెజిల్ US యాక్సెంట్స్‍)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "రష్యన్" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "స్లోవక్" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "స్లోవక్ (క్వర్టీ)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "స్లోవెనియన్" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "స్పానిష్" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "స్పానిష్ (CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "స్పానిష్ (లాటిన్ అమెరికా)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "స్వీడిష్" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "టర్కిష్" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "ఇంగ్లీష్ (UK)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "ఐస్‌లాండిక్" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "లిథౌనియన్" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "ఉక్రైనియన్" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "అమ్హారిక్" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "అరబిక్" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "అరబిక్ (ఈజిప్ట్‍)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "అరబిక్ (లెబనాన్)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "అస్సామి" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "అజర్బైజాని" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "బెలారుసైన్" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "బల్గేరియన్" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "బెంగాలి" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "బెంగాలి (ఇండియా)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "టిబిటెన్" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "బోస్నియన్" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "కాటలాన్" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "వెల్ష్‍" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "దివేహి" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "ఇంగ్లీష్" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "ఇంగ్లీష్ (ఆస్ట్రేలియన్)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "ఇంగ్లీష్ (కెనడియన్)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "ఇంగ్లీష్ (బ్రిటీష్)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "ఇంగ్లీష్ (ఐర్లాండ్)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "ఇంగ్లీష్ (అమెరికన్)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "స్పానిష్ (మెక్సికో)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "బస్‌క్యూ" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "పర్షియన్" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "ఐరిష్" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "గలీసియన్" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "గుజరాతి" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "హెబ్రూ" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "హిందీ" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "అర్మేనియన్" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "ఇంటర్‌లింగియా" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "ఇండోనేషియా" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "జియోర్జియన్" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "కజఖ్" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "కాంబోడియన్" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "కన్నడ" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "కొరియన్" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "లోధియన్" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "లాట్వియా" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "మెసడోనియన్" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "మలయాళం" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "మంగోలియన్" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "మరాఠి" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "మలాయ్" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "బర్మీస్" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "నేపాలి" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "నార్వేజియన్ (నైనోర్‌స్క్‍)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "నార్వేజియన్ (బోక్‌మాల్)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "ఒరియా" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "పంజాబి" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "రోమానియన్" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "సింహాలా" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "అల్బేనియన్" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "సెర్బియన్" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "స్వీడిష్ (ఫిన్‌లాండ్)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "తమిళం" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "తెలుగు" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "థాయ్" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "యుగుర్" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "ఉర్దూ" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "ఉజ్బెక్" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "వియత్నాంసి" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "వాలూన్" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "యిద్దిష్" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "చైనీస్" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "చైనీస్ (సింప్లిఫైడ్)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "చైనీస్ (ట్రెడిషనల్)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "ఇతర" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "ఎంపికచేసిన కీలు(_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "కీ కోడ్:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "సవరణిలు:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Release" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "దయచేసి కీకోడ్ ను మొదట ప్రవేశపెట్టండి." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "కీని వత్తండి (లేదా కీ మిశ్రమాన్ని).\n" "ఈ డైలాగ్ కీ విడుదల అయినప్పుడు మూయబడుతుంది." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "ఒక కీను లాగుచున్నది." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "కీ ఎంపిక" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "కర్సర్ స్థానము" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "అక్షరాలలో చేర్చుక కర్సర్ యొక్క ప్రస్తుత స్థానము." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "గరిష్ఠ పొడవు" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "ఈ ప్రారంభ దర్శనంకు అక్షరముల యొక్క గరిష్ఠ సంఖ్య. గరిష్ఠం లేకపోతే సున్న." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "గరిష్ఠ వెడల్పు" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "ఈ ప్రారంభ దర్శనం యొక్క గరిష్ఠ వెడల్పు." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "చట్రమును కలిగివుంది" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "ప్రారంభ దర్శనంనుండి అసత్యం బయటి బెవెల్‌ను తీసివేస్తుంది." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "కర్సర్‌ను గీయుము" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "సత్యమైన డ్రా బ్లింకింగ్ కర్సర్." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "స్వయంచాలకంగా కదులు కర్సర్" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "సత్యం మౌస్ నొక్కుతున్నప్పుడు స్వయంచాలకంగా కర్సర్ స్థానము కదుల్చుతుంది." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "ముందుకు బటన్ వత్తు ఘటన" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "వినియోగదారి ప్రోగ్రామ్‌కు సత్యమైన ఫార్యార్డ్‍ బటన్ వత్తు ఘటన." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "స్ట్రింగ్‌కు సరిపోవుటకు విడ్జట్‌ను స్వయంచాలకంగా పునఃపరిమాణం చేయుము" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "సత్యమైన స్వయంచాలక పునఃపరిమాణం ఆన్‌అయినది." #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "వెడల్పు అక్షరాలలో" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "స్ట్రింగ్ దర్శనంలో ఖాళీవదులుటకు అక్షరముల సంఖ్య." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "స్క్రాల్ ఆఫ్‌సెట్" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "తెరను ఎడమవైపుకు జరుపుటకు స్ట్రింగ్ దర్శనం యొక్క పగ్జెల్స్‍ యొక్క సంఖ్య" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "పాఠ్యము" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "స్ట్రింగ్ దర్శనం యొక్క సారములు" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "సర్ధుబాటు" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "ట్రే యొక్క సర్దుబాటు." scim-master/po/vi.po000066400000000000000000001231121415264260100146770ustar00rootroot00000000000000# Vietnamese translation of SCIM. # Copyright © 2008 GNU/GPL. # This file is distributed under the same license as the SCIM package. # Nguyễn Đình Trung , 2007-2008. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:03+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "nền Bộ gõ dùng chung thông minh" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 James Su \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "Anh/Bàn phím" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "Trợ giúp cho SCIM" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "Ghim/Gỡ ghim cửa sổ nhập và thanh công cụ." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "Hiển thị trợ giúp nhỏ cho SCIM và bộ gõ hiện hành." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "Hiện trình đơn lệnh." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "Nạp lại các thiết lập" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "Ghim cửa sổ" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "Ẩn thanh công cụ" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "Trợ giúp ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "Thoát" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "Thiết lập SCIM" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "Tiện ích thiết lập tích hợp dựa trên thư viện GTK Widget" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "Đầu trước" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "Cơ cấu bộ gõ" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "Bảng" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "Thêm" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "Cài đặt bộ gõ SCIM" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " Bộ gõ dùng chung thông minh \n" "\n" "Tiện ích thiết lập trên giao diện đồ " "hoạ người dùng\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "Thiết lập cho mô-đun %s." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "" "Một số thiết lập sẽ không có hiệu lực ngay lập tức. Bạn phải khởi động lại " "SCIM để tất cả các thiết lập đều có hiệu lực." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "Chuyển đổi tiếng Trung giản thể - phồn thể" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "Chuyển giữa tiếng Trung giản thể và phồn thể" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "SC-TC" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "Chuyển đổi tiếng Trung giản thể" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "Không chuyển đổi" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "Giản thể sang Phồn thể" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "Chuyển tiếng Trung giản thể sang phồn thể" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "Phồn thể sang Giản thể" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "Chuyển tiếng Trung phồn thể sang giản thể" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "James Su " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "SC->TC" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "TC->SC" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "RAW CODE" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "Phím tắt:\n" "\n" " Control+u:\n" " chuyển giữa mã Multibyte và Unicode.\n" "\n" " Esc:\n" " thiết lập lại bộ gõ.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "Trạng thái của bộ gõ hiện thời. Nhấn chuột để thay đổi." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "Không biết" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "Thiết lập toàn cục" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "Thiết lập toàn cục cho tất cả các mô-đun Đầu Trước (FrontEnd), bao gồm Đầu " "Trước X11, GTK IMModule, QT IMModule.v.v.." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "_Bật Tắt:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "Chọn phím bật/tắt" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "" "Tổ hợp phím để bật/tắt bộ gõ SCIM. Bấm vào nút nằm bên phải để hiệu chỉnh." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "Bật:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "Chọn tổ hợp phím để bật SCIM:" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "Tổ hợp phím để bật bộ gõ SCIM. Bấm vào nút bên phải để hiệu chỉnh" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "Tắt:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "Chọn phím để tắt SCIM" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "Tổ hợp phím để tắt bộ gõ SCIM. Bấm vào nút bên phải để hiệu chỉnh." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "_Bộ gõ kế:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "Chọn tổ hợp phím chuyển bộ gõ kế:" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "" "Tổ hợp phím để chuyển tới bộ gõ kế tiếp. Bấm vào nút bên phải để hiệu chỉnh." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "_Bộ gõ trước:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "Chọn phím chuyển bộ gõ trước:" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "" "Tổ hợp phím để chuyển tới bộ gõ trước. Bấm vào nút bên phải để hiệu chỉnh." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "Hiện _trình đơn của bộ gõ:" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "Chọn phím hiện trình đơn bộ gõ:" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "" "Tổ hợp phím để hiển thị trình đơn của bộ gõ. Bấm vào nút bên phải để hiệu " "chỉnh." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "Tuỳ chọn" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "_Bố trí bàn phím:" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "Bạn phải chọn đúng kiểu bố trí bàn phím để các bộ gõ làm việc đúng cách." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "_Nhúng chuỗi đang gõ dở vào cửa sổ ứng dụng khách" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "Nếu được chọn, các chuỗi mà bạn đang gõ dở sẽ hiện trực tiếp trên cửa sổ ứng " "dụng mà bạn đang gõ. Ngược lại, chuỗi đang gõ dở sẽ hiện lên trong một cửa " "sổ nổi." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "_Chỉ dùng một bộ gõ cho tất cả các ứng dụng" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "Nếu được chọn, mọi ứng dụng sẽ dùng chung một bộ gõ. Nếu bỏ chọn, mỗi ứng " "dụng sẽ dùng 1 bộ gõ riêng." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "Phím tắt" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "Bạn có thể bật/tắt và đặt phím tắt cho các bộ gõ tại đây." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "Các bộ gõ đã cài đặt:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "Hiệu chỉnh _Phím tắt" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "Hiệu chỉnh phím tắt dùng cho bộ gõ được chọn" #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "Chọn _Bộ lọc" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "Chọn các bộ lọc được dùng cho bộ gõ này." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "_Mở rộng" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "Mở rộng mọi lớp ngôn ngữ" #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "_Thu gọn" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "Thu gọn mọi lớp ngôn ngữ" #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "Bật _Tất" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "Bật mọi bộ gõ." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "_Bỏ Tất" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "Bỏ tất cả các bộ gõ" #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "Tên" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "Bật" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "Bộ lọc" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "Ngôn ngữ" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "Mô tả" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "Hiệu chỉnh phím tắt cho %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "Chọn bộ lọc cho %s" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "Đưa _Lên trên" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "Đưa _Xuống" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "Một trình nền cửa sổ dựa trên thư viện GTK+ 2.x" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "Luôn luôn" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "Chỉ khi bật" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "Luôn tắt" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "Thanh công cụ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "_Hiển thị" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "Tự động nằ_m bên rìa" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "Hiện biể_u tượng bộ gõ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "Hiện _tên bộ gõ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "Thời gi_an ẩn:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "Hiện biểu tượng _ghim" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "Hiện biểu tượng t_rình đơn" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "Hiện biểu tượng trợ giú_p" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "Hiện nhãn thuộ_c tính" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "Cửa sổ nhập" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "N_húng bảng tra cứu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "Bảng tra cứu nằ_m dọc" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "Linh tinh" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "Hiện biểu tượng trên kha_y hệ thống" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "Ghim cửa _sổ" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "_Phông chữ:" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "Nếu chọn \"Luôn luôn\", thanh công cụ SCIM luôn được hiển thị trên màn hình. " "Nếu chọn \"Chỉ khi bật\", thanh công cụ sẽ chỉ hiện lên khi SCIM hoạt động. " "Nếu chọn \"Luôn tắt\", thanh công cụ sẽ không được hiển thị." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "Nếu đánh dấu chọn, thanh công cụ sẽ nằm ở rìa màn hình." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "Thời gian sau khi bật thanh công cụ được ẩn đi. Tuỳ chọn này chỉ hợp lệ khi " "\"Luôn luôn\" được chọn. Đặt giá trị này bằng 0 để thanh công cụ luôn nổi." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "" "Nếu được chọn, biểu tượng của bộ gõ sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "Nếu được chọn, tên bộ gõ sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "Nếu được chọn, biểu tượng ghim sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "" "Nếu được chọn, biểu tượng trình đơn sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "" "Nếu được chọn, biểu tượng trợ giúp sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "" "Nếu được chọn, nhãn văn bản của bộ gõ sẽ được hiển thị trên thanh công cụ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "Nếu được chọn, bảng tra cứu sẽ được nhúng vào cửa sổ đang gõ." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "Nếu được chọn, bảng tra cứu được hiển thị theo chiều dọc." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "" "Nếu được chọn, biểu tượng SCIM được đặt trên thanh tác vụ của màn hình nền." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "" "Nếu được chọn, cửa sổ nhập và bảng tra cứu sẽ được ghim vào vị trí mặc định." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "Thiết lập phông chữ được dùng trong cửa sổ nhập và bảng tra cứu" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "Chọn phông chữ giao diện" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "Anh/Âu" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "Anh (Mỹ)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "Belgian" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "Cơ-roát-chi-a" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "Séc" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "Séc (qwerty)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "Đan Mạch" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "Hà Lan" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "Estonia" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "Phần Lan" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "Pháp" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "Pháp (Canada)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "Pháp (Thuỵ Sĩ)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "Đức" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "Đức (với phím chết)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "Đức (Thuỵ Sĩ)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "Hi Lạp" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "Hung-ga-ri" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "I-ta-li" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "Nhật Bản" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "Na Uy" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "Phần Lan" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "Bồ Đào Nha" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "Bồ Đào Nha (Bra-xin)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "Bồ Đào Nha (Braxin-Mỹ)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "Nga" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "Slô-va-ki-a" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "Slô-va-ki-a (qwerty)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "Slô-vê-ni-a" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "Tây Ban Nha" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "Tây Ban Nha (CP-850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "Tây Ban Nha (Latinh-Mỹ)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "Thụy Điển" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "Thổ Nhĩ Kỳ" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "Anh (Anh)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "Icelandic" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "Lithuanian" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "Úc-rai-na" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "Amharic" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "A Rập" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "A Rập (Ai Cập)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "A Rập (Libăng)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "Assamese" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "A-déc-bai-dan" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "Bê-la-rút" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "Bun-ga-ri" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "Ben-ga-li" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "Ben-ga-li (Ấn Độ)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "Tây Tạng" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "Bôtxnia" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "Catalăng" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "Xứ Wales" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "Divehi" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "Anh" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "Anh (Úc)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "Anh (Ca-na-da)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "Anh (Anh)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "Anh (Ai len)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "Anh (Mỹ)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "Quốc tế ngữ" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "Tây Ban Nha (Mê-hi-cô)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "Basque" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "Ba Tư" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "Ai-xơ-len" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "Galician" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "Gujarati" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "Hebrew" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "Hin-đu" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "Ác-mê-ni-a" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "Quốc tế ngữ" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "In-đô-nê-xi-a" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "Georgian" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "Kazakh" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "Campuchia" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "Kannada" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "Hàn Quốc" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "Lào" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "Lát-via" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "Mác-xê-đô-ni" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "Malayalam" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "Mông Cổ" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "Marathi" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "Malay" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "Burmese" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "Nê pan" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "Na Uy (nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "Na Uy (bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "Oriya" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "Punjabi" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "Ru-ma-ni" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "Sinhala" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "An-ba-ni" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "Séc-bi" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "Thụy Điển (Phần Lan)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "Tamil" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "Telugu" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "Thái Lan" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "Uighur" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "Urdu" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "U-dơ-be-kix-tan" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "Việt Nam" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "Walloon" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "Yiddish" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "Trung Quốc" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "Trung Quốc (giản thể)" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "Trung Quốc (phồn thể)" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "Khác" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "Phím được _chọn:" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "Mã phím:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "Đặc biệt:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "_Nhả phím" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "Xin hãy nhập mã phím." #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "Nhấn một phím (hoặc tổ hợp phím).\n" "Hộp thoại này sẽ được đóng lại khi bạn thả tay ra." #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "Nhận một phím." #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "Chọn phím." #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "Vị trí con trỏ" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "Vị trí hiện tại của con trỏ chèn vào ký tự." #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "Độ dài tối đa" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "" "Số lượng ký tự lớn nhất hiển thị trong chuỗi. Đặt bằng 0 nếu không giới hạn." #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "Độ rộng lớn nhất" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "Độ rộng lớn nhất khi hiển thị chuỗi." #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "Có khung" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "FALSE loại bỏ khung bên ngoài khi hiển thị chuỗi." #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "Vẽ con trỏ" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "TRUE vẽ con trỏ nhấp nháy." #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "Tự động di chuyển con trỏ" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "TRUE tự động di chuyển vị trí con trỏ khi bấm chuột." #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "Chuyển sự kiện nút được nhấn" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "TRUE chuyển sự kiện nhấn nút tới chương trình của người dùng." #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "Tự động điều chỉnh kích thước của ô nhập để hiển thị chuỗi" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "TRUE bật tự động điều chỉnh kích thước" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "Độ rộng tính bằng ký tự" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "Số ký tự cần có để giữ chỗ khi hiển thị chuỗi." #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "Bước cuộn" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "Số pixel được cuộn sang bên trái khi hiển thị chuỗi" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "Văn bản" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "Ngữ cảnh khi hiển thị chuỗi" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "Định hướng" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "Hướng của khay" scim-master/po/zh_CN.po000066400000000000000000001150501415264260100152640ustar00rootroot00000000000000# translation of zh_CN.po to Simplified Chinese # Copyright (C) 2004, 2008 Free Software Foundation, Inc. # # James Su , 2004. # Leah Liu , 2008. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2014-11-20 00:09+0400\n" "PO-Revision-Date: 2015-02-11 17:05+0100\n" "Last-Translator: test2\n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2692 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "智能通用输入法平台" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 詹姆斯 · 苏 \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3227 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "英语键盘" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "SCIM 帮助" #: ../extras/panel/scim_panel_gtk.cpp:1235 #: ../extras/panel/scim_panel_gtk.cpp:1238 msgid "Stick/unstick the input window and the toolbar." msgstr "粘住/放开 输入窗口和工具条." #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Show a brief help about SCIM and the current input method." msgstr "显示关于 SCIM 和当前输入法的简单帮助." #: ../extras/panel/scim_panel_gtk.cpp:1254 #: ../extras/panel/scim_panel_gtk.cpp:1257 msgid "Show command menu." msgstr "显示命令菜单." #: ../extras/panel/scim_panel_gtk.cpp:2694 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(C) 2002-2005 James Su " #. Reload Configuration. #: ../extras/panel/scim_panel_gtk.cpp:2777 msgid "Reload Configuration" msgstr "重新加载配置" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2787 msgid "Stick Windows" msgstr "粘住窗口" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2796 msgid "Hide Toolbar" msgstr "隱藏工具条" #. Help #: ../extras/panel/scim_panel_gtk.cpp:2805 msgid "Help ..." msgstr "帮助 ..." #. Clients exit. #: ../extras/panel/scim_panel_gtk.cpp:2823 msgid "Exit" msgstr "退出" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM 设置" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "基于 GTK 控件库的集成设置工具." #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "前端" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "输入法引擎" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "面板" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "附加" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM 输入法设置" #: ../extras/setup/scim_setup_ui.cpp:397 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " 智能通用输入法平台 \n" "\n" "图形设置工具\n" "\n" "\n" "\n" "版权所有 2002-2004, 苏 哲<suzhe@tsinghua.org.cn>" "" #: ../extras/setup/scim_setup_ui.cpp:422 #, c-format msgid "The Setup for %s modules." msgstr "%s模块的设置." #: ../extras/setup/scim_setup_ui.cpp:698 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "不是所有配置都能够直接重新加载. 别忘了重新启动 SCIM 以使所有新的配置生效." #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "简繁中文转换" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "在简体中文和繁体中文之间进行转换" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "简-繁" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "简繁中文转换" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "不转换" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "简体到繁体" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "将简体中文转换为繁体中文" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "繁体到简体" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "将繁体中文转换为简体中文" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "詹姆斯 · 苏(suzhe@tsinghua.org.cn)" #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "简->繁" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "繁->简" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "内码输入" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 James Su " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "热键:\n" "\n" " Control+u:\n" " 切换本地编码和 Unicode 编码模式.\n" "\n" " Esc:\n" " 复位输入法.\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "当前输入法的状态, 点击切换状态." #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "统一码" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "未知" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "全局设置" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "设置所有前端模块使用的全局选项,包括 X11前端, GTK 输入法模块, QT 输入法模块 " "等." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "开关键(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "选择输入法开关键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "用以打开/关闭 SCIM 输入法的按键. 点击右边的按钮进行编辑." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "打开键(_O):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "选择输入法打开键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "用以打开 SCIM 输入法的按键. 点击右边的按钮进行编辑." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "关闭键(_F):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "选择输入法关闭键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "用以关闭 SCIM 输入法的按键. 点击右边的按钮进行编辑." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "后一个输入法(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "选择后一个输入法按键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "用以切换到后一个输入法的按键. 点击右边的按钮进行编辑." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "前一个输入法(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "选择前一个输入法按键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "用以切换到前一个输入法的按键. 点击右边的按钮进行编辑." #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "显示输入法菜单(_M):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "选择显式输入法菜单按键" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "用以显式输入法菜单的按键. 点击右边的按钮进行编辑." #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "选项" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "键盘布局(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "" "你应当在这里选择你正在使用的键盘布局, 以保证那些依赖于键盘布局的输入法能够正" "确的运行." #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "将预编辑字符串嵌入到客户窗口中(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "如果选中这个选项, 预编辑字符串将被直接显示在客户端输入窗口中,而不是在独立的浮" "动窗口中." #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "在所有应用程序中共享同一个输入法(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "如果选中这个选项, 则同一时刻仅能在所有应用程序中使用同一个输入法. 否则各个应" "用程序可以使用不同的输入法." #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:501 msgid "Hotkeys" msgstr "热键" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "你可以在这里激活/禁止输入法, 并为输入法设置热键." #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "已安装的输入法服务:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:321 msgid "Edit _Hotkeys" msgstr "编辑热键(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:331 #: ../modules/SetupUI/scim_imengine_setup.cpp:334 msgid "Edit Hotkeys associated with the selected input method." msgstr "编辑与选中的输入法相关联的热键." #: ../modules/SetupUI/scim_imengine_setup.cpp:337 msgid "Select _Filters" msgstr "选择过滤器(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:347 #: ../modules/SetupUI/scim_imengine_setup.cpp:350 msgid "Select the Filters which will be attached to this input method." msgstr "选择要附加到这个输入法上的过滤器." #: ../modules/SetupUI/scim_imengine_setup.cpp:376 msgid "_Expand" msgstr "展开(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:386 #: ../modules/SetupUI/scim_imengine_setup.cpp:389 msgid "Expand all language categories." msgstr "展开所有语言分类." #: ../modules/SetupUI/scim_imengine_setup.cpp:392 msgid "_Collapse" msgstr "折叠(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:402 #: ../modules/SetupUI/scim_imengine_setup.cpp:405 msgid "Collapse all language categories." msgstr "折叠所有语言分类." #: ../modules/SetupUI/scim_imengine_setup.cpp:408 msgid "E_nable All" msgstr "激活所有(_N)" #: ../modules/SetupUI/scim_imengine_setup.cpp:418 #: ../modules/SetupUI/scim_imengine_setup.cpp:421 msgid "Enable all input methods." msgstr "激活所有输入法." #: ../modules/SetupUI/scim_imengine_setup.cpp:424 msgid "_Disable All" msgstr "禁止所有(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:434 #: ../modules/SetupUI/scim_imengine_setup.cpp:437 msgid "Disable all input methods." msgstr "禁止所有输入法." #: ../modules/SetupUI/scim_imengine_setup.cpp:462 #: ../modules/SetupUI/scim_imengine_setup.cpp:589 msgid "Name" msgstr "名称" #: ../modules/SetupUI/scim_imengine_setup.cpp:480 #: ../modules/SetupUI/scim_imengine_setup.cpp:570 msgid "Enable" msgstr "激活" #: ../modules/SetupUI/scim_imengine_setup.cpp:515 msgid "Filters" msgstr "过滤器" #: ../modules/SetupUI/scim_imengine_setup.cpp:608 msgid "Languages" msgstr "语言" #: ../modules/SetupUI/scim_imengine_setup.cpp:622 msgid "Description" msgstr "描述" #: ../modules/SetupUI/scim_imengine_setup.cpp:1238 #, c-format msgid "Edit Hotkeys for %s" msgstr "编辑 %s 的热键" #: ../modules/SetupUI/scim_imengine_setup.cpp:1465 #, c-format msgid "Select Filters for %s" msgstr "为 %s 选择过滤器" #: ../modules/SetupUI/scim_imengine_setup.cpp:1521 msgid "Move _Up" msgstr "向上移动(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1528 msgid "Move _Down" msgstr "向下移动(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "一个基于 GTK+-2.x 库的面板服务程序." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "永远" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "需要时" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "从不" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:217 msgid "ToolBar" msgstr "工具条" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:235 msgid "_Show:" msgstr "显示(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:261 msgid "Auto s_nap" msgstr "自动靠边(_N)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:267 msgid "Show _input method icon" msgstr "显示输入法图标(_I)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:273 msgid "Show inp_ut method name" msgstr "显示输入法名称(_U)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Hide time_out:" msgstr "隐藏超时(_O):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:298 msgid "Show s_tick icon" msgstr "显示粘住图标(_T)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:304 msgid "Show m_enu icon" msgstr "显示菜单图标(_E)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:310 msgid "Show _help icon" msgstr "显示帮助图标(_H)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:316 msgid "Show _property label" msgstr "显示属性标签(_P)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:327 msgid "Input window" msgstr "输入窗口" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:336 msgid "E_mbedded lookup table" msgstr "嵌入式候选词表(_M)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:340 msgid "_Vertical lookup table" msgstr "垂直式候选词表(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:344 msgid "Misc" msgstr "其它" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:353 msgid "Show tra_y icon" msgstr "显示托盘图标(_Y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Stick _windows" msgstr "粘住窗口(_W)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:365 msgid "_Font:" msgstr "字体(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:436 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:504 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "如果选中 \"永远\" 选项, 工具条将被永远显示在屏幕上. 如果选中 \"需要时\" 选" "项, 则只有当SCIM被激活时才会显示工具条. 如果选中 \"从不\" 选项, 则工具条永远" "不会被显示." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:443 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:511 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "如果选中这个选项, 工具条将粘附在屏幕边缘上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:517 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "当超时过后, 工具条将被隐藏起来. 该选项只在 \"永远显示\" 被选中时才生效. 设置" "成 0 则禁止此功能." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:456 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:524 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "如果选中这个选项, 输入法图标将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:460 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:528 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "如果选中这个选项, 输入法名称将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:464 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "如果选中这个选项, 粘住图标将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:468 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:536 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "如果选中这个选项, 菜单图标将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:472 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:540 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "如果选中这个选项, 帮助图标将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:476 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:544 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "如果选中这个选项, 则输入法屬性的文字标签将显示在工具条上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:480 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:548 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "如果选中这个选项, 候选词表将被嵌入到输入窗口中." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:485 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "如果选中这个选项, 将垂直显示候选词表." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:490 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:558 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "如果选中这个选项, 托盘图标将显示在桌面的任务栏上." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:494 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:562 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "如果选中这个选项, 则输入和候选词表窗口将停在它们的原始位置." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:500 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:568 msgid "The font setting will be used in the input and lookup table windows." msgstr "该字体设置将用于输入和候选词表窗口." #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:889 msgid "Select Interface Font" msgstr "选择界面字体" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "英语/欧洲语言" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "英语(美国)" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "比利时语" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "克罗地亚语" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "捷克语" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "捷克语(标准键盘)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "丹麦语" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "荷兰语" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak键盘" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "爱沙尼亚语" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "芬兰语" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "法语" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "法语(加拿大)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "法语(瑞士)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "德语" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "德语(有deadkeys)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "德语(瑞士)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "希腊语" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "匈牙利语" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "意大利语" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "日语" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "挪威语" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "波兰语" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "葡萄牙语" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "葡萄牙语(巴西)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "葡萄牙语(巴西 美国发音)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "俄语" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "斯洛伐克语" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "斯洛伐克(标准键盘)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "斯洛文尼亚语" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "西班牙语" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "西班牙语(CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "西班牙语(拉丁美洲)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "瑞典语" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "土耳其语" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "英语(英国)" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "冰岛语" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "立陶宛语" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "乌克兰语" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "阿姆哈拉语" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "阿拉伯语" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "阿拉伯语(埃及)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "阿拉伯语(黎巴嫩)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "阿萨姆语" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "阿塞拜疆语" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "白俄罗斯语" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "保加利亚语" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "孟加拉语" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "孟加拉语(印度)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "西藏语" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "波斯尼亚语" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "加泰罗尼亚语" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "威尔士语" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "迪维希语" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "英语" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "英语(澳大利亚)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "英语(加拿大)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "英语(不列颠)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "英语(爱尔兰)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "英语(美国)" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "西班牙语(墨西哥)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "巴斯克语" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "波斯语" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "爱尔兰语" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "加利西亚语" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "古吉拉特语" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "希伯来语" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "印地语" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "亚美尼亚语" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "拉丁国际语" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "印度尼西亚语" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "乔治亚语" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "哈萨克语" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "柬埔寨语" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "卡纳达语" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "韩语" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "老挝语" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "拉脱维亚语" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "马其顿语" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "马拉雅拉姆语" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "蒙古语" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "马拉地语" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "马来语" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "缅甸语" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "尼泊尔语" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "挪威语(尼诺斯克语)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "挪威语(博克马尔语)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "奥里雅语" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "旁遮普语" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "罗马尼亚语" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "僧伽罗语" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "阿尔巴尼亚语" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "塞尔维亚语" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "瑞典语(芬兰)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "泰米尔语" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "泰卢固语" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "泰语" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "维吾尔语" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "乌尔都语" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "乌兹别克语" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "越南语" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "瓦龙语" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "意第绪语" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "中文" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "简体中文" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "繁体中文" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "其它语言" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "" #: ../utils/scimkeyselection.cpp:162 msgid "Selected _Keys:" msgstr "选中的按键(_K):" #: ../utils/scimkeyselection.cpp:207 msgid "Key Code:" msgstr "键码:" #: ../utils/scimkeyselection.cpp:229 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:234 msgid "Modifiers:" msgstr "修正符:" #: ../utils/scimkeyselection.cpp:251 msgid "_Ctrl" msgstr "_Ctrl(_C)" #: ../utils/scimkeyselection.cpp:255 msgid "A_lt" msgstr "A_lt(_l)" #: ../utils/scimkeyselection.cpp:259 msgid "_Shift" msgstr "_Shift(_S)" #: ../utils/scimkeyselection.cpp:263 msgid "_Release" msgstr "释放(_R)" #: ../utils/scimkeyselection.cpp:277 msgid "_Meta" msgstr "_Meta(_M)" #: ../utils/scimkeyselection.cpp:281 msgid "S_uper" msgstr "S_uper(_u)" #: ../utils/scimkeyselection.cpp:285 msgid "_Hyper" msgstr "_Hyper(_H)" #: ../utils/scimkeyselection.cpp:290 msgid "Ca_psLock" msgstr "" #: ../utils/scimkeyselection.cpp:361 msgid "Please enter a Key Code first." msgstr "请先输入一个键码。" #: ../utils/scimkeyselection.cpp:415 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "请按一个键或组合键。\n" "本对话窗会在按键释放时关闭。" #: ../utils/scimkeyselection.cpp:418 msgid "Grabbing a key." msgstr "捕捉按键" #: ../utils/scimkeyselection.cpp:723 msgid "Key Selection" msgstr "按键选择" #: ../utils/scimstringview.c:231 msgid "Cursor Position" msgstr "光标位置" #: ../utils/scimstringview.c:232 msgid "The current position of the insertion cursor in chars." msgstr "字符中嵌入光标的当前位置。" #: ../utils/scimstringview.c:241 msgid "Maximum length" msgstr "最大长度" #: ../utils/scimstringview.c:242 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "这个字符串视图的最大字符数。如果没有最大字符数,那就是零。" #: ../utils/scimstringview.c:251 msgid "Maximum width" msgstr "最大宽度" #: ../utils/scimstringview.c:252 msgid "Maximum width of this string view." msgstr "这个字符串视图的最大宽度。" #: ../utils/scimstringview.c:261 msgid "Has Frame" msgstr "有框架" #: ../utils/scimstringview.c:262 msgid "FALSE removes outside bevel from string view." msgstr "错误,删除字符串视图的外斜面" #: ../utils/scimstringview.c:269 msgid "Draw cursor" msgstr "绘制光标" #: ../utils/scimstringview.c:270 msgid "TRUE draw blinking cursor." msgstr "正确,绘制闪烁光标。" #: ../utils/scimstringview.c:277 msgid "Auto move cursor" msgstr "自动移动光标" #: ../utils/scimstringview.c:278 msgid "TRUE auto move cursor position when mouse clicking." msgstr "正确,点击鼠标时自动移动光标位置。" #: ../utils/scimstringview.c:285 msgid "Forward button press event" msgstr "传送按钮事件" #: ../utils/scimstringview.c:286 msgid "TRUE forward button press event to user program." msgstr "正确,将按钮事件传送给用户程序。" #: ../utils/scimstringview.c:293 msgid "Auto resize the widget to fit the string" msgstr "自动调整边框以适应字符串" #: ../utils/scimstringview.c:294 msgid "TRUE Auto resize on." msgstr "正确,打开自动调整。" #: ../utils/scimstringview.c:301 msgid "Width in chars" msgstr "字符宽度" #: ../utils/scimstringview.c:302 msgid "Number of characters to leave space for in the string view." msgstr "为字符串视图中保留的空白的字符数。" #: ../utils/scimstringview.c:311 msgid "Scroll offset" msgstr "滚动偏移" #: ../utils/scimstringview.c:312 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "字符串视图距屏幕左边的像素数" #: ../utils/scimstringview.c:321 msgid "Text" msgstr "文本" #: ../utils/scimstringview.c:322 msgid "The contents of the string view" msgstr "字符串视图的内容" #: ../utils/scimtrayicon.c:108 msgid "Orientation" msgstr "定位" #: ../utils/scimtrayicon.c:109 msgid "The orientation of the tray." msgstr "托盘定位。" scim-master/po/zh_TW.po000066400000000000000000001162041415264260100153200ustar00rootroot00000000000000# translation of zh_TW.po to Traditional Chinese # Jim Huang >, 2004, 2005, 2016 # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/scim\n" "POT-Creation-Date: 2016-06-12 05:46+0800\n" "PO-Revision-Date: 2016-06-11 17:05+0100\n" "Last-Translator: Jim Huang \n" "Language-Team: scim@freedesktop.org\n" "Language: zh-tw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1311 #: ../extras/panel/scim_panel_gtk.cpp:2759 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1849 msgid "Smart Common Input Method platform " msgstr "泛用智慧型輸入法平台" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1313 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1851 msgid "" "\n" "(C) 2002-2005 James Su \n" "\n" msgstr "" "\n" "(C) 2002-2005 蘇哲 \n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1318 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1855 msgid "" ":\n" "\n" msgstr "" ":\n" "\n" #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1321 #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1324 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1858 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1861 msgid "" "\n" "\n" msgstr "" "\n" "\n" #. Append an entry for forward mode. #: ../extras/gtk_immodule/gtkimcontextscim.cpp:1361 #: ../extras/panel/scim_panel_gtk.cpp:3355 #: ../modules/FrontEnd/scim_x11_frontend.cpp:1901 ../src/scim_imengine.cpp:638 #: ../src/scim_panel_agent.cpp:217 ../src/scim_panel_agent.cpp:218 #: ../src/scim_utility.cpp:703 msgid "English/Keyboard" msgstr "英文鍵盤" #: ../extras/panel/scim_panel_gtk.cpp:1145 msgid "SCIM Help" msgstr "輔助資訊" #: ../extras/panel/scim_panel_gtk.cpp:1148 #: ../modules/SetupUI/scim_imengine_setup.cpp:1479 #: ../utils/scimkeyselection.cpp:790 msgid "_OK" msgstr "確認(_O)" #: ../extras/panel/scim_panel_gtk.cpp:1245 #: ../extras/panel/scim_panel_gtk.cpp:1248 msgid "Stick/unstick the input window and the toolbar." msgstr "固定/釋開 輸入視窗和工具列。" #: ../extras/panel/scim_panel_gtk.cpp:1255 #: ../extras/panel/scim_panel_gtk.cpp:1258 msgid "Show a brief help about SCIM and the current input method." msgstr "顯示關於 SCIM 和目前輸入法的精簡說明。" #: ../extras/panel/scim_panel_gtk.cpp:1264 #: ../extras/panel/scim_panel_gtk.cpp:1267 msgid "Show command menu." msgstr "顯示指令選單." #: ../extras/panel/scim_panel_gtk.cpp:2761 msgid "" "\n" "(C) 2002-2005 James Su " msgstr "" "\n" "(c) 2002-2005 蘇哲 " #: ../extras/panel/scim_panel_gtk.cpp:2858 msgid "Reload Configuration" msgstr "重新載入設定值" #. Stick #: ../extras/panel/scim_panel_gtk.cpp:2871 msgid "Stick Windows" msgstr "固定視窗" #. Toolbar #: ../extras/panel/scim_panel_gtk.cpp:2880 msgid "Hide Toolbar" msgstr "隱藏工具列" #: ../extras/panel/scim_panel_gtk.cpp:2895 msgid "Help ..." msgstr "輔助 ..." #: ../extras/panel/scim_panel_gtk.cpp:2922 msgid "Exit" msgstr "離開" #. #. vi:ts=4:nowrap:expandtab #. #: ../extras/setup/scim-setup.desktop.in.h:1 msgid "SCIM Input Method" msgstr "SCIM 輸入法框架" #: ../extras/setup/scim-setup.desktop.in.h:2 msgid "Configure the Smart Common Input Method platform" msgstr "SCIM 組態設定" #: ../extras/setup/scim_setup_helper.cpp:49 msgid "SCIM Setup" msgstr "SCIM 設定" #: ../extras/setup/scim_setup_helper.cpp:51 msgid "Integrated Setup Utility based on GTK Widget library." msgstr "以 GTK+ 撰寫的整合設定工具。" #: ../extras/setup/scim_setup_ui.cpp:47 msgid "SCIM" msgstr "SCIM" #: ../extras/setup/scim_setup_ui.cpp:48 msgid "FrontEnd" msgstr "介面(前端)" #: ../extras/setup/scim_setup_ui.cpp:49 msgid "IMEngine" msgstr "輸入法引擎" #: ../extras/setup/scim_setup_ui.cpp:50 msgid "Panel" msgstr "面板" #: ../extras/setup/scim_setup_ui.cpp:51 msgid "Extra" msgstr "附加項目" #: ../extras/setup/scim_setup_ui.cpp:230 msgid "SCIM Input Method Setup" msgstr "SCIM 輸入法設定" #: ../extras/setup/scim_setup_ui.cpp:423 msgid "" " Smart Common Input Method platform \n" "\n" "GUI Setup Utility\n" "\n" "\n" "\n" "Copyright 2002-2004, James Su <suzhe@tsinghua.org." "cn>" msgstr "" " 泛用智慧型輸入法平台 \n" "\n" "圖形介面設定工具\n" "\n" "\n" "\n" "版權所有 2002-2004, 蘇哲 <suzhe@tsinghua.org.cn>" #: ../extras/setup/scim_setup_ui.cpp:452 #, c-format msgid "The Setup for %s modules." msgstr "%s 模組的設定。" #: ../extras/setup/scim_setup_ui.cpp:732 msgid "" "Not all configuration can be reloaded on the fly. Don't forget to restart " "SCIM in order to let all of the new configuration take effect." msgstr "並非所有設定都可以立即生效。別忘了重新啟動 SCIM 來讓新的設定生效。" #: ../modules/Filter/scim_sctc_filter.cpp:57 msgid "Simplified-Traditional Chinese Conversion" msgstr "繁簡體中文轉換" #: ../modules/Filter/scim_sctc_filter.cpp:60 msgid "Convert between Simplified Chinese and Traditional Chinese" msgstr "繁簡體中文互轉" #: ../modules/Filter/scim_sctc_filter.cpp:71 msgid "SC-TC" msgstr "繁簡體轉換" #: ../modules/Filter/scim_sctc_filter.cpp:73 #: ../modules/Filter/scim_sctc_filter.cpp:78 msgid "Simplified-Traditional Chinese conversion" msgstr "繁簡體中文轉換" #: ../modules/Filter/scim_sctc_filter.cpp:76 msgid "No Conversion" msgstr "不轉換" #: ../modules/Filter/scim_sctc_filter.cpp:81 msgid "Simplified to Traditional" msgstr "簡體轉繁體中文" #: ../modules/Filter/scim_sctc_filter.cpp:83 msgid "Convert Simplified Chinese to Traditional Chinese" msgstr "轉換簡體中文為繁體中文" #: ../modules/Filter/scim_sctc_filter.cpp:86 msgid "Traditional to Simplified" msgstr "繁體轉簡體中文" #: ../modules/Filter/scim_sctc_filter.cpp:88 msgid "Convert Traditional Chinese to Simplified Chinese" msgstr "轉換繁體中文為簡體中文" #: ../modules/Filter/scim_sctc_filter.cpp:300 msgid "James Su " msgstr "蘇哲 " #: ../modules/Filter/scim_sctc_filter.cpp:425 #: ../modules/Filter/scim_sctc_filter.cpp:555 #: ../modules/Filter/scim_sctc_filter.cpp:571 msgid "SC->TC" msgstr "簡轉繁體" #: ../modules/Filter/scim_sctc_filter.cpp:431 #: ../modules/Filter/scim_sctc_filter.cpp:559 #: ../modules/Filter/scim_sctc_filter.cpp:575 msgid "TC->SC" msgstr "繁轉簡體" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:120 msgid "RAW CODE" msgstr "內碼輸入" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:127 msgid "(C) 2002-2006 James Su " msgstr "(C) 2002-2006 蘇哲 " #: ../modules/IMEngine/scim_rawcode_imengine.cpp:140 msgid "" "Hot Keys:\n" "\n" " Control+u:\n" " switch between Multibyte encoding and Unicode.\n" "\n" " Esc:\n" " reset the input method.\n" msgstr "" "快捷鍵:\n" "\n" " Control+u:\n" " 切換地區編碼和 Unicode 編碼。\n" "\n" " Esc:\n" " 重設輸入法。\n" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:407 #: ../modules/IMEngine/scim_rawcode_imengine.cpp:423 msgid "The status of the current input method. Click to change it." msgstr "目前輸入法的模式狀態,滑鼠點選可切換模式。" #: ../modules/IMEngine/scim_rawcode_imengine.cpp:409 msgid "Unicode" msgstr "Unicode" #: ../modules/IMEngine/scim_socket_imengine.cpp:386 #: ../modules/IMEngine/scim_socket_imengine.cpp:416 #: ../modules/IMEngine/scim_socket_imengine.cpp:501 #: ../modules/IMEngine/scim_socket_imengine.cpp:531 #: ../modules/IMEngine/scim_socket_imengine.cpp:561 #: ../src/scim_keyboard_layout_data.h:4591 msgid "Unknown" msgstr "未知" #: ../modules/SetupUI/scim_frontend_setup.cpp:82 #: ../modules/SetupUI/scim_imengine_setup.cpp:88 msgid "Global Setup" msgstr "全域設定" #: ../modules/SetupUI/scim_frontend_setup.cpp:87 msgid "" "Setup the global options used by All FrontEnd modules, including X11 " "FrontEnd, GTK IMModule, QT IMModule etc." msgstr "" "調整所有介面模組的共通設定,包含 X11 介面、GTK+ IMModule、Qt IMModule 等" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:146 msgid "_Trigger:" msgstr "作用鍵(_T):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:148 msgid "Select the trigger keys" msgstr "選擇輸入法的作用鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:150 msgid "" "The key events to turn on/off SCIM input method. Click on the button on the " "right to edit it." msgstr "用來 開啟/關閉 SCIM 輸入法的作用鍵,點壓該按鈕後可編輯。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:163 msgid "Turn _On:" msgstr "開啟(_O)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:165 msgid "Select the Turn On keys" msgstr "選擇開啟 SCIM 按鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:167 msgid "" "The key events to turn on SCIM input method. Click on the button on the " "right to edit it." msgstr "用來開啟 SCIM 輸入法,點壓該按鈕後可編輯。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:180 msgid "Turn O_ff:" msgstr "關閉 (_F)" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:182 msgid "Select the Turn Off keys" msgstr "選擇關閉 SCIM 按鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:184 msgid "" "The key events to turn off SCIM input method. Click on the button on the " "right to edit it." msgstr "用來關閉 SCIM 輸入法,點壓該按鈕後可編輯。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:197 msgid "_Next input method:" msgstr "下一種輸入法(_N):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:199 msgid "Select the next input method keys" msgstr "選擇下一種輸入法按鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:201 msgid "" "The key events to switch to the next input method. Click on the button on " "the right to edit it." msgstr "用來切換至下一種輸入法的按鍵,按鈕上滑鼠點選可編輯。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:216 msgid "_Previous input method:" msgstr "上一種輸入法(_P):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:218 msgid "Select the previous input method keys" msgstr "選擇上一種輸入法按鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:220 msgid "" "The key events to switch to the previous input method. Click on the button " "on the right to edit it." msgstr "用來切換至上一種輸入法的按鍵,點壓按鈕後可編輯。" #. label #: ../modules/SetupUI/scim_frontend_setup.cpp:235 msgid "Show input method _menu:" msgstr "顯示輸入法選單(_M):" #. title #: ../modules/SetupUI/scim_frontend_setup.cpp:237 msgid "Select the show input method menu keys" msgstr "選擇顯示輸入法選單按鍵" #. tooltip #: ../modules/SetupUI/scim_frontend_setup.cpp:239 msgid "" "The key events to show the input method menu. Click on the button on the " "right to edit it." msgstr "用來顯示輸入法選單的按鍵,點壓按鈕後可編輯。" #: ../modules/SetupUI/scim_frontend_setup.cpp:316 msgid "Options" msgstr "選項設定" #: ../modules/SetupUI/scim_frontend_setup.cpp:339 msgid "_Keyboard Layout:" msgstr "鍵盤排列(_K):" #: ../modules/SetupUI/scim_frontend_setup.cpp:369 #: ../modules/SetupUI/scim_frontend_setup.cpp:373 msgid "" "You should choose your currently used keyboard layout here so that input " "methods, who care about keyboard layout, could work correctly." msgstr "您應適當挑選鍵盤排列方式,這樣輸入法才能正確運作。" #. On The Spot. #: ../modules/SetupUI/scim_frontend_setup.cpp:378 msgid "_Embed Preedit String into client window" msgstr "在輸入法客戶端視窗嵌入預先編輯字串(_E)" #: ../modules/SetupUI/scim_frontend_setup.cpp:384 #: ../modules/SetupUI/scim_frontend_setup.cpp:389 msgid "" "If this option is checked, the preedit string will be displayed directly in " "the client input window, rather than in a independent float window." msgstr "" "如果勾取這個選項,預先編輯字串將會直接顯示於輸入法客戶端,而非出現於獨立的浮" "動視窗" #. Shared input method. #: ../modules/SetupUI/scim_frontend_setup.cpp:399 msgid "_Share the same input method among all applications" msgstr "在所有的應用程式共享同樣的輸入法(_S)" #: ../modules/SetupUI/scim_frontend_setup.cpp:405 #: ../modules/SetupUI/scim_frontend_setup.cpp:410 msgid "" "If this option is checked, then only one input method could be used by all " "applications at the same time.Otherwise different input method could be used " "by each application." msgstr "" "如果啟用本選項,所有應用程式在一時間將只會有一個輸入法,否則個別的應用程式可" "以使用不同的輸入法。" #: ../modules/SetupUI/scim_frontend_setup.cpp:419 #: ../modules/SetupUI/scim_imengine_setup.cpp:508 msgid "Hotkeys" msgstr "快速鍵" #: ../modules/SetupUI/scim_imengine_setup.cpp:93 msgid "" "You can enable/disable input methods and set hotkeys for input methods here." msgstr "你可在此開啟或關閉已安裝的輸入法,並設定快速鍵" #: ../modules/SetupUI/scim_imengine_setup.cpp:306 msgid "The installed input method services:" msgstr "已安裝的輸入法服務:" #. Create hotkey and filter button before factory list view, because #. factory_list_selection_changed_callback may access these two buttons. #: ../modules/SetupUI/scim_imengine_setup.cpp:326 msgid "Edit _Hotkeys" msgstr "編輯快速鍵(_H)" #: ../modules/SetupUI/scim_imengine_setup.cpp:336 #: ../modules/SetupUI/scim_imengine_setup.cpp:339 msgid "Edit Hotkeys associated with the selected input method." msgstr "編輯所選取輸入法關連的快速鍵" #: ../modules/SetupUI/scim_imengine_setup.cpp:342 msgid "Select _Filters" msgstr "選定的轉換過濾器(_F)" #: ../modules/SetupUI/scim_imengine_setup.cpp:352 #: ../modules/SetupUI/scim_imengine_setup.cpp:355 msgid "Select the Filters which will be attached to this input method." msgstr "選擇施加到輸入法的轉換過濾器" #: ../modules/SetupUI/scim_imengine_setup.cpp:381 msgid "_Expand" msgstr "展開(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:391 #: ../modules/SetupUI/scim_imengine_setup.cpp:394 msgid "Expand all language categories." msgstr "展開所有語言目錄" #: ../modules/SetupUI/scim_imengine_setup.cpp:397 msgid "_Collapse" msgstr "折疊(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:407 #: ../modules/SetupUI/scim_imengine_setup.cpp:410 msgid "Collapse all language categories." msgstr "折疊所有語言目錄" #: ../modules/SetupUI/scim_imengine_setup.cpp:413 msgid "E_nable All" msgstr "使用所有的輸入法(_E)" #: ../modules/SetupUI/scim_imengine_setup.cpp:423 #: ../modules/SetupUI/scim_imengine_setup.cpp:426 msgid "Enable all input methods." msgstr "使用所有輸入法" #: ../modules/SetupUI/scim_imengine_setup.cpp:429 msgid "_Disable All" msgstr "停用所有輸入法(_D)" #: ../modules/SetupUI/scim_imengine_setup.cpp:439 #: ../modules/SetupUI/scim_imengine_setup.cpp:442 msgid "Disable all input methods." msgstr "停用所有輸入法" #: ../modules/SetupUI/scim_imengine_setup.cpp:469 #: ../modules/SetupUI/scim_imengine_setup.cpp:598 msgid "Name" msgstr "名稱" #: ../modules/SetupUI/scim_imengine_setup.cpp:487 #: ../modules/SetupUI/scim_imengine_setup.cpp:579 msgid "Enable" msgstr "開啟" #: ../modules/SetupUI/scim_imengine_setup.cpp:522 msgid "Filters" msgstr "轉換過濾器" #: ../modules/SetupUI/scim_imengine_setup.cpp:617 msgid "Languages" msgstr "語文" #: ../modules/SetupUI/scim_imengine_setup.cpp:631 msgid "Description" msgstr "描述" #: ../modules/SetupUI/scim_imengine_setup.cpp:1247 #, c-format msgid "Edit Hotkeys for %s" msgstr "編輯 %s 的快速鍵" #: ../modules/SetupUI/scim_imengine_setup.cpp:1474 #, c-format msgid "Select Filters for %s" msgstr "編輯 %s 的轉換過濾器" #: ../modules/SetupUI/scim_imengine_setup.cpp:1480 #: ../utils/scimkeyselection.cpp:782 msgid "_Cancel" msgstr "取消(_C)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1530 msgid "Move _Up" msgstr "上移(_U)" #: ../modules/SetupUI/scim_imengine_setup.cpp:1537 msgid "Move _Down" msgstr "下移(_D)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:95 msgid "GTK" msgstr "GTK+" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:100 msgid "A panel daemon based on GTK+-2.x library." msgstr "一個使用 GTK+-2.x 撰寫的操控面板背景程式。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:166 msgid "Always" msgstr "永遠" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:167 msgid "On demand" msgstr "需要時" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:168 msgid "Never" msgstr "從不" #. Create the ToolBar setup block. #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:221 msgid "ToolBar" msgstr "工具列" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:254 msgid "_Show:" msgstr "顯示(_S):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:285 msgid "Auto s_nap" msgstr "自動靠邊(_N)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:288 msgid "Show _input method icon" msgstr "顯示輸入法圖示(_I)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:291 msgid "Show inp_ut method name" msgstr "顯示輸入法名稱(_U)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:333 msgid "Hide time_out:" msgstr "逾時隱藏(_O):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:351 msgid "Show s_tick icon" msgstr "顯示固定圖示(_T)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:354 msgid "Show m_enu icon" msgstr "顯示選單圖示(_E)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:357 msgid "Show _help icon" msgstr "顯示輔助圖示(_H)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:360 msgid "Show _property label" msgstr "顯示屬性名稱(_P)" #. Create the Input Window setup block #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:399 msgid "Input window" msgstr "輸入視窗" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:412 msgid "E_mbedded lookup table" msgstr "嵌入式選詞列表(_M)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:416 msgid "_Vertical lookup table" msgstr "垂直式選詞列表(_V)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:420 msgid "Misc" msgstr "其它" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:433 msgid "Show tra_y icon" msgstr "顯示系統列圖示(_Y)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:437 msgid "Stick _windows" msgstr "固定視窗(_W)" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:449 msgid "_Font:" msgstr "字形(_F):" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:525 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:593 msgid "" "If option \"Always\" is selected, the toolbar will always be shown on the " "screen. If option \"On demand\" is selected, it will only be shown when SCIM " "is activated. If option \"Never\" is selected, it will never be shown." msgstr "" "如果選取「永遠」選項,工具列將永遠顯示在螢幕上。如果選取「需要時」選項,則只" "有當 SCIM 被啟用時才會顯示工具列。如果選取「從不」選項,則永遠不會顯示工具" "列。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:532 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:600 msgid "" "If this option is checked, the toolbar will be snapped to the screen border." msgstr "如果勾取這個選項,工具列將緊黏在螢幕邊緣。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:538 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:606 msgid "" "The toolbar will be hidden out after this timeout is elapsed. This option is " "only valid when \"Always show\" is selected. Set to zero to disable this " "behavior." msgstr "" "在經過一定時間後,工具列將被隱藏起來,該選項只在選取「永遠顯示」時才會作用。" "當設定值為 0 時,將關閉此功能。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:545 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:613 msgid "" "If this option is checked, the input method icon will be showed on the " "toolbar." msgstr "如果勾取這個選項,輸入法圖示將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:549 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:617 msgid "" "If this option is checked, the input method name will be showed on the " "toolbar." msgstr "如果勾取這個選項,輸入法名稱將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:553 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:621 msgid "" "If this option is checked, the stick icon will be showed on the toolbar." msgstr "如果勾取這個選項,固定圖示將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:557 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:625 msgid "If this option is checked, the menu icon will be showed on the toolbar." msgstr "如果勾取這個選項,選單圖示將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:561 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:629 msgid "If this option is checked, the help icon will be showed on the toolbar." msgstr "如果勾取這個選項,輔助圖示將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:565 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:633 msgid "" "If this option is checked, the text label of input method properties will be " "showed on the toolbar." msgstr "如果勾取這個選項,輸入法屬性的名稱將顯示在工具列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:569 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:637 msgid "" "If this option is checked, the lookup table will be embedded into the input " "window." msgstr "如果勾取這個選項,選詞列表將出現在輸入視窗中。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:574 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:642 msgid "" "If this option is checked, the lookup table will be displayed vertically." msgstr "如果勾取這個選項,選詞列表將垂直顯示。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:579 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:647 msgid "" "If this option is checked, the tray icon will be showed on the desktop's " "taskbar." msgstr "如果勾取這個選項,系統圖示將顯示在桌面的工作列上。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:583 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:651 msgid "" "If this option is checked, the toolbar, input and lookup table windows will " "be sticked to its original position." msgstr "如果勾取這個選項,則輸入和選詞列表視窗將停留在它們的原本位置。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:589 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:657 msgid "The font setting will be used in the input and lookup table windows." msgstr "該字形設定將套用於輸入和選詞列表視窗。" #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:979 #: ../modules/SetupUI/scim_panel_gtk_setup.cpp:1004 msgid "Select Interface Font" msgstr "選擇介面字形" #: ../src/scim_compose_key.cpp:128 msgid "English/European" msgstr "英文/歐洲語文" #. bail out: can't continue without the helper #: ../src/scim_helper_manager.cpp:134 msgid "Failed to launch HelperManager: exiting..." msgstr "無法啟動 HelperManager: 即將關閉" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_helper_manager.cpp:184 ../src/scim_helper_manager.cpp:189 #: ../src/scim_helper_manager.cpp:194 msgid "Error launching HelperManager" msgstr "無法啟動 HelperManager" #: ../src/scim_helper_manager.cpp:162 ../src/scim_helper_manager.cpp:178 #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "failed" msgstr "失敗" #: ../src/scim_helper_manager.cpp:184 msgid "abnormal process termination" msgstr "不正常的程式終結" #: ../src/scim_helper_manager.cpp:190 msgid "it exited with signal" msgstr "" #: ../src/scim_helper_manager.cpp:194 msgid "unknown process launch error" msgstr "未知的程式啟動錯誤" #: ../src/scim_keyboard_layout_data.h:4592 msgid "English (US)" msgstr "英文" #: ../src/scim_keyboard_layout_data.h:4593 msgid "Belgian" msgstr "比利時語" #: ../src/scim_keyboard_layout_data.h:4594 ../src/scim_utility.cpp:744 msgid "Croatian" msgstr "克羅埃西亞語" #: ../src/scim_keyboard_layout_data.h:4595 ../src/scim_utility.cpp:718 msgid "Czech" msgstr "捷克語" #: ../src/scim_keyboard_layout_data.h:4596 msgid "Czech (qwerty)" msgstr "捷克(標準鍵盤)" #: ../src/scim_keyboard_layout_data.h:4597 ../src/scim_utility.cpp:720 msgid "Danish" msgstr "丹麥語" #: ../src/scim_keyboard_layout_data.h:4598 ../src/scim_utility.cpp:768 msgid "Dutch" msgstr "荷蘭文" #: ../src/scim_keyboard_layout_data.h:4599 msgid "Dvorak" msgstr "Dvorak" #: ../src/scim_keyboard_layout_data.h:4600 ../src/scim_utility.cpp:734 msgid "Estonian" msgstr "愛沙尼亞語" #: ../src/scim_keyboard_layout_data.h:4601 ../src/scim_utility.cpp:737 msgid "Finnish" msgstr "芬蘭文" #: ../src/scim_keyboard_layout_data.h:4602 ../src/scim_utility.cpp:738 msgid "French" msgstr "法文" #: ../src/scim_keyboard_layout_data.h:4603 msgid "French (Canadian)" msgstr "法文(加拿大)" #: ../src/scim_keyboard_layout_data.h:4604 msgid "French (Switzerland)" msgstr "法文(瑞士)" #: ../src/scim_keyboard_layout_data.h:4605 ../src/scim_utility.cpp:721 msgid "German" msgstr "德文" #: ../src/scim_keyboard_layout_data.h:4606 msgid "German (with deadkeys)" msgstr "德文(有deadkeys)" #: ../src/scim_keyboard_layout_data.h:4607 msgid "German (Swiss)" msgstr "德文(瑞士)" #: ../src/scim_keyboard_layout_data.h:4608 ../src/scim_utility.cpp:723 msgid "Greek" msgstr "希臘文" #: ../src/scim_keyboard_layout_data.h:4609 ../src/scim_utility.cpp:745 msgid "Hungarian" msgstr "匈牙利文" #: ../src/scim_keyboard_layout_data.h:4610 ../src/scim_utility.cpp:750 msgid "Italian" msgstr "義大利文" #: ../src/scim_keyboard_layout_data.h:4611 ../src/scim_utility.cpp:752 msgid "Japanese" msgstr "日文" #: ../src/scim_keyboard_layout_data.h:4612 msgid "Norwegian" msgstr "挪威語" #: ../src/scim_keyboard_layout_data.h:4613 ../src/scim_utility.cpp:773 msgid "Polish" msgstr "波蘭文" #: ../src/scim_keyboard_layout_data.h:4614 ../src/scim_utility.cpp:774 #: ../src/scim_utility.cpp:776 msgid "Portuguese" msgstr "葡萄牙文" #: ../src/scim_keyboard_layout_data.h:4615 ../src/scim_utility.cpp:775 msgid "Portuguese (Brazil)" msgstr "葡萄牙文(巴西)" #: ../src/scim_keyboard_layout_data.h:4616 msgid "Portuguese (Brazil US accents)" msgstr "葡萄牙文(巴西、美式發音)" #: ../src/scim_keyboard_layout_data.h:4617 ../src/scim_utility.cpp:778 msgid "Russian" msgstr "俄文" #: ../src/scim_keyboard_layout_data.h:4618 ../src/scim_utility.cpp:782 msgid "Slovak" msgstr "斯洛伐克語" #: ../src/scim_keyboard_layout_data.h:4619 msgid "Slovak (qwerty)" msgstr "斯洛伐克語(標準鍵盤)" #: ../src/scim_keyboard_layout_data.h:4620 ../src/scim_utility.cpp:783 msgid "Slovenian" msgstr "斯洛文尼亞語" #: ../src/scim_keyboard_layout_data.h:4621 ../src/scim_utility.cpp:731 #: ../src/scim_utility.cpp:732 msgid "Spanish" msgstr "西班牙文" #: ../src/scim_keyboard_layout_data.h:4622 msgid "Spanish (CP 850)" msgstr "西班牙文(CP 850)" #: ../src/scim_keyboard_layout_data.h:4623 msgid "Spanish (Latin America)" msgstr "西班牙文(拉丁美洲)" #: ../src/scim_keyboard_layout_data.h:4624 ../src/scim_utility.cpp:788 #: ../src/scim_utility.cpp:790 msgid "Swedish" msgstr "瑞典語" #: ../src/scim_keyboard_layout_data.h:4625 ../src/scim_utility.cpp:794 msgid "Turkish" msgstr "土耳其文" #: ../src/scim_keyboard_layout_data.h:4626 msgid "English (UK)" msgstr "英式英文" #: ../src/scim_keyboard_layout_data.h:4627 ../src/scim_utility.cpp:749 msgid "Icelandic" msgstr "冰島語" #: ../src/scim_keyboard_layout_data.h:4628 ../src/scim_utility.cpp:759 msgid "Lithuanian" msgstr "立陶宛文" #: ../src/scim_keyboard_layout_data.h:4629 ../src/scim_utility.cpp:796 msgid "Ukrainian" msgstr "烏克蘭語" #. NOTE another instance of the server is running: we can't just keep running like this #. if we attempt to bind anyway there may be more than one servers listening on this socket. #. In addition on FreeBSD bind will get EADDRINUSE, not clear why Linux doesn;t produce this same error. #: ../src/scim_socket.cpp:475 ../src/scim_socket.cpp:483 #: ../src/scim_socket.cpp:491 ../src/scim_socket.cpp:509 msgid "Creating socket" msgstr "建立通訊管道" #: ../src/scim_socket.cpp:476 msgid "file exists and we were unable to delete it" msgstr "檔案已存在,而且無法刪去" #: ../src/scim_socket.cpp:476 ../src/scim_socket.cpp:510 msgid "syscall" msgstr "系統呼叫" #: ../src/scim_socket.cpp:478 ../src/scim_socket.cpp:484 #: ../src/scim_socket.cpp:492 msgid "exiting" msgstr "離開" #: ../src/scim_socket.cpp:484 msgid "file exists and is not a socket" msgstr "檔案已存在而且並非合法的通訊管道" #: ../src/scim_socket.cpp:492 msgid "another instance of the server is already listening on this socket" msgstr "另一個程式實體正佔用這個通訊管道" #: ../src/scim_socket.cpp:510 msgid "unable to change the mode of this file" msgstr "無法變更本檔案的模式" #: ../src/scim_socket.cpp:511 msgid "continuing" msgstr "繼續處理" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "Error creating socket" msgstr "無法建立通訊管道" #: ../src/scim_socket.cpp:519 ../src/scim_socket.cpp:535 #: ../src/scim_socket.cpp:589 msgid "syscall failed" msgstr "系統呼叫失敗" #: ../src/scim_utility.cpp:704 msgid "Amharic" msgstr "阿姆哈拉語" #: ../src/scim_utility.cpp:705 msgid "Arabic" msgstr "阿拉伯文" #: ../src/scim_utility.cpp:706 msgid "Arabic (Egypt)" msgstr "阿拉伯文(埃及)" #: ../src/scim_utility.cpp:707 msgid "Arabic (Lebanon)" msgstr "阿拉伯文(黎巴嫩)" #: ../src/scim_utility.cpp:708 msgid "Assamese" msgstr "阿薩姆語" #: ../src/scim_utility.cpp:709 msgid "Azerbaijani" msgstr "亞賽拜然語" #: ../src/scim_utility.cpp:710 msgid "Belarusian" msgstr "白俄羅斯語" #: ../src/scim_utility.cpp:711 msgid "Bulgarian" msgstr "保加利亞語" #: ../src/scim_utility.cpp:712 ../src/scim_utility.cpp:713 msgid "Bengali" msgstr "孟加拉語" #: ../src/scim_utility.cpp:714 msgid "Bengali (India)" msgstr "孟加拉語(印度)" #: ../src/scim_utility.cpp:715 msgid "Tibetan" msgstr "藏語" #: ../src/scim_utility.cpp:716 msgid "Bosnian" msgstr "波斯尼亞語" #: ../src/scim_utility.cpp:717 msgid "Catalan" msgstr "加泰羅尼亞語" #: ../src/scim_utility.cpp:719 msgid "Welsh" msgstr "威爾斯語" #: ../src/scim_utility.cpp:722 msgid "Divehi" msgstr "迪韋西語" #: ../src/scim_utility.cpp:724 msgid "English" msgstr "英文" #: ../src/scim_utility.cpp:725 msgid "English (Australian)" msgstr "英文(澳洲)" #: ../src/scim_utility.cpp:726 msgid "English (Canadian)" msgstr "英文(加拿大)" #: ../src/scim_utility.cpp:727 msgid "English (British)" msgstr "英文(英國)" #: ../src/scim_utility.cpp:728 msgid "English (Ireland)" msgstr "英文(愛爾蘭)" #: ../src/scim_utility.cpp:729 msgid "English (American)" msgstr "美式英文" #: ../src/scim_utility.cpp:730 msgid "Esperanto" msgstr "世界語" #: ../src/scim_utility.cpp:733 msgid "Spanish (Mexico)" msgstr "西班牙文(墨西哥)" #: ../src/scim_utility.cpp:735 msgid "Basque" msgstr "巴斯克語" #: ../src/scim_utility.cpp:736 msgid "Persian" msgstr "波斯語" #: ../src/scim_utility.cpp:739 msgid "Irish" msgstr "愛爾蘭語" #: ../src/scim_utility.cpp:740 msgid "Galician" msgstr "加利西亞語" #: ../src/scim_utility.cpp:741 msgid "Gujarati" msgstr "古吉拉特語" #: ../src/scim_utility.cpp:742 ../src/scim_utility.cpp:751 msgid "Hebrew" msgstr "希伯來文" #: ../src/scim_utility.cpp:743 msgid "Hindi" msgstr "北印度文" #: ../src/scim_utility.cpp:746 msgid "Armenian" msgstr "亞美尼亞語" #: ../src/scim_utility.cpp:747 msgid "Interlingua" msgstr "世界語" #: ../src/scim_utility.cpp:748 msgid "Indonesian" msgstr "印尼語" #: ../src/scim_utility.cpp:753 msgid "Georgian" msgstr "喬治亚語" #: ../src/scim_utility.cpp:754 msgid "Kazakh" msgstr "哈薩克語" #: ../src/scim_utility.cpp:755 msgid "Cambodian" msgstr "柬埔寨文" #: ../src/scim_utility.cpp:756 msgid "Kannada" msgstr "卡納達語" #: ../src/scim_utility.cpp:757 msgid "Korean" msgstr "韓文" #: ../src/scim_utility.cpp:758 msgid "Laothian" msgstr "老撾語" #: ../src/scim_utility.cpp:760 msgid "Latvian" msgstr "拉脫維亞語" #: ../src/scim_utility.cpp:761 msgid "Macedonian" msgstr "馬其頓語" #: ../src/scim_utility.cpp:762 msgid "Malayalam" msgstr "馬拉雅拉姆語" #: ../src/scim_utility.cpp:763 msgid "Mongolian" msgstr "蒙古文" #: ../src/scim_utility.cpp:764 msgid "Marathi" msgstr "馬拉地語" #: ../src/scim_utility.cpp:765 msgid "Malay" msgstr "馬來語" #: ../src/scim_utility.cpp:766 msgid "Burmese" msgstr "緬甸語" #: ../src/scim_utility.cpp:767 msgid "Nepali" msgstr "尼泊爾語" #: ../src/scim_utility.cpp:769 msgid "Norwegian (nynorsk)" msgstr "新挪威語(nynorsk)" #: ../src/scim_utility.cpp:770 msgid "Norwegian (bokmal)" msgstr "書面挪威語(bokmal)" #: ../src/scim_utility.cpp:771 msgid "Oriya" msgstr "奧里雅語" #: ../src/scim_utility.cpp:772 msgid "Punjabi" msgstr "旁遮普語" #: ../src/scim_utility.cpp:777 msgid "Romanian" msgstr "羅馬尼亞語" #: ../src/scim_utility.cpp:779 ../src/scim_utility.cpp:780 msgid "Sindhi" msgstr "信德語" #: ../src/scim_utility.cpp:781 msgid "Sinhala" msgstr "僧伽羅語" #: ../src/scim_utility.cpp:784 msgid "Albanian" msgstr "亞爾巴尼亞語" #: ../src/scim_utility.cpp:785 ../src/scim_utility.cpp:786 #: ../src/scim_utility.cpp:787 msgid "Serbian" msgstr "塞爾維亞語" #: ../src/scim_utility.cpp:789 msgid "Swedish (Finland)" msgstr "瑞典語(芬蘭)" #: ../src/scim_utility.cpp:791 msgid "Tamil" msgstr "塔米爾語" #: ../src/scim_utility.cpp:792 msgid "Telugu" msgstr "泰盧固語" #: ../src/scim_utility.cpp:793 msgid "Thai" msgstr "泰文" #: ../src/scim_utility.cpp:795 msgid "Uighur" msgstr "維吾爾語" #: ../src/scim_utility.cpp:797 msgid "Urdu" msgstr "烏爾都語(巴基斯坦)" #: ../src/scim_utility.cpp:798 msgid "Uzbek" msgstr "烏玆別克語" #: ../src/scim_utility.cpp:799 msgid "Vietnamese" msgstr "越南文" #: ../src/scim_utility.cpp:800 msgid "Walloon" msgstr "華隆語" #: ../src/scim_utility.cpp:801 ../src/scim_utility.cpp:802 msgid "Yiddish" msgstr "依地語" #: ../src/scim_utility.cpp:803 msgid "Chinese" msgstr "中文" #: ../src/scim_utility.cpp:804 ../src/scim_utility.cpp:806 msgid "Chinese (simplified)" msgstr "簡體中文" #: ../src/scim_utility.cpp:805 ../src/scim_utility.cpp:807 msgid "Chinese (traditional)" msgstr "繁體中文" #: ../src/scim_utility.cpp:889 msgid "Other" msgstr "其它語文" #: ../tests/scim_test_helper.cpp:49 msgid "Test" msgstr "測試" #: ../tests/scim_test_helper.cpp:51 msgid "A test helper." msgstr "測試用的輔助程式" #: ../tests/scim_test_imengine.cpp:56 msgid "zh_CN,zh_TW,zh_HK,zh_SG,ja_JP,ko_KR" msgstr "" #: ../tests/scim_test_imengine.cpp:102 msgid "TEST" msgstr "測試" #: ../tests/scim_test_imengine.cpp:109 msgid "(C) 2002-2004 James Su " msgstr "(C) 2002-2004 蘇哲 " #: ../utils/scimkeyselection.cpp:171 msgid "Selected _Keys:" msgstr "選定的按鍵(_K):" #: ../utils/scimkeyselection.cpp:222 msgid "Key Code:" msgstr "鍵值:" #: ../utils/scimkeyselection.cpp:259 msgid "..." msgstr "..." #: ../utils/scimkeyselection.cpp:264 msgid "Modifiers:" msgstr "作用鍵:" #: ../utils/scimkeyselection.cpp:296 msgid "_Ctrl" msgstr "_Ctrl" #: ../utils/scimkeyselection.cpp:300 msgid "A_lt" msgstr "A_lt" #: ../utils/scimkeyselection.cpp:304 msgid "_Shift" msgstr "_Shift" #: ../utils/scimkeyselection.cpp:308 msgid "_Release" msgstr "放開(_R)" #: ../utils/scimkeyselection.cpp:327 msgid "_Meta" msgstr "_Meta" #: ../utils/scimkeyselection.cpp:331 msgid "S_uper" msgstr "S_uper" #: ../utils/scimkeyselection.cpp:335 msgid "_Hyper" msgstr "_Hyper" #: ../utils/scimkeyselection.cpp:340 msgid "Ca_psLock" msgstr "Ca_psLock" #: ../utils/scimkeyselection.cpp:419 msgid "Please enter a Key Code first." msgstr "請先輸入一個鍵值。" #: ../utils/scimkeyselection.cpp:473 msgid "" "Press a key (or a key combination).\n" "This dialog will be closed when the key is released." msgstr "" "請按一個按鍵或組合鍵。\n" "本對話框會在按鍵釋放時關閉。" #: ../utils/scimkeyselection.cpp:476 msgid "Grabbing a key." msgstr "捕捉按鍵" #: ../utils/scimkeyselection.cpp:798 msgid "Key Selection" msgstr "選擇按鍵" #: ../utils/scimstringview.c:232 msgid "Cursor Position" msgstr "游標位置" #: ../utils/scimstringview.c:233 msgid "The current position of the insertion cursor in chars." msgstr "在字元中插入的游標的所在位置。" #: ../utils/scimstringview.c:242 msgid "Maximum length" msgstr "最大長度" #: ../utils/scimstringview.c:243 msgid "Maximum number of characters for this string view. Zero if no maximum." msgstr "這個字串視窗最長可以容衲多少字元。設定值為 0 則表示無限制。" #: ../utils/scimstringview.c:252 msgid "Maximum width" msgstr "最大寬度" #: ../utils/scimstringview.c:253 msgid "Maximum width of this string view." msgstr "這個字串視窗的最大寬度。" #: ../utils/scimstringview.c:262 msgid "Has Frame" msgstr "有外框" #: ../utils/scimstringview.c:263 msgid "FALSE removes outside bevel from string view." msgstr "無效時,移除字串視窗的外部斜邊。" #: ../utils/scimstringview.c:270 msgid "Draw cursor" msgstr "繪製游標" #: ../utils/scimstringview.c:271 msgid "TRUE draw blinking cursor." msgstr "啟用時,繪製閃爍游標" #: ../utils/scimstringview.c:278 msgid "Auto move cursor" msgstr "自動移動游標" #: ../utils/scimstringview.c:279 msgid "TRUE auto move cursor position when mouse clicking." msgstr "啟用時,當滑鼠點選時會自動移動游標。" #: ../utils/scimstringview.c:286 msgid "Forward button press event" msgstr "轉送按鍵事件" #: ../utils/scimstringview.c:287 msgid "TRUE forward button press event to user program." msgstr "啟用時,轉送鍵擊事件給使用者程式。" #: ../utils/scimstringview.c:294 msgid "Auto resize the widget to fit the string" msgstr "根據字串自動調整邊框大小" #: ../utils/scimstringview.c:295 msgid "TRUE Auto resize on." msgstr "啟用時,自動調整大小。" #: ../utils/scimstringview.c:302 msgid "Width in chars" msgstr "字元寬度" #: ../utils/scimstringview.c:303 msgid "Number of characters to leave space for in the string view." msgstr "在字串視窗裡所保留的空白字元數。" #: ../utils/scimstringview.c:312 msgid "Scroll offset" msgstr "捲軸位移" #: ../utils/scimstringview.c:313 msgid "Number of pixels of the string view scrolled off the screen to the left" msgstr "字串視窗距離螢幕左邊的像素值" #: ../utils/scimstringview.c:322 msgid "Text" msgstr "文字" #: ../utils/scimstringview.c:323 msgid "The contents of the string view" msgstr "字串視窗的說明" #: ../utils/scimtrayicon.c:109 msgid "Orientation" msgstr "方位" #: ../utils/scimtrayicon.c:110 msgid "The orientation of the tray." msgstr "狀態列的方位。" scim-master/scim-gtkutils.pc.in000066400000000000000000000006101415264260100170300ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ localedir=@datadir@/locale datadir=@datadir@ sysconfdir=@sysconfdir@ Name: scim-gtkutils Description: GTK Utilities for Smart Common Input Method platform Version: @SCIM_VERSION@ Requires: gtk+-@GTK_MAJOR_VERSION@.0 scim Libs: -L${libdir} -lscim-gtkutils@SCIM_EPOCH@ Cflags: -I${includedir}/scim@SCIM_EPOCH@ scim-master/scim-x11utils.pc.in000066400000000000000000000006011415264260100166540ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ localedir=@datadir@/locale datadir=@datadir@ sysconfdir=@sysconfdir@ Name: scim-x11utils Description: X11 Utilities for Smart Common Input Method platform Version: @SCIM_VERSION@ Requires: scim Libs: -L${libdir} -lscim-x11utils@SCIM_EPOCH@ @X_LIBS@ Cflags: -I${includedir}/scim@SCIM_EPOCH@ @X_CFLAGS@ scim-master/scim.pc.in000066400000000000000000000007421415264260100151720ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ localedir=@datadir@/locale datadir=@datadir@ sysconfdir=@sysconfdir@ scimdatadir=@datadir@/scim icondir=@datadir@/scim/icons moduledir=@libdir@/scim@SCIM_EPOCH@/@SCIM_BINARY_VERSION@ scim_binary_version=@SCIM_BINARY_VERSION@ Name: SCIM Description: Smart Common Input Method platform Version: @SCIM_VERSION@ Requires: Libs: -L${libdir} -lscim@SCIM_EPOCH@ Cflags: -I${includedir}/scim@SCIM_EPOCH@ scim-master/scim.spec.in000066400000000000000000000250341415264260100155230ustar00rootroot00000000000000%define nam @PACKAGE@ %define ver @VERSION@ %define rel 1 %define build_config_socket @SCIM_BUILD_CONFIG_SOCKET@ %define build_config_simple @SCIM_BUILD_CONFIG_SIMPLE@ %define build_frontend_x11 @SCIM_BUILD_FRONTEND_X11@ %define build_frontend_socket @SCIM_BUILD_FRONTEND_SOCKET@ %define build_imengine_rawcode @SCIM_BUILD_IMENGINE_RAWCODE@ %define build_imengine_socket @SCIM_BUILD_IMENGINE_SOCKET@ %define build_gtk2_immodule @SCIM_BUILD_GTK2_IMMODULE@ %define build_scim_setup @SCIM_BUILD_SCIM_SETUP@ %define build_panel_gtk @SCIM_BUILD_PANEL_GTK@ %define build_gtk_utils @SCIM_BUILD_GTK_UTILS@ %define build_x11_utils @SCIM_BUILD_X11_UTILS@ %define build_filter_sctc @SCIM_BUILD_FILTER_SCTC@ # Something's not quite right with libtool.... %define __libtoolize echo Summary: Smart Chinese/Common Input Method platform Name: %{nam} Version: %{ver} Release: %{rel} License: LGPL Group: System Environment/Libraries URL: http://scim.freedesktop.org BuildRoot: %{_tmppath}/%{name}-%{version}-root Source0: %{name}-%{version}.tar.gz #NoSource: 0 PreReq: /sbin/ldconfig, /bin/sh %if %{build_gtk_utils} Requires: glib2 >= 2.0.0 BuildRequires: glib2-devel >= 2.0.0 Requires: gtk2 >= @GTK_VERSION@ BuildRequires: gtk2-devel >= @GTK_VERSION@ Requires: pango >= 1.0.0 BuildRequires: pango-devel >= 1.0.0 %endif %if %{build_x11_utils} Requires: XFree86-libs >= 4.1.0 BuildRequires: XFree86-devel >= 4.1.0 %endif BuildRequires: pkgconfig >= 0.12 %description SCIM is a developing platform to significant reduce the difficulty of input method development. %package devel Summary: Smart Chinese/Common Input Method platform Group: Development/Libraries Requires: %{name} = %{version} Requires: pkgconfig >= 0.12 %description devel The scim-devel package includes the static libraries and header files for the scim package. Install scim-devel if you want to develop programs which will use scim. #-------------------------------------------------- %prep %setup -n %{name}-%{version} %build CFLAGS="-O3" CXXFLAGS="-O3" \ %configure \ %if ! %{build_config_socket} --disable-config-socket \ %endif %if ! %{build_config_simple} --disable-config-simple \ %endif %if ! %{build_frontend_x11} --disable-frontend-x11 \ %endif %if ! %{build_frontend_socket} --disable-frontend-socket \ %endif %if ! %{build_imengine_rawcode} --disable-im-rawcode \ %endif %if ! %{build_imengine_socket} --disable-im-socket \ %endif %if ! %{build_filter_sctc} --disable-filter-sctc \ %endif %if ! %{build_gtk2_immodule} --disable-gtk2-immodule \ %endif %if ! %{build_scim_setup} -disable-setup-ui \ %endif make %install [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=${RPM_BUILD_ROOT} install mkdir -p ${RPM_BUILD_ROOT}/%{_libdir}/scim@SCIM_EPOCH@/{Config,FrontEnd,IMEngine,SetupUI,Helper,Filter} rm -f ${RPM_BUILD_ROOT}/%{_libdir}/scim@SCIM_EPOCH@/*/*/*.{a,la} rm -f ${RPM_BUILD_ROOT}/@GTK_LIBDIR@/gtk-2.0/immodules/im-scim.{a,la} # install user manual mkdir -p docs/dist/manual/zh_CN/figures/ cp -a docs/manual/zh_CN/user-manual.{html,xml} docs/dist/manual/zh_CN/ cp -a docs/manual/zh_CN/figures/*.png docs/dist/manual/zh_CN/figures/ %clean [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %if %{build_gtk2_immodule} gtk-query-immodules-2.0 > %{_sysconfdir}/gtk-2.0/gtk.immodules %endif %postun /sbin/ldconfig %if %{build_gtk2_immodule} gtk-query-immodules-2.0 > %{_sysconfdir}/gtk-2.0/gtk.immodules %endif %files %defattr(-, root, root) %doc AUTHORS COPYING NEWS README ChangeLog TODO %doc docs/dist/manual/zh_CN %dir %{_sysconfdir}/scim %dir %{_libdir}/scim@SCIM_EPOCH@/*/FrontEnd %dir %{_libdir}/scim@SCIM_EPOCH@/*/IMEngine %dir %{_libdir}/scim@SCIM_EPOCH@/*/Config %dir %{_libdir}/scim@SCIM_EPOCH@/*/SetupUI %dir %{_libdir}/scim@SCIM_EPOCH@/*/Helper %dir %{_libdir}/scim@SCIM_EPOCH@/*/Filter %dir %{_libdir}/scim@SCIM_EPOCH@/Config %dir %{_libdir}/scim@SCIM_EPOCH@/FrontEnd %dir %{_libdir}/scim@SCIM_EPOCH@/IMEngine %dir %{_libdir}/scim@SCIM_EPOCH@/SetupUI %dir %{_libdir}/scim@SCIM_EPOCH@/Helper %dir %{_libdir}/scim@SCIM_EPOCH@/Filter %dir %{_datadir}/scim %dir %{_datadir}/scim/icons %config %{_sysconfdir}/scim/global %{_bindir}/scim %{_bindir}/scim-config-agent %{_libdir}/libscim*.so.* %{_libdir}/scim@SCIM_EPOCH@/scim-launcher %{_libdir}/scim@SCIM_EPOCH@/scim-helper-launcher %{_libdir}/scim@SCIM_EPOCH@/scim-helper-manager %{_datadir}/locale/*/LC_MESSAGES/scim.mo %{_datadir}/scim/icons/keyboard.png %{_datadir}/scim/icons/up.png %{_datadir}/scim/icons/down.png %{_datadir}/scim/icons/left.png %{_datadir}/scim/icons/right.png %{_datadir}/scim/icons/full-letter.png %{_datadir}/scim/icons/half-letter.png %{_datadir}/scim/icons/full-punct.png %{_datadir}/scim/icons/half-punct.png %{_datadir}/scim/icons/help.png %{_datadir}/scim/icons/pin-up.png %{_datadir}/scim/icons/pin-down.png %{_datadir}/scim/icons/setup.png %{_datadir}/scim/icons/trademark.png %{_datadir}/scim/icons/menu.png %if %{build_scim_setup} %{_bindir}/scim-setup %{_datadir}/applications/scim-setup.desktop %{_datadir}/control-center-2.0/capplets/scim-setup.desktop %{_datadir}/pixmaps/scim-setup.png %{_libdir}/scim@SCIM_EPOCH@/*/Helper/setup.so %{_libdir}/scim@SCIM_EPOCH@/*/SetupUI/aaa-frontend-setup.so %{_libdir}/scim@SCIM_EPOCH@/*/SetupUI/aaa-imengine-setup.so %endif %if %{build_panel_gtk} %{_libdir}/scim@SCIM_EPOCH@/scim-panel-gtk %if %{build_scim_setup} %{_libdir}/scim@SCIM_EPOCH@/*/SetupUI/panel-gtk-setup.so %endif %endif %if %{build_frontend_x11} %{_libdir}/scim@SCIM_EPOCH@/*/FrontEnd/x11.so %endif %if %{build_imengine_rawcode} %{_libdir}/scim@SCIM_EPOCH@/*/IMEngine/rawcode.so %{_datadir}/scim/icons/rawcode.png %endif %if %{build_filter_sctc} %{_libdir}/scim@SCIM_EPOCH@/*/Filter/sctc.so %{_datadir}/scim/icons/sctc.png %{_datadir}/scim/icons/sctc-sc-to-tc.png %{_datadir}/scim/icons/sctc-tc-to-sc.png %endif %if %{build_config_simple} %config %{_sysconfdir}/scim/config %{_libdir}/scim@SCIM_EPOCH@/*/Config/simple.so %endif %if %{build_imengine_socket} %{_libdir}/scim@SCIM_EPOCH@/*/IMEngine/socket.so %endif %if %{build_frontend_socket} %{_libdir}/scim@SCIM_EPOCH@/*/FrontEnd/socket.so %endif %if %{build_config_socket} %{_libdir}/scim@SCIM_EPOCH@/*/Config/socket.so %endif %if %{build_gtk2_immodule} @GTK_LIBDIR@/gtk-2.0/immodules/im-scim.so %endif %files devel %defattr(-, root, root) %doc docs/html %doc docs/developers %{_libdir}/libscim*.so %{_libdir}/lib*.a %{_libdir}/lib*.la %{_libdir}/pkgconfig/*.pc %{_includedir}/scim@SCIM_EPOCH@ #-------------------------------------------------- %changelog * Sun Jan 9 2005 James Su - Remove GConf Config module. * Wed Jan 5 2005 James Su - Remove table IMEngine. * Fri Aug 6 2004 James Su - Move scim-launcher and scim-panel-gtk to /usr/lib/scim-1.0. * Sun Jun 20 2004 James Su - Merge all things into one package. * Sat Jun 19 2004 James Su - Added /usr/libexec/scim-launcher. - Remove setup module for SocketFrontEnd and SocketIMEngine. * Mon Mar 8 2004 James Su - Added scim-config-agent. * Thu Oct 30 2003 James Su - Added Simplified Chinese User Manual. * Wed Sep 03 2003 James Su - cleanup spec. * Tue Sep 02 2003 James Su - upto 0.8.0 * Tue Jul 29 2003 James Su - updated to include scim-panel-gtk. * Thu Jun 19 2003 James Su - updated to include scim-setup and its modules. * Thu Apr 3 2003 James Su - added suite package, which includes all necessary components of SCIM. * Tue Mar 25 2003 James Su - updated to v0.4.0 * Wed Feb 26 2003 James Su - implemented dynamic adjust feature for generic table module. - fixed key handling bug in generic table module. * Mon Feb 10 2003 James Su - Replaced highlight_start and highlight_end in scim_server and scim_frontend with AttributeList (scim_attributes.h) - Moved icons/* to data/icons and gtkstringview.* to utils/ * Thu Jan 2 2003 James Su - updated configure.ac and Makefile.am - ready to release 0.3.0 * Tue Nov 12 2002 James Su - merged signal system from libinti. - implemented namespace scim. - implemented referenced object. - version 0.3.0 * Tue Nov 05 2002 James Su - minor fixes for table IM module. * Mon Nov 04 2002 James Su - More IMdkit memory leak fixes. - Table input method bugfixes. - version 0.2.2 * Fri Nov 01 2002 James Su - improved table input method. - actually fixed the memleaks within IMdkit. - pumped the version to 0.2.1 * Thu Oct 31 2002 James Su - fixed some memory leaks in IMdkit - reduced memory usage. - upgraded to libtool-1.4.3 * Tue Oct 29 2002 James Su - finished Generic Table input server module. - fixed several bugs in scim-lib. * Thu Oct 10 2002 James Su - used gettext to support i18n message. - added release info to lib name. * Mon Sep 30 2002 James Su - version 0.1.4 - added Embedded Lookup Table style into X11 FrontEnd. - use wchar_t instead of unsigned long if __STDC_ISO_10646__ defined. * Sun Sep 22 2002 James Su - version 0.1.3 - config button of X11 FrontEnd was disabled. * Fri Sep 6 2002 James Su - simplified the utilities and lookup table interface. * Wed Aug 21 2002 James Su - version 0.1.2 - added configuration options to disable modules. - enhanced X11 FrontEnd. * Sun Aug 11 2002 James Su - version 0.1.1 - X11 FrontEnd was enhanced. * Sat Aug 10 2002 James Su - version 0.1.0 - many bugfixes. - Help window of X11 FrontEnd was implemented. - scim can exit cleanly. * Fri Aug 2 2002 James Su - SCIM 0.0.13. - Minor bugfixes. * Mon Jul 29 2002 James Su - SCIM 0.0.12. - Minor bugfixes. * Sun Jul 28 2002 James Su - SCIM 0.0.11. - Minor bugfixes. * Sun Jul 21 2002 James Su - SCIM 0.0.10. - Added Simple Config module. * Sat Jun 22 2002 James Su - first public release of SCIM. scim-master/src/000077500000000000000000000000001415264260100140725ustar00rootroot00000000000000scim-master/src/Makefile.am000066400000000000000000000111631415264260100161300ustar00rootroot00000000000000## Makefile.am -- Process this file with automake to produce Makefile.in ## Copyright (C) 2002 James Su ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. MAINTAINERCLEANFILES = Makefile.in scim_types.h CLEANFILES = libscim.la *.bak DISTCLEANFILES = scim_types.h EXTRA_DIST = libscim.version-script AM_CPPFLAGS = -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/intl \ -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \ -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \ -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \ -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \ -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \ -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \ $(LTDLINCL) noinst_HEADERS = \ scim_private.h \ scim_compose_key_data.h \ scim_keyboard_layout_data.h \ scim_keyevent_data.h \ scim_stl_map.h libscimincludedir = $(includedir)/scim@SCIM_EPOCH@ libsciminclude_HEADERS = scim.h \ scim_attribute.h \ scim_backend.h \ scim_bind.h \ scim_compose_key.h \ scim_config_base.h \ scim_config_module.h \ scim_config_path.h \ scim_connection.h \ scim_debug.h \ scim_event.h \ scim_exception.h \ scim_filter.h \ scim_filter_module.h \ scim_filter_manager.h \ scim_frontend.h \ scim_frontend_module.h \ scim_global_config.h \ scim_helper.h \ scim_helper_manager.h \ scim_helper_module.h \ scim_hotkey.h \ scim_iconv.h \ scim_imengine.h \ scim_imengine_module.h \ scim_lookup_table.h \ scim_module.h \ scim_object.h \ scim_panel_agent.h \ scim_panel_client.h \ scim_panel_common.h \ scim_pointer.h \ scim_property.h \ scim_signals.h \ scim_slot.h \ scim_socket.h \ scim_trans_commands.h \ scim_transaction.h \ scim_types.h \ scim_utility.h if SCIM_LD_VERSION_SCRIPT LD_VERSION_SCRIPT_OPTION="-Wl,--version-script=$(srcdir)/libscim.version-script" endif lib_LTLIBRARIES = libscim@SCIM_EPOCH@.la libscim@SCIM_EPOCH@_la_SOURCES = scim_backend.cpp \ scim_chartraits.cpp \ scim_compose_key.cpp \ scim_config_base.cpp \ scim_config_module.cpp \ scim_connection.cpp \ scim_debug.cpp \ scim_event.cpp \ scim_filter.cpp \ scim_filter_module.cpp \ scim_filter_manager.cpp \ scim_frontend.cpp \ scim_frontend_module.cpp \ scim_global_config.cpp \ scim_helper.cpp \ scim_helper_manager.cpp \ scim_helper_module.cpp \ scim_hotkey.cpp \ scim_iconv.cpp \ scim_imengine.cpp \ scim_imengine_module.cpp \ scim_lookup_table.cpp \ scim_module.cpp \ scim_object.cpp \ scim_panel_agent.cpp \ scim_panel_client.cpp \ scim_private.cpp \ scim_signals.cpp \ scim_slot.cpp \ scim_socket.cpp \ scim_transaction.cpp \ scim_utility.cpp libscim@SCIM_EPOCH@_la_DEPENDENCIES = $(LTDLDEPS) libscim@SCIM_EPOCH@_la_LDFLAGS= -version-info $(SCIM_CURRENT):$(SCIM_REVISION):$(SCIM_AGE) \ -export-dynamic \ $(LD_VERSION_SCRIPT_OPTION) \ @LIBTOOL_EXPORT_OPTIONS@ \ @LIBICONV@ \ @LTLIBINTL@ \ $(LIBLTDL) bin_PROGRAMS = scim scim-config-agent scim_SOURCES = scim.cpp scim_LDADD = libscim@SCIM_EPOCH@.la scim_LDFLAGS = @LTLIBINTL@ scim_config_agent_SOURCES = scim_config_agent.cpp scim_config_agent_LDADD = libscim@SCIM_EPOCH@.la scim_config_agent_LDFLAGS = @LTLIBINTL@ libexecdir = $(libdir)/scim@SCIM_EPOCH@ libexec_PROGRAMS = scim-launcher scim-helper-launcher scim-helper-manager scim_launcher_SOURCES = scim_launcher.cpp scim_launcher_LDADD = libscim@SCIM_EPOCH@.la scim_launcher_LDFLAGS = @LTLIBINTL@ scim_helper_launcher_SOURCES = scim_helper_launcher.cpp scim_helper_launcher_LDADD = libscim@SCIM_EPOCH@.la scim_helper_launcher_LDFLAGS = @LTLIBINTL@ scim_helper_manager_SOURCES = scim_helper_manager_server.cpp scim_helper_manager_LDADD = libscim@SCIM_EPOCH@.la scim_helper_manager_LDFLAGS = @LTLIBINTL@ scim-master/src/conv_compose.cpp000066400000000000000000000161241415264260100172740ustar00rootroot00000000000000#define Uses_SCIM_EVENT #include #include using namespace scim; struct ComposeSequence { uint32 keys [8]; ucs4_t unicode; }; class ComposeSequenceEqualByKeys { public: bool operator () (const ComposeSequence &lhs, const ComposeSequence &rhs) const { return lhs.keys [0] == rhs.keys [0] && lhs.keys [1] == rhs.keys [1] && lhs.keys [2] == rhs.keys [2] && lhs.keys [3] == rhs.keys [3] && lhs.keys [4] == rhs.keys [4] && lhs.keys [5] == rhs.keys [5] && lhs.keys [6] == rhs.keys [6] && lhs.keys [7] == rhs.keys [7]; } }; class ComposeSequenceLessByKeys { public: bool operator () (const ComposeSequence &lhs, const ComposeSequence &rhs) const { if (lhs.keys [0] < rhs.keys [0]) return true; else if (lhs.keys [0] > rhs.keys [0]) return false; if (lhs.keys [1] < rhs.keys [1]) return true; else if (lhs.keys [1] > rhs.keys [1]) return false; if (lhs.keys [2] < rhs.keys [2]) return true; else if (lhs.keys [2] > rhs.keys [2]) return false; if (lhs.keys [3] < rhs.keys [3]) return true; else if (lhs.keys [3] > rhs.keys [3]) return false; if (lhs.keys [4] < rhs.keys [4]) return true; else if (lhs.keys [4] > rhs.keys [4]) return false; if (lhs.keys [5] < rhs.keys [5]) return true; else if (lhs.keys [5] > rhs.keys [5]) return false; if (lhs.keys [6] < rhs.keys [6]) return true; else if (lhs.keys [6] > rhs.keys [6]) return false; if (lhs.keys [7] < rhs.keys [7]) return true; return false; } bool operator () (const ComposeSequence &lhs, const uint16 *rhs) const { if (lhs.keys [0] < rhs [0]) return true; else if (lhs.keys [0] > rhs [0]) return false; if (lhs.keys [1] < rhs [1]) return true; else if (lhs.keys [1] > rhs [1]) return false; if (lhs.keys [2] < rhs [2]) return true; else if (lhs.keys [2] > rhs [2]) return false; if (lhs.keys [3] < rhs [3]) return true; else if (lhs.keys [3] > rhs [3]) return false; if (lhs.keys [4] < rhs [4]) return true; else if (lhs.keys [4] > rhs [4]) return false; if (lhs.keys [5] < rhs [5]) return true; else if (lhs.keys [5] > rhs [5]) return false; if (lhs.keys [6] < rhs [6]) return true; else if (lhs.keys [6] > rhs [6]) return false; if (lhs.keys [7] < rhs [7]) return true; return false; } bool operator () (const uint16 *lhs, const ComposeSequence &rhs) const { if (lhs [0] < rhs.keys [0]) return true; else if (lhs [0] > rhs.keys [0]) return false; if (lhs [1] < rhs.keys [1]) return true; else if (lhs [1] > rhs.keys [1]) return false; if (lhs [2] < rhs.keys [2]) return true; else if (lhs [2] > rhs.keys [2]) return false; if (lhs [3] < rhs.keys [3]) return true; else if (lhs [3] > rhs.keys [3]) return false; if (lhs [4] < rhs.keys [4]) return true; else if (lhs [4] > rhs.keys [4]) return false; if (lhs [5] < rhs.keys [5]) return true; else if (lhs [5] > rhs.keys [5]) return false; if (lhs [6] < rhs.keys [6]) return true; else if (lhs [6] > rhs.keys [6]) return false; if (lhs [7] < rhs.keys [7]) return true; return false; } bool operator () (const uint16 *lhs, const uint16 *rhs) const { if (lhs [0] < rhs [0]) return true; else if (lhs [0] > rhs [0]) return false; if (lhs [1] < rhs [1]) return true; else if (lhs [1] > rhs [1]) return false; if (lhs [2] < rhs [2]) return true; else if (lhs [2] > rhs [2]) return false; if (lhs [3] < rhs [3]) return true; else if (lhs [3] > rhs [3]) return false; if (lhs [4] < rhs [4]) return true; else if (lhs [4] > rhs [4]) return false; if (lhs [5] < rhs [5]) return true; else if (lhs [5] > rhs [5]) return false; if (lhs [6] < rhs [6]) return true; else if (lhs [6] > rhs [6]) return false; if (lhs [7] < rhs [7]) return true; return false; } }; static const ComposeSequence __scim_compose_seqs[] = { #include "scim_compose_key_data.h" }; #define SCIM_NUM_COMPOSE_SEQS (sizeof (__scim_compose_seqs) / sizeof (__scim_compose_seqs [0])) int main () { #if 0 std::vector seqs (__scim_compose_seqs, __scim_compose_seqs + SCIM_NUM_COMPOSE_SEQS); #else std::vector seqs; char buf [1000]; std::vector strvec; std::vector keyvec; std::vector resvec; String keystr; ComposeSequence seq; KeyEvent key; while (!std::cin.eof ()) { std::cin.getline (buf, 1000); if (buf [0] == '#') continue; // split keys and result parts. if (scim_split_string_list (strvec, buf, ':') == 2) { // get the result unicode. if (scim_split_string_list (resvec, strvec [1], '"') != 3 || resvec [1][0] == '\\') { std::cerr << "Invalid entry: " << buf << "\n"; continue; } utf8_mbtowc (& seq.unicode, (const unsigned char *)resvec [1].c_str (), resvec[1].length ()); keystr = String (); for (String::iterator it = strvec [0].begin (); it != strvec [0].end (); ++it) { if (String ("<> \t").find (*it) == String::npos) keystr.push_back (*it); if (*it == '>') keystr.push_back (','); } scim_split_string_list (keyvec, keystr, ','); bool ok = true; for (int i = 0; i < 8; ++i) { if (i < keyvec.size ()) { if (!scim_string_to_key (key, keyvec [i])) { std::cerr << "Invalid key: " << keyvec [i] << "\n"; ok = false; break; } seq.keys [i] = (uint32) key.code; } else { seq.keys [i] = 0; } #if 0 if (seq.keys [i] >= 0x01000000) { ok = false; break; } #endif } if (ok) seqs.push_back (seq); else std::cerr << "Invalid entry: " << buf << "\n"; } else { std::cerr << "Invalid entry: " << buf << "\n"; } } #endif std::sort (seqs.begin (), seqs.end (), ComposeSequenceLessByKeys ()); seqs.erase (std::unique (seqs.begin (), seqs.end (), ComposeSequenceEqualByKeys ()), seqs.end ()); int length [5] = { 0, 0, 0, 0, 0, }; for (size_t i = 0; i < seqs.size (); ++i) { for (int j = 0; j < 5; ++j) { String str; if (seqs [i].keys [j]) { str = KeyEvent (seqs [i].keys [j], 0).get_key_string (); if (str [0] != '0' || str [1] != 'x') str = String ("SCIM_KEY_") + str; } else { str = "0"; } if (length [j] < str.length ()) length [j] = str.length (); } } for (size_t i = 0; i < seqs.size (); ++i) { std::cout << " {{"; for (int j = 0; j < 5; ++j) { String str; if (seqs [i].keys [j]) { str = KeyEvent (seqs [i].keys [j], 0).get_key_string (); if (str [0] != '0' || str [1] != 'x') str = String ("SCIM_KEY_") + str; } else { str = "0"; } std::cout << str; if (j < 4) std::cout << ","; for (int k = 0; k <= length [j] - str.length (); ++k) std::cout << " "; } std::cout << "}, "; char unic [8]; snprintf (unic, 8, "0x%04X", seqs [i].unicode); std::cout << unic << "},\n"; } } scim-master/src/libscim.version-script000066400000000000000000000001511415264260100204220ustar00rootroot00000000000000LIBSCIM_1.0 { global: extern "C++" { *scim::*; }; local: *; }; scim-master/src/scim.cpp000066400000000000000000000251341415264260100155360ustar00rootroot00000000000000/* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim.cpp,v 1.51 2005/06/15 00:19:08 suzhe Exp $ * */ #define Uses_SCIM_FRONTEND_MODULE #define Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_BACKEND #define Uses_SCIM_CONFIG_PATH #define Uses_SCIM_TRANSACTION #define Uses_C_LOCALE #include "scim_private.h" #include #include #include #include using namespace scim; using std::cout; using std::cerr; using std::endl; bool check_socket_frontend () { SocketAddress address; SocketClient client; uint32 magic; address.set_address (scim_get_default_socket_frontend_address ()); if (!client.connect (address)) return false; if (!scim_socket_open_connection (magic, String ("ConnectionTester"), String ("SocketFrontEnd"), client, 1000)) { return false; } return true; } int main (int argc, char *argv []) { BackEndPointer backend; std::vector frontend_list; std::vector config_list; std::vector engine_list; std::vector exclude_engine_list; std::vector load_engine_list; String def_frontend; String def_config; size_t i; bool daemon = false; bool socket = true; bool manual = false; int new_argc = 0; char *new_argv [80]; //Display version info cout << "Smart Common Input Method " << SCIM_VERSION << "\n\n"; //get modules list scim_get_frontend_module_list (frontend_list); scim_get_imengine_module_list (engine_list); scim_get_config_module_list (config_list); //Use x11 FrontEnd as default if available. if (frontend_list.size ()) { def_frontend = String ("x11"); if (std::find (frontend_list.begin (), frontend_list.end (), def_frontend) == frontend_list.end ()) def_frontend = frontend_list [0]; } //Add a dummy config module, it's not really a module! config_list.push_back ("dummy"); //Use simple Config module as default if available. def_config = scim_global_config_read (SCIM_GLOBAL_CONFIG_DEFAULT_CONFIG_MODULE, String ("simple")); if (std::find (config_list.begin (), config_list.end (), def_config) == config_list.end ()) def_config = config_list [0]; // If no Socket Config/IMEngine/FrontEnd modules // then do not try to start a SocketFrontEnd. if (std::find (frontend_list.begin (), frontend_list.end (), "socket") == frontend_list.end () || std::find (config_list.begin (), config_list.end (), "socket") == config_list.end () || std::find (engine_list.begin (), engine_list.end (), "socket") == engine_list.end ()) socket = false; //parse command options i = 0; while (i= argc) break; if (String ("-l") == argv [i] || String ("--list") == argv [i]) { std::vector::iterator it; cout << endl; cout << "Available FrontEnd module:\n"; for (it = frontend_list.begin (); it != frontend_list.end (); it++) cout << " " << *it << endl; cout << endl; cout << "Available Config module:\n"; for (it = config_list.begin (); it != config_list.end (); it++) cout << " " << *it << endl; cout << endl; cout << "Available IMEngine module:\n"; for (it = engine_list.begin (); it != engine_list.end (); it++) cout << " " << *it << endl; return 0; } if (String ("-f") == argv [i] || String ("--frontend") == argv [i]) { if (++i >= argc) { cerr << "No argument for option " << argv [i-1] << endl; return -1; } def_frontend = argv [i]; continue; } if (String ("-c") == argv [i] || String ("--config") == argv [i]) { if (++i >= argc) { cerr << "No argument for option " << argv [i-1] << endl; return -1; } def_config = argv [i]; continue; } if (String ("-h") == argv [i] || String ("--help") == argv [i]) { cout << "Usage: " << argv [0] << " [option]...\n\n" << "The options are: \n" << " -l, --list List all of available modules.\n" << " -f, --frontend name Use specified FrontEnd module.\n" << " -c, --config name Use specified Config module.\n" << " -e, --engines name Load specified set of IMEngines.\n" << " -ne,--no-engines name Do not load those set of IMEngines.\n" << " -d, --daemon Run " << argv [0] << " as a daemon.\n" << " --no-socket Do not try to start a SCIM SocketFrontEnd daemon.\n" << " -h, --help Show this help message.\n"; return 0; } if (String ("-d") == argv [i] || String ("--daemon") == argv [i]) { daemon = true; continue; } if (String ("-e") == argv [i] || String ("-s") == argv [i] || String ("--engines") == argv [i] || String ("--servers") == argv [i]) { if (++i >= argc) { cerr << "No argument for option " << argv [i-1] << endl; return -1; } scim_split_string_list (load_engine_list, String (argv [i]), ','); manual = true; continue; } if (String ("-ne") == argv [i] || String ("-ns") == argv [i] || String ("--no-engines") == argv [i] || String ("-no-servers") == argv [i]) { if (++i >= argc) { cerr << "No argument for option " << argv [i-1] << endl; return -1; } scim_split_string_list (exclude_engine_list, String (argv [i]), ','); manual = true; continue; } if (String ("--no-socket") == argv [i]) { socket = false; continue; } if (String ("--") == argv [i]) break; cerr << "Invalid command line option: " << argv [i] << "\n"; return -1; } //End of command line parsing. // Store the rest argvs into new_argv. for (++i; i < argc; ++i) { new_argv [new_argc ++] = argv [i]; } new_argv [new_argc] = 0; // Get the imengine module list which should be loaded. if (exclude_engine_list.size ()) { load_engine_list.clear (); for (i = 0; i < engine_list.size (); ++i) { if (std::find (exclude_engine_list.begin (), exclude_engine_list.end (), engine_list [i]) == exclude_engine_list.end () && engine_list [i] != "socket") load_engine_list.push_back (engine_list [i]); } } if (!def_frontend.length ()) { cerr << "No FrontEnd module is available!\n"; return -1; } if (!def_config.length ()) { cerr << "No Config module is available!\n"; return -1; } // If you try to use the socket feature manually, // then let you do it by yourself. if (def_frontend == "socket" || def_config == "socket" || std::find (load_engine_list.begin (), load_engine_list.end (), "socket") != load_engine_list.end ()) socket = false; // If the socket address of SocketFrontEnd and SocketIMEngine/SocketConfig are different, // then do not try to start the SocketFrontEnd instance automatically. if (scim_get_default_socket_frontend_address () != scim_get_default_socket_imengine_address () || scim_get_default_socket_frontend_address () != scim_get_default_socket_config_address ()) socket = false; // Try to start a SCIM SocketFrontEnd daemon first. if (socket) { // If no Socket FrontEnd is running, then launch one. // And set manual to false. if (!check_socket_frontend ()) { cerr << "Launching a SCIM daemon with Socket FrontEnd...\n"; char *no_stay_argv [] = { const_cast ("--no-stay"), 0 }; scim_launch (true, def_config, (load_engine_list.size () ? scim_combine_string_list (load_engine_list, ',') : "all"), "socket", no_stay_argv); manual = false; } // If there is one Socket FrontEnd running and it's not manual mode, // then just use this Socket Frontend. if (!manual) { for (int i = 0; i < 100; ++i) { if (check_socket_frontend ()) { def_config = "socket"; load_engine_list.clear (); load_engine_list.push_back ("socket"); break; } scim_usleep (100000); } } } cerr << "Launching a SCIM process with " << def_frontend << "...\n"; // Launch the scim process. if (scim_launch (daemon, def_config, (load_engine_list.size () ? scim_combine_string_list (load_engine_list, ',') : "all"), def_frontend, new_argv) == 0) { if (daemon) cerr << "SCIM has been successfully launched.\n"; else cerr << "SCIM has exited successfully.\n"; return 0; } if (daemon) cerr << "Failed to launch SCIM.\n"; else cerr << "SCIM has exited abnormally.\n"; return 1; } /* vi:ts=4:ai:nowrap:expandtab */ scim-master/src/scim.h000066400000000000000000000177571415264260100152170ustar00rootroot00000000000000/** @file scim.h * all of the header files are included within this file. * source files may include this file instead of others headers. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim.h,v 1.38 2005/05/17 06:45:14 suzhe Exp $ */ // Define the macros #define Uses_SCIM_TYPES #define Uses_SCIM_UTILITY #define Uses_SCIM_GLOBAL_CONFIG #define Uses_SCIM_EXCEPTION #define Uses_SCIM_DEBUG #define Uses_SCIM_OBJECT #define Uses_SCIM_SIGNALS #define Uses_SCIM_SLOT #define Uses_SCIM_CONNECTION #define Uses_SCIM_BIND #define Uses_SCIM_POINTER #define Uses_STL_STRING #define Uses_STL_VECTOR #define Uses_STL_ALGORITHM #define Uses_STL_NEW #ifdef Uses_SCIM_FILTER_MANAGER #define Uses_SCIM_FILTER #endif #ifdef Uses_SCIM_FILTER_MODULE #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_BACKEND #define Uses_SCIM_FILTER #endif #ifdef Uses_SCIM_FILTER #define Uses_SCIM_IMENGINE #endif #ifdef Uses_SCIM_PANEL #define Uses_SCIM_PANEL_AGENT #define Uses_SCIM_PANEL_CLIENT #endif #ifdef Uses_SCIM_PANEL_AGENT #define Uses_SCIM_HELPER_MANAGER #define Uses_SCIM_TRANSACTION #endif #ifdef Uses_SCIM_PANEL_CLIENT #define Uses_SCIM_TRANSACTION #endif #ifdef Uses_SCIM_HELPER_MANAGER #define Uses_SCIM_HELPER #endif #ifdef Uses_SCIM_HELPER_MODULE #define Uses_SCIM_HELPER #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_BASE #endif #ifdef Uses_SCIM_HELPER #define Uses_SCIM_TRANSACTION #define Uses_SCIM_EVENT #endif #ifdef Uses_SCIM_COMPOSE_KEY #define Uses_SCIM_IMENGINE #endif #ifdef Uses_SCIM_TRANSACTION #define Uses_SCIM_EVENT #define Uses_SCIM_LOOKUP_TABLE #define Uses_SCIM_SOCKET #define Uses_SCIM_ATTRIBUTE #define Uses_SCIM_PROPERTY #define Uses_SCIM_TRANS_COMMANDS #endif #ifdef Uses_SCIM_CONFIG_MODULE #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_BASE #endif #ifdef Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_IMENGINE #endif #ifdef Uses_SCIM_FRONTEND_MODULE #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_FRONTEND #endif #ifdef Uses_SCIM_ICONV #define Uses_C_ICONV #endif #ifdef Uses_SCIM_FRONTEND #define Uses_SCIM_BACKEND #define Uses_SCIM_IMENGINE #define Uses_SCIM_EVENT #define Uses_SCIM_LOOKUP_TABLE #define Uses_STL_MAP #define Uses_C_STDIO #define Uses_SCIM_ATTRIBUTE #define Uses_SCIM_PROPERTY #define Uses_SCIM_TRANSACTION #define Uses_SCIM_SOCKET #endif #ifdef Uses_SCIM_BACKEND #define Uses_SCIM_IMENGINE #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_COMPOSE_KEY #endif #ifdef Uses_SCIM_IMENGINE #define Uses_SCIM_EVENT #define Uses_SCIM_LOOKUP_TABLE #define Uses_SCIM_ATTRIBUTE #define Uses_SCIM_PROPERTY #define Uses_SCIM_TRANSACTION #define Uses_SCIM_SOCKET #endif #ifdef Uses_SCIM_LOOKUP_TABLE #define Uses_SCIM_EVENT #define Uses_SCIM_ATTRIBUTE #endif #ifdef Uses_SCIM_CONFIG_BASE #define Uses_SCIM_MODULE #define Uses_SCIM_CONFIG_MODULE #define Uses_STL_LIST #endif #ifdef Uses_SCIM_EXCEPTION #define Uses_STL_EXCEPTION #endif #ifdef Uses_SCIM_DEBUG #define Uses_STL_IOSTREAM #define Uses_STL_FSTREAM #endif #ifdef Uses_SCIM_UTILITY #define Uses_STL_IOSTREAM #endif #ifdef Uses_SCIM_HOTKEY #define Uses_SCIM_EVENT #define Uses_SCIM_CONFIG_BASE #define Uses_SCIM_CONFIG_PATH #endif // Include Standard headers #ifdef Uses_STL_EXCEPTION #include #endif #ifdef Uses_STL_NEW #include #endif #ifdef Uses_STL_IOSTREAM #include #endif #ifdef Uses_STL_FSTREAM #include #endif #ifdef Uses_STL_FUNCTIONAL #include #endif #ifdef Uses_STL_IOMANIP #include #endif #ifdef Uses_STL_MEMORY #include #endif #ifdef Uses_STL_VECTOR #include #endif #ifdef Uses_STL_LIST #include #endif #ifdef Uses_STL_MAP #include #endif #ifdef Uses_STL_QUEUE #include #endif #ifdef Uses_STL_ALGORITHM #include #endif #ifdef Uses_STL_UTILITY #include #endif #ifdef Uses_STL_STRING #include #endif #ifdef Uses_STL_STRSTREAM #include #endif #ifdef Uses_C_STDIO #include #endif #ifdef Uses_C_STDLIB #include #endif #ifdef Uses_C_LOCALE #include #endif #ifdef Uses_C_CTYPE #include #endif #ifdef Uses_C_WCTYPE #include #endif #ifdef Uses_C_STRING #include #endif #ifdef Uses_C_LIMITS #include #endif #ifdef Uses_C_ICONV #include #endif //Include SCIM Headers #ifdef Uses_SCIM_TYPES #include #endif #ifdef Uses_SCIM_DEBUG #include #endif #ifdef Uses_SCIM_EXCEPTION #include #endif #ifdef Uses_SCIM_EVENT #include #endif #ifdef Uses_SCIM_UTILITY #include #endif #ifdef Uses_SCIM_GLOBAL_CONFIG #include #endif #ifdef Uses_SCIM_POINTER #include #endif #ifdef Uses_SCIM_OBJECT #include #endif #ifdef Uses_SCIM_SLOT #include #endif #ifdef Uses_SCIM_CONNECTION #include #endif #ifdef Uses_SCIM_SIGNALS #include #endif #ifdef Uses_SCIM_BIND #include #endif #ifdef Uses_SCIM_CONFIG_BASE #include #endif #ifdef Uses_SCIM_ATTRIBUTE #include #endif #ifdef Uses_SCIM_PROPERTY #include #endif #ifdef Uses_SCIM_LOOKUP_TABLE #include #endif #ifdef Uses_SCIM_ICONV #include #endif #ifdef Uses_SCIM_MODULE #include #endif #ifdef Uses_SCIM_SOCKET #include #endif #ifdef Uses_SCIM_TRANSACTION #include #endif #ifdef Uses_SCIM_IMENGINE #include #endif #ifdef Uses_SCIM_IMENGINE_MODULE #include #endif #ifdef Uses_SCIM_COMPOSE_KEY #include #endif #ifdef Uses_SCIM_BACKEND #include #endif #ifdef Uses_SCIM_FRONTEND #include #endif #ifdef Uses_SCIM_FRONTEND_MODULE #include #endif #ifdef Uses_SCIM_CONFIG_MODULE #include #endif #ifdef Uses_SCIM_CONFIG_PATH #include #endif #ifdef Uses_SCIM_TRANS_COMMANDS #include #endif #ifdef Uses_SCIM_HELPER #include #endif #ifdef Uses_SCIM_HELPER_MODULE #include #endif #ifdef Uses_SCIM_HELPER_MANAGER #include #endif #ifdef Uses_SCIM_PANEL_AGENT #include #endif #ifdef Uses_SCIM_PANEL_CLIENT #include #endif #ifdef Uses_SCIM_HOTKEY #include #endif #ifdef Uses_SCIM_FILTER #include #endif #ifdef Uses_SCIM_FILTER_MODULE #include #endif #ifdef Uses_SCIM_FILTER_MANAGER #include #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_attribute.h000066400000000000000000000145611415264260100172700ustar00rootroot00000000000000/** @file scim_attribute.h * @brief Definition of scim::Attribute and scim::AttributeList * * Provide class scim::Attribute to control the * drawing effect of strings. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_attribute.h,v 1.7 2005/08/05 16:12:31 suzhe Exp $ */ #ifndef __SCIM_ATTRIBUTE_H #define __SCIM_ATTRIBUTE_H namespace scim { /** * @addtogroup Accessories * * The accessorial classes and functions, including Attribute, IConvert, LookupTable etc. * * @{ */ /** * @brief Enum values of the valid attribute type. */ enum AttributeType { SCIM_ATTR_NONE, ///< No attribute. SCIM_ATTR_DECORATE, ///< A decorate attribute, eg. underline etc. SCIM_ATTR_FOREGROUND, ///< A foreground color attribute, in RGB format. SCIM_ATTR_BACKGROUND ///< A background color attribute, in RGB format. }; const unsigned int SCIM_ATTR_DECORATE_NONE = 0; ///< No decorate const unsigned int SCIM_ATTR_DECORATE_UNDERLINE = 1; ///< Draw a line under the text const unsigned int SCIM_ATTR_DECORATE_HIGHLIGHT = 2; ///< Draw the text in highlighted color const unsigned int SCIM_ATTR_DECORATE_REVERSE = 4; ///< Draw the text in reverse color mode #define SCIM_RGB_COLOR(RED,GREEN,BLUE) ((unsigned int)(((RED)<<16) + ((GREEN)<<8) + (BLUE))) #define SCIM_RGB_COLOR_RED(COLOR) ((unsigned int)((COLOR>>16) & 0x00ff)) #define SCIM_RGB_COLOR_GREEN(COLOR) ((unsigned int)((COLOR>>8) & 0x00ff)) #define SCIM_RGB_COLOR_BLUE(COLOR) ((unsigned int)((COLOR) & 0x00ff)) /** * @brief Class to store the string attributes. * * The string attributes control the effect of the string * drawn by FrontEnds. There are currently four valid types. * * A attribute could be one of the following types: * - SCIM_ATTR_NONE No attribute * - SCIM_ATTR_DECORATE Decorate attribute, eg. underline, highlight etc. * - SCIM_ATTR_FOREGROUND Foreground color attribute, in RGB format. * - SCIM_ATTR_BACKGROUND Background color attribute, in RGB format. * * For a DECORATE attribute, it can be one of the following values: * - SCIM_ATTR_DECORATE_NONE No decorate * - SCIM_ATTR_DECORATE_UNDERLINE Underline * - SCIM_ATTR_DECORATE_HIGHLIGHT Highlight * - SCIM_ATTR_DECORATE_REVERSE Reverse * * For a FOREGROUND or BACKGROUND attribute, it's a RGB color value generated with * SCIM_RGB_COLOR (red,green,blue) macro. * You may use SCIM_RGB_COLOR_RED, SCIM_RGB_COLOR_GREEN and SCIM_RGB_COLOR_BLUE to extract * the RGB color later. */ class Attribute { unsigned int m_start; unsigned int m_length; AttributeType m_type; unsigned int m_value; public: /** * @brief Constructor * * @param start - the start position in the string of this attribute. * @param length - the length of this attribute, the range is [start,start+length). * @param type - the type of this attribute. * @param value - the value of this attribute. */ Attribute (unsigned int start = 0, unsigned int length = 0, AttributeType type = SCIM_ATTR_NONE, unsigned int value = 0) : m_start (start), m_length (length), m_type (type), m_value (value) { } /** * @brief Get the type of this attribute. * * @return The type of this attribute. */ AttributeType get_type () const { return m_type; } /** * @brief Get the value of this attribute. * * @return The value of this attribute. */ unsigned int get_value () const { return m_value; } /** * @brief Get the start position of this attribute. * @return The start position of this attribute in the string. */ unsigned int get_start () const { return m_start; } /** * @brief Get the length of this attribute. * @return The length of this attribute in the string. */ unsigned int get_length () const { return m_length; } /** * @brief Get the end position of this attribute. * @return The end position of this attribute. */ unsigned int get_end () const { return m_start + m_length; } /** * @brief Set the type of this attribute. * @param type - the new attribute type to be set. */ void set_type (AttributeType type) { m_type = type; } /** * @brief Set the value of this attribute. * @param value - the new attribute value to be set. */ void set_value (unsigned int value) { m_value = value; } /** * @brief Set the start position of this attribute. * @param start - the new start position in the string. */ void set_start (unsigned int start) { m_start = start; } /** * @brief Set the length of this attribute. * @param length - the new length of this attribute. */ void set_length (unsigned int length) { m_length = length; } }; inline bool operator < (const Attribute &lhs, const Attribute &rhs) { return lhs.get_start () < rhs.get_start () || (lhs.get_start () == rhs.get_start () && (lhs.get_length () < rhs.get_length () || (lhs.get_length () == rhs.get_length () && (lhs.get_type () < rhs.get_type () || (lhs.get_type () == rhs.get_type () && (lhs.get_value () < rhs.get_value ())))))); } /** * @typedef typedef std::vector AttributeList * @brief The container to store a set of Attribute objects. * * You should use the STL container methods to manipulate its objects. */ typedef std::vector AttributeList; /** @} */ } // namespace scim #endif //__SCIM_ATTRIBUTE_H /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_backend.cpp000066400000000000000000000415521415264260100172070ustar00rootroot00000000000000/* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_backend.cpp,v 1.38.2.1 2006/09/24 16:00:52 suzhe Exp $ * */ #define Uses_SCIM_FILTER_MANAGER #define Uses_SCIM_BACKEND #define Uses_SCIM_IMENGINE #define Uses_SCIM_IMENGINE_MODULE #define Uses_SCIM_CONFIG_PATH #define Uses_STL_ALGORITHM #include "scim_private.h" #include "scim.h" #include "scim_stl_map.h" namespace scim { #if SCIM_USE_STL_EXT_HASH_MAP typedef __gnu_cxx::hash_map IMEngineFactoryRepository; #elif SCIM_USE_STL_HASH_MAP typedef std::hash_map IMEngineFactoryRepository; #else typedef std::map IMEngineFactoryRepository; #endif typedef std::vector IMEngineFactoryPointerVector; class LocaleEqual { String m_lhs; public: LocaleEqual (const String &lhs) : m_lhs (lhs) { } bool operator () (const String &rhs) const { if (m_lhs == rhs) return true; if (scim_get_locale_language (m_lhs) == scim_get_locale_language (rhs) && scim_get_locale_encoding (m_lhs) == scim_get_locale_encoding (rhs) && m_lhs.find ('.') != String::npos && rhs.find ('.') != String::npos) return true; return false; } }; class IMEngineFactoryPointerLess { public: bool operator () (const IMEngineFactoryPointer &lhs, const IMEngineFactoryPointer &rhs) const { return (lhs->get_language () < rhs->get_language ()) || (lhs->get_language () == rhs->get_language () && lhs->get_name () < rhs->get_name ()); } }; class BackEndBase::BackEndBaseImpl { IMEngineFactoryRepository m_factory_repository; String m_supported_unicode_locales; ConfigPointer m_config; public: BackEndBaseImpl (const ConfigPointer &config) : m_config (config) { String locales; // Set the default supported locales. locales = scim_global_config_read (SCIM_GLOBAL_CONFIG_SUPPORTED_UNICODE_LOCALES, String ("en_US.UTF-8")); std::vector locale_list; std::vector real_list; scim_split_string_list (locale_list, locales); for (std::vector ::iterator i = locale_list.begin (); i!= locale_list.end (); ++i) { *i = scim_validate_locale (*i); if (i->length () && scim_get_locale_encoding (*i) == "UTF-8" && std::find_if (real_list.begin (), real_list.end (), LocaleEqual (*i)) == real_list.end ()) real_list.push_back (*i); } m_supported_unicode_locales = scim_combine_string_list (real_list); } void clear () { m_factory_repository.clear (); } String get_all_locales () const { String locale; std::vector locale_list; std::vector real_list; IMEngineFactoryRepository::const_iterator it; for (it = m_factory_repository.begin (); it != m_factory_repository.end (); ++it) { if (locale.length () == 0) locale += it->second->get_locales (); else locale += (String (",") + it->second->get_locales ()); } if (m_supported_unicode_locales.length ()) locale += (String (",") + m_supported_unicode_locales); scim_split_string_list (locale_list, locale); for (std::vector ::iterator i = locale_list.begin (); i!= locale_list.end (); i++) { locale = scim_validate_locale (*i); if (locale.length () && std::find_if (real_list.begin (), real_list.end (), LocaleEqual (locale)) == real_list.end ()) real_list.push_back (locale); } return scim_combine_string_list (real_list); } IMEngineFactoryPointer get_factory (const String &uuid) const { IMEngineFactoryRepository::const_iterator it = m_factory_repository.find (uuid); if (it != m_factory_repository.end ()) return it->second; return IMEngineFactoryPointer (0); } uint32 get_factories_for_encoding (std::vector &factories, const String &encoding) const { IMEngineFactoryRepository::const_iterator it; factories.clear (); for (it = m_factory_repository.begin (); it != m_factory_repository.end (); ++it) { if ((encoding.length () == 0 || it->second->validate_encoding (encoding))) factories.push_back (it->second); } sort_factories (factories); return factories.size (); } uint32 get_factories_for_language (std::vector &factories, const String &language) const { IMEngineFactoryRepository::const_iterator it; factories.clear (); for (it = m_factory_repository.begin (); it != m_factory_repository.end (); ++it) { if ((language.length () == 0 || it->second->get_language () == language)) factories.push_back (it->second); } sort_factories (factories); return factories.size (); } IMEngineFactoryPointer get_default_factory (const String &language, const String &encoding) const { if (!language.length ()) return IMEngineFactoryPointer (); IMEngineFactoryPointerVector factories; if (get_factories_for_encoding (factories, encoding) > 0) { IMEngineFactoryPointer lang_first; IMEngineFactoryPointerVector::iterator it; String def_uuid; def_uuid = m_config->read (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, String ("")); // Match by Normalized language exactly. for (it = factories.begin (); it != factories.end (); ++it) { if (scim_get_normalized_language ((*it)->get_language ()) == language && lang_first.null ()) lang_first = *it; if ((*it)->get_uuid () == def_uuid) return *it; } if (!lang_first.null ()) return lang_first; // Match by short language name. for (it = factories.begin (); it != factories.end (); ++it) if ((*it)->get_language () == language.substr (0,2)) return *it; return factories [0]; } return IMEngineFactoryPointer (); } void set_default_factory (const String &language, const String &uuid) { if (!language.length () || !uuid.length ()) return; IMEngineFactoryPointerVector factories; if (get_factories_for_encoding (factories, "") > 0) { IMEngineFactoryPointerVector::iterator it; for (it = factories.begin (); it != factories.end (); ++it) { if ((*it)->get_uuid () == uuid) { m_config->write (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, uuid); return; } } } } IMEngineFactoryPointer get_next_factory (const String &language, const String &encoding, const String &cur_uuid) const { IMEngineFactoryPointerVector factories; if (get_factories_for_encoding (factories, encoding) > 0) { IMEngineFactoryPointer lang_first; IMEngineFactoryPointerVector::iterator it, itl; for (it = factories.begin (); it != factories.end (); ++it) { if ((language.length () == 0 || (*it)->get_language () == language) && lang_first.null ()) lang_first = *it; if ((*it)->get_uuid () == cur_uuid) { for (itl = it + 1; itl != factories.end (); ++itl) { if (language.length () == 0 || (*itl)->get_language () == language) return *itl; } if (!lang_first.null ()) return lang_first; return factories [0]; } } } return IMEngineFactoryPointer (); } IMEngineFactoryPointer get_previous_factory (const String &language, const String &encoding, const String &cur_uuid) const { IMEngineFactoryPointerVector factories; if (get_factories_for_encoding (factories, encoding) > 0) { IMEngineFactoryPointer lang_last; IMEngineFactoryPointerVector::iterator it, itl; for (it = factories.begin (); it != factories.end (); ++it) { if ((language.length () == 0 || (*it)->get_language () == language)) lang_last = *it; } for (it = factories.begin (); it != factories.end (); ++it) { if ((*it)->get_uuid () == cur_uuid) { for (itl = it; itl != factories.begin (); --itl) { if (language.length () == 0 || (*(itl-1))->get_language () == language) return *(itl-1); } if (!lang_last.null ()) return lang_last; return factories [factories.size () - 1]; } } } return IMEngineFactoryPointer (); } bool add_factory (const IMEngineFactoryPointer &factory) { if (!factory.null ()) { String uuid = factory->get_uuid (); if (uuid.length () && m_factory_repository.find (uuid) == m_factory_repository.end ()) { m_factory_repository [uuid] = factory; return true; } } return false; } private: void sort_factories (std::vector &factories) const { std::sort (factories.begin (), factories.end (), IMEngineFactoryPointerLess ()); } }; BackEndBase::BackEndBase (const ConfigPointer &config) : m_impl (new BackEndBase::BackEndBaseImpl (config)) { } BackEndBase::~BackEndBase () { delete m_impl; } String BackEndBase::get_all_locales () const { return m_impl->get_all_locales (); } IMEngineFactoryPointer BackEndBase::get_factory (const String &uuid) const { return m_impl->get_factory (uuid); } uint32 BackEndBase::get_factories_for_encoding (std::vector &factories, const String &encoding) const { return m_impl->get_factories_for_encoding (factories, encoding); } uint32 BackEndBase::get_factories_for_language (std::vector &factories, const String &language) const { return m_impl->get_factories_for_language (factories, language); } IMEngineFactoryPointer BackEndBase::get_default_factory (const String &language, const String &encoding) const { return m_impl->get_default_factory (language, encoding); } void BackEndBase::set_default_factory (const String &language, const String &uuid) { m_impl->set_default_factory (language, uuid); } IMEngineFactoryPointer BackEndBase::get_next_factory (const String &language, const String &encoding, const String &cur_uuid) const { return m_impl->get_next_factory (language, encoding, cur_uuid); } IMEngineFactoryPointer BackEndBase::get_previous_factory (const String &language, const String &encoding, const String &cur_uuid) const { return m_impl->get_previous_factory (language, encoding, cur_uuid); } bool BackEndBase::add_factory (const IMEngineFactoryPointer &factory) { return m_impl->add_factory (factory); } void BackEndBase::clear () { m_impl->clear (); } // Implementation of CommonBackEnd. struct CommonBackEnd::CommonBackEndImpl { IMEngineModule *m_engine_modules; FilterManager *m_filter_manager; CommonBackEndImpl () : m_engine_modules (0), m_filter_manager (0) { } }; CommonBackEnd::CommonBackEnd (const ConfigPointer &config, const std::vector &modules) : BackEndBase (config), m_impl (new CommonBackEndImpl) { IMEngineFactoryPointer factory; std::vector disabled_factories; std::vector new_modules = modules; int all_factories_count = 0; int module_factories_count = 0; if (config.null ()) return; // Get disabled factories list. disabled_factories = scim_global_config_read (SCIM_GLOBAL_CONFIG_DISABLED_IMENGINE_FACTORIES, disabled_factories); // Put socket module to the end of list. for (std::vector::iterator it = new_modules.begin (); it != new_modules.end (); ++it) { if (*it == "socket") { new_modules.erase (it); new_modules.push_back ("socket"); break; } } // Try to load all IMEngine modules try { m_impl->m_engine_modules = new IMEngineModule [new_modules.size ()]; m_impl->m_filter_manager = new FilterManager (config); } catch (const std::exception & err) { std::cerr << err.what () << "\n"; return; } //load IMEngine modules for (size_t i = 0; i < new_modules.size (); ++i) { SCIM_DEBUG_BACKEND (1) << "Loading IMEngine module: " << new_modules [i] << " ...\n"; module_factories_count = 0; if (m_impl->m_engine_modules [i].load (new_modules [i], config) && m_impl->m_engine_modules [i].valid ()) { for (size_t j=0; j < m_impl->m_engine_modules [i].number_of_factories (); ++j) { // Try to load a IMEngine Factory. try { factory = m_impl->m_engine_modules [i].create_factory (j); } catch (const std::exception & err) { std::cerr << err.what () << "\n"; factory.reset (); } if (!factory.null ()) { // Check if it's disabled. if (std::find (disabled_factories.begin (), disabled_factories.end (), factory->get_uuid ()) == disabled_factories.end ()) { // Add it into disabled list to prevent from loading again. disabled_factories.push_back (factory->get_uuid ()); // Only load filter for none socket IMEngines. if (new_modules [i] != "socket") factory = m_impl->m_filter_manager->attach_filters_to_factory (factory); add_factory (factory); all_factories_count ++; module_factories_count ++; SCIM_DEBUG_BACKEND (1) << " Loading IMEngine Factory " << j << " : " << "OK\n"; } else { SCIM_DEBUG_BACKEND (1) << " Loading IMEngine Factory " << j << " : " << "Disabled\n"; factory.reset (); } } else { SCIM_DEBUG_BACKEND (1) << " Loading IMEngine Factory " << j << " : " << "Failed\n"; } } if (module_factories_count) { SCIM_DEBUG_BACKEND (1) << new_modules [i] << " IMEngine module is successfully loaded.\n"; } else { SCIM_DEBUG_BACKEND (1) << "No Factory loaded from " << new_modules [i] << " IMEngine module!\n"; m_impl->m_engine_modules [i].unload (); } } else { SCIM_DEBUG_BACKEND (1) << "Failed to load " << new_modules [i] << " IMEngine module.\n"; } } factory = new ComposeKeyFactory (); if (all_factories_count == 0 || std::find (disabled_factories.begin (), disabled_factories.end (), factory->get_uuid ()) == disabled_factories.end ()) { factory = m_impl->m_filter_manager->attach_filters_to_factory (factory); add_factory (factory); } } CommonBackEnd::~CommonBackEnd () { clear (); delete [] m_impl->m_engine_modules; delete m_impl->m_filter_manager; delete m_impl; } } // namespace scim /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_backend.h000066400000000000000000000146371415264260100166600ustar00rootroot00000000000000/** @file scim_backend.h * @brief definition of scim::BackEnd class. * * Class scim::BackEnd is used to load and manage IMEngine * modules and IMEngineFactories. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_backend.h,v 1.26 2005/10/06 18:02:06 liuspider Exp $ */ #ifndef __SCIM_BACKEND_H #define __SCIM_BACKEND_H namespace scim { /** * @brief An exception class to hold BackEnd related errors. * * scim::BackEndBase and its derived classes must throw * scim::BackEndError object when error. */ class BackEndError: public Exception { public: BackEndError (const String& what_arg) : Exception (String("scim::BackEnd: ") + what_arg) { } }; /** * @brief The interface class to manage a set of IMEngineFactory * and IMEngineInstance objects. * * This is mainly an accessory interface class used by scim::FrontEndBase. * Its responsibility is to hold a set of IMEngineFactory instances * and manage the locales list supported by them. * * Most developer should just use the default implementation * scim::CommonBackEnd. */ class BackEndBase : public ReferencedObject { class BackEndBaseImpl; BackEndBaseImpl *m_impl; protected: /** * @brief Default constructor. * * @param config Config object to be used. */ BackEndBase (const ConfigPointer &config); virtual ~BackEndBase (); public: /** * @brief Get a list of all locales supported by all IMEngineFactories. * @return A comma separated locales list. */ String get_all_locales () const; /** * @return Return the pointer of a Factory. * * @param uuid The uuid of the IMEngineFactory. */ IMEngineFactoryPointer get_factory (const String &uuid) const; public: /** * @name Methods to manipulate IMEngine Factories. * * @{ */ /** * @brief Get the IMEngine factories list for specific encoding * * @param factories the vector to store the factories which * support the encoding. * @param encoding the encoding to be queried. If empty, * all IMEngine factories will be returned. * * @return the number of IMEngine factories found. */ uint32 get_factories_for_encoding (std::vector &factories, const String &encoding = String ("")) const; /** * @brief Get the IMEngine factories list for specific language * * @param factories the vector to store the factories which * support the encoding. * @param language the language to be queried. If empty, * all IMEngine factories will be returned. * * @return the number of IMEngine factories found. */ uint32 get_factories_for_language (std::vector &factories, const String &language = String ("")) const; /** * @brief Get the default IMEngineFactory for a specific language and encoding. * * @param language the language to be queried. * @param encoding the encoding to be queried, if empty then don't match encoding. * * @return the pointer of the default IMEngineFactory for this language. */ IMEngineFactoryPointer get_default_factory (const String &language, const String &encoding) const; /** * @brief Set the default IMEngineFactory for a specific language. * * @param language the language to be set. * @param uuid the uuid of the default IMEngineFactory for this language. */ void set_default_factory (const String &language, const String &uuid); /** * @brief Get the next IMEngineFactory for a specific language and encoding. * * @param language the language to be queried, if empty then don't match language. * @param encoding the encoding to be queried, if empty then don't match encoding. * @param cur_uuid the UUID of current IMEngineFactory. * * @return the pointer of the next IMEngineFactory for this language and encoding * corresponding to the current IMEngineFactory. */ IMEngineFactoryPointer get_next_factory (const String &language, const String &encoding, const String &cur_uuid) const; /** * @brief Get the previous IMEngineFactory for a specific language and encoding. * * @param language the language to be queried, if empty then don't match language. * @param encoding the encoding to be queried, if empty then don't match encoding. * @param cur_uuid the UUID of current IMEngineFactory. * * @return the pointer of the previous IMEngineFactory for this language and encoding * corresponding to the current IMEngineFactory. */ IMEngineFactoryPointer get_previous_factory (const String &language, const String &encoding, const String &cur_uuid) const; /** * @} */ protected: bool add_factory (const IMEngineFactoryPointer &factory); void clear (); }; /** * @typedef typedef Pointer BackEndPointer; * * A smart pointer for scim::BackEndBase and its derived classes. */ typedef Pointer BackEndPointer; /** * @brief The default implementation of scim::BackEndBase interface. */ class CommonBackEnd : public BackEndBase { class CommonBackEndImpl; CommonBackEndImpl *m_impl; public: /** * @brief Constructor * * @param config The pointer to the Config object. * @param modules The list of the IMEngine modules to be loaded. */ CommonBackEnd (const ConfigPointer &config, const std::vector &modules); virtual ~CommonBackEnd (); }; } // namespace scim #endif //__SCIM_BACKEND_H /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_bind.h000066400000000000000000000250741415264260100162020ustar00rootroot00000000000000/** * @file scim_bind.h * @brief Binding adapters. * * A binding adaptor is an object that allows you to convert between slot types. * Usually you wont use a BoundSlot directly but instead call the bind() factory * function (similiar to the slot() factory function) which will create an * appropriate bound slot for you, depending on the parameters passed. * * Most code of this file are came from Inti project. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * Copyright (c) 2002 The Inti Development Team. * Copyright (c) 2000 Red Hat, Inc. * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_bind.h,v 1.10 2005/01/10 08:30:52 suzhe Exp $ */ #ifndef __SCIM_BOUND_SLOT_H #define __SCIM_BOUND_SLOT_H namespace scim { /** * @addtogroup SignalSlot * The classes for signal/slot mechanism. * @{ */ //! @name Bind functions returning a new BoundSlot. //! @{ //! @class BoundSlot0_1 //! @brief Converts a slot taking one argument into a slot taking no arguments. template class BoundSlot0_1 : public Slot0 { Pointer < Slot1 > original_slot; P1 p; public: BoundSlot0_1(Slot1 *slot, P1 p1) : original_slot(slot), p(p1) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p1 - a bound argument of type P1 virtual R call() const { return original_slot->call(p); } //!< Calls the original slot passing it the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p1 - a value of type P1. //! @return a new slot that stores the value p1. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p1, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot0* bind(Slot1 *s, P1 p1) { return new BoundSlot0_1(s, p1); } //! @class BoundSlot1_2 //! @brief Converts a slot taking two arguments into a slot taking one argument. template class BoundSlot1_2 : public Slot1 { Pointer < Slot2 > original_slot; P2 p; public: BoundSlot1_2(Slot2 *slot, P2 p2) : original_slot(slot), p(p2) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p2 - a bound argument of type P2 virtual R call(P1 p1) const { return original_slot->call(p1, p); } //!< Calls the original slot passing it argument p1 and the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p2 - a value of type P2. //! @return a new slot that stores the value p2. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p2, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot1* bind(Slot2 *s, P2 p2) { return new BoundSlot1_2(s, p2); } //! @class BoundSlot2_3 //! @brief Converts a slot taking three arguments into a slot taking two arguments. template class BoundSlot2_3 : public Slot2 { Pointer < Slot3 > original_slot; P3 p; public: BoundSlot2_3(Slot3 *slot, P3 p3) : original_slot(slot), p(p3) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p3 - a bound argument of type P3 virtual R call(P1 p1, P2 p2) const { return original_slot->call(p1, p2, p); } //!< Calls the original slot passing it arguments p1 and p2, and the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p3 - a value of type P3. //! @return a new slot that stores the value p3. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p3, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot2* bind(Slot3 *s, P3 p3) { return new BoundSlot2_3(s, p3); } //! @class BoundSlot3_4 //! @brief Converts a slot taking four arguments into a slot taking three arguments. template class BoundSlot3_4 : public Slot3 { Pointer < Slot4 > original_slot; P4 p; public: BoundSlot3_4(Slot4 *slot, P4 p4) : original_slot(slot), p(p4) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p4 - a bound argument of type P4 virtual R call(P1 p1, P2 p2, P3 p3) const { return original_slot->call(p1, p2, p3, p); } //!< Calls the original slot passing it arguments p1, p2 and p3, and the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p4 - a value of type P4. //! @return a new slot that stores the value p4. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p4, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot3* bind(Slot4 *s, P4 p4) { return new BoundSlot3_4(s, p4); } //! @class BoundSlot4_5 //! @brief Converts a slot taking five arguments into a slot taking four arguments. template class BoundSlot4_5 : public Slot4 { Pointer < Slot5 > original_slot; P5 p; public: BoundSlot4_5(Slot5 *slot, P5 p5) : original_slot(slot), p(p5) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p5 - a bound argument of type P5 virtual R call(P1 p1, P2 p2, P3 p3, P4 p4) const { return original_slot->call(p1, p2, p3, p4, p); } //!< Calls the original slot passing it arguments p1, p2, p3 and p4, and the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p5 - a value of type P5. //! @return a new slot that stores the value p5. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p5, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot4* bind(Slot5 *s, P5 p5) { return new BoundSlot4_5(s, p5); } //! @class BoundSlot5_6 //! @brief Converts a slot taking six arguments into a slot taking five arguments. template class BoundSlot5_6 : public Slot5 { Pointer < Slot6 > original_slot; P6 p; public: BoundSlot5_6(Slot6 *slot, P6 p6) : original_slot(slot), p(p6) {} //!< Constructor. //!< @param slot - a pointer to a slot of type Slot1. //!< @param p6 - a bound argument of type P6 virtual R call(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) const { return original_slot->call(p1, p2, p3, p4, p5, p); } //!< Calls the original slot passing it arguments p1, p2, p3, p4 and p5, and the bound argument p as the last parameter. }; //! Overloaded bind() factory function. //! @param s - a slot of type Slot1. //! @param p6 - a value of type P6. //! @return a new slot that stores the value p6. //! //!
    When then returned slot is called it calls the original slot s, passing //! it the arguments passed to it and the value p6, as the last parameter. If //! the returned slot is connected to a signal it doesn't have to be unreferenced. The //! signal it's connected to will unreference the slot when it is destroyed. Otherwise //! the slot must be unreferenced by calling unref(). template inline Slot5* bind(Slot6 *s, P6 p6) { return new BoundSlot5_6(s, p6); } //! @} /** @} */ } // namespace scim #endif //__SCIM_BOUND_SLOT_H /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_chartraits.cpp000066400000000000000000000075101415264260100177600ustar00rootroot00000000000000/** @file scim_chartraits.cpp */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_chartraits.cpp,v 1.12 2005/07/05 16:18:17 suzhe Exp $ */ #include #include "scim_types.h" using namespace scim; #define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #if !defined(__STDC_ISO_10646__) && GCC_VERSION >= 30200 namespace std { template<> struct char_traits { typedef ucs4_t char_type; typedef uint_least32_t int_type; typedef streampos pos_type; typedef streamoff off_type; typedef mbstate_t state_type; static void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; } static bool eq(const char_type& __c1, const char_type& __c2) { return __c1 == __c2; } static bool lt(const char_type& __c1, const char_type& __c2) { return __c1 < __c2; } static char_type* assign(char_type* __s, size_t __n, char_type __a) { char_type* dest = __s; while (__n-- > 0) *(dest++) = __a; return __s; } static char_type* copy(char_type* __s1, const char_type* __s2, size_t __n) { char_type* dest = __s1; const char_type* from = __s2; while (__n-- > 0) *(dest++) = *(from++); return __s1; } static char_type* move(char_type* __s1, const char_type* __s2, size_t __n) { if (__s1 + __n > __s2) { char_type* dest = __s1 + __n - 1; const char_type* from = __s2; while (__n-- > 0) *(dest--) = *(from++); return __s1; } else { return copy(__s1, __s2, __n); } } static size_t length(const char_type* __s) { size_t __result = 0; while ( *(__s++) != 0 ) __result++; return __result; } static int compare(const char_type* __s1, const char_type* __s2, size_t __n) { while ( (*__s1 == *__s2++) && __n-- > 0 ) if (*__s1++ == 0) return (0); if (__n <= 0) return (0); return ( *__s1 - *(__s2 - 1) ); } static const char_type* find(const char_type* __s, size_t __n, const char_type& __a) { while (__n-- > 0) { if (*__s == __a) return __s; ++__s; } return 0; } static char_type to_char_type (const int_type& __c) { return static_cast(__c); } static int_type to_int_type (const char_type& __c) { return static_cast(__c); } static bool eq_int_type(const int_type& __c1, const int_type& __c2) { return __c1 == __c2; } static int_type eof () { return static_cast(EOF); } static int_type not_eof (const int_type& __c) { return (__c == eof()) ? 0 : __c; } }; } #endif /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_compose_key.cpp000066400000000000000000000171501415264260100201320ustar00rootroot00000000000000/** @file scim_compose_key.cpp * @brief Implementation of class ComposeKeyFactory and ComposeKeyInstance. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_compose_key.cpp,v 1.7 2005/08/16 07:26:54 suzhe Exp $ * */ #define Uses_SCIM_COMPOSE_KEY #define Uses_C_CTYPE #include "scim_private.h" #include "scim.h" #define SCIM_KEYBOARD_ICON_FILE (SCIM_ICONDIR "/keyboard.png") namespace scim { #define SCIM_MAX_COMPOSE_LEN 5 struct ComposeSequence { uint32 keys [SCIM_MAX_COMPOSE_LEN]; ucs4_t unicode; }; class ComposeSequenceLessByKeys { public: bool operator () (const ComposeSequence &lhs, const ComposeSequence &rhs) const { for (size_t i = 0; i < SCIM_MAX_COMPOSE_LEN; ++i) { if (lhs.keys [i] < rhs.keys [i]) return true; else if (lhs.keys [i] > rhs.keys [i]) return false; } return false; } bool operator () (const ComposeSequence &lhs, const uint32 *rhs) const { for (size_t i = 0; i < SCIM_MAX_COMPOSE_LEN; ++i) { if (lhs.keys [i] < rhs [i]) return true; else if (lhs.keys [i] > rhs [i]) return false; } return false; } bool operator () (const uint32 *lhs, const ComposeSequence &rhs) const { for (size_t i = 0; i < SCIM_MAX_COMPOSE_LEN; ++i) { if (lhs [i] < rhs.keys [i]) return true; else if (lhs [i] > rhs.keys [i]) return false; } return false; } bool operator () (const uint32 *lhs, const uint32 *rhs) const { for (size_t i = 0; i < SCIM_MAX_COMPOSE_LEN; ++i) { if (lhs [i] < rhs [i]) return true; else if (lhs [i] > rhs [i]) return false; } return false; } }; // Generated from /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose // Get rid off all keys with unicode value. // Merged with the table in gtk+2.x static const ComposeSequence __scim_compose_seqs[] = { #include "scim_compose_key_data.h" }; #define SCIM_NUM_COMPOSE_SEQS (sizeof (__scim_compose_seqs) / sizeof (__scim_compose_seqs [0])) static uint16 __scim_compose_ignores [] = { SCIM_KEY_ISO_Level3_Shift, SCIM_KEY_ISO_Group_Shift, SCIM_KEY_Mode_switch, SCIM_KEY_Shift_L, SCIM_KEY_Shift_R, SCIM_KEY_Control_L, SCIM_KEY_Control_R, SCIM_KEY_Caps_Lock, SCIM_KEY_Shift_Lock, SCIM_KEY_Meta_L, SCIM_KEY_Meta_R, SCIM_KEY_Alt_L, SCIM_KEY_Alt_R, SCIM_KEY_Super_L, SCIM_KEY_Super_R, SCIM_KEY_Hyper_L, SCIM_KEY_Hyper_R }; #define SCIM_NUM_COMPOSE_IGNORES (sizeof (__scim_compose_ignores) / sizeof (__scim_compose_ignores [0])) ComposeKeyFactory::ComposeKeyFactory () { set_locales ("C"); } ComposeKeyFactory::~ComposeKeyFactory () { } WideString ComposeKeyFactory::get_name () const { return utf8_mbstowcs (_("English/European")); } WideString ComposeKeyFactory::get_authors () const { return utf8_mbstowcs ("James Su "); } WideString ComposeKeyFactory::get_credits () const { return WideString (); } WideString ComposeKeyFactory::get_help () const { return WideString (); } String ComposeKeyFactory::get_uuid () const { return String (SCIM_COMPOSE_KEY_FACTORY_UUID); } String ComposeKeyFactory::get_icon_file () const { return String (SCIM_KEYBOARD_ICON_FILE); } bool ComposeKeyFactory::validate_encoding (const String& encoding) const { return true; } bool ComposeKeyFactory::validate_locale (const String& locale) const { return true; } IMEngineInstancePointer ComposeKeyFactory::create_instance (const String& encoding, int id) { return new ComposeKeyInstance (this, encoding, id); } ComposeKeyInstance::ComposeKeyInstance (ComposeKeyFactory *factory, const String& encoding, int id) : IMEngineInstanceBase (factory, encoding, id) { m_compose_buffer [0] = m_compose_buffer [1] = m_compose_buffer [2] = m_compose_buffer [3] = 0; m_compose_buffer [4] = m_compose_buffer [5] = m_compose_buffer [6] = m_compose_buffer [7] = 0; } ComposeKeyInstance::~ComposeKeyInstance () { } bool ComposeKeyInstance::process_key_event (const KeyEvent& key) { if (key.is_key_release ()) return false; // Ignore modifier key presses. if (std::binary_search (__scim_compose_ignores, __scim_compose_ignores + SCIM_NUM_COMPOSE_IGNORES, (uint16) key.code)) return false; // Ignore the key if ctrl or alt is down. if (key.is_control_down () || key.is_alt_down ()) return false; int n_compose = 0; while (m_compose_buffer [n_compose] != 0 && n_compose < SCIM_MAX_COMPOSE_LEN) ++ n_compose; // The buffer is full, then reset the buffer first. if (n_compose == SCIM_MAX_COMPOSE_LEN) { reset (); n_compose = 0; } m_compose_buffer [n_compose] = (uint32) key.code; const ComposeSequence *it = std::lower_bound (__scim_compose_seqs, __scim_compose_seqs + SCIM_NUM_COMPOSE_SEQS, m_compose_buffer, ComposeSequenceLessByKeys ()); // Not result found, reset the buffer and return false. if (it == __scim_compose_seqs + SCIM_NUM_COMPOSE_SEQS) { reset (); return false; } // Check if the compose sequence is match. for (n_compose = 0; n_compose < SCIM_MAX_COMPOSE_LEN; ++ n_compose) { if (m_compose_buffer [n_compose] == 0) break; // Not match, reset the buffer and return. // If it's the first key press, then return false to forward it. // Otherwise return true to ignore it. if (m_compose_buffer [n_compose] != it->keys [n_compose]) { reset (); return n_compose != 0; } } // Match exactly, commit the result. if (n_compose == SCIM_MAX_COMPOSE_LEN || it->keys [n_compose] == 0) { WideString wstr; wstr.push_back (it->unicode); commit_string (wstr); reset (); } return true; } void ComposeKeyInstance::move_preedit_caret (unsigned int /*pos*/) { } void ComposeKeyInstance::select_candidate (unsigned int /*item*/) { } void ComposeKeyInstance::update_lookup_table_page_size (unsigned int /*page_size*/) { } void ComposeKeyInstance::lookup_table_page_up () { } void ComposeKeyInstance::lookup_table_page_down () { } void ComposeKeyInstance::reset () { m_compose_buffer [0] = m_compose_buffer [1] = m_compose_buffer [2] = m_compose_buffer [3] = 0; m_compose_buffer [4] = m_compose_buffer [5] = m_compose_buffer [6] = m_compose_buffer [7] = 0; } void ComposeKeyInstance::focus_in () { register_properties (PropertyList ()); reset (); } void ComposeKeyInstance::focus_out () { } void ComposeKeyInstance::trigger_property (const String & /*property*/) { } } // namespace scim /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_compose_key.h000066400000000000000000000053401415264260100175750ustar00rootroot00000000000000/** * @file scim_compose_key.h * @brief Defines scim::ComposeKeyFactory and scim::ComposeKeyInstance. */ /* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_compose_key.h,v 1.5 2005/08/16 07:26:54 suzhe Exp $ */ #ifndef __SCIM_COMPOSE_KEY_H #define __SCIM_COMPOSE_KEY_H namespace scim { /** * @addtogroup IMEngine * @{ */ #define SCIM_COMPOSE_KEY_FACTORY_UUID "c6bebc27-6324-4b77-8ad4-6d41dcaf2e08" /** * @brief A simple IMEngine to deal with the Compose keys. */ class ComposeKeyFactory : public IMEngineFactoryBase { public: ComposeKeyFactory (); virtual ~ComposeKeyFactory (); virtual WideString get_name () const; virtual String get_uuid () const; virtual String get_icon_file () const; virtual WideString get_authors () const; virtual WideString get_credits () const; virtual WideString get_help () const; virtual bool validate_encoding (const String& encoding) const; virtual bool validate_locale (const String& locale) const; virtual IMEngineInstancePointer create_instance (const String& encoding, int id = -1); }; class ComposeKeyInstance : public IMEngineInstanceBase { uint32 m_compose_buffer [8]; public: ComposeKeyInstance (ComposeKeyFactory *factory, const String &encoding, int id = -1); virtual ~ComposeKeyInstance (); virtual bool process_key_event (const KeyEvent& key); virtual void move_preedit_caret (unsigned int pos); virtual void select_candidate (unsigned int index); virtual void update_lookup_table_page_size (unsigned int page_size); virtual void lookup_table_page_up (); virtual void lookup_table_page_down (); virtual void reset (); virtual void focus_in (); virtual void focus_out (); virtual void trigger_property (const String& property); }; /** @} */ } // namespace scim #endif //__SCIM_COMPOSE_KEY_H /* vi:ts=4:nowrap:ai:expandtab */ scim-master/src/scim_compose_key_data.h000066400000000000000000034265461415264260100206100ustar00rootroot00000000000000 {{SCIM_KEY_combining_tilde, SCIM_KEY_A, 0, 0, 0 }, 0x00C3}, {{SCIM_KEY_combining_tilde, SCIM_KEY_E, 0, 0, 0 }, 0x1EBC}, {{SCIM_KEY_combining_tilde, SCIM_KEY_I, 0, 0, 0 }, 0x0128}, {{SCIM_KEY_combining_tilde, SCIM_KEY_N, 0, 0, 0 }, 0x00D1}, {{SCIM_KEY_combining_tilde, SCIM_KEY_O, 0, 0, 0 }, 0x00D5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_U, 0, 0, 0 }, 0x0168}, {{SCIM_KEY_combining_tilde, SCIM_KEY_V, 0, 0, 0 }, 0x1E7C}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF8}, {{SCIM_KEY_combining_tilde, SCIM_KEY_a, 0, 0, 0 }, 0x00E3}, {{SCIM_KEY_combining_tilde, SCIM_KEY_e, 0, 0, 0 }, 0x1EBD}, {{SCIM_KEY_combining_tilde, SCIM_KEY_i, 0, 0, 0 }, 0x0129}, {{SCIM_KEY_combining_tilde, SCIM_KEY_n, 0, 0, 0 }, 0x00F1}, {{SCIM_KEY_combining_tilde, SCIM_KEY_o, 0, 0, 0 }, 0x00F5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_u, 0, 0, 0 }, 0x0169}, {{SCIM_KEY_combining_tilde, SCIM_KEY_v, 0, 0, 0 }, 0x1E7D}, {{SCIM_KEY_combining_tilde, SCIM_KEY_y, 0, 0, 0 }, 0x1EF9}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EAA}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED6}, {{SCIM_KEY_combining_tilde, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EAB}, {{SCIM_KEY_combining_tilde, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED7}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EE0}, {{SCIM_KEY_combining_tilde, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EE1}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEE}, {{SCIM_KEY_combining_tilde, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EEF}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EAA}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED6}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EAB}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED7}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EE0}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEE}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EE1}, {{SCIM_KEY_combining_tilde, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EEF}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE0}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEE}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE1}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEF}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EAA}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED6}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EAB}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC5}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED7}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_combining_tilde, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_combining_grave, SCIM_KEY_A, 0, 0, 0 }, 0x00C0}, {{SCIM_KEY_combining_grave, SCIM_KEY_E, 0, 0, 0 }, 0x00C8}, {{SCIM_KEY_combining_grave, SCIM_KEY_I, 0, 0, 0 }, 0x00CC}, {{SCIM_KEY_combining_grave, SCIM_KEY_N, 0, 0, 0 }, 0x01F8}, {{SCIM_KEY_combining_grave, SCIM_KEY_O, 0, 0, 0 }, 0x00D2}, {{SCIM_KEY_combining_grave, SCIM_KEY_U, 0, 0, 0 }, 0x00D9}, {{SCIM_KEY_combining_grave, SCIM_KEY_W, 0, 0, 0 }, 0x1E80}, {{SCIM_KEY_combining_grave, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF2}, {{SCIM_KEY_combining_grave, SCIM_KEY_a, 0, 0, 0 }, 0x00E0}, {{SCIM_KEY_combining_grave, SCIM_KEY_e, 0, 0, 0 }, 0x00E8}, {{SCIM_KEY_combining_grave, SCIM_KEY_i, 0, 0, 0 }, 0x00EC}, {{SCIM_KEY_combining_grave, SCIM_KEY_n, 0, 0, 0 }, 0x01F9}, {{SCIM_KEY_combining_grave, SCIM_KEY_o, 0, 0, 0 }, 0x00F2}, {{SCIM_KEY_combining_grave, SCIM_KEY_u, 0, 0, 0 }, 0x00F9}, {{SCIM_KEY_combining_grave, SCIM_KEY_w, 0, 0, 0 }, 0x1E81}, {{SCIM_KEY_combining_grave, SCIM_KEY_y, 0, 0, 0 }, 0x1EF3}, {{SCIM_KEY_combining_grave, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA6}, {{SCIM_KEY_combining_grave, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC0}, {{SCIM_KEY_combining_grave, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01DB}, {{SCIM_KEY_combining_grave, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA7}, {{SCIM_KEY_combining_grave, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC1}, {{SCIM_KEY_combining_grave, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED3}, {{SCIM_KEY_combining_grave, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01DC}, {{SCIM_KEY_combining_grave, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB0}, {{SCIM_KEY_combining_grave, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB1}, {{SCIM_KEY_combining_grave, SCIM_KEY_Emacron, 0, 0, 0 }, 0x1E14}, {{SCIM_KEY_combining_grave, SCIM_KEY_emacron, 0, 0, 0 }, 0x1E15}, {{SCIM_KEY_combining_grave, SCIM_KEY_Omacron, 0, 0, 0 }, 0x1E50}, {{SCIM_KEY_combining_grave, SCIM_KEY_omacron, 0, 0, 0 }, 0x1E51}, {{SCIM_KEY_combining_grave, SCIM_KEY_Cyrillic_ie, 0, 0, 0 }, 0x0450}, {{SCIM_KEY_combining_grave, SCIM_KEY_Cyrillic_i, 0, 0, 0 }, 0x045D}, {{SCIM_KEY_combining_grave, SCIM_KEY_Cyrillic_IE, 0, 0, 0 }, 0x0400}, {{SCIM_KEY_combining_grave, SCIM_KEY_Cyrillic_I, 0, 0, 0 }, 0x040D}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x1FD2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x1FE2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1FBA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x1FC8}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x1FCA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1FDA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x1FF8}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x1FEA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x1FFA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1F70}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x1F72}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1F74}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1F76}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x1F78}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1F7A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1F7C}, {{SCIM_KEY_combining_grave, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDC}, {{SCIM_KEY_combining_grave, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDD}, {{SCIM_KEY_combining_grave, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEA}, {{SCIM_KEY_combining_grave, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EEB}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA6}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC0}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED2}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA7}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC1}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED3}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_macron, SCIM_KEY_E, 0, 0 }, 0x1E14}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_macron, SCIM_KEY_O, 0, 0 }, 0x1E50}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_macron, SCIM_KEY_e, 0, 0 }, 0x1E15}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_macron, SCIM_KEY_o, 0, 0 }, 0x1E51}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB0}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB1}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01DB}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01DC}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD2}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE2}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDC}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEA}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDD}, {{SCIM_KEY_combining_grave, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EEB}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01DB}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01DC}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6B}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F03}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F13}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F23}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F33}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F43}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F53}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F63}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6A}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F02}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F12}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F22}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F32}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F42}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F52}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F62}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDC}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEA}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDD}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEB}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA6}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC0}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED2}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA7}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC1}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED3}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6A}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F02}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F12}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F22}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F32}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F42}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F52}, {{SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F62}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6B}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F03}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F13}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F23}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F33}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F43}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F53}, {{SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F63}, {{SCIM_KEY_combining_grave, 0x1001f00, 0, 0, 0 }, 0x1F02}, {{SCIM_KEY_combining_grave, 0x1001f01, 0, 0, 0 }, 0x1F03}, {{SCIM_KEY_combining_grave, 0x1001f08, 0, 0, 0 }, 0x1F0A}, {{SCIM_KEY_combining_grave, 0x1001f09, 0, 0, 0 }, 0x1F0B}, {{SCIM_KEY_combining_grave, 0x1001f10, 0, 0, 0 }, 0x1F12}, {{SCIM_KEY_combining_grave, 0x1001f11, 0, 0, 0 }, 0x1F13}, {{SCIM_KEY_combining_grave, 0x1001f18, 0, 0, 0 }, 0x1F1A}, {{SCIM_KEY_combining_grave, 0x1001f19, 0, 0, 0 }, 0x1F1B}, {{SCIM_KEY_combining_grave, 0x1001f20, 0, 0, 0 }, 0x1F22}, {{SCIM_KEY_combining_grave, 0x1001f21, 0, 0, 0 }, 0x1F23}, {{SCIM_KEY_combining_grave, 0x1001f28, 0, 0, 0 }, 0x1F2A}, {{SCIM_KEY_combining_grave, 0x1001f29, 0, 0, 0 }, 0x1F2B}, {{SCIM_KEY_combining_grave, 0x1001f30, 0, 0, 0 }, 0x1F32}, {{SCIM_KEY_combining_grave, 0x1001f31, 0, 0, 0 }, 0x1F33}, {{SCIM_KEY_combining_grave, 0x1001f38, 0, 0, 0 }, 0x1F3A}, {{SCIM_KEY_combining_grave, 0x1001f39, 0, 0, 0 }, 0x1F3B}, {{SCIM_KEY_combining_grave, 0x1001f40, 0, 0, 0 }, 0x1F42}, {{SCIM_KEY_combining_grave, 0x1001f41, 0, 0, 0 }, 0x1F43}, {{SCIM_KEY_combining_grave, 0x1001f48, 0, 0, 0 }, 0x1F4A}, {{SCIM_KEY_combining_grave, 0x1001f49, 0, 0, 0 }, 0x1F4B}, {{SCIM_KEY_combining_grave, 0x1001f50, 0, 0, 0 }, 0x1F52}, {{SCIM_KEY_combining_grave, 0x1001f51, 0, 0, 0 }, 0x1F53}, {{SCIM_KEY_combining_grave, 0x1001f59, 0, 0, 0 }, 0x1F5B}, {{SCIM_KEY_combining_grave, 0x1001f60, 0, 0, 0 }, 0x1F62}, {{SCIM_KEY_combining_grave, 0x1001f61, 0, 0, 0 }, 0x1F63}, {{SCIM_KEY_combining_grave, 0x1001f68, 0, 0, 0 }, 0x1F6A}, {{SCIM_KEY_combining_grave, 0x1001f69, 0, 0, 0 }, 0x1F6B}, {{SCIM_KEY_combining_acute, SCIM_KEY_A, 0, 0, 0 }, 0x00C1}, {{SCIM_KEY_combining_acute, SCIM_KEY_C, 0, 0, 0 }, 0x0106}, {{SCIM_KEY_combining_acute, SCIM_KEY_E, 0, 0, 0 }, 0x00C9}, {{SCIM_KEY_combining_acute, SCIM_KEY_G, 0, 0, 0 }, 0x01F4}, {{SCIM_KEY_combining_acute, SCIM_KEY_I, 0, 0, 0 }, 0x00CD}, {{SCIM_KEY_combining_acute, SCIM_KEY_K, 0, 0, 0 }, 0x1E30}, {{SCIM_KEY_combining_acute, SCIM_KEY_L, 0, 0, 0 }, 0x0139}, {{SCIM_KEY_combining_acute, SCIM_KEY_M, 0, 0, 0 }, 0x1E3E}, {{SCIM_KEY_combining_acute, SCIM_KEY_N, 0, 0, 0 }, 0x0143}, {{SCIM_KEY_combining_acute, SCIM_KEY_O, 0, 0, 0 }, 0x00D3}, {{SCIM_KEY_combining_acute, SCIM_KEY_P, 0, 0, 0 }, 0x1E54}, {{SCIM_KEY_combining_acute, SCIM_KEY_R, 0, 0, 0 }, 0x0154}, {{SCIM_KEY_combining_acute, SCIM_KEY_S, 0, 0, 0 }, 0x015A}, {{SCIM_KEY_combining_acute, SCIM_KEY_U, 0, 0, 0 }, 0x00DA}, {{SCIM_KEY_combining_acute, SCIM_KEY_W, 0, 0, 0 }, 0x1E82}, {{SCIM_KEY_combining_acute, SCIM_KEY_Y, 0, 0, 0 }, 0x00DD}, {{SCIM_KEY_combining_acute, SCIM_KEY_Z, 0, 0, 0 }, 0x0179}, {{SCIM_KEY_combining_acute, SCIM_KEY_a, 0, 0, 0 }, 0x00E1}, {{SCIM_KEY_combining_acute, SCIM_KEY_c, 0, 0, 0 }, 0x0107}, {{SCIM_KEY_combining_acute, SCIM_KEY_e, 0, 0, 0 }, 0x00E9}, {{SCIM_KEY_combining_acute, SCIM_KEY_g, 0, 0, 0 }, 0x01F5}, {{SCIM_KEY_combining_acute, SCIM_KEY_i, 0, 0, 0 }, 0x00ED}, {{SCIM_KEY_combining_acute, SCIM_KEY_k, 0, 0, 0 }, 0x1E31}, {{SCIM_KEY_combining_acute, SCIM_KEY_l, 0, 0, 0 }, 0x013A}, {{SCIM_KEY_combining_acute, SCIM_KEY_m, 0, 0, 0 }, 0x1E3F}, {{SCIM_KEY_combining_acute, SCIM_KEY_n, 0, 0, 0 }, 0x0144}, {{SCIM_KEY_combining_acute, SCIM_KEY_o, 0, 0, 0 }, 0x00F3}, {{SCIM_KEY_combining_acute, SCIM_KEY_p, 0, 0, 0 }, 0x1E55}, {{SCIM_KEY_combining_acute, SCIM_KEY_r, 0, 0, 0 }, 0x0155}, {{SCIM_KEY_combining_acute, SCIM_KEY_s, 0, 0, 0 }, 0x015B}, {{SCIM_KEY_combining_acute, SCIM_KEY_u, 0, 0, 0 }, 0x00FA}, {{SCIM_KEY_combining_acute, SCIM_KEY_w, 0, 0, 0 }, 0x1E83}, {{SCIM_KEY_combining_acute, SCIM_KEY_y, 0, 0, 0 }, 0x00FD}, {{SCIM_KEY_combining_acute, SCIM_KEY_z, 0, 0, 0 }, 0x017A}, {{SCIM_KEY_combining_acute, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA4}, {{SCIM_KEY_combining_acute, SCIM_KEY_Aring, 0, 0, 0 }, 0x01FA}, {{SCIM_KEY_combining_acute, SCIM_KEY_AE, 0, 0, 0 }, 0x01FC}, {{SCIM_KEY_combining_acute, SCIM_KEY_Ccedilla, 0, 0, 0 }, 0x1E08}, {{SCIM_KEY_combining_acute, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EBE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Idiaeresis, 0, 0, 0 }, 0x1E2E}, {{SCIM_KEY_combining_acute, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED0}, {{SCIM_KEY_combining_acute, SCIM_KEY_Otilde, 0, 0, 0 }, 0x1E4C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Ooblique, 0, 0, 0 }, 0x01FE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01D7}, {{SCIM_KEY_combining_acute, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA5}, {{SCIM_KEY_combining_acute, SCIM_KEY_aring, 0, 0, 0 }, 0x01FB}, {{SCIM_KEY_combining_acute, SCIM_KEY_ae, 0, 0, 0 }, 0x01FD}, {{SCIM_KEY_combining_acute, SCIM_KEY_ccedilla, 0, 0, 0 }, 0x1E09}, {{SCIM_KEY_combining_acute, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EBF}, {{SCIM_KEY_combining_acute, SCIM_KEY_idiaeresis, 0, 0, 0 }, 0x1E2F}, {{SCIM_KEY_combining_acute, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED1}, {{SCIM_KEY_combining_acute, SCIM_KEY_otilde, 0, 0, 0 }, 0x1E4D}, {{SCIM_KEY_combining_acute, SCIM_KEY_oslash, 0, 0, 0 }, 0x01FF}, {{SCIM_KEY_combining_acute, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01D8}, {{SCIM_KEY_combining_acute, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EAE}, {{SCIM_KEY_combining_acute, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EAF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Emacron, 0, 0, 0 }, 0x1E16}, {{SCIM_KEY_combining_acute, SCIM_KEY_emacron, 0, 0, 0 }, 0x1E17}, {{SCIM_KEY_combining_acute, SCIM_KEY_Omacron, 0, 0, 0 }, 0x1E52}, {{SCIM_KEY_combining_acute, SCIM_KEY_Utilde, 0, 0, 0 }, 0x1E78}, {{SCIM_KEY_combining_acute, SCIM_KEY_omacron, 0, 0, 0 }, 0x1E53}, {{SCIM_KEY_combining_acute, SCIM_KEY_utilde, 0, 0, 0 }, 0x1E79}, {{SCIM_KEY_combining_acute, SCIM_KEY_Cyrillic_ghe, 0, 0, 0 }, 0x0453}, {{SCIM_KEY_combining_acute, SCIM_KEY_Cyrillic_ka, 0, 0, 0 }, 0x045C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Cyrillic_GHE, 0, 0, 0 }, 0x0403}, {{SCIM_KEY_combining_acute, SCIM_KEY_Cyrillic_KA, 0, 0, 0 }, 0x040C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x0390}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x03B0}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x0386}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x0388}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x0389}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x038A}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x038C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x038E}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x038F}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x03AC}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x03AD}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x03AE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x03AF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x03CC}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x03CD}, {{SCIM_KEY_combining_acute, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x03CE}, {{SCIM_KEY_combining_acute, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4C}, {{SCIM_KEY_combining_acute, SCIM_KEY_combining_tilde, SCIM_KEY_U, 0, 0 }, 0x1E78}, {{SCIM_KEY_combining_acute, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4D}, {{SCIM_KEY_combining_acute, SCIM_KEY_combining_tilde, SCIM_KEY_u, 0, 0 }, 0x1E79}, {{SCIM_KEY_combining_acute, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDA}, {{SCIM_KEY_combining_acute, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDB}, {{SCIM_KEY_combining_acute, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EE8}, {{SCIM_KEY_combining_acute, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EE9}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA4}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EBE}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED0}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA5}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EBF}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED1}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4C}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_tilde, SCIM_KEY_U, 0, 0 }, 0x1E78}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4D}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_tilde, SCIM_KEY_u, 0, 0 }, 0x1E79}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_macron, SCIM_KEY_E, 0, 0 }, 0x1E16}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_macron, SCIM_KEY_O, 0, 0 }, 0x1E52}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_macron, SCIM_KEY_e, 0, 0 }, 0x1E17}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_macron, SCIM_KEY_o, 0, 0 }, 0x1E53}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EAE}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EAF}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_I, 0, 0 }, 0x1E2E}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01D7}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_i, 0, 0 }, 0x1E2F}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01D8}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x0390}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03B0}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_abovering, SCIM_KEY_A, 0, 0 }, 0x01FA}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_abovering, SCIM_KEY_a, 0, 0 }, 0x01FB}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_C, 0, 0 }, 0x1E08}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_c, 0, 0 }, 0x1E09}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDA}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EE8}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDB}, {{SCIM_KEY_combining_acute, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EE9}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6C}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F04}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F14}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F24}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F34}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F44}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F54}, {{SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F64}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6D}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F05}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F15}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F25}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F35}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F45}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F55}, {{SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F65}, {{SCIM_KEY_combining_acute, 0x1001f00, 0, 0, 0 }, 0x1F04}, {{SCIM_KEY_combining_acute, 0x1001f01, 0, 0, 0 }, 0x1F05}, {{SCIM_KEY_combining_acute, 0x1001f08, 0, 0, 0 }, 0x1F0C}, {{SCIM_KEY_combining_acute, 0x1001f09, 0, 0, 0 }, 0x1F0D}, {{SCIM_KEY_combining_acute, 0x1001f10, 0, 0, 0 }, 0x1F14}, {{SCIM_KEY_combining_acute, 0x1001f11, 0, 0, 0 }, 0x1F15}, {{SCIM_KEY_combining_acute, 0x1001f18, 0, 0, 0 }, 0x1F1C}, {{SCIM_KEY_combining_acute, 0x1001f19, 0, 0, 0 }, 0x1F1D}, {{SCIM_KEY_combining_acute, 0x1001f20, 0, 0, 0 }, 0x1F24}, {{SCIM_KEY_combining_acute, 0x1001f21, 0, 0, 0 }, 0x1F25}, {{SCIM_KEY_combining_acute, 0x1001f28, 0, 0, 0 }, 0x1F2C}, {{SCIM_KEY_combining_acute, 0x1001f29, 0, 0, 0 }, 0x1F2D}, {{SCIM_KEY_combining_acute, 0x1001f30, 0, 0, 0 }, 0x1F34}, {{SCIM_KEY_combining_acute, 0x1001f31, 0, 0, 0 }, 0x1F35}, {{SCIM_KEY_combining_acute, 0x1001f38, 0, 0, 0 }, 0x1F3C}, {{SCIM_KEY_combining_acute, 0x1001f39, 0, 0, 0 }, 0x1F3D}, {{SCIM_KEY_combining_acute, 0x1001f40, 0, 0, 0 }, 0x1F44}, {{SCIM_KEY_combining_acute, 0x1001f41, 0, 0, 0 }, 0x1F45}, {{SCIM_KEY_combining_acute, 0x1001f48, 0, 0, 0 }, 0x1F4C}, {{SCIM_KEY_combining_acute, 0x1001f49, 0, 0, 0 }, 0x1F4D}, {{SCIM_KEY_combining_acute, 0x1001f50, 0, 0, 0 }, 0x1F54}, {{SCIM_KEY_combining_acute, 0x1001f51, 0, 0, 0 }, 0x1F55}, {{SCIM_KEY_combining_acute, 0x1001f59, 0, 0, 0 }, 0x1F5D}, {{SCIM_KEY_combining_acute, 0x1001f60, 0, 0, 0 }, 0x1F64}, {{SCIM_KEY_combining_acute, 0x1001f61, 0, 0, 0 }, 0x1F65}, {{SCIM_KEY_combining_acute, 0x1001f68, 0, 0, 0 }, 0x1F6C}, {{SCIM_KEY_combining_acute, 0x1001f69, 0, 0, 0 }, 0x1F6D}, {{SCIM_KEY_combining_hook, SCIM_KEY_A, 0, 0, 0 }, 0x1EA2}, {{SCIM_KEY_combining_hook, SCIM_KEY_E, 0, 0, 0 }, 0x1EBA}, {{SCIM_KEY_combining_hook, SCIM_KEY_I, 0, 0, 0 }, 0x1EC8}, {{SCIM_KEY_combining_hook, SCIM_KEY_O, 0, 0, 0 }, 0x1ECE}, {{SCIM_KEY_combining_hook, SCIM_KEY_U, 0, 0, 0 }, 0x1EE6}, {{SCIM_KEY_combining_hook, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF6}, {{SCIM_KEY_combining_hook, SCIM_KEY_a, 0, 0, 0 }, 0x1EA3}, {{SCIM_KEY_combining_hook, SCIM_KEY_e, 0, 0, 0 }, 0x1EBB}, {{SCIM_KEY_combining_hook, SCIM_KEY_i, 0, 0, 0 }, 0x1EC9}, {{SCIM_KEY_combining_hook, SCIM_KEY_o, 0, 0, 0 }, 0x1ECF}, {{SCIM_KEY_combining_hook, SCIM_KEY_u, 0, 0, 0 }, 0x1EE7}, {{SCIM_KEY_combining_hook, SCIM_KEY_y, 0, 0, 0 }, 0x1EF7}, {{SCIM_KEY_combining_hook, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA8}, {{SCIM_KEY_combining_hook, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC2}, {{SCIM_KEY_combining_hook, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED4}, {{SCIM_KEY_combining_hook, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA9}, {{SCIM_KEY_combining_hook, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC3}, {{SCIM_KEY_combining_hook, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED5}, {{SCIM_KEY_combining_hook, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB2}, {{SCIM_KEY_combining_hook, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB3}, {{SCIM_KEY_combining_hook, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDE}, {{SCIM_KEY_combining_hook, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDF}, {{SCIM_KEY_combining_hook, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEC}, {{SCIM_KEY_combining_hook, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EED}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA8}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC2}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED4}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA9}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC3}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED5}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB2}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB3}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDE}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEC}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDF}, {{SCIM_KEY_combining_hook, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EED}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDE}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEC}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDF}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EED}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA8}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC2}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED4}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA9}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC3}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED5}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_combining_hook, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0, 0, 0 }, 0x1EA0}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_B, 0, 0, 0 }, 0x1E04}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_D, 0, 0, 0 }, 0x1E0C}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_E, 0, 0, 0 }, 0x1EB8}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_H, 0, 0, 0 }, 0x1E24}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_I, 0, 0, 0 }, 0x1ECA}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_K, 0, 0, 0 }, 0x1E32}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_L, 0, 0, 0 }, 0x1E36}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_M, 0, 0, 0 }, 0x1E42}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_N, 0, 0, 0 }, 0x1E46}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_O, 0, 0, 0 }, 0x1ECC}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_R, 0, 0, 0 }, 0x1E5A}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_S, 0, 0, 0 }, 0x1E62}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_T, 0, 0, 0 }, 0x1E6C}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_U, 0, 0, 0 }, 0x1EE4}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_V, 0, 0, 0 }, 0x1E7E}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_W, 0, 0, 0 }, 0x1E88}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF4}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Z, 0, 0, 0 }, 0x1E92}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0, 0, 0 }, 0x1EA1}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_b, 0, 0, 0 }, 0x1E05}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_d, 0, 0, 0 }, 0x1E0D}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_e, 0, 0, 0 }, 0x1EB9}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_h, 0, 0, 0 }, 0x1E25}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_i, 0, 0, 0 }, 0x1ECB}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_k, 0, 0, 0 }, 0x1E33}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_l, 0, 0, 0 }, 0x1E37}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_m, 0, 0, 0 }, 0x1E43}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_n, 0, 0, 0 }, 0x1E47}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_o, 0, 0, 0 }, 0x1ECD}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_r, 0, 0, 0 }, 0x1E5B}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_s, 0, 0, 0 }, 0x1E63}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_t, 0, 0, 0 }, 0x1E6D}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_u, 0, 0, 0 }, 0x1EE5}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_v, 0, 0, 0 }, 0x1E7F}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_w, 0, 0, 0 }, 0x1E89}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_y, 0, 0, 0 }, 0x1EF5}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_z, 0, 0, 0 }, 0x1E93}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EE2}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EE3}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EF0}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EF1}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EE2}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EF0}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EE3}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EF1}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE2}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EF0}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE3}, {{SCIM_KEY_combining_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EF1}, {{SCIM_KEY_dead_grave, SCIM_KEY_space, 0, 0, 0 }, 0x0060}, {{SCIM_KEY_dead_grave, SCIM_KEY_A, 0, 0, 0 }, 0x00C0}, {{SCIM_KEY_dead_grave, SCIM_KEY_E, 0, 0, 0 }, 0x00C8}, {{SCIM_KEY_dead_grave, SCIM_KEY_I, 0, 0, 0 }, 0x00CC}, {{SCIM_KEY_dead_grave, SCIM_KEY_N, 0, 0, 0 }, 0x01F8}, {{SCIM_KEY_dead_grave, SCIM_KEY_O, 0, 0, 0 }, 0x00D2}, {{SCIM_KEY_dead_grave, SCIM_KEY_U, 0, 0, 0 }, 0x00D9}, {{SCIM_KEY_dead_grave, SCIM_KEY_W, 0, 0, 0 }, 0x1E80}, {{SCIM_KEY_dead_grave, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF2}, {{SCIM_KEY_dead_grave, SCIM_KEY_grave, 0, 0, 0 }, 0x0060}, {{SCIM_KEY_dead_grave, SCIM_KEY_a, 0, 0, 0 }, 0x00E0}, {{SCIM_KEY_dead_grave, SCIM_KEY_e, 0, 0, 0 }, 0x00E8}, {{SCIM_KEY_dead_grave, SCIM_KEY_i, 0, 0, 0 }, 0x00EC}, {{SCIM_KEY_dead_grave, SCIM_KEY_n, 0, 0, 0 }, 0x01F9}, {{SCIM_KEY_dead_grave, SCIM_KEY_o, 0, 0, 0 }, 0x00F2}, {{SCIM_KEY_dead_grave, SCIM_KEY_u, 0, 0, 0 }, 0x00F9}, {{SCIM_KEY_dead_grave, SCIM_KEY_w, 0, 0, 0 }, 0x1E81}, {{SCIM_KEY_dead_grave, SCIM_KEY_y, 0, 0, 0 }, 0x1EF3}, {{SCIM_KEY_dead_grave, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA6}, {{SCIM_KEY_dead_grave, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC0}, {{SCIM_KEY_dead_grave, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01DB}, {{SCIM_KEY_dead_grave, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA7}, {{SCIM_KEY_dead_grave, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC1}, {{SCIM_KEY_dead_grave, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED3}, {{SCIM_KEY_dead_grave, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01DC}, {{SCIM_KEY_dead_grave, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB0}, {{SCIM_KEY_dead_grave, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB1}, {{SCIM_KEY_dead_grave, SCIM_KEY_Emacron, 0, 0, 0 }, 0x1E14}, {{SCIM_KEY_dead_grave, SCIM_KEY_emacron, 0, 0, 0 }, 0x1E15}, {{SCIM_KEY_dead_grave, SCIM_KEY_Omacron, 0, 0, 0 }, 0x1E50}, {{SCIM_KEY_dead_grave, SCIM_KEY_omacron, 0, 0, 0 }, 0x1E51}, {{SCIM_KEY_dead_grave, SCIM_KEY_Cyrillic_ie, 0, 0, 0 }, 0x0450}, {{SCIM_KEY_dead_grave, SCIM_KEY_Cyrillic_i, 0, 0, 0 }, 0x045D}, {{SCIM_KEY_dead_grave, SCIM_KEY_Cyrillic_IE, 0, 0, 0 }, 0x0400}, {{SCIM_KEY_dead_grave, SCIM_KEY_Cyrillic_I, 0, 0, 0 }, 0x040D}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x1FD2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x1FE2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1FBA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x1FC8}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x1FCA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1FDA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x1FF8}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x1FEA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x1FFA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1F70}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x1F72}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1F74}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1F76}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x1F78}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1F7A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1F7C}, {{SCIM_KEY_dead_grave, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDC}, {{SCIM_KEY_dead_grave, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDD}, {{SCIM_KEY_dead_grave, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEA}, {{SCIM_KEY_dead_grave, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EEB}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_grave, 0, 0, 0 }, 0x0060}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA6}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC0}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED2}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA7}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC1}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED3}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_macron, SCIM_KEY_E, 0, 0 }, 0x1E14}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_macron, SCIM_KEY_O, 0, 0 }, 0x1E50}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_macron, SCIM_KEY_e, 0, 0 }, 0x1E15}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_macron, SCIM_KEY_o, 0, 0 }, 0x1E51}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB0}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB1}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01DB}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01DC}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD2}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE2}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDC}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEA}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDD}, {{SCIM_KEY_dead_grave, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EEB}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01DB}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01DC}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6B}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F03}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F13}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F23}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F33}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F43}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F53}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F63}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6A}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F02}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F12}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F22}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F32}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F42}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F52}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F62}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDC}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEA}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDD}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEB}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA6}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC0}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED2}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA7}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC1}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED3}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_dead_grave, 0x10001a0, 0, 0, 0 }, 0x1EDC}, {{SCIM_KEY_dead_grave, 0x10001a1, 0, 0, 0 }, 0x1EDD}, {{SCIM_KEY_dead_grave, 0x10001af, 0, 0, 0 }, 0x1EEA}, {{SCIM_KEY_dead_grave, 0x10001b0, 0, 0, 0 }, 0x1EEB}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6A}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F02}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F12}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F22}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F32}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F42}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F52}, {{SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F62}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6B}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F03}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F13}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F23}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F33}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F43}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F53}, {{SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F63}, {{SCIM_KEY_dead_grave, 0x1001f00, 0, 0, 0 }, 0x1F02}, {{SCIM_KEY_dead_grave, 0x1001f01, 0, 0, 0 }, 0x1F03}, {{SCIM_KEY_dead_grave, 0x1001f08, 0, 0, 0 }, 0x1F0A}, {{SCIM_KEY_dead_grave, 0x1001f09, 0, 0, 0 }, 0x1F0B}, {{SCIM_KEY_dead_grave, 0x1001f10, 0, 0, 0 }, 0x1F12}, {{SCIM_KEY_dead_grave, 0x1001f11, 0, 0, 0 }, 0x1F13}, {{SCIM_KEY_dead_grave, 0x1001f18, 0, 0, 0 }, 0x1F1A}, {{SCIM_KEY_dead_grave, 0x1001f19, 0, 0, 0 }, 0x1F1B}, {{SCIM_KEY_dead_grave, 0x1001f20, 0, 0, 0 }, 0x1F22}, {{SCIM_KEY_dead_grave, 0x1001f21, 0, 0, 0 }, 0x1F23}, {{SCIM_KEY_dead_grave, 0x1001f28, 0, 0, 0 }, 0x1F2A}, {{SCIM_KEY_dead_grave, 0x1001f29, 0, 0, 0 }, 0x1F2B}, {{SCIM_KEY_dead_grave, 0x1001f30, 0, 0, 0 }, 0x1F32}, {{SCIM_KEY_dead_grave, 0x1001f31, 0, 0, 0 }, 0x1F33}, {{SCIM_KEY_dead_grave, 0x1001f38, 0, 0, 0 }, 0x1F3A}, {{SCIM_KEY_dead_grave, 0x1001f39, 0, 0, 0 }, 0x1F3B}, {{SCIM_KEY_dead_grave, 0x1001f40, 0, 0, 0 }, 0x1F42}, {{SCIM_KEY_dead_grave, 0x1001f41, 0, 0, 0 }, 0x1F43}, {{SCIM_KEY_dead_grave, 0x1001f48, 0, 0, 0 }, 0x1F4A}, {{SCIM_KEY_dead_grave, 0x1001f49, 0, 0, 0 }, 0x1F4B}, {{SCIM_KEY_dead_grave, 0x1001f50, 0, 0, 0 }, 0x1F52}, {{SCIM_KEY_dead_grave, 0x1001f51, 0, 0, 0 }, 0x1F53}, {{SCIM_KEY_dead_grave, 0x1001f59, 0, 0, 0 }, 0x1F5B}, {{SCIM_KEY_dead_grave, 0x1001f60, 0, 0, 0 }, 0x1F62}, {{SCIM_KEY_dead_grave, 0x1001f61, 0, 0, 0 }, 0x1F63}, {{SCIM_KEY_dead_grave, 0x1001f68, 0, 0, 0 }, 0x1F6A}, {{SCIM_KEY_dead_grave, 0x1001f69, 0, 0, 0 }, 0x1F6B}, {{SCIM_KEY_dead_acute, SCIM_KEY_space, 0, 0, 0 }, 0x0027}, {{SCIM_KEY_dead_acute, SCIM_KEY_apostrophe, 0, 0, 0 }, 0x00B4}, {{SCIM_KEY_dead_acute, SCIM_KEY_A, 0, 0, 0 }, 0x00C1}, {{SCIM_KEY_dead_acute, SCIM_KEY_C, 0, 0, 0 }, 0x0106}, {{SCIM_KEY_dead_acute, SCIM_KEY_E, 0, 0, 0 }, 0x00C9}, {{SCIM_KEY_dead_acute, SCIM_KEY_G, 0, 0, 0 }, 0x01F4}, {{SCIM_KEY_dead_acute, SCIM_KEY_I, 0, 0, 0 }, 0x00CD}, {{SCIM_KEY_dead_acute, SCIM_KEY_K, 0, 0, 0 }, 0x1E30}, {{SCIM_KEY_dead_acute, SCIM_KEY_L, 0, 0, 0 }, 0x0139}, {{SCIM_KEY_dead_acute, SCIM_KEY_M, 0, 0, 0 }, 0x1E3E}, {{SCIM_KEY_dead_acute, SCIM_KEY_N, 0, 0, 0 }, 0x0143}, {{SCIM_KEY_dead_acute, SCIM_KEY_O, 0, 0, 0 }, 0x00D3}, {{SCIM_KEY_dead_acute, SCIM_KEY_P, 0, 0, 0 }, 0x1E54}, {{SCIM_KEY_dead_acute, SCIM_KEY_R, 0, 0, 0 }, 0x0154}, {{SCIM_KEY_dead_acute, SCIM_KEY_S, 0, 0, 0 }, 0x015A}, {{SCIM_KEY_dead_acute, SCIM_KEY_U, 0, 0, 0 }, 0x00DA}, {{SCIM_KEY_dead_acute, SCIM_KEY_W, 0, 0, 0 }, 0x1E82}, {{SCIM_KEY_dead_acute, SCIM_KEY_Y, 0, 0, 0 }, 0x00DD}, {{SCIM_KEY_dead_acute, SCIM_KEY_Z, 0, 0, 0 }, 0x0179}, {{SCIM_KEY_dead_acute, SCIM_KEY_a, 0, 0, 0 }, 0x00E1}, {{SCIM_KEY_dead_acute, SCIM_KEY_c, 0, 0, 0 }, 0x0107}, {{SCIM_KEY_dead_acute, SCIM_KEY_e, 0, 0, 0 }, 0x00E9}, {{SCIM_KEY_dead_acute, SCIM_KEY_g, 0, 0, 0 }, 0x01F5}, {{SCIM_KEY_dead_acute, SCIM_KEY_i, 0, 0, 0 }, 0x00ED}, {{SCIM_KEY_dead_acute, SCIM_KEY_k, 0, 0, 0 }, 0x1E31}, {{SCIM_KEY_dead_acute, SCIM_KEY_l, 0, 0, 0 }, 0x013A}, {{SCIM_KEY_dead_acute, SCIM_KEY_m, 0, 0, 0 }, 0x1E3F}, {{SCIM_KEY_dead_acute, SCIM_KEY_n, 0, 0, 0 }, 0x0144}, {{SCIM_KEY_dead_acute, SCIM_KEY_o, 0, 0, 0 }, 0x00F3}, {{SCIM_KEY_dead_acute, SCIM_KEY_p, 0, 0, 0 }, 0x1E55}, {{SCIM_KEY_dead_acute, SCIM_KEY_r, 0, 0, 0 }, 0x0155}, {{SCIM_KEY_dead_acute, SCIM_KEY_s, 0, 0, 0 }, 0x015B}, {{SCIM_KEY_dead_acute, SCIM_KEY_u, 0, 0, 0 }, 0x00FA}, {{SCIM_KEY_dead_acute, SCIM_KEY_w, 0, 0, 0 }, 0x1E83}, {{SCIM_KEY_dead_acute, SCIM_KEY_y, 0, 0, 0 }, 0x00FD}, {{SCIM_KEY_dead_acute, SCIM_KEY_z, 0, 0, 0 }, 0x017A}, {{SCIM_KEY_dead_acute, SCIM_KEY_acute, 0, 0, 0 }, 0x00B4}, {{SCIM_KEY_dead_acute, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA4}, {{SCIM_KEY_dead_acute, SCIM_KEY_Aring, 0, 0, 0 }, 0x01FA}, {{SCIM_KEY_dead_acute, SCIM_KEY_AE, 0, 0, 0 }, 0x01FC}, {{SCIM_KEY_dead_acute, SCIM_KEY_Ccedilla, 0, 0, 0 }, 0x1E08}, {{SCIM_KEY_dead_acute, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EBE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Idiaeresis, 0, 0, 0 }, 0x1E2E}, {{SCIM_KEY_dead_acute, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED0}, {{SCIM_KEY_dead_acute, SCIM_KEY_Otilde, 0, 0, 0 }, 0x1E4C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Ooblique, 0, 0, 0 }, 0x01FE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01D7}, {{SCIM_KEY_dead_acute, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA5}, {{SCIM_KEY_dead_acute, SCIM_KEY_aring, 0, 0, 0 }, 0x01FB}, {{SCIM_KEY_dead_acute, SCIM_KEY_ae, 0, 0, 0 }, 0x01FD}, {{SCIM_KEY_dead_acute, SCIM_KEY_ccedilla, 0, 0, 0 }, 0x1E09}, {{SCIM_KEY_dead_acute, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EBF}, {{SCIM_KEY_dead_acute, SCIM_KEY_idiaeresis, 0, 0, 0 }, 0x1E2F}, {{SCIM_KEY_dead_acute, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED1}, {{SCIM_KEY_dead_acute, SCIM_KEY_otilde, 0, 0, 0 }, 0x1E4D}, {{SCIM_KEY_dead_acute, SCIM_KEY_oslash, 0, 0, 0 }, 0x01FF}, {{SCIM_KEY_dead_acute, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01D8}, {{SCIM_KEY_dead_acute, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EAE}, {{SCIM_KEY_dead_acute, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EAF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Emacron, 0, 0, 0 }, 0x1E16}, {{SCIM_KEY_dead_acute, SCIM_KEY_emacron, 0, 0, 0 }, 0x1E17}, {{SCIM_KEY_dead_acute, SCIM_KEY_Omacron, 0, 0, 0 }, 0x1E52}, {{SCIM_KEY_dead_acute, SCIM_KEY_Utilde, 0, 0, 0 }, 0x1E78}, {{SCIM_KEY_dead_acute, SCIM_KEY_omacron, 0, 0, 0 }, 0x1E53}, {{SCIM_KEY_dead_acute, SCIM_KEY_utilde, 0, 0, 0 }, 0x1E79}, {{SCIM_KEY_dead_acute, SCIM_KEY_Cyrillic_ghe, 0, 0, 0 }, 0x0453}, {{SCIM_KEY_dead_acute, SCIM_KEY_Cyrillic_ka, 0, 0, 0 }, 0x045C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Cyrillic_GHE, 0, 0, 0 }, 0x0403}, {{SCIM_KEY_dead_acute, SCIM_KEY_Cyrillic_KA, 0, 0, 0 }, 0x040C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x0390}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x03B0}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x0386}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x0388}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x0389}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x038A}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x038C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x038E}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x038F}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x03AC}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x03AD}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x03AE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x03AF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x03CC}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x03CD}, {{SCIM_KEY_dead_acute, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x03CE}, {{SCIM_KEY_dead_acute, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4C}, {{SCIM_KEY_dead_acute, SCIM_KEY_combining_tilde, SCIM_KEY_U, 0, 0 }, 0x1E78}, {{SCIM_KEY_dead_acute, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4D}, {{SCIM_KEY_dead_acute, SCIM_KEY_combining_tilde, SCIM_KEY_u, 0, 0 }, 0x1E79}, {{SCIM_KEY_dead_acute, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDA}, {{SCIM_KEY_dead_acute, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDB}, {{SCIM_KEY_dead_acute, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EE8}, {{SCIM_KEY_dead_acute, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EE9}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_acute, 0, 0, 0 }, 0x00B4}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA4}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EBE}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED0}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA5}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EBF}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED1}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4C}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_tilde, SCIM_KEY_U, 0, 0 }, 0x1E78}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4D}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_tilde, SCIM_KEY_u, 0, 0 }, 0x1E79}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_macron, SCIM_KEY_E, 0, 0 }, 0x1E16}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_macron, SCIM_KEY_O, 0, 0 }, 0x1E52}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_macron, SCIM_KEY_e, 0, 0 }, 0x1E17}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_macron, SCIM_KEY_o, 0, 0 }, 0x1E53}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EAE}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EAF}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_space, 0, 0 }, 0x0385}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_I, 0, 0 }, 0x1E2E}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01D7}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_i, 0, 0 }, 0x1E2F}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01D8}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x0390}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03B0}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_abovering, SCIM_KEY_A, 0, 0 }, 0x01FA}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_abovering, SCIM_KEY_a, 0, 0 }, 0x01FB}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_C, 0, 0 }, 0x1E08}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_c, 0, 0 }, 0x1E09}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDA}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EE8}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDB}, {{SCIM_KEY_dead_acute, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EE9}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_dead_acute, 0x10001a0, 0, 0, 0 }, 0x1EDA}, {{SCIM_KEY_dead_acute, 0x10001a1, 0, 0, 0 }, 0x1EDB}, {{SCIM_KEY_dead_acute, 0x10001af, 0, 0, 0 }, 0x1EE8}, {{SCIM_KEY_dead_acute, 0x10001b0, 0, 0, 0 }, 0x1EE9}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6C}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F04}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F14}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F24}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F34}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F44}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F54}, {{SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F64}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F1D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F4D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6D}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F05}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F15}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F25}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F35}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F45}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F55}, {{SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F65}, {{SCIM_KEY_dead_acute, 0x1001f00, 0, 0, 0 }, 0x1F04}, {{SCIM_KEY_dead_acute, 0x1001f01, 0, 0, 0 }, 0x1F05}, {{SCIM_KEY_dead_acute, 0x1001f08, 0, 0, 0 }, 0x1F0C}, {{SCIM_KEY_dead_acute, 0x1001f09, 0, 0, 0 }, 0x1F0D}, {{SCIM_KEY_dead_acute, 0x1001f10, 0, 0, 0 }, 0x1F14}, {{SCIM_KEY_dead_acute, 0x1001f11, 0, 0, 0 }, 0x1F15}, {{SCIM_KEY_dead_acute, 0x1001f18, 0, 0, 0 }, 0x1F1C}, {{SCIM_KEY_dead_acute, 0x1001f19, 0, 0, 0 }, 0x1F1D}, {{SCIM_KEY_dead_acute, 0x1001f20, 0, 0, 0 }, 0x1F24}, {{SCIM_KEY_dead_acute, 0x1001f21, 0, 0, 0 }, 0x1F25}, {{SCIM_KEY_dead_acute, 0x1001f28, 0, 0, 0 }, 0x1F2C}, {{SCIM_KEY_dead_acute, 0x1001f29, 0, 0, 0 }, 0x1F2D}, {{SCIM_KEY_dead_acute, 0x1001f30, 0, 0, 0 }, 0x1F34}, {{SCIM_KEY_dead_acute, 0x1001f31, 0, 0, 0 }, 0x1F35}, {{SCIM_KEY_dead_acute, 0x1001f38, 0, 0, 0 }, 0x1F3C}, {{SCIM_KEY_dead_acute, 0x1001f39, 0, 0, 0 }, 0x1F3D}, {{SCIM_KEY_dead_acute, 0x1001f40, 0, 0, 0 }, 0x1F44}, {{SCIM_KEY_dead_acute, 0x1001f41, 0, 0, 0 }, 0x1F45}, {{SCIM_KEY_dead_acute, 0x1001f48, 0, 0, 0 }, 0x1F4C}, {{SCIM_KEY_dead_acute, 0x1001f49, 0, 0, 0 }, 0x1F4D}, {{SCIM_KEY_dead_acute, 0x1001f50, 0, 0, 0 }, 0x1F54}, {{SCIM_KEY_dead_acute, 0x1001f51, 0, 0, 0 }, 0x1F55}, {{SCIM_KEY_dead_acute, 0x1001f59, 0, 0, 0 }, 0x1F5D}, {{SCIM_KEY_dead_acute, 0x1001f60, 0, 0, 0 }, 0x1F64}, {{SCIM_KEY_dead_acute, 0x1001f61, 0, 0, 0 }, 0x1F65}, {{SCIM_KEY_dead_acute, 0x1001f68, 0, 0, 0 }, 0x1F6C}, {{SCIM_KEY_dead_acute, 0x1001f69, 0, 0, 0 }, 0x1F6D}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_space, 0, 0, 0 }, 0x005E}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_parenleft, 0, 0, 0 }, 0x207D}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_parenright, 0, 0, 0 }, 0x207E}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_plus, 0, 0, 0 }, 0x207A}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_minus, 0, 0, 0 }, 0x00AF}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_period, 0, 0, 0 }, 0x00B7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_slash, 0, 0, 0 }, 0x007C}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_0, 0, 0, 0 }, 0x2070}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_1, 0, 0, 0 }, 0x00B9}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_2, 0, 0, 0 }, 0x00B2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_3, 0, 0, 0 }, 0x00B3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_4, 0, 0, 0 }, 0x2074}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_5, 0, 0, 0 }, 0x2075}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_6, 0, 0, 0 }, 0x2076}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_7, 0, 0, 0 }, 0x2077}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_8, 0, 0, 0 }, 0x2078}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_9, 0, 0, 0 }, 0x2079}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_equal, 0, 0, 0 }, 0x207C}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0, 0 }, 0x00C2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_C, 0, 0, 0 }, 0x0108}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0, 0 }, 0x00CA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_G, 0, 0, 0 }, 0x011C}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_H, 0, 0, 0 }, 0x0124}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_I, 0, 0, 0 }, 0x00CE}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_J, 0, 0, 0 }, 0x0134}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0, 0 }, 0x00D4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_S, 0, 0, 0 }, 0x015C}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_U, 0, 0, 0 }, 0x00DB}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_W, 0, 0, 0 }, 0x0174}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Y, 0, 0, 0 }, 0x0176}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Z, 0, 0, 0 }, 0x1E90}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_asciicircum, 0, 0, 0 }, 0x005E}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_underscore, 0, 0, 0 }, 0x00AF}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0, 0 }, 0x00E2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_c, 0, 0, 0 }, 0x0109}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0, 0 }, 0x00EA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_g, 0, 0, 0 }, 0x011D}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_h, 0, 0, 0 }, 0x0125}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_i, 0, 0, 0 }, 0x00EE}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_j, 0, 0, 0 }, 0x0135}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0, 0 }, 0x00F4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_s, 0, 0, 0 }, 0x015D}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_u, 0, 0, 0 }, 0x00FB}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_w, 0, 0, 0 }, 0x0175}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_y, 0, 0, 0 }, 0x0177}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_z, 0, 0, 0 }, 0x1E91}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0, 0 }, 0x1EAC}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_E, 0, 0 }, 0x1EC6}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_O, 0, 0 }, 0x1ED8}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0, 0 }, 0x1EAD}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_e, 0, 0 }, 0x1EC7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_combining_belowdot, SCIM_KEY_o, 0, 0 }, 0x1ED9}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_circumflex, 0, 0, 0 }, 0x005E}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0, 0 }, 0x1EAC}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_E, 0, 0 }, 0x1EC6}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_O, 0, 0 }, 0x1ED8}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0, 0 }, 0x1EAD}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_e, 0, 0 }, 0x1EC7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_dead_belowdot, SCIM_KEY_o, 0, 0 }, 0x1ED9}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_A, 0 }, 0x1EAC}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_E, 0 }, 0x1EC6}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_O, 0 }, 0x1ED8}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_a, 0 }, 0x1EAD}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_e, 0 }, 0x1EC7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_o, 0 }, 0x1ED9}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_M, 0 }, 0x2120}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_M, 0 }, 0x2122}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_a, 0 }, 0x00AA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_h, 0 }, 0x02B0}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_i, 0 }, 0x2071}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_j, 0 }, 0x02B2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_l, 0 }, 0x02E1}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_n, 0 }, 0x207F}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x00BA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_r, 0 }, 0x02B3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_s, 0 }, 0x02E2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_w, 0 }, 0x02B7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_x, 0 }, 0x02E3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_y, 0 }, 0x02B8}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000263, 0 }, 0x02E0}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000266, 0 }, 0x02B1}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000279, 0 }, 0x02B4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x100027b, 0 }, 0x02B5}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000281, 0 }, 0x02B6}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000295, 0 }, 0x02E4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_a, 0 }, 0x00AA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_h, 0 }, 0x02B0}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_i, 0 }, 0x2071}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_j, 0 }, 0x02B2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_l, 0 }, 0x02E1}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_n, 0 }, 0x207F}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_o, 0 }, 0x00BA}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_r, 0 }, 0x02B3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_s, 0 }, 0x02E2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_w, 0 }, 0x02B7}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_x, 0 }, 0x02E3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_y, 0 }, 0x02B8}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1000263, 0 }, 0x02E0}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1000266, 0 }, 0x02B1}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1000279, 0 }, 0x02B4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x100027b, 0 }, 0x02B5}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1000281, 0 }, 0x02B6}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1000295, 0 }, 0x02E4}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_Space, 0, 0, 0 }, 0x00B2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_Add, 0, 0, 0 }, 0x207A}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_0, 0, 0, 0 }, 0x2070}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_1, 0, 0, 0 }, 0x00B9}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_2, 0, 0, 0 }, 0x00B2}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_3, 0, 0, 0 }, 0x00B3}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_4, 0, 0, 0 }, 0x2074}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_5, 0, 0, 0 }, 0x2075}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_6, 0, 0, 0 }, 0x2076}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_7, 0, 0, 0 }, 0x2077}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_8, 0, 0, 0 }, 0x2078}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_9, 0, 0, 0 }, 0x2079}, {{SCIM_KEY_dead_circumflex, SCIM_KEY_KP_Equal, 0, 0, 0 }, 0x207C}, {{SCIM_KEY_dead_circumflex, 0x1001ea0, 0, 0, 0 }, 0x1EAC}, {{SCIM_KEY_dead_circumflex, 0x1001ea1, 0, 0, 0 }, 0x1EAD}, {{SCIM_KEY_dead_circumflex, 0x1001eb8, 0, 0, 0 }, 0x1EC6}, {{SCIM_KEY_dead_circumflex, 0x1001eb9, 0, 0, 0 }, 0x1EC7}, {{SCIM_KEY_dead_circumflex, 0x1001ecc, 0, 0, 0 }, 0x1ED8}, {{SCIM_KEY_dead_circumflex, 0x1001ecd, 0, 0, 0 }, 0x1ED9}, {{SCIM_KEY_dead_circumflex, 0x1002212, 0, 0, 0 }, 0x207B}, {{SCIM_KEY_dead_circumflex, 0x1004e00, 0, 0, 0 }, 0x3192}, {{SCIM_KEY_dead_circumflex, 0x1004e01, 0, 0, 0 }, 0x319C}, {{SCIM_KEY_dead_circumflex, 0x1004e09, 0, 0, 0 }, 0x3194}, {{SCIM_KEY_dead_circumflex, 0x1004e0a, 0, 0, 0 }, 0x3196}, {{SCIM_KEY_dead_circumflex, 0x1004e0b, 0, 0, 0 }, 0x3198}, {{SCIM_KEY_dead_circumflex, 0x1004e19, 0, 0, 0 }, 0x319B}, {{SCIM_KEY_dead_circumflex, 0x1004e2d, 0, 0, 0 }, 0x3197}, {{SCIM_KEY_dead_circumflex, 0x1004e59, 0, 0, 0 }, 0x319A}, {{SCIM_KEY_dead_circumflex, 0x1004e8c, 0, 0, 0 }, 0x3193}, {{SCIM_KEY_dead_circumflex, 0x1004eba, 0, 0, 0 }, 0x319F}, {{SCIM_KEY_dead_circumflex, 0x10056db, 0, 0, 0 }, 0x3195}, {{SCIM_KEY_dead_circumflex, 0x1005730, 0, 0, 0 }, 0x319E}, {{SCIM_KEY_dead_circumflex, 0x1005929, 0, 0, 0 }, 0x319D}, {{SCIM_KEY_dead_circumflex, 0x1007532, 0, 0, 0 }, 0x3199}, {{SCIM_KEY_dead_tilde, SCIM_KEY_space, 0, 0, 0 }, 0x007E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_A, 0, 0, 0 }, 0x00C3}, {{SCIM_KEY_dead_tilde, SCIM_KEY_E, 0, 0, 0 }, 0x1EBC}, {{SCIM_KEY_dead_tilde, SCIM_KEY_I, 0, 0, 0 }, 0x0128}, {{SCIM_KEY_dead_tilde, SCIM_KEY_N, 0, 0, 0 }, 0x00D1}, {{SCIM_KEY_dead_tilde, SCIM_KEY_O, 0, 0, 0 }, 0x00D5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_U, 0, 0, 0 }, 0x0168}, {{SCIM_KEY_dead_tilde, SCIM_KEY_V, 0, 0, 0 }, 0x1E7C}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF8}, {{SCIM_KEY_dead_tilde, SCIM_KEY_a, 0, 0, 0 }, 0x00E3}, {{SCIM_KEY_dead_tilde, SCIM_KEY_e, 0, 0, 0 }, 0x1EBD}, {{SCIM_KEY_dead_tilde, SCIM_KEY_i, 0, 0, 0 }, 0x0129}, {{SCIM_KEY_dead_tilde, SCIM_KEY_n, 0, 0, 0 }, 0x00F1}, {{SCIM_KEY_dead_tilde, SCIM_KEY_o, 0, 0, 0 }, 0x00F5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_u, 0, 0, 0 }, 0x0169}, {{SCIM_KEY_dead_tilde, SCIM_KEY_v, 0, 0, 0 }, 0x1E7D}, {{SCIM_KEY_dead_tilde, SCIM_KEY_y, 0, 0, 0 }, 0x1EF9}, {{SCIM_KEY_dead_tilde, SCIM_KEY_asciitilde, 0, 0, 0 }, 0x007E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EAA}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EAB}, {{SCIM_KEY_dead_tilde, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x1FD7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x1FE7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1FB6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1FC6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1FD6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1FE6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1FF6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EE0}, {{SCIM_KEY_dead_tilde, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EE1}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEE}, {{SCIM_KEY_dead_tilde, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EEF}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EAA}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EAB}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_tilde, 0, 0, 0 }, 0x007E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EE0}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEE}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EE1}, {{SCIM_KEY_dead_tilde, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EEF}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0F}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2F}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3F}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5F}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6F}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F07}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F27}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F37}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F57}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F67}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6E}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F06}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F26}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F36}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F56}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F66}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE0}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEE}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE1}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEF}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EAA}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED6}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EAB}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC5}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED7}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_dead_tilde, 0x10001a0, 0, 0, 0 }, 0x1EE0}, {{SCIM_KEY_dead_tilde, 0x10001a1, 0, 0, 0 }, 0x1EE1}, {{SCIM_KEY_dead_tilde, 0x10001af, 0, 0, 0 }, 0x1EEE}, {{SCIM_KEY_dead_tilde, 0x10001b0, 0, 0, 0 }, 0x1EEF}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0E}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2E}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3E}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6E}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F06}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F26}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F36}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F56}, {{SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F66}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0F}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2F}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3F}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5F}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6F}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F07}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F27}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F37}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F57}, {{SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F67}, {{SCIM_KEY_dead_tilde, 0x1001f00, 0, 0, 0 }, 0x1F06}, {{SCIM_KEY_dead_tilde, 0x1001f01, 0, 0, 0 }, 0x1F07}, {{SCIM_KEY_dead_tilde, 0x1001f08, 0, 0, 0 }, 0x1F0E}, {{SCIM_KEY_dead_tilde, 0x1001f09, 0, 0, 0 }, 0x1F0F}, {{SCIM_KEY_dead_tilde, 0x1001f20, 0, 0, 0 }, 0x1F26}, {{SCIM_KEY_dead_tilde, 0x1001f21, 0, 0, 0 }, 0x1F27}, {{SCIM_KEY_dead_tilde, 0x1001f28, 0, 0, 0 }, 0x1F2E}, {{SCIM_KEY_dead_tilde, 0x1001f29, 0, 0, 0 }, 0x1F2F}, {{SCIM_KEY_dead_tilde, 0x1001f30, 0, 0, 0 }, 0x1F36}, {{SCIM_KEY_dead_tilde, 0x1001f31, 0, 0, 0 }, 0x1F37}, {{SCIM_KEY_dead_tilde, 0x1001f38, 0, 0, 0 }, 0x1F3E}, {{SCIM_KEY_dead_tilde, 0x1001f39, 0, 0, 0 }, 0x1F3F}, {{SCIM_KEY_dead_tilde, 0x1001f50, 0, 0, 0 }, 0x1F56}, {{SCIM_KEY_dead_tilde, 0x1001f51, 0, 0, 0 }, 0x1F57}, {{SCIM_KEY_dead_tilde, 0x1001f59, 0, 0, 0 }, 0x1F5F}, {{SCIM_KEY_dead_tilde, 0x1001f60, 0, 0, 0 }, 0x1F66}, {{SCIM_KEY_dead_tilde, 0x1001f61, 0, 0, 0 }, 0x1F67}, {{SCIM_KEY_dead_tilde, 0x1001f68, 0, 0, 0 }, 0x1F6E}, {{SCIM_KEY_dead_tilde, 0x1001f69, 0, 0, 0 }, 0x1F6F}, {{SCIM_KEY_dead_macron, SCIM_KEY_space, 0, 0, 0 }, 0x00AF}, {{SCIM_KEY_dead_macron, SCIM_KEY_A, 0, 0, 0 }, 0x0100}, {{SCIM_KEY_dead_macron, SCIM_KEY_E, 0, 0, 0 }, 0x0112}, {{SCIM_KEY_dead_macron, SCIM_KEY_G, 0, 0, 0 }, 0x1E20}, {{SCIM_KEY_dead_macron, SCIM_KEY_I, 0, 0, 0 }, 0x012A}, {{SCIM_KEY_dead_macron, SCIM_KEY_O, 0, 0, 0 }, 0x014C}, {{SCIM_KEY_dead_macron, SCIM_KEY_U, 0, 0, 0 }, 0x016A}, {{SCIM_KEY_dead_macron, SCIM_KEY_Y, 0, 0, 0 }, 0x0232}, {{SCIM_KEY_dead_macron, SCIM_KEY_a, 0, 0, 0 }, 0x0101}, {{SCIM_KEY_dead_macron, SCIM_KEY_e, 0, 0, 0 }, 0x0113}, {{SCIM_KEY_dead_macron, SCIM_KEY_g, 0, 0, 0 }, 0x1E21}, {{SCIM_KEY_dead_macron, SCIM_KEY_i, 0, 0, 0 }, 0x012B}, {{SCIM_KEY_dead_macron, SCIM_KEY_o, 0, 0, 0 }, 0x014D}, {{SCIM_KEY_dead_macron, SCIM_KEY_u, 0, 0, 0 }, 0x016B}, {{SCIM_KEY_dead_macron, SCIM_KEY_y, 0, 0, 0 }, 0x0233}, {{SCIM_KEY_dead_macron, SCIM_KEY_macron, 0, 0, 0 }, 0x00AF}, {{SCIM_KEY_dead_macron, SCIM_KEY_Adiaeresis, 0, 0, 0 }, 0x01DE}, {{SCIM_KEY_dead_macron, SCIM_KEY_AE, 0, 0, 0 }, 0x01E2}, {{SCIM_KEY_dead_macron, SCIM_KEY_Otilde, 0, 0, 0 }, 0x022C}, {{SCIM_KEY_dead_macron, SCIM_KEY_Odiaeresis, 0, 0, 0 }, 0x022A}, {{SCIM_KEY_dead_macron, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01D5}, {{SCIM_KEY_dead_macron, SCIM_KEY_adiaeresis, 0, 0, 0 }, 0x01DF}, {{SCIM_KEY_dead_macron, SCIM_KEY_ae, 0, 0, 0 }, 0x01E3}, {{SCIM_KEY_dead_macron, SCIM_KEY_otilde, 0, 0, 0 }, 0x022D}, {{SCIM_KEY_dead_macron, SCIM_KEY_odiaeresis, 0, 0, 0 }, 0x022B}, {{SCIM_KEY_dead_macron, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01D6}, {{SCIM_KEY_dead_macron, SCIM_KEY_Cyrillic_i, 0, 0, 0 }, 0x04E3}, {{SCIM_KEY_dead_macron, SCIM_KEY_Cyrillic_u, 0, 0, 0 }, 0x04EF}, {{SCIM_KEY_dead_macron, SCIM_KEY_Cyrillic_I, 0, 0, 0 }, 0x04E2}, {{SCIM_KEY_dead_macron, SCIM_KEY_Cyrillic_U, 0, 0, 0 }, 0x04EE}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1FB9}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1FD9}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x1FE9}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1FB1}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1FD1}, {{SCIM_KEY_dead_macron, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1FE1}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0, 0 }, 0x022C}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0, 0 }, 0x022D}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_L, 0, 0 }, 0x1E38}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_R, 0, 0 }, 0x1E5C}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_l, 0, 0 }, 0x1E39}, {{SCIM_KEY_dead_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_r, 0, 0 }, 0x1E5D}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0, 0 }, 0x022C}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0, 0 }, 0x022D}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_macron, 0, 0, 0 }, 0x00AF}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_A, 0, 0 }, 0x01E0}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_O, 0, 0 }, 0x0230}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_a, 0, 0 }, 0x01E1}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_o, 0, 0 }, 0x0231}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_A, 0, 0 }, 0x01DE}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_O, 0, 0 }, 0x022A}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01D5}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_a, 0, 0 }, 0x01DF}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_o, 0, 0 }, 0x022B}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01D6}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_ogonek, SCIM_KEY_O, 0, 0 }, 0x01EC}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_ogonek, SCIM_KEY_o, 0, 0 }, 0x01ED}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_L, 0, 0 }, 0x1E38}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_R, 0, 0 }, 0x1E5C}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_l, 0, 0 }, 0x1E39}, {{SCIM_KEY_dead_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_r, 0, 0 }, 0x1E5D}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_A, 0 }, 0x01DE}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_O, 0 }, 0x022A}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D5}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_a, 0 }, 0x01DF}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_o, 0 }, 0x022B}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D6}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_A, 0 }, 0x01E0}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_O, 0 }, 0x0230}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_a, 0 }, 0x01E1}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_o, 0 }, 0x0231}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_O, 0 }, 0x01EC}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_o, 0 }, 0x01ED}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_dead_macron, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_dead_macron, 0x10001ea, 0, 0, 0 }, 0x01EC}, {{SCIM_KEY_dead_macron, 0x10001eb, 0, 0, 0 }, 0x01ED}, {{SCIM_KEY_dead_macron, 0x1000226, 0, 0, 0 }, 0x01E0}, {{SCIM_KEY_dead_macron, 0x1000227, 0, 0, 0 }, 0x01E1}, {{SCIM_KEY_dead_macron, 0x100022e, 0, 0, 0 }, 0x0230}, {{SCIM_KEY_dead_macron, 0x100022f, 0, 0, 0 }, 0x0231}, {{SCIM_KEY_dead_macron, 0x1001e36, 0, 0, 0 }, 0x1E38}, {{SCIM_KEY_dead_macron, 0x1001e37, 0, 0, 0 }, 0x1E39}, {{SCIM_KEY_dead_macron, 0x1001e5a, 0, 0, 0 }, 0x1E5C}, {{SCIM_KEY_dead_macron, 0x1001e5b, 0, 0, 0 }, 0x1E5D}, {{SCIM_KEY_dead_breve, SCIM_KEY_space, 0, 0, 0 }, 0x02D8}, {{SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0, 0 }, 0x0102}, {{SCIM_KEY_dead_breve, SCIM_KEY_E, 0, 0, 0 }, 0x0114}, {{SCIM_KEY_dead_breve, SCIM_KEY_G, 0, 0, 0 }, 0x011E}, {{SCIM_KEY_dead_breve, SCIM_KEY_I, 0, 0, 0 }, 0x012C}, {{SCIM_KEY_dead_breve, SCIM_KEY_O, 0, 0, 0 }, 0x014E}, {{SCIM_KEY_dead_breve, SCIM_KEY_U, 0, 0, 0 }, 0x016C}, {{SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0, 0 }, 0x0103}, {{SCIM_KEY_dead_breve, SCIM_KEY_e, 0, 0, 0 }, 0x0115}, {{SCIM_KEY_dead_breve, SCIM_KEY_g, 0, 0, 0 }, 0x011F}, {{SCIM_KEY_dead_breve, SCIM_KEY_i, 0, 0, 0 }, 0x012D}, {{SCIM_KEY_dead_breve, SCIM_KEY_o, 0, 0, 0 }, 0x014F}, {{SCIM_KEY_dead_breve, SCIM_KEY_u, 0, 0, 0 }, 0x016D}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_a, 0, 0, 0 }, 0x04D1}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_ie, 0, 0, 0 }, 0x04D7}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_i, 0, 0, 0 }, 0x0439}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_u, 0, 0, 0 }, 0x045E}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_zhe, 0, 0, 0 }, 0x04C2}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_A, 0, 0, 0 }, 0x04D0}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_IE, 0, 0, 0 }, 0x04D6}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_I, 0, 0, 0 }, 0x0419}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_U, 0, 0, 0 }, 0x040E}, {{SCIM_KEY_dead_breve, SCIM_KEY_Cyrillic_ZHE, 0, 0, 0 }, 0x04C1}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1FB8}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1FD8}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x1FE8}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1FB0}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1FD0}, {{SCIM_KEY_dead_breve, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1FE0}, {{SCIM_KEY_dead_breve, SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0, 0 }, 0x1EB6}, {{SCIM_KEY_dead_breve, SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0, 0 }, 0x1EB7}, {{SCIM_KEY_dead_breve, SCIM_KEY_dead_breve, 0, 0, 0 }, 0x02D8}, {{SCIM_KEY_dead_breve, SCIM_KEY_dead_cedilla, SCIM_KEY_E, 0, 0 }, 0x1E1C}, {{SCIM_KEY_dead_breve, SCIM_KEY_dead_cedilla, SCIM_KEY_e, 0, 0 }, 0x1E1D}, {{SCIM_KEY_dead_breve, SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0, 0 }, 0x1EB6}, {{SCIM_KEY_dead_breve, SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0, 0 }, 0x1EB7}, {{SCIM_KEY_dead_breve, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_dead_breve, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_dead_breve, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_E, 0 }, 0x1E1C}, {{SCIM_KEY_dead_breve, SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_e, 0 }, 0x1E1D}, {{SCIM_KEY_dead_breve, 0x1000228, 0, 0, 0 }, 0x1E1C}, {{SCIM_KEY_dead_breve, 0x1000229, 0, 0, 0 }, 0x1E1D}, {{SCIM_KEY_dead_breve, 0x1001ea0, 0, 0, 0 }, 0x1EB6}, {{SCIM_KEY_dead_breve, 0x1001ea1, 0, 0, 0 }, 0x1EB7}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_space, 0, 0, 0 }, 0x02D9}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_A, 0, 0, 0 }, 0x0226}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_B, 0, 0, 0 }, 0x1E02}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_C, 0, 0, 0 }, 0x010A}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_D, 0, 0, 0 }, 0x1E0A}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_E, 0, 0, 0 }, 0x0116}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_F, 0, 0, 0 }, 0x1E1E}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_G, 0, 0, 0 }, 0x0120}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_H, 0, 0, 0 }, 0x1E22}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_I, 0, 0, 0 }, 0x0130}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_M, 0, 0, 0 }, 0x1E40}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_N, 0, 0, 0 }, 0x1E44}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_O, 0, 0, 0 }, 0x022E}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_P, 0, 0, 0 }, 0x1E56}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_R, 0, 0, 0 }, 0x1E58}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_S, 0, 0, 0 }, 0x1E60}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_T, 0, 0, 0 }, 0x1E6A}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_W, 0, 0, 0 }, 0x1E86}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_X, 0, 0, 0 }, 0x1E8A}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Y, 0, 0, 0 }, 0x1E8E}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Z, 0, 0, 0 }, 0x017B}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_a, 0, 0, 0 }, 0x0227}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_b, 0, 0, 0 }, 0x1E03}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_c, 0, 0, 0 }, 0x010B}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_d, 0, 0, 0 }, 0x1E0B}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_e, 0, 0, 0 }, 0x0117}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_f, 0, 0, 0 }, 0x1E1F}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_g, 0, 0, 0 }, 0x0121}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_h, 0, 0, 0 }, 0x1E23}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_i, 0, 0, 0 }, 0x0131}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_m, 0, 0, 0 }, 0x1E41}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_n, 0, 0, 0 }, 0x1E45}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_o, 0, 0, 0 }, 0x022F}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_p, 0, 0, 0 }, 0x1E57}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_r, 0, 0, 0 }, 0x1E59}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_s, 0, 0, 0 }, 0x1E61}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_t, 0, 0, 0 }, 0x1E6B}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_w, 0, 0, 0 }, 0x1E87}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_x, 0, 0, 0 }, 0x1E8B}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_y, 0, 0, 0 }, 0x1E8F}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_z, 0, 0, 0 }, 0x017C}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Sacute, 0, 0, 0 }, 0x1E64}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Scaron, 0, 0, 0 }, 0x1E66}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_sacute, 0, 0, 0 }, 0x1E65}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_scaron, 0, 0, 0 }, 0x1E67}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_abovedot, 0, 0, 0 }, 0x02D9}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_combining_acute, SCIM_KEY_S, 0, 0 }, 0x1E64}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_combining_acute, SCIM_KEY_s, 0, 0 }, 0x1E65}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_combining_belowdot, SCIM_KEY_S, 0, 0 }, 0x1E68}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_combining_belowdot, SCIM_KEY_s, 0, 0 }, 0x1E69}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_acute, SCIM_KEY_S, 0, 0 }, 0x1E64}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_acute, SCIM_KEY_s, 0, 0 }, 0x1E65}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_abovedot, 0, 0, 0 }, 0x02D9}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_caron, SCIM_KEY_S, 0, 0 }, 0x1E66}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_caron, SCIM_KEY_s, 0, 0 }, 0x1E67}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_belowdot, SCIM_KEY_S, 0, 0 }, 0x1E68}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_dead_belowdot, SCIM_KEY_s, 0, 0 }, 0x1E69}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_S, 0 }, 0x1E68}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_s, 0 }, 0x1E69}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_S, 0 }, 0x1E66}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_s, 0 }, 0x1E67}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_dead_abovedot, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_dead_abovedot, 0x100017f, 0, 0, 0 }, 0x1E9B}, {{SCIM_KEY_dead_abovedot, 0x1001e62, 0, 0, 0 }, 0x1E68}, {{SCIM_KEY_dead_abovedot, 0x1001e63, 0, 0, 0 }, 0x1E69}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_space, 0, 0, 0 }, 0x0022}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_quotedbl, 0, 0, 0 }, 0x00A8}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_apostrophe, 0, 0, 0 }, 0x0344}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_A, 0, 0, 0 }, 0x00C4}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_E, 0, 0, 0 }, 0x00CB}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_H, 0, 0, 0 }, 0x1E26}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_I, 0, 0, 0 }, 0x00CF}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_O, 0, 0, 0 }, 0x00D6}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0, 0 }, 0x00DC}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_W, 0, 0, 0 }, 0x1E84}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_X, 0, 0, 0 }, 0x1E8C}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Y, 0, 0, 0 }, 0x0178}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_a, 0, 0, 0 }, 0x00E4}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_e, 0, 0, 0 }, 0x00EB}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_h, 0, 0, 0 }, 0x1E27}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_i, 0, 0, 0 }, 0x00EF}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_o, 0, 0, 0 }, 0x00F6}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_t, 0, 0, 0 }, 0x1E97}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0, 0 }, 0x00FC}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_w, 0, 0, 0 }, 0x1E85}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_x, 0, 0, 0 }, 0x1E8D}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_y, 0, 0, 0 }, 0x00FF}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_diaeresis, 0, 0, 0 }, 0x00A8}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_acute, 0, 0, 0 }, 0x0344}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Otilde, 0, 0, 0 }, 0x1E4E}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_otilde, 0, 0, 0 }, 0x1E4F}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Umacron, 0, 0, 0 }, 0x1E7A}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_umacron, 0, 0, 0 }, 0x1E7B}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Ukrainian_i, 0, 0, 0 }, 0x0457}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Ukrainian_I, 0, 0, 0 }, 0x0407}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_a, 0, 0, 0 }, 0x04D3}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_ie, 0, 0, 0 }, 0x0451}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_i, 0, 0, 0 }, 0x04E5}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_o, 0, 0, 0 }, 0x04E7}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_u, 0, 0, 0 }, 0x04F1}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_zhe, 0, 0, 0 }, 0x04DD}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_yeru, 0, 0, 0 }, 0x04F9}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_ze, 0, 0, 0 }, 0x04DF}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_e, 0, 0, 0 }, 0x04ED}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_che, 0, 0, 0 }, 0x04F5}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_A, 0, 0, 0 }, 0x04D2}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_IE, 0, 0, 0 }, 0x0401}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_I, 0, 0, 0 }, 0x04E4}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_O, 0, 0, 0 }, 0x04E6}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_U, 0, 0, 0 }, 0x04F0}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_ZHE, 0, 0, 0 }, 0x04DC}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_YERU, 0, 0, 0 }, 0x04F8}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_ZE, 0, 0, 0 }, 0x04DE}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_E, 0, 0, 0 }, 0x04EC}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Cyrillic_CHE, 0, 0, 0 }, 0x04F4}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x03AA}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x03AB}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x03CA}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x03CB}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4E}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4F}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_acute, SCIM_KEY_space, 0, 0 }, 0x0385}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_acute, SCIM_KEY_Greek_iota, 0, 0 }, 0x0390}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_acute, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03B0}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0, 0 }, 0x1E4E}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0, 0 }, 0x1E4F}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_macron, SCIM_KEY_U, 0, 0 }, 0x1E7A}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_macron, SCIM_KEY_u, 0, 0 }, 0x1E7B}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_dead_diaeresis, 0, 0, 0 }, 0x00A8}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_U, 0 }, 0x1E7A}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_u, 0 }, 0x1E7B}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4E}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4F}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_U, 0 }, 0x1E7A}, {{SCIM_KEY_dead_diaeresis, SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_u, 0 }, 0x1E7B}, {{SCIM_KEY_dead_diaeresis, 0x10004d8, 0, 0, 0 }, 0x04DA}, {{SCIM_KEY_dead_diaeresis, 0x10004d9, 0, 0, 0 }, 0x04DB}, {{SCIM_KEY_dead_diaeresis, 0x10004e8, 0, 0, 0 }, 0x04EA}, {{SCIM_KEY_dead_diaeresis, 0x10004e9, 0, 0, 0 }, 0x04EB}, {{SCIM_KEY_dead_abovering, SCIM_KEY_space, 0, 0, 0 }, 0x02DA}, {{SCIM_KEY_dead_abovering, SCIM_KEY_A, 0, 0, 0 }, 0x00C5}, {{SCIM_KEY_dead_abovering, SCIM_KEY_U, 0, 0, 0 }, 0x016E}, {{SCIM_KEY_dead_abovering, SCIM_KEY_a, 0, 0, 0 }, 0x00E5}, {{SCIM_KEY_dead_abovering, SCIM_KEY_u, 0, 0, 0 }, 0x016F}, {{SCIM_KEY_dead_abovering, SCIM_KEY_w, 0, 0, 0 }, 0x1E98}, {{SCIM_KEY_dead_abovering, SCIM_KEY_y, 0, 0, 0 }, 0x1E99}, {{SCIM_KEY_dead_abovering, SCIM_KEY_dead_abovering, 0, 0, 0 }, 0x00B0}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_space, 0, 0, 0 }, 0x02DD}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_O, 0, 0, 0 }, 0x0150}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_U, 0, 0, 0 }, 0x0170}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_o, 0, 0, 0 }, 0x0151}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_u, 0, 0, 0 }, 0x0171}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_Cyrillic_u, 0, 0, 0 }, 0x04F3}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_Cyrillic_U, 0, 0, 0 }, 0x04F2}, {{SCIM_KEY_dead_doubleacute, SCIM_KEY_dead_doubleacute, 0, 0, 0 }, 0x02DD}, {{SCIM_KEY_dead_caron, SCIM_KEY_space, 0, 0, 0 }, 0x02C7}, {{SCIM_KEY_dead_caron, SCIM_KEY_A, 0, 0, 0 }, 0x01CD}, {{SCIM_KEY_dead_caron, SCIM_KEY_C, 0, 0, 0 }, 0x010C}, {{SCIM_KEY_dead_caron, SCIM_KEY_D, 0, 0, 0 }, 0x010E}, {{SCIM_KEY_dead_caron, SCIM_KEY_E, 0, 0, 0 }, 0x011A}, {{SCIM_KEY_dead_caron, SCIM_KEY_G, 0, 0, 0 }, 0x01E6}, {{SCIM_KEY_dead_caron, SCIM_KEY_H, 0, 0, 0 }, 0x021E}, {{SCIM_KEY_dead_caron, SCIM_KEY_I, 0, 0, 0 }, 0x01CF}, {{SCIM_KEY_dead_caron, SCIM_KEY_K, 0, 0, 0 }, 0x01E8}, {{SCIM_KEY_dead_caron, SCIM_KEY_L, 0, 0, 0 }, 0x013D}, {{SCIM_KEY_dead_caron, SCIM_KEY_N, 0, 0, 0 }, 0x0147}, {{SCIM_KEY_dead_caron, SCIM_KEY_O, 0, 0, 0 }, 0x01D1}, {{SCIM_KEY_dead_caron, SCIM_KEY_R, 0, 0, 0 }, 0x0158}, {{SCIM_KEY_dead_caron, SCIM_KEY_S, 0, 0, 0 }, 0x0160}, {{SCIM_KEY_dead_caron, SCIM_KEY_T, 0, 0, 0 }, 0x0164}, {{SCIM_KEY_dead_caron, SCIM_KEY_U, 0, 0, 0 }, 0x01D3}, {{SCIM_KEY_dead_caron, SCIM_KEY_Z, 0, 0, 0 }, 0x017D}, {{SCIM_KEY_dead_caron, SCIM_KEY_a, 0, 0, 0 }, 0x01CE}, {{SCIM_KEY_dead_caron, SCIM_KEY_c, 0, 0, 0 }, 0x010D}, {{SCIM_KEY_dead_caron, SCIM_KEY_d, 0, 0, 0 }, 0x010F}, {{SCIM_KEY_dead_caron, SCIM_KEY_e, 0, 0, 0 }, 0x011B}, {{SCIM_KEY_dead_caron, SCIM_KEY_g, 0, 0, 0 }, 0x01E7}, {{SCIM_KEY_dead_caron, SCIM_KEY_h, 0, 0, 0 }, 0x021F}, {{SCIM_KEY_dead_caron, SCIM_KEY_i, 0, 0, 0 }, 0x01D0}, {{SCIM_KEY_dead_caron, SCIM_KEY_j, 0, 0, 0 }, 0x01F0}, {{SCIM_KEY_dead_caron, SCIM_KEY_k, 0, 0, 0 }, 0x01E9}, {{SCIM_KEY_dead_caron, SCIM_KEY_l, 0, 0, 0 }, 0x013E}, {{SCIM_KEY_dead_caron, SCIM_KEY_n, 0, 0, 0 }, 0x0148}, {{SCIM_KEY_dead_caron, SCIM_KEY_o, 0, 0, 0 }, 0x01D2}, {{SCIM_KEY_dead_caron, SCIM_KEY_r, 0, 0, 0 }, 0x0159}, {{SCIM_KEY_dead_caron, SCIM_KEY_s, 0, 0, 0 }, 0x0161}, {{SCIM_KEY_dead_caron, SCIM_KEY_t, 0, 0, 0 }, 0x0165}, {{SCIM_KEY_dead_caron, SCIM_KEY_u, 0, 0, 0 }, 0x01D4}, {{SCIM_KEY_dead_caron, SCIM_KEY_z, 0, 0, 0 }, 0x017E}, {{SCIM_KEY_dead_caron, SCIM_KEY_Udiaeresis, 0, 0, 0 }, 0x01D9}, {{SCIM_KEY_dead_caron, SCIM_KEY_udiaeresis, 0, 0, 0 }, 0x01DA}, {{SCIM_KEY_dead_caron, SCIM_KEY_caron, 0, 0, 0 }, 0x02C7}, {{SCIM_KEY_dead_caron, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0, 0 }, 0x01D9}, {{SCIM_KEY_dead_caron, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0, 0 }, 0x01DA}, {{SCIM_KEY_dead_caron, SCIM_KEY_dead_caron, 0, 0, 0 }, 0x02C7}, {{SCIM_KEY_dead_caron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D9}, {{SCIM_KEY_dead_caron, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01DA}, {{SCIM_KEY_dead_caron, 0x10001b7, 0, 0, 0 }, 0x01EE}, {{SCIM_KEY_dead_caron, 0x1000292, 0, 0, 0 }, 0x01EF}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_space, 0, 0, 0 }, 0x00B8}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_comma, 0, 0, 0 }, 0x00B8}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_minus, 0, 0, 0 }, 0x00AC}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_C, 0, 0, 0 }, 0x00C7}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_D, 0, 0, 0 }, 0x1E10}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_E, 0, 0, 0 }, 0x0228}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_G, 0, 0, 0 }, 0x0122}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_H, 0, 0, 0 }, 0x1E28}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_K, 0, 0, 0 }, 0x0136}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_L, 0, 0, 0 }, 0x013B}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_N, 0, 0, 0 }, 0x0145}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_R, 0, 0, 0 }, 0x0156}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_S, 0, 0, 0 }, 0x015E}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_T, 0, 0, 0 }, 0x0162}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_c, 0, 0, 0 }, 0x00E7}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_d, 0, 0, 0 }, 0x1E11}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_e, 0, 0, 0 }, 0x0229}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_g, 0, 0, 0 }, 0x0123}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_h, 0, 0, 0 }, 0x1E29}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_k, 0, 0, 0 }, 0x0137}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_l, 0, 0, 0 }, 0x013C}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_n, 0, 0, 0 }, 0x0146}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_r, 0, 0, 0 }, 0x0157}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_s, 0, 0, 0 }, 0x015F}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_t, 0, 0, 0 }, 0x0163}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_cedilla, 0, 0, 0 }, 0x00B8}, {{SCIM_KEY_dead_cedilla, SCIM_KEY_dead_cedilla, 0, 0, 0 }, 0x00B8}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_space, 0, 0, 0 }, 0x02DB}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_A, 0, 0, 0 }, 0x0104}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_E, 0, 0, 0 }, 0x0118}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_I, 0, 0, 0 }, 0x012E}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_O, 0, 0, 0 }, 0x01EA}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_U, 0, 0, 0 }, 0x0172}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_a, 0, 0, 0 }, 0x0105}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_e, 0, 0, 0 }, 0x0119}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_i, 0, 0, 0 }, 0x012F}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_o, 0, 0, 0 }, 0x01EB}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_u, 0, 0, 0 }, 0x0173}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_ogonek, 0, 0, 0 }, 0x02DB}, {{SCIM_KEY_dead_ogonek, SCIM_KEY_dead_ogonek, 0, 0, 0 }, 0x02DB}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_alphaaccent, 0, 0, 0 }, 0x1FB4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_etaaccent, 0, 0, 0 }, 0x1FC4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_omegaaccent, 0, 0, 0 }, 0x1FF4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1FBC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x1FCC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x1FFC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1FB3}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1FC3}, {{SCIM_KEY_dead_iota, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1FF3}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f00, 0, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f01, 0, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f08, 0, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f09, 0, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f20, 0, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f21, 0, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f28, 0, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f29, 0, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f60, 0, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f61, 0, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f68, 0, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_grave, 0x1001f69, 0, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f00, 0, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f01, 0, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f08, 0, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f09, 0, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f20, 0, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f21, 0, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f28, 0, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f29, 0, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f60, 0, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f61, 0, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f68, 0, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_combining_acute, 0x1001f69, 0, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f00, 0, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f01, 0, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f08, 0, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f09, 0, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f20, 0, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f21, 0, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f28, 0, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f29, 0, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f60, 0, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f61, 0, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f68, 0, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_grave, 0x1001f69, 0, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f00, 0, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f01, 0, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f08, 0, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f09, 0, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f20, 0, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f21, 0, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f28, 0, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f29, 0, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f60, 0, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f61, 0, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f68, 0, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_acute, 0x1001f69, 0, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f00, 0, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f01, 0, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f08, 0, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f09, 0, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f20, 0, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f21, 0, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f28, 0, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f29, 0, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f60, 0, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f61, 0, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f68, 0, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_tilde, 0x1001f69, 0, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_dead_iota, 0, 0, 0 }, 0x037A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F89}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F99}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA9}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F81}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F91}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1FA1}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F88}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F98}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA8}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F80}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F90}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1FA0}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_alpha, 0 }, 0x1FB2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_eta, 0 }, 0x1FC2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_omega, 0 }, 0x1FF2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f00, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f01, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f08, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f09, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f20, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f21, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f28, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f29, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f60, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f61, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f68, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f69, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_alpha, 0 }, 0x1FB7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_eta, 0 }, 0x1FC7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_omega, 0 }, 0x1FF7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f00, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f01, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f08, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f09, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f20, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f21, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f28, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f29, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f60, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f61, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f68, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f69, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F88}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F98}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1FA8}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F80}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F90}, {{SCIM_KEY_dead_iota, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FA0}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F89}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F99}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1FA9}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F81}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F91}, {{SCIM_KEY_dead_iota, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FA1}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB7}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC7}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF7}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_dead_iota, 0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f00, 0, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f01, 0, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f08, 0, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f09, 0, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f20, 0, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f21, 0, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f28, 0, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f29, 0, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f60, 0, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f61, 0, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f68, 0, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, 0x1000342, 0x1001f69, 0, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, 0x1001f00, 0, 0, 0 }, 0x1F80}, {{SCIM_KEY_dead_iota, 0x1001f01, 0, 0, 0 }, 0x1F81}, {{SCIM_KEY_dead_iota, 0x1001f02, 0, 0, 0 }, 0x1F82}, {{SCIM_KEY_dead_iota, 0x1001f03, 0, 0, 0 }, 0x1F83}, {{SCIM_KEY_dead_iota, 0x1001f04, 0, 0, 0 }, 0x1F84}, {{SCIM_KEY_dead_iota, 0x1001f05, 0, 0, 0 }, 0x1F85}, {{SCIM_KEY_dead_iota, 0x1001f06, 0, 0, 0 }, 0x1F86}, {{SCIM_KEY_dead_iota, 0x1001f07, 0, 0, 0 }, 0x1F87}, {{SCIM_KEY_dead_iota, 0x1001f08, 0, 0, 0 }, 0x1F88}, {{SCIM_KEY_dead_iota, 0x1001f09, 0, 0, 0 }, 0x1F89}, {{SCIM_KEY_dead_iota, 0x1001f0a, 0, 0, 0 }, 0x1F8A}, {{SCIM_KEY_dead_iota, 0x1001f0b, 0, 0, 0 }, 0x1F8B}, {{SCIM_KEY_dead_iota, 0x1001f0c, 0, 0, 0 }, 0x1F8C}, {{SCIM_KEY_dead_iota, 0x1001f0d, 0, 0, 0 }, 0x1F8D}, {{SCIM_KEY_dead_iota, 0x1001f0e, 0, 0, 0 }, 0x1F8E}, {{SCIM_KEY_dead_iota, 0x1001f0f, 0, 0, 0 }, 0x1F8F}, {{SCIM_KEY_dead_iota, 0x1001f20, 0, 0, 0 }, 0x1F90}, {{SCIM_KEY_dead_iota, 0x1001f21, 0, 0, 0 }, 0x1F91}, {{SCIM_KEY_dead_iota, 0x1001f22, 0, 0, 0 }, 0x1F92}, {{SCIM_KEY_dead_iota, 0x1001f23, 0, 0, 0 }, 0x1F93}, {{SCIM_KEY_dead_iota, 0x1001f24, 0, 0, 0 }, 0x1F94}, {{SCIM_KEY_dead_iota, 0x1001f25, 0, 0, 0 }, 0x1F95}, {{SCIM_KEY_dead_iota, 0x1001f26, 0, 0, 0 }, 0x1F96}, {{SCIM_KEY_dead_iota, 0x1001f27, 0, 0, 0 }, 0x1F97}, {{SCIM_KEY_dead_iota, 0x1001f28, 0, 0, 0 }, 0x1F98}, {{SCIM_KEY_dead_iota, 0x1001f29, 0, 0, 0 }, 0x1F99}, {{SCIM_KEY_dead_iota, 0x1001f2a, 0, 0, 0 }, 0x1F9A}, {{SCIM_KEY_dead_iota, 0x1001f2b, 0, 0, 0 }, 0x1F9B}, {{SCIM_KEY_dead_iota, 0x1001f2c, 0, 0, 0 }, 0x1F9C}, {{SCIM_KEY_dead_iota, 0x1001f2d, 0, 0, 0 }, 0x1F9D}, {{SCIM_KEY_dead_iota, 0x1001f2e, 0, 0, 0 }, 0x1F9E}, {{SCIM_KEY_dead_iota, 0x1001f2f, 0, 0, 0 }, 0x1F9F}, {{SCIM_KEY_dead_iota, 0x1001f60, 0, 0, 0 }, 0x1FA0}, {{SCIM_KEY_dead_iota, 0x1001f61, 0, 0, 0 }, 0x1FA1}, {{SCIM_KEY_dead_iota, 0x1001f62, 0, 0, 0 }, 0x1FA2}, {{SCIM_KEY_dead_iota, 0x1001f63, 0, 0, 0 }, 0x1FA3}, {{SCIM_KEY_dead_iota, 0x1001f64, 0, 0, 0 }, 0x1FA4}, {{SCIM_KEY_dead_iota, 0x1001f65, 0, 0, 0 }, 0x1FA5}, {{SCIM_KEY_dead_iota, 0x1001f66, 0, 0, 0 }, 0x1FA6}, {{SCIM_KEY_dead_iota, 0x1001f67, 0, 0, 0 }, 0x1FA7}, {{SCIM_KEY_dead_iota, 0x1001f68, 0, 0, 0 }, 0x1FA8}, {{SCIM_KEY_dead_iota, 0x1001f69, 0, 0, 0 }, 0x1FA9}, {{SCIM_KEY_dead_iota, 0x1001f6a, 0, 0, 0 }, 0x1FAA}, {{SCIM_KEY_dead_iota, 0x1001f6b, 0, 0, 0 }, 0x1FAB}, {{SCIM_KEY_dead_iota, 0x1001f6c, 0, 0, 0 }, 0x1FAC}, {{SCIM_KEY_dead_iota, 0x1001f6d, 0, 0, 0 }, 0x1FAD}, {{SCIM_KEY_dead_iota, 0x1001f6e, 0, 0, 0 }, 0x1FAE}, {{SCIM_KEY_dead_iota, 0x1001f6f, 0, 0, 0 }, 0x1FAF}, {{SCIM_KEY_dead_iota, 0x1001f70, 0, 0, 0 }, 0x1FB2}, {{SCIM_KEY_dead_iota, 0x1001f74, 0, 0, 0 }, 0x1FC2}, {{SCIM_KEY_dead_iota, 0x1001f7c, 0, 0, 0 }, 0x1FF2}, {{SCIM_KEY_dead_iota, 0x1001fb6, 0, 0, 0 }, 0x1FB7}, {{SCIM_KEY_dead_iota, 0x1001fc6, 0, 0, 0 }, 0x1FC7}, {{SCIM_KEY_dead_iota, 0x1001ff6, 0, 0, 0 }, 0x1FF7}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_WO, 0, 0, 0 }, 0x30FA}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_U, 0, 0, 0 }, 0x30F4}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_KA, 0, 0, 0 }, 0x30AC}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_KI, 0, 0, 0 }, 0x30AE}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_KU, 0, 0, 0 }, 0x30B0}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_KE, 0, 0, 0 }, 0x30B2}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_KO, 0, 0, 0 }, 0x30B4}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_SA, 0, 0, 0 }, 0x30B6}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_SHI, 0, 0, 0 }, 0x30B8}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_SU, 0, 0, 0 }, 0x30BA}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_SE, 0, 0, 0 }, 0x30BC}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_SO, 0, 0, 0 }, 0x30BE}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_TA, 0, 0, 0 }, 0x30C0}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_CHI, 0, 0, 0 }, 0x30C2}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_TSU, 0, 0, 0 }, 0x30C5}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_TE, 0, 0, 0 }, 0x30C7}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_TO, 0, 0, 0 }, 0x30C9}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_HA, 0, 0, 0 }, 0x30D0}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_HI, 0, 0, 0 }, 0x30D3}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_FU, 0, 0, 0 }, 0x30D6}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_HE, 0, 0, 0 }, 0x30D9}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_HO, 0, 0, 0 }, 0x30DC}, {{SCIM_KEY_dead_voiced_sound, SCIM_KEY_kana_WA, 0, 0, 0 }, 0x30F7}, {{SCIM_KEY_dead_voiced_sound, 0x1003046, 0, 0, 0 }, 0x3094}, {{SCIM_KEY_dead_voiced_sound, 0x100304b, 0, 0, 0 }, 0x304C}, {{SCIM_KEY_dead_voiced_sound, 0x100304d, 0, 0, 0 }, 0x304E}, {{SCIM_KEY_dead_voiced_sound, 0x100304f, 0, 0, 0 }, 0x3050}, {{SCIM_KEY_dead_voiced_sound, 0x1003051, 0, 0, 0 }, 0x3052}, {{SCIM_KEY_dead_voiced_sound, 0x1003053, 0, 0, 0 }, 0x3054}, {{SCIM_KEY_dead_voiced_sound, 0x1003055, 0, 0, 0 }, 0x3056}, {{SCIM_KEY_dead_voiced_sound, 0x1003057, 0, 0, 0 }, 0x3058}, {{SCIM_KEY_dead_voiced_sound, 0x1003059, 0, 0, 0 }, 0x305A}, {{SCIM_KEY_dead_voiced_sound, 0x100305b, 0, 0, 0 }, 0x305C}, {{SCIM_KEY_dead_voiced_sound, 0x100305d, 0, 0, 0 }, 0x305E}, {{SCIM_KEY_dead_voiced_sound, 0x100305f, 0, 0, 0 }, 0x3060}, {{SCIM_KEY_dead_voiced_sound, 0x1003061, 0, 0, 0 }, 0x3062}, {{SCIM_KEY_dead_voiced_sound, 0x1003064, 0, 0, 0 }, 0x3065}, {{SCIM_KEY_dead_voiced_sound, 0x1003066, 0, 0, 0 }, 0x3067}, {{SCIM_KEY_dead_voiced_sound, 0x1003068, 0, 0, 0 }, 0x3069}, {{SCIM_KEY_dead_voiced_sound, 0x100306f, 0, 0, 0 }, 0x3070}, {{SCIM_KEY_dead_voiced_sound, 0x1003072, 0, 0, 0 }, 0x3073}, {{SCIM_KEY_dead_voiced_sound, 0x1003075, 0, 0, 0 }, 0x3076}, {{SCIM_KEY_dead_voiced_sound, 0x1003078, 0, 0, 0 }, 0x3079}, {{SCIM_KEY_dead_voiced_sound, 0x100307b, 0, 0, 0 }, 0x307C}, {{SCIM_KEY_dead_voiced_sound, 0x100309d, 0, 0, 0 }, 0x309E}, {{SCIM_KEY_dead_voiced_sound, 0x10030f0, 0, 0, 0 }, 0x30F8}, {{SCIM_KEY_dead_voiced_sound, 0x10030f1, 0, 0, 0 }, 0x30F9}, {{SCIM_KEY_dead_voiced_sound, 0x10030fd, 0, 0, 0 }, 0x30FE}, {{SCIM_KEY_dead_semivoiced_sound, SCIM_KEY_kana_HA, 0, 0, 0 }, 0x30D1}, {{SCIM_KEY_dead_semivoiced_sound, SCIM_KEY_kana_HI, 0, 0, 0 }, 0x30D4}, {{SCIM_KEY_dead_semivoiced_sound, SCIM_KEY_kana_FU, 0, 0, 0 }, 0x30D7}, {{SCIM_KEY_dead_semivoiced_sound, SCIM_KEY_kana_HE, 0, 0, 0 }, 0x30DA}, {{SCIM_KEY_dead_semivoiced_sound, SCIM_KEY_kana_HO, 0, 0, 0 }, 0x30DD}, {{SCIM_KEY_dead_semivoiced_sound, 0x100306f, 0, 0, 0 }, 0x3071}, {{SCIM_KEY_dead_semivoiced_sound, 0x1003072, 0, 0, 0 }, 0x3074}, {{SCIM_KEY_dead_semivoiced_sound, 0x1003075, 0, 0, 0 }, 0x3077}, {{SCIM_KEY_dead_semivoiced_sound, 0x1003078, 0, 0, 0 }, 0x307A}, {{SCIM_KEY_dead_semivoiced_sound, 0x100307b, 0, 0, 0 }, 0x307D}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0, 0, 0 }, 0x1EA0}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_B, 0, 0, 0 }, 0x1E04}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_D, 0, 0, 0 }, 0x1E0C}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_E, 0, 0, 0 }, 0x1EB8}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_H, 0, 0, 0 }, 0x1E24}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_I, 0, 0, 0 }, 0x1ECA}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_K, 0, 0, 0 }, 0x1E32}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_L, 0, 0, 0 }, 0x1E36}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_M, 0, 0, 0 }, 0x1E42}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_N, 0, 0, 0 }, 0x1E46}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_O, 0, 0, 0 }, 0x1ECC}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_R, 0, 0, 0 }, 0x1E5A}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_S, 0, 0, 0 }, 0x1E62}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_T, 0, 0, 0 }, 0x1E6C}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_U, 0, 0, 0 }, 0x1EE4}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_V, 0, 0, 0 }, 0x1E7E}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_W, 0, 0, 0 }, 0x1E88}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF4}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Z, 0, 0, 0 }, 0x1E92}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0, 0, 0 }, 0x1EA1}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_b, 0, 0, 0 }, 0x1E05}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_d, 0, 0, 0 }, 0x1E0D}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_e, 0, 0, 0 }, 0x1EB9}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_h, 0, 0, 0 }, 0x1E25}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_i, 0, 0, 0 }, 0x1ECB}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_k, 0, 0, 0 }, 0x1E33}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_l, 0, 0, 0 }, 0x1E37}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_m, 0, 0, 0 }, 0x1E43}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_n, 0, 0, 0 }, 0x1E47}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_o, 0, 0, 0 }, 0x1ECD}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_r, 0, 0, 0 }, 0x1E5B}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_s, 0, 0, 0 }, 0x1E63}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_t, 0, 0, 0 }, 0x1E6D}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_u, 0, 0, 0 }, 0x1EE5}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_v, 0, 0, 0 }, 0x1E7F}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_w, 0, 0, 0 }, 0x1E89}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_y, 0, 0, 0 }, 0x1EF5}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_z, 0, 0, 0 }, 0x1E93}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EAC}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC6}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED8}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EAD}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC7}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED9}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB6}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB7}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EE2}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EE3}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EF0}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EF1}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EE2}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EF0}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EE3}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EF1}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE2}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EF0}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE3}, {{SCIM_KEY_dead_belowdot, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EF1}, {{SCIM_KEY_dead_belowdot, 0x10001a0, 0, 0, 0 }, 0x1EE2}, {{SCIM_KEY_dead_belowdot, 0x10001a1, 0, 0, 0 }, 0x1EE3}, {{SCIM_KEY_dead_belowdot, 0x10001af, 0, 0, 0 }, 0x1EF0}, {{SCIM_KEY_dead_belowdot, 0x10001b0, 0, 0, 0 }, 0x1EF1}, {{SCIM_KEY_dead_hook, SCIM_KEY_A, 0, 0, 0 }, 0x1EA2}, {{SCIM_KEY_dead_hook, SCIM_KEY_E, 0, 0, 0 }, 0x1EBA}, {{SCIM_KEY_dead_hook, SCIM_KEY_I, 0, 0, 0 }, 0x1EC8}, {{SCIM_KEY_dead_hook, SCIM_KEY_O, 0, 0, 0 }, 0x1ECE}, {{SCIM_KEY_dead_hook, SCIM_KEY_U, 0, 0, 0 }, 0x1EE6}, {{SCIM_KEY_dead_hook, SCIM_KEY_Y, 0, 0, 0 }, 0x1EF6}, {{SCIM_KEY_dead_hook, SCIM_KEY_a, 0, 0, 0 }, 0x1EA3}, {{SCIM_KEY_dead_hook, SCIM_KEY_e, 0, 0, 0 }, 0x1EBB}, {{SCIM_KEY_dead_hook, SCIM_KEY_i, 0, 0, 0 }, 0x1EC9}, {{SCIM_KEY_dead_hook, SCIM_KEY_o, 0, 0, 0 }, 0x1ECF}, {{SCIM_KEY_dead_hook, SCIM_KEY_u, 0, 0, 0 }, 0x1EE7}, {{SCIM_KEY_dead_hook, SCIM_KEY_y, 0, 0, 0 }, 0x1EF7}, {{SCIM_KEY_dead_hook, SCIM_KEY_Acircumflex, 0, 0, 0 }, 0x1EA8}, {{SCIM_KEY_dead_hook, SCIM_KEY_Ecircumflex, 0, 0, 0 }, 0x1EC2}, {{SCIM_KEY_dead_hook, SCIM_KEY_Ocircumflex, 0, 0, 0 }, 0x1ED4}, {{SCIM_KEY_dead_hook, SCIM_KEY_acircumflex, 0, 0, 0 }, 0x1EA9}, {{SCIM_KEY_dead_hook, SCIM_KEY_ecircumflex, 0, 0, 0 }, 0x1EC3}, {{SCIM_KEY_dead_hook, SCIM_KEY_ocircumflex, 0, 0, 0 }, 0x1ED5}, {{SCIM_KEY_dead_hook, SCIM_KEY_Abreve, 0, 0, 0 }, 0x1EB2}, {{SCIM_KEY_dead_hook, SCIM_KEY_abreve, 0, 0, 0 }, 0x1EB3}, {{SCIM_KEY_dead_hook, SCIM_KEY_Ohorn, 0, 0, 0 }, 0x1EDE}, {{SCIM_KEY_dead_hook, SCIM_KEY_ohorn, 0, 0, 0 }, 0x1EDF}, {{SCIM_KEY_dead_hook, SCIM_KEY_Uhorn, 0, 0, 0 }, 0x1EEC}, {{SCIM_KEY_dead_hook, SCIM_KEY_uhorn, 0, 0, 0 }, 0x1EED}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0, 0 }, 0x1EA8}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0, 0 }, 0x1EC2}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0, 0 }, 0x1ED4}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0, 0 }, 0x1EA9}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0, 0 }, 0x1EC3}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0, 0 }, 0x1ED5}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_breve, SCIM_KEY_A, 0, 0 }, 0x1EB2}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_breve, SCIM_KEY_a, 0, 0 }, 0x1EB3}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0 }, 0x1EDE}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0 }, 0x1EEC}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0 }, 0x1EDF}, {{SCIM_KEY_dead_hook, SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0 }, 0x1EED}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDE}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEC}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDF}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EED}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA8}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC2}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED4}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA9}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC3}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED5}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_dead_hook, SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_dead_hook, 0x10001a0, 0, 0, 0 }, 0x1EDE}, {{SCIM_KEY_dead_hook, 0x10001a1, 0, 0, 0 }, 0x1EDF}, {{SCIM_KEY_dead_hook, 0x10001af, 0, 0, 0 }, 0x1EEC}, {{SCIM_KEY_dead_hook, 0x10001b0, 0, 0, 0 }, 0x1EED}, {{SCIM_KEY_dead_horn, SCIM_KEY_O, 0, 0, 0 }, 0x01A0}, {{SCIM_KEY_dead_horn, SCIM_KEY_U, 0, 0, 0 }, 0x01AF}, {{SCIM_KEY_dead_horn, SCIM_KEY_o, 0, 0, 0 }, 0x01A1}, {{SCIM_KEY_dead_horn, SCIM_KEY_u, 0, 0, 0 }, 0x01B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_space, 0, 0 }, 0x00A0}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_apostrophe, 0, 0 }, 0x0027}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_parenleft, 0, 0 }, 0x02D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_comma, 0, 0 }, 0x00B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_minus, 0, 0 }, 0x007E}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_period, 0, 0 }, 0x2008}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_less, 0, 0 }, 0x02C7}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_greater, 0, 0 }, 0x005E}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_asciicircum, 0, 0 }, 0x005E}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_grave, 0, 0 }, 0x0060}, {{SCIM_KEY_Multi_key, SCIM_KEY_space, SCIM_KEY_asciitilde, 0, 0 }, 0x007E}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_exclam, 0, 0 }, 0x00A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EF0}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE3}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EF1}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_A, 0, 0 }, 0x1EA0}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_B, 0, 0 }, 0x1E04}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_D, 0, 0 }, 0x1E0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_E, 0, 0 }, 0x1EB8}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_H, 0, 0 }, 0x1E24}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_I, 0, 0 }, 0x1ECA}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_K, 0, 0 }, 0x1E32}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_L, 0, 0 }, 0x1E36}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_M, 0, 0 }, 0x1E42}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_N, 0, 0 }, 0x1E46}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_O, 0, 0 }, 0x1ECC}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_P, 0, 0 }, 0x00B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_R, 0, 0 }, 0x1E5A}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_S, 0, 0 }, 0x1E62}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_T, 0, 0 }, 0x1E6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_U, 0, 0 }, 0x1EE4}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_V, 0, 0 }, 0x1E7E}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_W, 0, 0 }, 0x1E88}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_Y, 0, 0 }, 0x1EF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_Z, 0, 0 }, 0x1E92}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_asciicircum, 0, 0 }, 0x00A6}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_a, 0, 0 }, 0x1EA1}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_b, 0, 0 }, 0x1E05}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_d, 0, 0 }, 0x1E0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_e, 0, 0 }, 0x1EB9}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_h, 0, 0 }, 0x1E25}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_i, 0, 0 }, 0x1ECB}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_k, 0, 0 }, 0x1E33}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_l, 0, 0 }, 0x1E37}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_m, 0, 0 }, 0x1E43}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_n, 0, 0 }, 0x1E47}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_o, 0, 0 }, 0x1ECD}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_p, 0, 0 }, 0x00B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_r, 0, 0 }, 0x1E5B}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_s, 0, 0 }, 0x1E63}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_t, 0, 0 }, 0x1E6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_u, 0, 0 }, 0x1EE5}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_v, 0, 0 }, 0x1E7F}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_w, 0, 0 }, 0x1E89}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_y, 0, 0 }, 0x1EF5}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_z, 0, 0 }, 0x1E93}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_Ohorn, 0, 0 }, 0x1EE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_ohorn, 0, 0 }, 0x1EE3}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_Uhorn, 0, 0 }, 0x1EF0}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_uhorn, 0, 0 }, 0x1EF1}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EF0}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EE3}, {{SCIM_KEY_Multi_key, SCIM_KEY_exclam, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EF1}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_quotedbl, 0, 0 }, 0x00A8}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_apostrophe, 0, 0 }, 0x0344}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_apostrophe, SCIM_KEY_space, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_apostrophe, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_apostrophe, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_comma, 0, 0 }, 0x201E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_slash, 0, 0 }, 0x301E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_less, 0, 0 }, 0x201C}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_greater, 0, 0 }, 0x201D}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_A, 0, 0 }, 0x00C4}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_E, 0, 0 }, 0x00CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_H, 0, 0 }, 0x1E26}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_I, 0, 0 }, 0x00CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_O, 0, 0 }, 0x00D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_U, 0, 0 }, 0x00DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_W, 0, 0 }, 0x1E84}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_X, 0, 0 }, 0x1E8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Y, 0, 0 }, 0x0178}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_backslash, 0, 0 }, 0x301D}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_underscore, SCIM_KEY_U, 0 }, 0x1E7A}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_underscore, SCIM_KEY_u, 0 }, 0x1E7B}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_a, 0, 0 }, 0x00E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_e, 0, 0 }, 0x00EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_h, 0, 0 }, 0x1E27}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_i, 0, 0 }, 0x00EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_o, 0, 0 }, 0x00F6}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_t, 0, 0 }, 0x1E97}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_u, 0, 0 }, 0x00FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_w, 0, 0 }, 0x1E85}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_x, 0, 0 }, 0x1E8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_y, 0, 0 }, 0x00FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4F}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_macron, SCIM_KEY_U, 0 }, 0x1E7A}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_macron, SCIM_KEY_u, 0 }, 0x1E7B}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_acute, 0, 0 }, 0x0344}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Otilde, 0, 0 }, 0x1E4E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_otilde, 0, 0 }, 0x1E4F}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Umacron, 0, 0 }, 0x1E7A}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_umacron, 0, 0 }, 0x1E7B}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Ukrainian_i, 0, 0 }, 0x0457}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Ukrainian_I, 0, 0 }, 0x0407}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_a, 0, 0 }, 0x04D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_ie, 0, 0 }, 0x0451}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x04E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_o, 0, 0 }, 0x04E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x04F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_zhe, 0, 0 }, 0x04DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_yeru, 0, 0 }, 0x04F9}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_ze, 0, 0 }, 0x04DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_e, 0, 0 }, 0x04ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_che, 0, 0 }, 0x04F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_A, 0, 0 }, 0x04D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_IE, 0, 0 }, 0x0401}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x04E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_O, 0, 0 }, 0x04E6}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x04F0}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_ZHE, 0, 0 }, 0x04DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_YERU, 0, 0 }, 0x04F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_ZE, 0, 0 }, 0x04DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_E, 0, 0 }, 0x04EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Cyrillic_CHE, 0, 0 }, 0x04F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x03AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x03AB}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0, 0 }, 0x03CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0 }, 0x1E4E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0 }, 0x1E4F}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_combining_acute, 0, 0 }, 0x0344}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_dead_acute, 0, 0 }, 0x0344}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0 }, 0x1E4E}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0 }, 0x1E4F}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_dead_macron, SCIM_KEY_U, 0 }, 0x1E7A}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_dead_macron, SCIM_KEY_u, 0 }, 0x1E7B}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, 0x10003d2, 0, 0 }, 0x03D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, 0x10004d8, 0, 0 }, 0x04DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, 0x10004d9, 0, 0 }, 0x04DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, 0x10004e8, 0, 0 }, 0x04EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, 0x10004e9, 0, 0 }, 0x04EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_numbersign, SCIM_KEY_numbersign, 0, 0 }, 0x266F}, {{SCIM_KEY_Multi_key, SCIM_KEY_numbersign, SCIM_KEY_b, 0, 0 }, 0x266D}, {{SCIM_KEY_Multi_key, SCIM_KEY_numbersign, SCIM_KEY_f, 0, 0 }, 0x266E}, {{SCIM_KEY_Multi_key, SCIM_KEY_percent, SCIM_KEY_o, 0, 0 }, 0x2030}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_space, 0, 0 }, 0x0027}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_space, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_apostrophe, 0, 0 }, 0x00B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_comma, 0, 0 }, 0x201A}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_comma, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_comma, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_slash, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_slash, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_less, 0, 0 }, 0x2018}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_greater, 0, 0 }, 0x2019}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_A, 0, 0 }, 0x00C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_C, 0, 0 }, 0x0106}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_E, 0, 0 }, 0x00C9}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_G, 0, 0 }, 0x01F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_I, 0, 0 }, 0x00CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_K, 0, 0 }, 0x1E30}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_L, 0, 0 }, 0x0139}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_M, 0, 0 }, 0x1E3E}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_N, 0, 0 }, 0x0143}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_O, 0, 0 }, 0x00D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_P, 0, 0 }, 0x1E54}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_R, 0, 0 }, 0x0154}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_S, 0, 0 }, 0x015A}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_U, 0, 0 }, 0x00DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_W, 0, 0 }, 0x1E82}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Y, 0, 0 }, 0x00DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Z, 0, 0 }, 0x0179}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_a, 0, 0 }, 0x00E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_c, 0, 0 }, 0x0107}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_e, 0, 0 }, 0x00E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_g, 0, 0 }, 0x01F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_i, 0, 0 }, 0x00ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_k, 0, 0 }, 0x1E31}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_l, 0, 0 }, 0x013A}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_m, 0, 0 }, 0x1E3F}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_n, 0, 0 }, 0x0144}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_o, 0, 0 }, 0x00F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_p, 0, 0 }, 0x1E55}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_r, 0, 0 }, 0x0155}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_s, 0, 0 }, 0x015B}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_u, 0, 0 }, 0x00FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_w, 0, 0 }, 0x1E83}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_y, 0, 0 }, 0x00FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_z, 0, 0 }, 0x017A}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciitilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_asciitilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Acircumflex, 0, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Aring, 0, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_AE, 0, 0 }, 0x01FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Ccedilla, 0, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Ecircumflex, 0, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Idiaeresis, 0, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Ocircumflex, 0, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Otilde, 0, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Ooblique, 0, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_acircumflex, 0, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_aring, 0, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_ae, 0, 0 }, 0x01FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_ccedilla, 0, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_ecircumflex, 0, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_idiaeresis, 0, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_ocircumflex, 0, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_otilde, 0, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_oslash, 0, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_udiaeresis, 0, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Abreve, 0, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_abreve, 0, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Emacron, 0, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_emacron, 0, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Omacron, 0, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Utilde, 0, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_omacron, 0, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_utilde, 0, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Cyrillic_ghe, 0, 0 }, 0x0453}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Cyrillic_ka, 0, 0 }, 0x045C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Cyrillic_GHE, 0, 0 }, 0x0403}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Cyrillic_KA, 0, 0 }, 0x040C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_iotadieresis, 0, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_upsilondieresis, 0, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x0386}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x0388}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_ETA, 0, 0 }, 0x0389}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x038A}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x038C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x038E}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x038F}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_alpha, 0, 0 }, 0x03AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x03AD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_eta, 0, 0 }, 0x03AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_iota, 0, 0 }, 0x03AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_omicron, 0, 0 }, 0x03CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Greek_omega, 0, 0 }, 0x03CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_combining_tilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_combining_tilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Ohorn, 0, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_ohorn, 0, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_Uhorn, 0, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_uhorn, 0, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_tilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_tilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_breve, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_breve, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_abovering, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_abovering, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_cedilla, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_cedilla, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_KP_Divide, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, SCIM_KEY_KP_Divide, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x10003d2, 0, 0 }, 0x03D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f00, 0, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f01, 0, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f08, 0, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f09, 0, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f10, 0, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f11, 0, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f18, 0, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f19, 0, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f20, 0, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f21, 0, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f28, 0, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f29, 0, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f30, 0, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f31, 0, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f38, 0, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f39, 0, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f40, 0, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f41, 0, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f48, 0, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f49, 0, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f50, 0, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f51, 0, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f59, 0, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f60, 0, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f61, 0, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f68, 0, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_apostrophe, 0x1001f69, 0, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_space, 0, 0 }, 0x02D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_parenleft, 0, 0 }, 0x005B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_minus, 0, 0 }, 0x007B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_0, SCIM_KEY_parenright, 0 }, 0x24EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_parenright, 0 }, 0x2460}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_0, SCIM_KEY_parenright }, 0x2469}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_1, SCIM_KEY_parenright }, 0x246A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_2, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_3, SCIM_KEY_parenright }, 0x246C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_4, SCIM_KEY_parenright }, 0x246D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_5, SCIM_KEY_parenright }, 0x246E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_6, SCIM_KEY_parenright }, 0x246F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_7, SCIM_KEY_parenright }, 0x2470}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_8, SCIM_KEY_parenright }, 0x2471}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_9, SCIM_KEY_parenright }, 0x2472}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x2469}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x246A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x246C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x246D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x246E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x246F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x2470}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x2471}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_1, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x2472}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_parenright, 0 }, 0x2461}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_2, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_parenright, 0 }, 0x2462}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_0, SCIM_KEY_parenright }, 0x325A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_1, SCIM_KEY_parenright }, 0x325B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_2, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_3, SCIM_KEY_parenright }, 0x325D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_4, SCIM_KEY_parenright }, 0x325E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_5, SCIM_KEY_parenright }, 0x325F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_6, SCIM_KEY_parenright }, 0x32B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_7, SCIM_KEY_parenright }, 0x32B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_8, SCIM_KEY_parenright }, 0x32B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_9, SCIM_KEY_parenright }, 0x32B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x325A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x325B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x325D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x325E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x325F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x32B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x32B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x32B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_3, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x32B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_parenright, 0 }, 0x2463}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_0, SCIM_KEY_parenright }, 0x32B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_1, SCIM_KEY_parenright }, 0x32B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_2, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_3, SCIM_KEY_parenright }, 0x32B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_4, SCIM_KEY_parenright }, 0x32B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_5, SCIM_KEY_parenright }, 0x32BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_6, SCIM_KEY_parenright }, 0x32BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_7, SCIM_KEY_parenright }, 0x32BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_8, SCIM_KEY_parenright }, 0x32BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_9, SCIM_KEY_parenright }, 0x32BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x32B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x32B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x32B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x32B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x32BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x32BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x32BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x32BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_4, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x32BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_5, SCIM_KEY_parenright, 0 }, 0x2464}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_5, SCIM_KEY_0, SCIM_KEY_parenright }, 0x32BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_5, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x32BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_6, SCIM_KEY_parenright, 0 }, 0x2465}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_7, SCIM_KEY_parenright, 0 }, 0x2466}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_8, SCIM_KEY_parenright, 0 }, 0x2467}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_9, SCIM_KEY_parenright, 0 }, 0x2468}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_A, 0, 0 }, 0x0102}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_A, SCIM_KEY_parenright, 0 }, 0x24B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_B, SCIM_KEY_parenright, 0 }, 0x24B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_C, SCIM_KEY_parenright, 0 }, 0x24B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_D, SCIM_KEY_parenright, 0 }, 0x24B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_E, SCIM_KEY_parenright, 0 }, 0x24BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_F, SCIM_KEY_parenright, 0 }, 0x24BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_G, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_G, SCIM_KEY_parenright, 0 }, 0x24BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_H, SCIM_KEY_parenright, 0 }, 0x24BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_I, SCIM_KEY_parenright, 0 }, 0x24BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_J, SCIM_KEY_parenright, 0 }, 0x24BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_K, SCIM_KEY_parenright, 0 }, 0x24C0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_L, SCIM_KEY_parenright, 0 }, 0x24C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_M, SCIM_KEY_parenright, 0 }, 0x24C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_N, SCIM_KEY_parenright, 0 }, 0x24C3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_O, SCIM_KEY_parenright, 0 }, 0x24C4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_P, SCIM_KEY_parenright, 0 }, 0x24C5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Q, SCIM_KEY_parenright, 0 }, 0x24C6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_R, SCIM_KEY_parenright, 0 }, 0x24C7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_S, SCIM_KEY_parenright, 0 }, 0x24C8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_T, SCIM_KEY_parenright, 0 }, 0x24C9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_U, SCIM_KEY_parenright, 0 }, 0x24CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_V, SCIM_KEY_parenright, 0 }, 0x24CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_W, SCIM_KEY_parenright, 0 }, 0x24CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_X, SCIM_KEY_parenright, 0 }, 0x24CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Y, SCIM_KEY_parenright, 0 }, 0x24CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Z, SCIM_KEY_parenright, 0 }, 0x24CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_a, 0, 0 }, 0x0103}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_a, SCIM_KEY_parenright, 0 }, 0x24D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_b, SCIM_KEY_parenright, 0 }, 0x24D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_c, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_c, SCIM_KEY_parenright, 0 }, 0x24D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_d, SCIM_KEY_parenright, 0 }, 0x24D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_e, SCIM_KEY_parenright, 0 }, 0x24D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_f, SCIM_KEY_parenright, 0 }, 0x24D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_g, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_g, SCIM_KEY_parenright, 0 }, 0x24D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_h, SCIM_KEY_parenright, 0 }, 0x24D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_i, SCIM_KEY_parenright, 0 }, 0x24D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_j, SCIM_KEY_parenright, 0 }, 0x24D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_k, SCIM_KEY_parenright, 0 }, 0x24DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_l, SCIM_KEY_parenright, 0 }, 0x24DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_m, SCIM_KEY_parenright, 0 }, 0x24DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_n, SCIM_KEY_parenright, 0 }, 0x24DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_o, SCIM_KEY_parenright, 0 }, 0x24DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_p, SCIM_KEY_parenright, 0 }, 0x24DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_q, SCIM_KEY_parenright, 0 }, 0x24E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_r, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_r, SCIM_KEY_parenright, 0 }, 0x24E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_s, SCIM_KEY_parenright, 0 }, 0x24E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_t, SCIM_KEY_parenright, 0 }, 0x24E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_u, SCIM_KEY_parenright, 0 }, 0x24E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_v, SCIM_KEY_parenright, 0 }, 0x24E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_w, SCIM_KEY_parenright, 0 }, 0x24E6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_x, SCIM_KEY_parenright, 0 }, 0x24E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_y, SCIM_KEY_parenright, 0 }, 0x24E8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_z, SCIM_KEY_parenright, 0 }, 0x24E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_WO, SCIM_KEY_parenright, 0 }, 0x32FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_A, SCIM_KEY_parenright, 0 }, 0x32D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_I, SCIM_KEY_parenright, 0 }, 0x32D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_U, SCIM_KEY_parenright, 0 }, 0x32D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_E, SCIM_KEY_parenright, 0 }, 0x32D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_O, SCIM_KEY_parenright, 0 }, 0x32D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_KA, SCIM_KEY_parenright, 0 }, 0x32D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_KI, SCIM_KEY_parenright, 0 }, 0x32D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_KU, SCIM_KEY_parenright, 0 }, 0x32D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_KE, SCIM_KEY_parenright, 0 }, 0x32D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_KO, SCIM_KEY_parenright, 0 }, 0x32D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_SA, SCIM_KEY_parenright, 0 }, 0x32DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_SHI, SCIM_KEY_parenright, 0 }, 0x32DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_SU, SCIM_KEY_parenright, 0 }, 0x32DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_SE, SCIM_KEY_parenright, 0 }, 0x32DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_SO, SCIM_KEY_parenright, 0 }, 0x32DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_TA, SCIM_KEY_parenright, 0 }, 0x32DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_CHI, SCIM_KEY_parenright, 0 }, 0x32E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_TSU, SCIM_KEY_parenright, 0 }, 0x32E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_TE, SCIM_KEY_parenright, 0 }, 0x32E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_TO, SCIM_KEY_parenright, 0 }, 0x32E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_NA, SCIM_KEY_parenright, 0 }, 0x32E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_NI, SCIM_KEY_parenright, 0 }, 0x32E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_NU, SCIM_KEY_parenright, 0 }, 0x32E6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_NE, SCIM_KEY_parenright, 0 }, 0x32E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_NO, SCIM_KEY_parenright, 0 }, 0x32E8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_HA, SCIM_KEY_parenright, 0 }, 0x32E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_HI, SCIM_KEY_parenright, 0 }, 0x32EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_FU, SCIM_KEY_parenright, 0 }, 0x32EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_HE, SCIM_KEY_parenright, 0 }, 0x32EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_HO, SCIM_KEY_parenright, 0 }, 0x32ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_MA, SCIM_KEY_parenright, 0 }, 0x32EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_MI, SCIM_KEY_parenright, 0 }, 0x32EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_MU, SCIM_KEY_parenright, 0 }, 0x32F0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_ME, SCIM_KEY_parenright, 0 }, 0x32F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_MO, SCIM_KEY_parenright, 0 }, 0x32F2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_YA, SCIM_KEY_parenright, 0 }, 0x32F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_YU, SCIM_KEY_parenright, 0 }, 0x32F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_YO, SCIM_KEY_parenright, 0 }, 0x32F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_RA, SCIM_KEY_parenright, 0 }, 0x32F6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_RI, SCIM_KEY_parenright, 0 }, 0x32F7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_RU, SCIM_KEY_parenright, 0 }, 0x32F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_RE, SCIM_KEY_parenright, 0 }, 0x32F9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_RO, SCIM_KEY_parenright, 0 }, 0x32FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_kana_WA, SCIM_KEY_parenright, 0 }, 0x32FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F09}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F19}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F29}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F39}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F49}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_RHO, 0, 0 }, 0x1FEC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F59}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F69}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F01}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F11}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F21}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F31}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F41}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_rho, 0, 0 }, 0x1FE5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F51}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F61}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_parenright, 0 }, 0x2461}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_Space, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_0, SCIM_KEY_parenright, 0 }, 0x24EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_parenright, 0 }, 0x2460}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_0, SCIM_KEY_parenright }, 0x2469}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_1, SCIM_KEY_parenright }, 0x246A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_2, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_3, SCIM_KEY_parenright }, 0x246C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_4, SCIM_KEY_parenright }, 0x246D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_5, SCIM_KEY_parenright }, 0x246E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_6, SCIM_KEY_parenright }, 0x246F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_7, SCIM_KEY_parenright }, 0x2470}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_8, SCIM_KEY_parenright }, 0x2471}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_9, SCIM_KEY_parenright }, 0x2472}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x2469}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x246A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x246B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x246C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x246D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x246E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x246F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x2470}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x2471}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_1, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x2472}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_parenright, 0 }, 0x2461}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x2473}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x3251}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x3252}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x3253}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x3254}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x3255}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x3256}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x3257}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x3258}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_2, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x3259}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_parenright, 0 }, 0x2462}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_0, SCIM_KEY_parenright }, 0x325A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_1, SCIM_KEY_parenright }, 0x325B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_2, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_3, SCIM_KEY_parenright }, 0x325D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_4, SCIM_KEY_parenright }, 0x325E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_5, SCIM_KEY_parenright }, 0x325F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_6, SCIM_KEY_parenright }, 0x32B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_7, SCIM_KEY_parenright }, 0x32B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_8, SCIM_KEY_parenright }, 0x32B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_9, SCIM_KEY_parenright }, 0x32B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x325A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x325B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x325C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x325D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x325E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x325F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x32B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x32B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x32B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_3, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x32B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_parenright, 0 }, 0x2463}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_0, SCIM_KEY_parenright }, 0x32B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_1, SCIM_KEY_parenright }, 0x32B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_2, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_3, SCIM_KEY_parenright }, 0x32B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_4, SCIM_KEY_parenright }, 0x32B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_5, SCIM_KEY_parenright }, 0x32BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_6, SCIM_KEY_parenright }, 0x32BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_7, SCIM_KEY_parenright }, 0x32BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_8, SCIM_KEY_parenright }, 0x32BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_9, SCIM_KEY_parenright }, 0x32BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_Space, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x32B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_1, SCIM_KEY_parenright }, 0x32B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_2, SCIM_KEY_parenright }, 0x32B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_3, SCIM_KEY_parenright }, 0x32B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_4, SCIM_KEY_parenright }, 0x32B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_5, SCIM_KEY_parenright }, 0x32BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_6, SCIM_KEY_parenright }, 0x32BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_7, SCIM_KEY_parenright }, 0x32BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_8, SCIM_KEY_parenright }, 0x32BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_4, SCIM_KEY_KP_9, SCIM_KEY_parenright }, 0x32BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_5, SCIM_KEY_parenright, 0 }, 0x2464}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_5, SCIM_KEY_0, SCIM_KEY_parenright }, 0x32BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_5, SCIM_KEY_KP_0, SCIM_KEY_parenright }, 0x32BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_6, SCIM_KEY_parenright, 0 }, 0x2465}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_7, SCIM_KEY_parenright, 0 }, 0x2466}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_8, SCIM_KEY_parenright, 0 }, 0x2467}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_KP_9, SCIM_KEY_parenright, 0 }, 0x2468}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001100, SCIM_KEY_parenright, 0 }, 0x3260}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001100, 0x1001161, SCIM_KEY_parenright }, 0x326E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001102, SCIM_KEY_parenright, 0 }, 0x3261}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001102, 0x1001161, SCIM_KEY_parenright }, 0x326F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001103, SCIM_KEY_parenright, 0 }, 0x3262}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001103, 0x1001161, SCIM_KEY_parenright }, 0x3270}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001105, SCIM_KEY_parenright, 0 }, 0x3263}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001105, 0x1001161, SCIM_KEY_parenright }, 0x3271}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001106, SCIM_KEY_parenright, 0 }, 0x3264}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001106, 0x1001161, SCIM_KEY_parenright }, 0x3272}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001107, SCIM_KEY_parenright, 0 }, 0x3265}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001107, 0x1001161, SCIM_KEY_parenright }, 0x3273}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001109, SCIM_KEY_parenright, 0 }, 0x3266}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001109, 0x1001161, SCIM_KEY_parenright }, 0x3274}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110b, SCIM_KEY_parenright, 0 }, 0x3267}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110b, 0x1001161, SCIM_KEY_parenright }, 0x3275}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110c, SCIM_KEY_parenright, 0 }, 0x3268}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110c, 0x1001161, SCIM_KEY_parenright }, 0x3276}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110e, SCIM_KEY_parenright, 0 }, 0x3269}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110e, 0x1001161, SCIM_KEY_parenright }, 0x3277}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110f, SCIM_KEY_parenright, 0 }, 0x326A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100110f, 0x1001161, SCIM_KEY_parenright }, 0x3278}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001110, SCIM_KEY_parenright, 0 }, 0x326B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001110, 0x1001161, SCIM_KEY_parenright }, 0x3279}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001111, SCIM_KEY_parenright, 0 }, 0x326C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001111, 0x1001161, SCIM_KEY_parenright }, 0x327A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001112, SCIM_KEY_parenright, 0 }, 0x326D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1001112, 0x1001161, SCIM_KEY_parenright }, 0x327B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10030f0, SCIM_KEY_parenright, 0 }, 0x32FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10030f1, SCIM_KEY_parenright, 0 }, 0x32FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e00, SCIM_KEY_parenright, 0 }, 0x3280}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e03, SCIM_KEY_parenright, 0 }, 0x3286}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e09, SCIM_KEY_parenright, 0 }, 0x3282}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e0a, SCIM_KEY_parenright, 0 }, 0x32A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e0b, SCIM_KEY_parenright, 0 }, 0x32A6}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e2d, SCIM_KEY_parenright, 0 }, 0x32A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e5d, SCIM_KEY_parenright, 0 }, 0x3288}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e8c, SCIM_KEY_parenright, 0 }, 0x3281}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004e94, SCIM_KEY_parenright, 0 }, 0x3284}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004f01, SCIM_KEY_parenright, 0 }, 0x32AD}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1004f11, SCIM_KEY_parenright, 0 }, 0x32A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100512a, SCIM_KEY_parenright, 0 }, 0x329D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100516b, SCIM_KEY_parenright, 0 }, 0x3287}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100516d, SCIM_KEY_parenright, 0 }, 0x3285}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005199, SCIM_KEY_parenright, 0 }, 0x32A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10052b4, SCIM_KEY_parenright, 0 }, 0x3298}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100533b, SCIM_KEY_parenright, 0 }, 0x32A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005341, SCIM_KEY_parenright, 0 }, 0x3289}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005354, SCIM_KEY_parenright, 0 }, 0x32AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005370, SCIM_KEY_parenright, 0 }, 0x329E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10053f3, SCIM_KEY_parenright, 0 }, 0x32A8}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100540d, SCIM_KEY_parenright, 0 }, 0x3294}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10056db, SCIM_KEY_parenright, 0 }, 0x3283}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100571f, SCIM_KEY_parenright, 0 }, 0x328F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100591c, SCIM_KEY_parenright, 0 }, 0x32B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005973, SCIM_KEY_parenright, 0 }, 0x329B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005b66, SCIM_KEY_parenright, 0 }, 0x32AB}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005b97, SCIM_KEY_parenright, 0 }, 0x32AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1005de6, SCIM_KEY_parenright, 0 }, 0x32A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10065e5, SCIM_KEY_parenright, 0 }, 0x3290}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006708, SCIM_KEY_parenright, 0 }, 0x328A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006709, SCIM_KEY_parenright, 0 }, 0x3292}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006728, SCIM_KEY_parenright, 0 }, 0x328D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100682a, SCIM_KEY_parenright, 0 }, 0x3291}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006b63, SCIM_KEY_parenright, 0 }, 0x32A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006c34, SCIM_KEY_parenright, 0 }, 0x328C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1006ce8, SCIM_KEY_parenright, 0 }, 0x329F}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100706b, SCIM_KEY_parenright, 0 }, 0x328B}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1007279, SCIM_KEY_parenright, 0 }, 0x3295}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1007537, SCIM_KEY_parenright, 0 }, 0x329A}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10076e3, SCIM_KEY_parenright, 0 }, 0x32AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100793e, SCIM_KEY_parenright, 0 }, 0x3293}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x100795d, SCIM_KEY_parenright, 0 }, 0x3297}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10079d8, SCIM_KEY_parenright, 0 }, 0x3299}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1008ca1, SCIM_KEY_parenright, 0 }, 0x3296}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1008cc7, SCIM_KEY_parenright, 0 }, 0x32AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1009069, SCIM_KEY_parenright, 0 }, 0x329C}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x10091d1, SCIM_KEY_parenright, 0 }, 0x328E}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenleft, 0x1009805, SCIM_KEY_parenright, 0 }, 0x32A0}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_parenright, 0, 0 }, 0x005D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_minus, 0, 0 }, 0x007D}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F08}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1F18}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F28}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F38}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1F48}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F68}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F00}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F10}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F20}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F30}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F40}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_rho, 0, 0 }, 0x1FE4}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F50}, {{SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F60}, {{SCIM_KEY_Multi_key, SCIM_KEY_asterisk, SCIM_KEY_0, 0, 0 }, 0x00B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asterisk, SCIM_KEY_A, 0, 0 }, 0x00C5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asterisk, SCIM_KEY_U, 0, 0 }, 0x016E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asterisk, SCIM_KEY_a, 0, 0 }, 0x00E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asterisk, SCIM_KEY_u, 0, 0 }, 0x016F}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_plus, 0, 0 }, 0x0023}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_minus, 0, 0 }, 0x00B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_O, 0, 0 }, 0x01A0}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_U, 0, 0 }, 0x01AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_o, 0, 0 }, 0x01A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_plus, SCIM_KEY_u, 0, 0 }, 0x01B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_space, 0, 0 }, 0x00B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_quotedbl, 0, 0 }, 0x201E}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_apostrophe, 0, 0 }, 0x201A}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_comma, 0, 0 }, 0x00B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_minus, 0, 0 }, 0x00AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_A, 0, 0 }, 0x0104}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_C, 0, 0 }, 0x00C7}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_D, 0, 0 }, 0x1E10}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_E, 0, 0 }, 0x0228}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_G, 0, 0 }, 0x0122}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_H, 0, 0 }, 0x1E28}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_I, 0, 0 }, 0x012E}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_K, 0, 0 }, 0x0136}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_L, 0, 0 }, 0x013B}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_N, 0, 0 }, 0x0145}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_R, 0, 0 }, 0x0156}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_S, 0, 0 }, 0x015E}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_T, 0, 0 }, 0x0162}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_U, 0, 0 }, 0x0172}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_a, 0, 0 }, 0x0105}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_c, 0, 0 }, 0x00E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_d, 0, 0 }, 0x1E11}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_e, 0, 0 }, 0x0229}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_g, 0, 0 }, 0x0123}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_h, 0, 0 }, 0x1E29}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_i, 0, 0 }, 0x012F}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_k, 0, 0 }, 0x0137}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_l, 0, 0 }, 0x013C}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_n, 0, 0 }, 0x0146}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_r, 0, 0 }, 0x0157}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_s, 0, 0 }, 0x015F}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_t, 0, 0 }, 0x0163}, {{SCIM_KEY_Multi_key, SCIM_KEY_comma, SCIM_KEY_u, 0, 0 }, 0x0173}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_space, 0, 0 }, 0x007E}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_parenleft, 0, 0 }, 0x007B}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_parenright, 0, 0 }, 0x007D}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_plus, 0, 0 }, 0x00B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_comma, 0, 0 }, 0x00AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_minus, SCIM_KEY_space, 0 }, 0x00AD}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_minus, SCIM_KEY_minus, 0 }, 0x2014}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_minus, SCIM_KEY_period, 0 }, 0x2013}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_colon, 0, 0 }, 0x00F7}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_A, 0, 0 }, 0x0100}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_D, 0, 0 }, 0x0110}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_E, 0, 0 }, 0x0112}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_I, 0, 0 }, 0x012A}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_L, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_N, 0, 0 }, 0x00D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_O, 0, 0 }, 0x014C}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_U, 0, 0 }, 0x016A}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_Y, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_asciicircum, 0, 0 }, 0x00AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_a, 0, 0 }, 0x0101}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_d, 0, 0 }, 0x0111}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_e, 0, 0 }, 0x0113}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_i, 0, 0 }, 0x012B}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_l, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_n, 0, 0 }, 0x00F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_o, 0, 0 }, 0x014D}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_u, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_minus, SCIM_KEY_y, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_exclam, SCIM_KEY_S, 0 }, 0x1E68}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_exclam, SCIM_KEY_s, 0 }, 0x1E69}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_apostrophe, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_apostrophe, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_period, 0, 0 }, 0x00B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_less, 0, 0 }, 0x2039}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_greater, 0, 0 }, 0x203A}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_A, 0, 0 }, 0x0226}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_B, 0, 0 }, 0x1E02}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_C, 0, 0 }, 0x010A}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_D, 0, 0 }, 0x1E0A}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_E, 0, 0 }, 0x0116}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_F, 0, 0 }, 0x1E1E}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_G, 0, 0 }, 0x0120}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_H, 0, 0 }, 0x1E22}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_I, 0, 0 }, 0x0130}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_M, 0, 0 }, 0x1E40}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_N, 0, 0 }, 0x1E44}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_O, 0, 0 }, 0x022E}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_P, 0, 0 }, 0x1E56}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_R, 0, 0 }, 0x1E58}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_S, 0, 0 }, 0x1E60}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_T, 0, 0 }, 0x1E6A}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_W, 0, 0 }, 0x1E86}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_X, 0, 0 }, 0x1E8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_Y, 0, 0 }, 0x1E8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_Z, 0, 0 }, 0x017B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_asciicircum, 0, 0 }, 0x00B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_a, 0, 0 }, 0x0227}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_b, 0, 0 }, 0x1E03}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_c, 0, 0 }, 0x010B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_c, SCIM_KEY_S, 0 }, 0x1E66}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_c, SCIM_KEY_s, 0 }, 0x1E67}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_d, 0, 0 }, 0x1E0B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_e, 0, 0 }, 0x0117}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_f, 0, 0 }, 0x1E1F}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_g, 0, 0 }, 0x0121}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_h, 0, 0 }, 0x1E23}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_i, 0, 0 }, 0x0131}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_m, 0, 0 }, 0x1E41}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_n, 0, 0 }, 0x1E45}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_o, 0, 0 }, 0x022F}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_p, 0, 0 }, 0x1E57}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_r, 0, 0 }, 0x1E59}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_s, 0, 0 }, 0x1E61}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_t, 0, 0 }, 0x1E6B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_w, 0, 0 }, 0x1E87}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_x, 0, 0 }, 0x1E8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_y, 0, 0 }, 0x1E8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_z, 0, 0 }, 0x017C}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_acute, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_acute, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_Sacute, 0, 0 }, 0x1E64}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_Scaron, 0, 0 }, 0x1E66}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_sacute, 0, 0 }, 0x1E65}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_scaron, 0, 0 }, 0x1E67}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_combining_acute, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_combining_acute, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_combining_belowdot, SCIM_KEY_S, 0 }, 0x1E68}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_combining_belowdot, SCIM_KEY_s, 0 }, 0x1E69}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_acute, SCIM_KEY_S, 0 }, 0x1E64}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_acute, SCIM_KEY_s, 0 }, 0x1E65}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_caron, SCIM_KEY_S, 0 }, 0x1E66}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_caron, SCIM_KEY_s, 0 }, 0x1E67}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_belowdot, SCIM_KEY_S, 0 }, 0x1E68}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, SCIM_KEY_dead_belowdot, SCIM_KEY_s, 0 }, 0x1E69}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, 0x100017f, 0, 0 }, 0x1E9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, 0x1001e62, 0, 0 }, 0x1E68}, {{SCIM_KEY_Multi_key, SCIM_KEY_period, 0x1001e63, 0, 0 }, 0x1E69}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_slash, 0, 0 }, 0x005C}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_less, 0, 0 }, 0x005C}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_C, 0, 0 }, 0x20A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_D, 0, 0 }, 0x0110}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_G, 0, 0 }, 0x01E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_H, 0, 0 }, 0x0126}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_I, 0, 0 }, 0x0197}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_L, 0, 0 }, 0x0141}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_O, 0, 0 }, 0x00D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_T, 0, 0 }, 0x0166}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_U, 0, 0 }, 0x00B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_Z, 0, 0 }, 0x01B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_asciicircum, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_b, 0, 0 }, 0x0180}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_c, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_d, 0, 0 }, 0x0111}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_g, 0, 0 }, 0x01E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_h, 0, 0 }, 0x0127}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_i, 0, 0 }, 0x0268}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_l, 0, 0 }, 0x0142}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_m, 0, 0 }, 0x20A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_o, 0, 0 }, 0x00F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_t, 0, 0 }, 0x0167}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_u, 0, 0 }, 0x00B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_z, 0, 0 }, 0x01B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_Cyrillic_ghe, 0, 0 }, 0x0493}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_Cyrillic_ka, 0, 0 }, 0x049F}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_Cyrillic_GHE, 0, 0 }, 0x0492}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_Cyrillic_KA, 0, 0 }, 0x049E}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_leftarrow, 0, 0 }, 0x219A}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, SCIM_KEY_rightarrow, 0, 0 }, 0x219B}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, 0x1000294, 0, 0 }, 0x02A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, 0x10004ae, 0, 0 }, 0x04B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, 0x10004af, 0, 0 }, 0x04B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_slash, 0x1002194, 0, 0 }, 0x21AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_asterisk, 0, 0 }, 0x00B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_C, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_S, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_X, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_asciicircum, 0, 0 }, 0x00B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_c, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_s, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_0, SCIM_KEY_x, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_1, SCIM_KEY_2, 0, 0 }, 0x00BD}, {{SCIM_KEY_Multi_key, SCIM_KEY_1, SCIM_KEY_4, 0, 0 }, 0x00BC}, {{SCIM_KEY_Multi_key, SCIM_KEY_1, SCIM_KEY_S, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_1, SCIM_KEY_asciicircum, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_1, SCIM_KEY_s, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_2, SCIM_KEY_S, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_2, SCIM_KEY_asciicircum, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_2, SCIM_KEY_s, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_3, SCIM_KEY_4, 0, 0 }, 0x00BE}, {{SCIM_KEY_Multi_key, SCIM_KEY_3, SCIM_KEY_S, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_3, SCIM_KEY_asciicircum, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_3, SCIM_KEY_s, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_colon, SCIM_KEY_minus, 0, 0 }, 0x00F7}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_A, 0, 0 }, 0x0104}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_E, 0, 0 }, 0x0118}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_I, 0, 0 }, 0x012E}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_O, 0, 0 }, 0x01EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_U, 0, 0 }, 0x0172}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_a, 0, 0 }, 0x0105}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_e, 0, 0 }, 0x0119}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_i, 0, 0 }, 0x012F}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_o, 0, 0 }, 0x01EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_semicolon, SCIM_KEY_u, 0, 0 }, 0x0173}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_space, 0, 0 }, 0x02C7}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_quotedbl, 0, 0 }, 0x201C}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_apostrophe, 0, 0 }, 0x2018}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_slash, 0, 0 }, 0x005C}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_less, 0, 0 }, 0x00AB}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_C, 0, 0 }, 0x010C}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_D, 0, 0 }, 0x010E}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_E, 0, 0 }, 0x011A}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_L, 0, 0 }, 0x013D}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_N, 0, 0 }, 0x0147}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_R, 0, 0 }, 0x0158}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_S, 0, 0 }, 0x0160}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_T, 0, 0 }, 0x0164}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_Z, 0, 0 }, 0x017D}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_c, 0, 0 }, 0x010D}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_d, 0, 0 }, 0x010F}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_e, 0, 0 }, 0x011B}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_l, 0, 0 }, 0x013E}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_n, 0, 0 }, 0x0148}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_r, 0, 0 }, 0x0159}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_s, 0, 0 }, 0x0161}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_t, 0, 0 }, 0x0165}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, SCIM_KEY_z, 0, 0 }, 0x017E}, {{SCIM_KEY_Multi_key, SCIM_KEY_less, 0x1000338, 0, 0 }, 0x226E}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_C, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_E, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_L, 0, 0 }, 0x20A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_N, 0, 0 }, 0x20A6}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_O, 0, 0 }, 0x0150}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_U, 0, 0 }, 0x0170}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_W, 0, 0 }, 0x20A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_Y, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_c, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_e, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_l, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_o, 0, 0 }, 0x0151}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_u, 0, 0 }, 0x0171}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_y, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x04F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x04F2}, {{SCIM_KEY_Multi_key, SCIM_KEY_equal, 0x1000338, 0, 0 }, 0x2260}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_space, 0, 0 }, 0x005E}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_quotedbl, 0, 0 }, 0x201D}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_apostrophe, 0, 0 }, 0x2019}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_greater, 0, 0 }, 0x00BB}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_A, 0, 0 }, 0x00C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_E, 0, 0 }, 0x00CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_I, 0, 0 }, 0x00CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_O, 0, 0 }, 0x00D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_U, 0, 0 }, 0x00DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_a, 0, 0 }, 0x00E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_e, 0, 0 }, 0x00EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_i, 0, 0 }, 0x00EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_o, 0, 0 }, 0x00F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, SCIM_KEY_u, 0, 0 }, 0x00FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_greater, 0x1000338, 0, 0 }, 0x226F}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDE}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEC}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDF}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EED}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_question, 0, 0 }, 0x00BF}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_A, 0, 0 }, 0x1EA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_E, 0, 0 }, 0x1EBA}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_I, 0, 0 }, 0x1EC8}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_O, 0, 0 }, 0x1ECE}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_U, 0, 0 }, 0x1EE6}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Y, 0, 0 }, 0x1EF6}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED4}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED5}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_a, 0, 0 }, 0x1EA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_e, 0, 0 }, 0x1EBB}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_i, 0, 0 }, 0x1EC9}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_o, 0, 0 }, 0x1ECF}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_u, 0, 0 }, 0x1EE7}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_y, 0, 0 }, 0x1EF7}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Acircumflex, 0, 0 }, 0x1EA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Ecircumflex, 0, 0 }, 0x1EC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Ocircumflex, 0, 0 }, 0x1ED4}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_acircumflex, 0, 0 }, 0x1EA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_ecircumflex, 0, 0 }, 0x1EC3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_ocircumflex, 0, 0 }, 0x1ED5}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Abreve, 0, 0 }, 0x1EB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_abreve, 0, 0 }, 0x1EB3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Ohorn, 0, 0 }, 0x1EDE}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_ohorn, 0, 0 }, 0x1EDF}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_Uhorn, 0, 0 }, 0x1EEC}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_uhorn, 0, 0 }, 0x1EED}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0 }, 0x1EA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0 }, 0x1EC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0 }, 0x1ED4}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0 }, 0x1EA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0 }, 0x1EC3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0 }, 0x1ED5}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_breve, SCIM_KEY_A, 0 }, 0x1EB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_breve, SCIM_KEY_a, 0 }, 0x1EB3}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EDE}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EEC}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EDF}, {{SCIM_KEY_Multi_key, SCIM_KEY_question, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EED}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_quotedbl, 0, 0 }, 0x00C4}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_apostrophe, 0, 0 }, 0x00C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_parenleft, 0, 0 }, 0x0102}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_asterisk, 0, 0 }, 0x00C5}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_comma, 0, 0 }, 0x0104}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_minus, 0, 0 }, 0x0100}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_greater, 0, 0 }, 0x00C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_A, 0, 0 }, 0x00C5}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_E, 0, 0 }, 0x00C6}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_T, 0, 0 }, 0x0040}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_asciicircum, 0, 0 }, 0x00C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_underscore, 0, 0 }, 0x00AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_grave, 0, 0 }, 0x00C0}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_asciitilde, 0, 0 }, 0x00C3}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_diaeresis, 0, 0 }, 0x00C4}, {{SCIM_KEY_Multi_key, SCIM_KEY_A, SCIM_KEY_acute, 0, 0 }, 0x00C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_B, SCIM_KEY_period, 0, 0 }, 0x1E02}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_apostrophe, 0, 0 }, 0x0106}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_comma, 0, 0 }, 0x00C7}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_period, 0, 0 }, 0x010A}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_slash, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_0, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_less, 0, 0 }, 0x010C}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_equal, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_E, 0, 0 }, 0x20A0}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_O, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_o, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_r, 0, 0 }, 0x20A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_C, SCIM_KEY_bar, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_D, SCIM_KEY_minus, 0, 0 }, 0x0110}, {{SCIM_KEY_Multi_key, SCIM_KEY_D, SCIM_KEY_period, 0, 0 }, 0x1E0A}, {{SCIM_KEY_Multi_key, SCIM_KEY_D, SCIM_KEY_less, 0, 0 }, 0x010E}, {{SCIM_KEY_Multi_key, SCIM_KEY_D, SCIM_KEY_H, 0, 0 }, 0x00D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_quotedbl, 0, 0 }, 0x00CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_apostrophe, 0, 0 }, 0x00C9}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_comma, 0, 0 }, 0x0118}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_minus, 0, 0 }, 0x0112}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_period, 0, 0 }, 0x0116}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_less, 0, 0 }, 0x011A}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_equal, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_greater, 0, 0 }, 0x00CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_asciicircum, 0, 0 }, 0x00CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_underscore, 0, 0 }, 0x0112}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_grave, 0, 0 }, 0x00C8}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_diaeresis, 0, 0 }, 0x00CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_E, SCIM_KEY_acute, 0, 0 }, 0x00C9}, {{SCIM_KEY_Multi_key, SCIM_KEY_F, SCIM_KEY_period, 0, 0 }, 0x1E1E}, {{SCIM_KEY_Multi_key, SCIM_KEY_F, SCIM_KEY_r, 0, 0 }, 0x20A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_G, SCIM_KEY_parenleft, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_G, SCIM_KEY_comma, 0, 0 }, 0x0122}, {{SCIM_KEY_Multi_key, SCIM_KEY_G, SCIM_KEY_period, 0, 0 }, 0x0120}, {{SCIM_KEY_Multi_key, SCIM_KEY_G, SCIM_KEY_U, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_G, SCIM_KEY_breve, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_quotedbl, 0, 0 }, 0x00CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_apostrophe, 0, 0 }, 0x00CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_comma, 0, 0 }, 0x012E}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_minus, 0, 0 }, 0x012A}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_period, 0, 0 }, 0x0130}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_greater, 0, 0 }, 0x00CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_asciicircum, 0, 0 }, 0x00CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_underscore, 0, 0 }, 0x012A}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_grave, 0, 0 }, 0x00CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_asciitilde, 0, 0 }, 0x0128}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_diaeresis, 0, 0 }, 0x00CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_I, SCIM_KEY_acute, 0, 0 }, 0x00CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_K, SCIM_KEY_comma, 0, 0 }, 0x0136}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_apostrophe, 0, 0 }, 0x0139}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_comma, 0, 0 }, 0x013B}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_minus, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_less, 0, 0 }, 0x013D}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_equal, 0, 0 }, 0x20A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_L, SCIM_KEY_V, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_M, SCIM_KEY_period, 0, 0 }, 0x1E40}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_apostrophe, 0, 0 }, 0x0143}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_comma, 0, 0 }, 0x0145}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_minus, 0, 0 }, 0x00D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_less, 0, 0 }, 0x0147}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_equal, 0, 0 }, 0x20A6}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_G, 0, 0 }, 0x014A}, {{SCIM_KEY_Multi_key, SCIM_KEY_N, SCIM_KEY_asciitilde, 0, 0 }, 0x00D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_quotedbl, 0, 0 }, 0x00D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_apostrophe, 0, 0 }, 0x00D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_minus, 0, 0 }, 0x014C}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_slash, 0, 0 }, 0x00D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_greater, 0, 0 }, 0x00D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_C, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_E, 0, 0 }, 0x0152}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_R, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_S, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_X, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_asciicircum, 0, 0 }, 0x00D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_underscore, 0, 0 }, 0x00BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_grave, 0, 0 }, 0x00D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_c, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_r, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_x, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_asciitilde, 0, 0 }, 0x00D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_diaeresis, 0, 0 }, 0x00D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_O, SCIM_KEY_acute, 0, 0 }, 0x00D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_P, SCIM_KEY_exclam, 0, 0 }, 0x00B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_P, SCIM_KEY_period, 0, 0 }, 0x1E56}, {{SCIM_KEY_Multi_key, SCIM_KEY_P, SCIM_KEY_P, 0, 0 }, 0x00B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_P, SCIM_KEY_t, 0, 0 }, 0x20A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_R, SCIM_KEY_apostrophe, 0, 0 }, 0x0154}, {{SCIM_KEY_Multi_key, SCIM_KEY_R, SCIM_KEY_comma, 0, 0 }, 0x0156}, {{SCIM_KEY_Multi_key, SCIM_KEY_R, SCIM_KEY_less, 0, 0 }, 0x0158}, {{SCIM_KEY_Multi_key, SCIM_KEY_R, SCIM_KEY_O, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_R, SCIM_KEY_s, 0, 0 }, 0x20A8}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_exclam, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_apostrophe, 0, 0 }, 0x015A}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_comma, 0, 0 }, 0x015E}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_period, 0, 0 }, 0x1E60}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_0, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_1, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_2, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_3, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_less, 0, 0 }, 0x0160}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_O, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_S, SCIM_KEY_cedilla, 0, 0 }, 0x015E}, {{SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_minus, 0, 0 }, 0x0166}, {{SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_period, 0, 0 }, 0x1E6A}, {{SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_slash, 0, 0 }, 0x0166}, {{SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_less, 0, 0 }, 0x0164}, {{SCIM_KEY_Multi_key, SCIM_KEY_T, SCIM_KEY_H, 0, 0 }, 0x00DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_exclam, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_exclam, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_quotedbl, 0, 0 }, 0x00DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_apostrophe, 0, 0 }, 0x00DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_asterisk, 0, 0 }, 0x016E}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_comma, 0, 0 }, 0x0172}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_comma, SCIM_KEY_E, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_comma, SCIM_KEY_e, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_minus, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_slash, 0, 0 }, 0x00B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_greater, 0, 0 }, 0x00DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_A, 0, 0 }, 0x0102}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_E, 0, 0 }, 0x0114}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_G, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_I, 0, 0 }, 0x012C}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_O, 0, 0 }, 0x014E}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_U, 0, 0 }, 0x016C}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_asciicircum, 0, 0 }, 0x00DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_underscore, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_grave, 0, 0 }, 0x00D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_a, 0, 0 }, 0x0103}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_e, 0, 0 }, 0x0115}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_g, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_i, 0, 0 }, 0x012D}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_o, 0, 0 }, 0x014F}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_u, 0, 0 }, 0x016D}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_asciitilde, 0, 0 }, 0x0168}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_diaeresis, 0, 0 }, 0x00DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_acute, 0, 0 }, 0x00DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_a, 0, 0 }, 0x04D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_ie, 0, 0 }, 0x04D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x0439}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x045E}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_zhe, 0, 0 }, 0x04C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_A, 0, 0 }, 0x04D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_IE, 0, 0 }, 0x04D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x0419}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x040E}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Cyrillic_ZHE, 0, 0 }, 0x04C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FB8}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1FD8}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1FE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD0}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE0}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_dead_cedilla, SCIM_KEY_E, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_dead_cedilla, SCIM_KEY_e, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, 0x1000228, 0, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, 0x1000229, 0, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, 0x1001ea0, 0, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_U, 0x1001ea1, 0, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_V, SCIM_KEY_L, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_W, SCIM_KEY_equal, 0, 0 }, 0x20A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_W, SCIM_KEY_asciicircum, 0, 0 }, 0x0174}, {{SCIM_KEY_Multi_key, SCIM_KEY_X, SCIM_KEY_0, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_X, SCIM_KEY_O, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_X, SCIM_KEY_o, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_quotedbl, 0, 0 }, 0x0178}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_apostrophe, 0, 0 }, 0x00DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_minus, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_equal, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_asciicircum, 0, 0 }, 0x0176}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_diaeresis, 0, 0 }, 0x0178}, {{SCIM_KEY_Multi_key, SCIM_KEY_Y, SCIM_KEY_acute, 0, 0 }, 0x00DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Z, SCIM_KEY_apostrophe, 0, 0 }, 0x0179}, {{SCIM_KEY_Multi_key, SCIM_KEY_Z, SCIM_KEY_period, 0, 0 }, 0x017B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Z, SCIM_KEY_less, 0, 0 }, 0x017D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_space, 0, 0 }, 0x005E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_A, 0 }, 0x1EAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_E, 0 }, 0x1EC6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_O, 0 }, 0x1ED8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_a, 0 }, 0x1EAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_e, 0 }, 0x1EC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_exclam, SCIM_KEY_o, 0 }, 0x1ED9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_parenleft, 0, 0 }, 0x207D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_parenright, 0, 0 }, 0x207E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_plus, 0, 0 }, 0x207A}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_minus, 0, 0 }, 0x00AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_period, 0, 0 }, 0x00B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_slash, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_0, 0, 0 }, 0x2070}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_1, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_2, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_3, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_4, 0, 0 }, 0x2074}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_5, 0, 0 }, 0x2075}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_6, 0, 0 }, 0x2076}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_7, 0, 0 }, 0x2077}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_8, 0, 0 }, 0x2078}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_9, 0, 0 }, 0x2079}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_equal, 0, 0 }, 0x207C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_A, 0, 0 }, 0x00C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_C, 0, 0 }, 0x0108}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_E, 0, 0 }, 0x00CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_G, 0, 0 }, 0x011C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_H, 0, 0 }, 0x0124}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_I, 0, 0 }, 0x00CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_J, 0, 0 }, 0x0134}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_O, 0, 0 }, 0x00D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_S, 0, 0 }, 0x015C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_S, SCIM_KEY_M, 0 }, 0x2120}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_T, SCIM_KEY_M, 0 }, 0x2122}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_U, 0, 0 }, 0x00DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_W, 0, 0 }, 0x0174}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_Y, 0, 0 }, 0x0176}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_Z, 0, 0 }, 0x1E90}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0, 0 }, 0x00AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_a, 0 }, 0x00AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_h, 0 }, 0x02B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_i, 0 }, 0x2071}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_j, 0 }, 0x02B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_l, 0 }, 0x02E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_n, 0 }, 0x207F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x00BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_r, 0 }, 0x02B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_s, 0 }, 0x02E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_w, 0 }, 0x02B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_x, 0 }, 0x02E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, SCIM_KEY_y, 0 }, 0x02B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x1000263, 0 }, 0x02E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x1000266, 0 }, 0x02B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x1000279, 0 }, 0x02B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x100027b, 0 }, 0x02B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x1000281, 0 }, 0x02B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underscore, 0x1000295, 0 }, 0x02E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_a, 0, 0 }, 0x00E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_c, 0, 0 }, 0x0109}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_e, 0, 0 }, 0x00EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_g, 0, 0 }, 0x011D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_h, 0, 0 }, 0x0125}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_i, 0, 0 }, 0x00EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_j, 0, 0 }, 0x0135}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_o, 0, 0 }, 0x00F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_s, 0, 0 }, 0x015D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_u, 0, 0 }, 0x00FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_w, 0, 0 }, 0x0175}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_y, 0, 0 }, 0x0177}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_z, 0, 0 }, 0x1E91}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_a, 0 }, 0x00AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_h, 0 }, 0x02B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_i, 0 }, 0x2071}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_j, 0 }, 0x02B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_l, 0 }, 0x02E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_n, 0 }, 0x207F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_o, 0 }, 0x00BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_r, 0 }, 0x02B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_s, 0 }, 0x02E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_w, 0 }, 0x02B7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_x, 0 }, 0x02E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, SCIM_KEY_y, 0 }, 0x02B8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x1000263, 0 }, 0x02E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x1000266, 0 }, 0x02B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x1000279, 0 }, 0x02B4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x100027b, 0 }, 0x02B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x1000281, 0 }, 0x02B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_underbar, 0x1000295, 0 }, 0x02E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0 }, 0x1EAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_E, 0 }, 0x1EC6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_O, 0 }, 0x1ED8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0 }, 0x1EAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_e, 0 }, 0x1EC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_combining_belowdot, SCIM_KEY_o, 0 }, 0x1ED9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0 }, 0x1EAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_E, 0 }, 0x1EC6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_O, 0 }, 0x1ED8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0 }, 0x1EAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_e, 0 }, 0x1EC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_dead_belowdot, SCIM_KEY_o, 0 }, 0x1ED9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_Space, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_Add, 0, 0 }, 0x207A}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_0, 0, 0 }, 0x2070}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_1, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_2, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_3, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_4, 0, 0 }, 0x2074}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_5, 0, 0 }, 0x2075}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_6, 0, 0 }, 0x2076}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_7, 0, 0 }, 0x2077}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_8, 0, 0 }, 0x2078}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_9, 0, 0 }, 0x2079}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, SCIM_KEY_KP_Equal, 0, 0 }, 0x207C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001ea0, 0, 0 }, 0x1EAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001ea1, 0, 0 }, 0x1EAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001eb8, 0, 0 }, 0x1EC6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001eb9, 0, 0 }, 0x1EC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001ecc, 0, 0 }, 0x1ED8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1001ecd, 0, 0 }, 0x1ED9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1002212, 0, 0 }, 0x207B}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e00, 0, 0 }, 0x3192}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e01, 0, 0 }, 0x319C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e09, 0, 0 }, 0x3194}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e0a, 0, 0 }, 0x3196}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e0b, 0, 0 }, 0x3198}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e19, 0, 0 }, 0x319B}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e2d, 0, 0 }, 0x3197}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e59, 0, 0 }, 0x319A}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004e8c, 0, 0 }, 0x3193}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1004eba, 0, 0 }, 0x319F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x10056db, 0, 0 }, 0x3195}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1005730, 0, 0 }, 0x319E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1005929, 0, 0 }, 0x319D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciicircum, 0x1007532, 0, 0 }, 0x3199}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_exclam, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_exclam, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_exclam, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_exclam, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_A, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_O, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_a, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_o, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_parenleft, 0, 0 }, 0x208D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_parenright, 0, 0 }, 0x208E}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_plus, 0, 0 }, 0x208A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_period, SCIM_KEY_A, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_period, SCIM_KEY_O, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_period, SCIM_KEY_a, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_period, SCIM_KEY_o, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_0, 0, 0 }, 0x2080}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_1, 0, 0 }, 0x2081}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_2, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_3, 0, 0 }, 0x2083}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_4, 0, 0 }, 0x2084}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_5, 0, 0 }, 0x2085}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_6, 0, 0 }, 0x2086}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_7, 0, 0 }, 0x2087}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_8, 0, 0 }, 0x2088}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_9, 0, 0 }, 0x2089}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_semicolon, SCIM_KEY_O, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_semicolon, SCIM_KEY_o, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_equal, 0, 0 }, 0x208C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_A, 0, 0 }, 0x00AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_E, 0, 0 }, 0x0112}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_G, 0, 0 }, 0x1E20}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_I, 0, 0 }, 0x012A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_O, 0, 0 }, 0x00BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_U, 0, 0 }, 0x016A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Y, 0, 0 }, 0x0232}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_asciicircum, 0, 0 }, 0x00AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_underscore, 0, 0 }, 0x00AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_a, 0, 0 }, 0x0101}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_e, 0, 0 }, 0x0113}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_g, 0, 0 }, 0x1E21}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_i, 0, 0 }, 0x012B}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_o, 0, 0 }, 0x014D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_u, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_y, 0, 0 }, 0x0233}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Adiaeresis, 0, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_AE, 0, 0 }, 0x01E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Otilde, 0, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Odiaeresis, 0, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_adiaeresis, 0, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_ae, 0, 0 }, 0x01E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_otilde, 0, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_odiaeresis, 0, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_udiaeresis, 0, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x04E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x04EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x04E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x04EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FB9}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1FD9}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1FE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_belowdot, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_belowdot, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_belowdot, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_combining_belowdot, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_abovedot, SCIM_KEY_A, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_abovedot, SCIM_KEY_O, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_abovedot, SCIM_KEY_a, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_abovedot, SCIM_KEY_o, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_A, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_O, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_a, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_o, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_ogonek, SCIM_KEY_O, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_ogonek, SCIM_KEY_o, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_belowdot, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_belowdot, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_belowdot, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_dead_belowdot, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_Space, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_Add, 0, 0 }, 0x208A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_0, 0, 0 }, 0x2080}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_1, 0, 0 }, 0x2081}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_2, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_3, 0, 0 }, 0x2083}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_4, 0, 0 }, 0x2084}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_5, 0, 0 }, 0x2085}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_6, 0, 0 }, 0x2086}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_7, 0, 0 }, 0x2087}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_8, 0, 0 }, 0x2088}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_9, 0, 0 }, 0x2089}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, SCIM_KEY_KP_Equal, 0, 0 }, 0x208C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x10001ea, 0, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x10001eb, 0, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000226, 0, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1000227, 0, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x100022e, 0, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x100022f, 0, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1001e36, 0, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1001e37, 0, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1001e5a, 0, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1001e5b, 0, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underscore, 0x1002212, 0, 0 }, 0x208B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_space, 0, 0 }, 0x0060}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F03}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F13}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F23}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F33}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F43}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F53}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F63}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F02}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F12}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F22}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F32}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F42}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F52}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F62}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDD}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_A, 0, 0 }, 0x00C0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_E, 0, 0 }, 0x00C8}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_I, 0, 0 }, 0x00CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_N, 0, 0 }, 0x01F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_O, 0, 0 }, 0x00D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_U, 0, 0 }, 0x00D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_W, 0, 0 }, 0x1E80}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Y, 0, 0 }, 0x1EF2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED3}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_a, 0, 0 }, 0x00E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_e, 0, 0 }, 0x00E8}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_i, 0, 0 }, 0x00EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_n, 0, 0 }, 0x01F9}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_o, 0, 0 }, 0x00F2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_u, 0, 0 }, 0x00F9}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_w, 0, 0 }, 0x1E81}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_y, 0, 0 }, 0x1EF3}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Acircumflex, 0, 0 }, 0x1EA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Ecircumflex, 0, 0 }, 0x1EC0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Ocircumflex, 0, 0 }, 0x1ED2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_acircumflex, 0, 0 }, 0x1EA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_ecircumflex, 0, 0 }, 0x1EC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_ocircumflex, 0, 0 }, 0x1ED3}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_udiaeresis, 0, 0 }, 0x01DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Abreve, 0, 0 }, 0x1EB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_abreve, 0, 0 }, 0x1EB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Emacron, 0, 0 }, 0x1E14}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_emacron, 0, 0 }, 0x1E15}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Omacron, 0, 0 }, 0x1E50}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_omacron, 0, 0 }, 0x1E51}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Cyrillic_ie, 0, 0 }, 0x0450}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x045D}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Cyrillic_IE, 0, 0 }, 0x0400}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x040D}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_iotadieresis, 0, 0 }, 0x1FD2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_upsilondieresis, 0, 0 }, 0x1FE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FBA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x1FC8}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1FCA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1FDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x1FF8}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1FEA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1FFA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F70}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x1F72}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F74}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F76}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_omicron, 0, 0 }, 0x1F78}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F7A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F7C}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Ohorn, 0, 0 }, 0x1EDC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_ohorn, 0, 0 }, 0x1EDD}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_Uhorn, 0, 0 }, 0x1EEA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_uhorn, 0, 0 }, 0x1EEB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0 }, 0x1EA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0 }, 0x1EC0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0 }, 0x1ED2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0 }, 0x1EA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0 }, 0x1EC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0 }, 0x1ED3}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_macron, SCIM_KEY_E, 0 }, 0x1E14}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_macron, SCIM_KEY_O, 0 }, 0x1E50}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_macron, SCIM_KEY_e, 0 }, 0x1E15}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_macron, SCIM_KEY_o, 0 }, 0x1E51}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_breve, SCIM_KEY_A, 0 }, 0x1EB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_breve, SCIM_KEY_a, 0 }, 0x1EB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01DB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0 }, 0x1FD2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE2}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EDC}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EEA}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EDD}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EEB}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F2A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F02}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_epsilon, 0 }, 0x1F12}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F22}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_iota, 0 }, 0x1F32}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_omicron, 0 }, 0x1F42}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_upsilon, 0 }, 0x1F52}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1F62}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F2B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F03}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_epsilon, 0 }, 0x1F13}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F23}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_iota, 0 }, 0x1F33}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_omicron, 0 }, 0x1F43}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_upsilon, 0 }, 0x1F53}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1F63}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f00, 0, 0 }, 0x1F02}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f01, 0, 0 }, 0x1F03}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f08, 0, 0 }, 0x1F0A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f09, 0, 0 }, 0x1F0B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f10, 0, 0 }, 0x1F12}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f11, 0, 0 }, 0x1F13}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f18, 0, 0 }, 0x1F1A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f19, 0, 0 }, 0x1F1B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f20, 0, 0 }, 0x1F22}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f21, 0, 0 }, 0x1F23}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f28, 0, 0 }, 0x1F2A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f29, 0, 0 }, 0x1F2B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f30, 0, 0 }, 0x1F32}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f31, 0, 0 }, 0x1F33}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f38, 0, 0 }, 0x1F3A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f39, 0, 0 }, 0x1F3B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f40, 0, 0 }, 0x1F42}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f41, 0, 0 }, 0x1F43}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f48, 0, 0 }, 0x1F4A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f49, 0, 0 }, 0x1F4B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f50, 0, 0 }, 0x1F52}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f51, 0, 0 }, 0x1F53}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f59, 0, 0 }, 0x1F5B}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f60, 0, 0 }, 0x1F62}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f61, 0, 0 }, 0x1F63}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f68, 0, 0 }, 0x1F6A}, {{SCIM_KEY_Multi_key, SCIM_KEY_grave, 0x1001f69, 0, 0 }, 0x1F6B}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_quotedbl, 0, 0 }, 0x00E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_apostrophe, 0, 0 }, 0x00E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_parenleft, 0, 0 }, 0x0103}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_asterisk, 0, 0 }, 0x00E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_comma, 0, 0 }, 0x0105}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_minus, 0, 0 }, 0x0101}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_greater, 0, 0 }, 0x00E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_asciicircum, 0, 0 }, 0x00E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_underscore, 0, 0 }, 0x00AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_grave, 0, 0 }, 0x00E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_a, 0, 0 }, 0x00E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_e, 0, 0 }, 0x00E6}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_asciitilde, 0, 0 }, 0x00E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_diaeresis, 0, 0 }, 0x00E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_a, SCIM_KEY_acute, 0, 0 }, 0x00E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_exclam, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_exclam, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_comma, SCIM_KEY_E, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_comma, SCIM_KEY_e, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_period, 0, 0 }, 0x1E03}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_A, 0, 0 }, 0x0102}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_E, 0, 0 }, 0x0114}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_G, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_I, 0, 0 }, 0x012C}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_O, 0, 0 }, 0x014E}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_U, 0, 0 }, 0x016C}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_a, 0, 0 }, 0x0103}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_e, 0, 0 }, 0x0115}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_g, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_i, 0, 0 }, 0x012D}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_o, 0, 0 }, 0x014F}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_u, 0, 0 }, 0x016D}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_a, 0, 0 }, 0x04D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_ie, 0, 0 }, 0x04D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x0439}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x045E}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_zhe, 0, 0 }, 0x04C2}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_A, 0, 0 }, 0x04D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_IE, 0, 0 }, 0x04D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x0419}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x040E}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Cyrillic_ZHE, 0, 0 }, 0x04C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FB8}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1FD8}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1FE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB0}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD0}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE0}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_combining_belowdot, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_combining_belowdot, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_dead_cedilla, SCIM_KEY_E, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_dead_cedilla, SCIM_KEY_e, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_dead_belowdot, SCIM_KEY_A, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, SCIM_KEY_dead_belowdot, SCIM_KEY_a, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, 0x1000228, 0, 0 }, 0x1E1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, 0x1000229, 0, 0 }, 0x1E1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, 0x1001ea0, 0, 0 }, 0x1EB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_b, 0x1001ea1, 0, 0 }, 0x1EB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_apostrophe, 0, 0 }, 0x0107}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_comma, 0, 0 }, 0x00E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_period, 0, 0 }, 0x010B}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_slash, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_0, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_less, 0, 0 }, 0x010D}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_equal, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_A, 0, 0 }, 0x01CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_C, 0, 0 }, 0x010C}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_D, 0, 0 }, 0x010E}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_E, 0, 0 }, 0x011A}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_G, 0, 0 }, 0x01E6}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_H, 0, 0 }, 0x021E}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_I, 0, 0 }, 0x01CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_K, 0, 0 }, 0x01E8}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_L, 0, 0 }, 0x013D}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_N, 0, 0 }, 0x0147}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_O, 0, 0 }, 0x01D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_R, 0, 0 }, 0x0158}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_S, 0, 0 }, 0x0160}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_T, 0, 0 }, 0x0164}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_U, 0, 0 }, 0x01D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_Z, 0, 0 }, 0x017D}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_a, 0, 0 }, 0x01CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_c, 0, 0 }, 0x010D}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_d, 0, 0 }, 0x010F}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_e, 0, 0 }, 0x011B}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_g, 0, 0 }, 0x01E7}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_h, 0, 0 }, 0x021F}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_i, 0, 0 }, 0x01D0}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_j, 0, 0 }, 0x01F0}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_k, 0, 0 }, 0x01E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_l, 0, 0 }, 0x013E}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_n, 0, 0 }, 0x0148}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_o, 0, 0 }, 0x01D2}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_r, 0, 0 }, 0x0159}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_s, 0, 0 }, 0x0161}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_t, 0, 0 }, 0x0165}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_u, 0, 0 }, 0x01D4}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_z, 0, 0 }, 0x017E}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_bar, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_udiaeresis, 0, 0 }, 0x01DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01D9}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, 0x10001b7, 0, 0 }, 0x01EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_c, 0x1000292, 0, 0 }, 0x01EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_d, SCIM_KEY_minus, 0, 0 }, 0x20AB}, {{SCIM_KEY_Multi_key, SCIM_KEY_d, SCIM_KEY_period, 0, 0 }, 0x1E0B}, {{SCIM_KEY_Multi_key, SCIM_KEY_d, SCIM_KEY_less, 0, 0 }, 0x010F}, {{SCIM_KEY_Multi_key, SCIM_KEY_d, SCIM_KEY_h, 0, 0 }, 0x00F0}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_quotedbl, 0, 0 }, 0x00EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_apostrophe, 0, 0 }, 0x00E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_comma, 0, 0 }, 0x0119}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_minus, 0, 0 }, 0x0113}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_period, 0, 0 }, 0x0117}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_less, 0, 0 }, 0x011B}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_equal, 0, 0 }, 0x20AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_greater, 0, 0 }, 0x00EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_asciicircum, 0, 0 }, 0x00EA}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_underscore, 0, 0 }, 0x0113}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_grave, 0, 0 }, 0x00E8}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_e, 0, 0 }, 0x0259}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_diaeresis, 0, 0 }, 0x00EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_e, SCIM_KEY_acute, 0, 0 }, 0x00E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_f, SCIM_KEY_period, 0, 0 }, 0x1E1F}, {{SCIM_KEY_Multi_key, SCIM_KEY_f, SCIM_KEY_S, 0, 0 }, 0x017F}, {{SCIM_KEY_Multi_key, SCIM_KEY_f, SCIM_KEY_s, 0, 0 }, 0x017F}, {{SCIM_KEY_Multi_key, SCIM_KEY_g, SCIM_KEY_parenleft, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_g, SCIM_KEY_comma, 0, 0 }, 0x0123}, {{SCIM_KEY_Multi_key, SCIM_KEY_g, SCIM_KEY_period, 0, 0 }, 0x0121}, {{SCIM_KEY_Multi_key, SCIM_KEY_g, SCIM_KEY_U, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_g, SCIM_KEY_breve, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_quotedbl, 0, 0 }, 0x00EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_apostrophe, 0, 0 }, 0x00ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_comma, 0, 0 }, 0x012F}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_minus, 0, 0 }, 0x012B}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_period, 0, 0 }, 0x0131}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_greater, 0, 0 }, 0x00EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_asciicircum, 0, 0 }, 0x00EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_underscore, 0, 0 }, 0x012B}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_grave, 0, 0 }, 0x00EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_asciitilde, 0, 0 }, 0x0129}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_diaeresis, 0, 0 }, 0x00EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_i, SCIM_KEY_acute, 0, 0 }, 0x00ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_k, SCIM_KEY_comma, 0, 0 }, 0x0137}, {{SCIM_KEY_Multi_key, SCIM_KEY_k, SCIM_KEY_k, 0, 0 }, 0x0138}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_apostrophe, 0, 0 }, 0x013A}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_comma, 0, 0 }, 0x013C}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_minus, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_less, 0, 0 }, 0x013E}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_equal, 0, 0 }, 0x00A3}, {{SCIM_KEY_Multi_key, SCIM_KEY_l, SCIM_KEY_v, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_m, SCIM_KEY_period, 0, 0 }, 0x1E41}, {{SCIM_KEY_Multi_key, SCIM_KEY_m, SCIM_KEY_slash, 0, 0 }, 0x20A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_m, SCIM_KEY_u, 0, 0 }, 0x00B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_apostrophe, 0, 0 }, 0x0144}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_comma, 0, 0 }, 0x0146}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_minus, 0, 0 }, 0x00F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_less, 0, 0 }, 0x0148}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_g, 0, 0 }, 0x014B}, {{SCIM_KEY_Multi_key, SCIM_KEY_n, SCIM_KEY_asciitilde, 0, 0 }, 0x00F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_quotedbl, 0, 0 }, 0x00F6}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_apostrophe, 0, 0 }, 0x00F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_apostrophe, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_apostrophe, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_minus, 0, 0 }, 0x014D}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_slash, 0, 0 }, 0x00F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_greater, 0, 0 }, 0x00F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_A, 0, 0 }, 0x00C5}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_C, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_R, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_U, 0, 0 }, 0x016E}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_X, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_asciicircum, 0, 0 }, 0x00F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_underscore, 0, 0 }, 0x00BA}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_grave, 0, 0 }, 0x00F2}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_a, 0, 0 }, 0x00E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_c, 0, 0 }, 0x00A9}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_e, 0, 0 }, 0x0153}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_o, 0, 0 }, 0x00B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_r, 0, 0 }, 0x00AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_s, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_u, 0, 0 }, 0x016F}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_w, 0, 0 }, 0x1E98}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_x, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_y, 0, 0 }, 0x1E99}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_asciitilde, 0, 0 }, 0x00F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_diaeresis, 0, 0 }, 0x00F6}, {{SCIM_KEY_Multi_key, SCIM_KEY_o, SCIM_KEY_acute, 0, 0 }, 0x00F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_p, SCIM_KEY_exclam, 0, 0 }, 0x00B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_p, SCIM_KEY_period, 0, 0 }, 0x1E57}, {{SCIM_KEY_Multi_key, SCIM_KEY_r, SCIM_KEY_apostrophe, 0, 0 }, 0x0155}, {{SCIM_KEY_Multi_key, SCIM_KEY_r, SCIM_KEY_comma, 0, 0 }, 0x0157}, {{SCIM_KEY_Multi_key, SCIM_KEY_r, SCIM_KEY_less, 0, 0 }, 0x0159}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_exclam, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_apostrophe, 0, 0 }, 0x015B}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_comma, 0, 0 }, 0x015F}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_period, 0, 0 }, 0x1E61}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_0, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_1, 0, 0 }, 0x00B9}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_2, 0, 0 }, 0x00B2}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_3, 0, 0 }, 0x00B3}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_less, 0, 0 }, 0x0161}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_o, 0, 0 }, 0x00A7}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_s, 0, 0 }, 0x00DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_s, SCIM_KEY_cedilla, 0, 0 }, 0x015F}, {{SCIM_KEY_Multi_key, SCIM_KEY_t, SCIM_KEY_minus, 0, 0 }, 0x0167}, {{SCIM_KEY_Multi_key, SCIM_KEY_t, SCIM_KEY_period, 0, 0 }, 0x1E6B}, {{SCIM_KEY_Multi_key, SCIM_KEY_t, SCIM_KEY_slash, 0, 0 }, 0x0167}, {{SCIM_KEY_Multi_key, SCIM_KEY_t, SCIM_KEY_less, 0, 0 }, 0x0165}, {{SCIM_KEY_Multi_key, SCIM_KEY_t, SCIM_KEY_h, 0, 0 }, 0x00FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_quotedbl, 0, 0 }, 0x00FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_apostrophe, 0, 0 }, 0x00FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_asterisk, 0, 0 }, 0x016F}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_comma, 0, 0 }, 0x0173}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_minus, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_slash, 0, 0 }, 0x00B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_greater, 0, 0 }, 0x00FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_asciicircum, 0, 0 }, 0x00FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_underscore, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_grave, 0, 0 }, 0x00F9}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_asciitilde, 0, 0 }, 0x0169}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_diaeresis, 0, 0 }, 0x00FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_u, SCIM_KEY_acute, 0, 0 }, 0x00FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_v, SCIM_KEY_Z, 0, 0 }, 0x017D}, {{SCIM_KEY_Multi_key, SCIM_KEY_v, SCIM_KEY_l, 0, 0 }, 0x007C}, {{SCIM_KEY_Multi_key, SCIM_KEY_v, SCIM_KEY_z, 0, 0 }, 0x017E}, {{SCIM_KEY_Multi_key, SCIM_KEY_w, SCIM_KEY_asciicircum, 0, 0 }, 0x0175}, {{SCIM_KEY_Multi_key, SCIM_KEY_x, SCIM_KEY_0, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_x, SCIM_KEY_O, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_x, SCIM_KEY_o, 0, 0 }, 0x00A4}, {{SCIM_KEY_Multi_key, SCIM_KEY_x, SCIM_KEY_x, 0, 0 }, 0x00D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_quotedbl, 0, 0 }, 0x00FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_apostrophe, 0, 0 }, 0x00FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_minus, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_equal, 0, 0 }, 0x00A5}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_asciicircum, 0, 0 }, 0x0177}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_diaeresis, 0, 0 }, 0x00FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_y, SCIM_KEY_acute, 0, 0 }, 0x00FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_z, SCIM_KEY_apostrophe, 0, 0 }, 0x017A}, {{SCIM_KEY_Multi_key, SCIM_KEY_z, SCIM_KEY_period, 0, 0 }, 0x017C}, {{SCIM_KEY_Multi_key, SCIM_KEY_z, SCIM_KEY_less, 0, 0 }, 0x017E}, {{SCIM_KEY_Multi_key, SCIM_KEY_bar, SCIM_KEY_C, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_bar, SCIM_KEY_c, 0, 0 }, 0x00A2}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_space, 0, 0 }, 0x007E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F07}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F27}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F37}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F57}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F67}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F06}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F26}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F36}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F56}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F66}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EE0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EEE}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EE1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EEF}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_A, 0, 0 }, 0x00C3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_E, 0, 0 }, 0x1EBC}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_I, 0, 0 }, 0x0128}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_N, 0, 0 }, 0x00D1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_O, 0, 0 }, 0x00D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_U, 0, 0 }, 0x0168}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_V, 0, 0 }, 0x1E7C}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Y, 0, 0 }, 0x1EF8}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EC5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_a, 0, 0 }, 0x00E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_e, 0, 0 }, 0x1EBD}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_i, 0, 0 }, 0x0129}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_n, 0, 0 }, 0x00F1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_o, 0, 0 }, 0x00F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_u, 0, 0 }, 0x0169}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_v, 0, 0 }, 0x1E7D}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_y, 0, 0 }, 0x1EF9}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Acircumflex, 0, 0 }, 0x1EAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Ecircumflex, 0, 0 }, 0x1EC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Ocircumflex, 0, 0 }, 0x1ED6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_acircumflex, 0, 0 }, 0x1EAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_ecircumflex, 0, 0 }, 0x1EC5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_ocircumflex, 0, 0 }, 0x1ED7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Abreve, 0, 0 }, 0x1EB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_abreve, 0, 0 }, 0x1EB5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_iotadieresis, 0, 0 }, 0x1FD7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_upsilondieresis, 0, 0 }, 0x1FE7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Ohorn, 0, 0 }, 0x1EE0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_ohorn, 0, 0 }, 0x1EE1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_Uhorn, 0, 0 }, 0x1EEE}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_uhorn, 0, 0 }, 0x1EEF}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0 }, 0x1EAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0 }, 0x1EC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0 }, 0x1ED6}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0 }, 0x1EAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0 }, 0x1EC5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0 }, 0x1ED7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_breve, SCIM_KEY_A, 0 }, 0x1EB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_breve, SCIM_KEY_a, 0 }, 0x1EB5}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0 }, 0x1FD7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE7}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EE0}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EEE}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EE1}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EEF}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F06}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F26}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_iota, 0 }, 0x1F36}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_upsilon, 0 }, 0x1F56}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1F66}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F07}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F27}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_iota, 0 }, 0x1F37}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_upsilon, 0 }, 0x1F57}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1F67}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f00, 0, 0 }, 0x1F06}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f01, 0, 0 }, 0x1F07}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f08, 0, 0 }, 0x1F0E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f09, 0, 0 }, 0x1F0F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f20, 0, 0 }, 0x1F26}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f21, 0, 0 }, 0x1F27}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f28, 0, 0 }, 0x1F2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f29, 0, 0 }, 0x1F2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f30, 0, 0 }, 0x1F36}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f31, 0, 0 }, 0x1F37}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f38, 0, 0 }, 0x1F3E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f39, 0, 0 }, 0x1F3F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f50, 0, 0 }, 0x1F56}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f51, 0, 0 }, 0x1F57}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f59, 0, 0 }, 0x1F5F}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f60, 0, 0 }, 0x1F66}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f61, 0, 0 }, 0x1F67}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f68, 0, 0 }, 0x1F6E}, {{SCIM_KEY_Multi_key, SCIM_KEY_asciitilde, 0x1001f69, 0, 0 }, 0x1F6F}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_apostrophe, 0, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_A, 0, 0 }, 0x00C4}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_E, 0, 0 }, 0x00CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_I, 0, 0 }, 0x00CF}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_O, 0, 0 }, 0x00D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_U, 0, 0 }, 0x00DC}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_Y, 0, 0 }, 0x0178}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_grave, 0, 0 }, 0x1FED}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_a, 0, 0 }, 0x00E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_e, 0, 0 }, 0x00EB}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_i, 0, 0 }, 0x00EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_o, 0, 0 }, 0x00F6}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_u, 0, 0 }, 0x00FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_y, 0, 0 }, 0x00FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_asciitilde, 0, 0 }, 0x1FC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_acute, 0, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_combining_grave, 0, 0 }, 0x1FED}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_combining_acute, 0, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_dead_grave, 0, 0 }, 0x1FED}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_dead_acute, 0, 0 }, 0x0385}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, SCIM_KEY_dead_tilde, 0, 0 }, 0x1FC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_diaeresis, 0x1000342, 0, 0 }, 0x1FC1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_exclam, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_exclam, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_exclam, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_exclam, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_A, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_O, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_a, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_o, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_period, SCIM_KEY_A, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_period, SCIM_KEY_O, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_period, SCIM_KEY_a, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_period, SCIM_KEY_o, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_semicolon, SCIM_KEY_O, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_semicolon, SCIM_KEY_o, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_A, 0, 0 }, 0x0100}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_E, 0, 0 }, 0x0112}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_G, 0, 0 }, 0x1E20}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_I, 0, 0 }, 0x012A}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_O, 0, 0 }, 0x014C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_U, 0, 0 }, 0x016A}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Y, 0, 0 }, 0x0232}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_a, 0, 0 }, 0x0101}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_e, 0, 0 }, 0x0113}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_g, 0, 0 }, 0x1E21}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_i, 0, 0 }, 0x012B}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_o, 0, 0 }, 0x014D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_u, 0, 0 }, 0x016B}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_y, 0, 0 }, 0x0233}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Adiaeresis, 0, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_AE, 0, 0 }, 0x01E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Otilde, 0, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Odiaeresis, 0, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_adiaeresis, 0, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_ae, 0, 0 }, 0x01E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_otilde, 0, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_odiaeresis, 0, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_udiaeresis, 0, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Cyrillic_i, 0, 0 }, 0x04E3}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Cyrillic_u, 0, 0 }, 0x04EF}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Cyrillic_I, 0, 0 }, 0x04E2}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Cyrillic_U, 0, 0 }, 0x04EE}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FB9}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1FD9}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1FE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_combining_belowdot, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0 }, 0x022C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0 }, 0x022D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_A, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_O, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_a, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_abovedot, SCIM_KEY_o, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_A, 0 }, 0x01DE}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_O, 0 }, 0x022A}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01D5}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_a, 0 }, 0x01DF}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_o, 0 }, 0x022B}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01D6}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_ogonek, SCIM_KEY_O, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_ogonek, SCIM_KEY_o, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_L, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_R, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_l, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, SCIM_KEY_dead_belowdot, SCIM_KEY_r, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x10001ea, 0, 0 }, 0x01EC}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x10001eb, 0, 0 }, 0x01ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1000226, 0, 0 }, 0x01E0}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1000227, 0, 0 }, 0x01E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x100022e, 0, 0 }, 0x0230}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x100022f, 0, 0 }, 0x0231}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1001e36, 0, 0 }, 0x1E38}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1001e37, 0, 0 }, 0x1E39}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1001e5a, 0, 0 }, 0x1E5C}, {{SCIM_KEY_Multi_key, SCIM_KEY_macron, 0x1001e5b, 0, 0 }, 0x1E5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_plus, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_plus, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_plus, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_plus, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_comma, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_comma, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_slash, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_slash, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_A, 0, 0 }, 0x00C1}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_C, 0, 0 }, 0x0106}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_E, 0, 0 }, 0x00C9}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_G, 0, 0 }, 0x01F4}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_I, 0, 0 }, 0x00CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_K, 0, 0 }, 0x1E30}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_L, 0, 0 }, 0x0139}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_M, 0, 0 }, 0x1E3E}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_N, 0, 0 }, 0x0143}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_O, 0, 0 }, 0x00D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_P, 0, 0 }, 0x1E54}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_R, 0, 0 }, 0x0154}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_S, 0, 0 }, 0x015A}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_U, 0, 0 }, 0x00DA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_U, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_U, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_W, 0, 0 }, 0x1E82}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Y, 0, 0 }, 0x00DD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Z, 0, 0 }, 0x0179}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciicircum, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_underscore, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_underscore, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_underscore, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_underscore, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_a, 0, 0 }, 0x00E1}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_b, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_b, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_c, 0, 0 }, 0x0107}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_e, 0, 0 }, 0x00E9}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_g, 0, 0 }, 0x01F5}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_i, 0, 0 }, 0x00ED}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_k, 0, 0 }, 0x1E31}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_l, 0, 0 }, 0x013A}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_m, 0, 0 }, 0x1E3F}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_n, 0, 0 }, 0x0144}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_o, 0, 0 }, 0x00F3}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_o, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_o, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_p, 0, 0 }, 0x1E55}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_r, 0, 0 }, 0x0155}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_s, 0, 0 }, 0x015B}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_u, 0, 0 }, 0x00FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_w, 0, 0 }, 0x1E83}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_y, 0, 0 }, 0x00FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_z, 0, 0 }, 0x017A}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciitilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciitilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciitilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_asciitilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Acircumflex, 0, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Aring, 0, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_AE, 0, 0 }, 0x01FC}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Ccedilla, 0, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Ecircumflex, 0, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Idiaeresis, 0, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Ocircumflex, 0, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Otilde, 0, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Ooblique, 0, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Udiaeresis, 0, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_acircumflex, 0, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_aring, 0, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_ae, 0, 0 }, 0x01FD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_ccedilla, 0, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_ecircumflex, 0, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_idiaeresis, 0, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_ocircumflex, 0, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_otilde, 0, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_oslash, 0, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_udiaeresis, 0, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Abreve, 0, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_abreve, 0, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Emacron, 0, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_emacron, 0, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Omacron, 0, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Utilde, 0, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_omacron, 0, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_utilde, 0, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Cyrillic_ghe, 0, 0 }, 0x0453}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Cyrillic_ka, 0, 0 }, 0x045C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Cyrillic_GHE, 0, 0 }, 0x0403}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Cyrillic_KA, 0, 0 }, 0x040C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_iotadieresis, 0, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_upsilondieresis, 0, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x0386}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_EPSILON, 0, 0 }, 0x0388}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_ETA, 0, 0 }, 0x0389}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x038A}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_OMICRON, 0, 0 }, 0x038C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x038E}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x038F}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_alpha, 0, 0 }, 0x03AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_epsilon, 0, 0 }, 0x03AD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_eta, 0, 0 }, 0x03AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_iota, 0, 0 }, 0x03AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_omicron, 0, 0 }, 0x03CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x03CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Greek_omega, 0, 0 }, 0x03CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_combining_tilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_combining_tilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_combining_tilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_combining_tilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Ohorn, 0, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_ohorn, 0, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_Uhorn, 0, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_uhorn, 0, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_A, 0 }, 0x1EA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_E, 0 }, 0x1EBE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_O, 0 }, 0x1ED0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_a, 0 }, 0x1EA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_e, 0 }, 0x1EBF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_circumflex, SCIM_KEY_o, 0 }, 0x1ED1}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_tilde, SCIM_KEY_O, 0 }, 0x1E4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_tilde, SCIM_KEY_U, 0 }, 0x1E78}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_tilde, SCIM_KEY_o, 0 }, 0x1E4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_tilde, SCIM_KEY_u, 0 }, 0x1E79}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_macron, SCIM_KEY_E, 0 }, 0x1E16}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_macron, SCIM_KEY_O, 0 }, 0x1E52}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_macron, SCIM_KEY_e, 0 }, 0x1E17}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_macron, SCIM_KEY_o, 0 }, 0x1E53}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_breve, SCIM_KEY_A, 0 }, 0x1EAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_breve, SCIM_KEY_a, 0 }, 0x1EAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_I, 0 }, 0x1E2E}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_U, 0 }, 0x01D7}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_i, 0 }, 0x1E2F}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_u, 0 }, 0x01D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0 }, 0x0390}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0 }, 0x03B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_abovering, SCIM_KEY_A, 0 }, 0x01FA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_abovering, SCIM_KEY_a, 0 }, 0x01FB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_C, 0 }, 0x1E08}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_cedilla, SCIM_KEY_c, 0 }, 0x1E09}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_horn, SCIM_KEY_O, 0 }, 0x1EDA}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_horn, SCIM_KEY_U, 0 }, 0x1EE8}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_horn, SCIM_KEY_o, 0 }, 0x1EDB}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_dead_horn, SCIM_KEY_u, 0 }, 0x1EE9}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_KP_Divide, SCIM_KEY_O, 0 }, 0x01FE}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, SCIM_KEY_KP_Divide, SCIM_KEY_o, 0 }, 0x01FF}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_epsilon, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_iota, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_omicron, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_upsilon, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_EPSILON, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_OMICRON, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_epsilon, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_iota, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_omicron, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_upsilon, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x10003d2, 0, 0 }, 0x03D3}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f00, 0, 0 }, 0x1F04}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f01, 0, 0 }, 0x1F05}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f08, 0, 0 }, 0x1F0C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f09, 0, 0 }, 0x1F0D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f10, 0, 0 }, 0x1F14}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f11, 0, 0 }, 0x1F15}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f18, 0, 0 }, 0x1F1C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f19, 0, 0 }, 0x1F1D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f20, 0, 0 }, 0x1F24}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f21, 0, 0 }, 0x1F25}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f28, 0, 0 }, 0x1F2C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f29, 0, 0 }, 0x1F2D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f30, 0, 0 }, 0x1F34}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f31, 0, 0 }, 0x1F35}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f38, 0, 0 }, 0x1F3C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f39, 0, 0 }, 0x1F3D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f40, 0, 0 }, 0x1F44}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f41, 0, 0 }, 0x1F45}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f48, 0, 0 }, 0x1F4C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f49, 0, 0 }, 0x1F4D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f50, 0, 0 }, 0x1F54}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f51, 0, 0 }, 0x1F55}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f59, 0, 0 }, 0x1F5D}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f60, 0, 0 }, 0x1F64}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f61, 0, 0 }, 0x1F65}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f68, 0, 0 }, 0x1F6C}, {{SCIM_KEY_Multi_key, SCIM_KEY_acute, 0x1001f69, 0, 0 }, 0x1F6D}, {{SCIM_KEY_Multi_key, SCIM_KEY_cedilla, SCIM_KEY_S, 0, 0 }, 0x015E}, {{SCIM_KEY_Multi_key, SCIM_KEY_cedilla, SCIM_KEY_s, 0, 0 }, 0x015F}, {{SCIM_KEY_Multi_key, SCIM_KEY_breve, SCIM_KEY_G, 0, 0 }, 0x011E}, {{SCIM_KEY_Multi_key, SCIM_KEY_breve, SCIM_KEY_g, 0, 0 }, 0x011F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_ALPHA, SCIM_KEY_apostrophe, 0, 0 }, 0x0386}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_EPSILON, SCIM_KEY_apostrophe, 0, 0 }, 0x0388}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_ETA, SCIM_KEY_apostrophe, 0, 0 }, 0x0389}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_IOTA, SCIM_KEY_quotedbl, 0, 0 }, 0x03AA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_IOTA, SCIM_KEY_apostrophe, 0, 0 }, 0x038A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_OMICRON, SCIM_KEY_apostrophe, 0, 0 }, 0x038C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_UPSILON, SCIM_KEY_quotedbl, 0, 0 }, 0x03AB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_UPSILON, SCIM_KEY_apostrophe, 0, 0 }, 0x038E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_OMEGA, SCIM_KEY_apostrophe, 0, 0 }, 0x038F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_alpha, SCIM_KEY_apostrophe, 0, 0 }, 0x03AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_epsilon, SCIM_KEY_apostrophe, 0, 0 }, 0x03AD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_eta, SCIM_KEY_apostrophe, 0, 0 }, 0x03AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_quotedbl, 0, 0 }, 0x03CA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0, 0 }, 0x03AF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_apostrophe, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F89}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F99}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F81}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F91}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1FA1}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F88}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F98}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F80}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F90}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1FA0}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_Greek_alpha, 0 }, 0x1FB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_Greek_eta, 0 }, 0x1FC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, SCIM_KEY_Greek_omega, 0 }, 0x1FF2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f00, 0 }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f01, 0 }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f08, 0 }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f09, 0 }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f20, 0 }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f21, 0 }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f28, 0 }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f29, 0 }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f60, 0 }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f61, 0 }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f68, 0 }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_grave, 0x1001f69, 0 }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_Greek_alpha, 0 }, 0x1FB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_Greek_eta, 0 }, 0x1FC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, SCIM_KEY_Greek_omega, 0 }, 0x1FF7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f00, 0 }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f01, 0 }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f08, 0 }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f09, 0 }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f20, 0 }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f21, 0 }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f28, 0 }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f29, 0 }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f60, 0 }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f61, 0 }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f68, 0 }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_asciitilde, 0x1001f69, 0 }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_acute, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_alphaaccent, 0, 0 }, 0x1FB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_etaaccent, 0, 0 }, 0x1FC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_omegaaccent, 0, 0 }, 0x1FF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1FBC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1FCC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1FFC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1FB3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_eta, 0, 0 }, 0x1FC3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_Greek_omega, 0, 0 }, 0x1FF3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_alpha, 0 }, 0x1FB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_eta, 0 }, 0x1FC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, SCIM_KEY_Greek_omega, 0 }, 0x1FF2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f00, 0 }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f01, 0 }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f08, 0 }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f09, 0 }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f20, 0 }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f21, 0 }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f28, 0 }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f29, 0 }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f60, 0 }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f61, 0 }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f68, 0 }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_grave, 0x1001f69, 0 }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_combining_acute, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_alpha, 0 }, 0x1FB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_eta, 0 }, 0x1FC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, SCIM_KEY_Greek_omega, 0 }, 0x1FF2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f00, 0 }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f01, 0 }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f08, 0 }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f09, 0 }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f20, 0 }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f21, 0 }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f28, 0 }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f29, 0 }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f60, 0 }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f61, 0 }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f68, 0 }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_grave, 0x1001f69, 0 }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_alpha, 0 }, 0x1FB4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_eta, 0 }, 0x1FC4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, SCIM_KEY_Greek_omega, 0 }, 0x1FF4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f00, 0 }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f01, 0 }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f08, 0 }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f09, 0 }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f20, 0 }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f21, 0 }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f28, 0 }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f29, 0 }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f60, 0 }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f61, 0 }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f68, 0 }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_acute, 0x1001f69, 0 }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_alpha, 0 }, 0x1FB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_eta, 0 }, 0x1FC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, SCIM_KEY_Greek_omega, 0 }, 0x1FF7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f00, 0 }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f01, 0 }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f08, 0 }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f09, 0 }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f20, 0 }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f21, 0 }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f28, 0 }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f29, 0 }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f60, 0 }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f61, 0 }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f68, 0 }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, SCIM_KEY_dead_tilde, 0x1001f69, 0 }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F88}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_ETA, 0 }, 0x1F98}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_alpha, 0 }, 0x1F80}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_eta, 0 }, 0x1F90}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000313, SCIM_KEY_Greek_omega, 0 }, 0x1FA0}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F89}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_ETA, 0 }, 0x1F99}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_OMEGA, 0 }, 0x1FA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_alpha, 0 }, 0x1F81}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_eta, 0 }, 0x1F91}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000314, SCIM_KEY_Greek_omega, 0 }, 0x1FA1}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_parenright, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_Greek_alpha, 0 }, 0x1FB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_Greek_eta, 0 }, 0x1FC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, SCIM_KEY_Greek_omega, 0 }, 0x1FF7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_ALPHA }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_ETA }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_OMEGA }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_alpha }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_eta }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000313, SCIM_KEY_Greek_omega }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_ALPHA }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_ETA }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_OMEGA }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_alpha }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_eta }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1000314, SCIM_KEY_Greek_omega }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f00, 0 }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f01, 0 }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f08, 0 }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f09, 0 }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f20, 0 }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f21, 0 }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f28, 0 }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f29, 0 }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f60, 0 }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f61, 0 }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f68, 0 }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1000342, 0x1001f69, 0 }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f00, 0, 0 }, 0x1F80}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f01, 0, 0 }, 0x1F81}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f02, 0, 0 }, 0x1F82}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f03, 0, 0 }, 0x1F83}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f04, 0, 0 }, 0x1F84}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f05, 0, 0 }, 0x1F85}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f06, 0, 0 }, 0x1F86}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f07, 0, 0 }, 0x1F87}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f08, 0, 0 }, 0x1F88}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f09, 0, 0 }, 0x1F89}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0a, 0, 0 }, 0x1F8A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0b, 0, 0 }, 0x1F8B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0c, 0, 0 }, 0x1F8C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0d, 0, 0 }, 0x1F8D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0e, 0, 0 }, 0x1F8E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f0f, 0, 0 }, 0x1F8F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f20, 0, 0 }, 0x1F90}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f21, 0, 0 }, 0x1F91}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f22, 0, 0 }, 0x1F92}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f23, 0, 0 }, 0x1F93}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f24, 0, 0 }, 0x1F94}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f25, 0, 0 }, 0x1F95}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f26, 0, 0 }, 0x1F96}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f27, 0, 0 }, 0x1F97}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f28, 0, 0 }, 0x1F98}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f29, 0, 0 }, 0x1F99}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2a, 0, 0 }, 0x1F9A}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2b, 0, 0 }, 0x1F9B}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2c, 0, 0 }, 0x1F9C}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2d, 0, 0 }, 0x1F9D}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2e, 0, 0 }, 0x1F9E}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f2f, 0, 0 }, 0x1F9F}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f60, 0, 0 }, 0x1FA0}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f61, 0, 0 }, 0x1FA1}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f62, 0, 0 }, 0x1FA2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f63, 0, 0 }, 0x1FA3}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f64, 0, 0 }, 0x1FA4}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f65, 0, 0 }, 0x1FA5}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f66, 0, 0 }, 0x1FA6}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f67, 0, 0 }, 0x1FA7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f68, 0, 0 }, 0x1FA8}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f69, 0, 0 }, 0x1FA9}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6a, 0, 0 }, 0x1FAA}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6b, 0, 0 }, 0x1FAB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6c, 0, 0 }, 0x1FAC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6d, 0, 0 }, 0x1FAD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6e, 0, 0 }, 0x1FAE}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f6f, 0, 0 }, 0x1FAF}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f70, 0, 0 }, 0x1FB2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f74, 0, 0 }, 0x1FC2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001f7c, 0, 0 }, 0x1FF2}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001fb6, 0, 0 }, 0x1FB7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001fc6, 0, 0 }, 0x1FC7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_iota, 0x1001ff6, 0, 0 }, 0x1FF7}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_omicron, SCIM_KEY_apostrophe, 0, 0 }, 0x03CC}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_upsilon, SCIM_KEY_quotedbl, 0, 0 }, 0x03CB}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_upsilon, SCIM_KEY_apostrophe, 0, 0 }, 0x03CD}, {{SCIM_KEY_Multi_key, SCIM_KEY_Greek_omega, SCIM_KEY_apostrophe, 0, 0 }, 0x03CE}, {{SCIM_KEY_Multi_key, SCIM_KEY_lessthanequal, 0x1000338, 0, 0 }, 0x2270}, {{SCIM_KEY_Multi_key, SCIM_KEY_greaterthanequal, 0x1000338, 0, 0 }, 0x2271}, {{SCIM_KEY_Multi_key, SCIM_KEY_approximate, 0x1000338, 0, 0 }, 0x2247}, {{SCIM_KEY_Multi_key, SCIM_KEY_identical, 0x1000338, 0, 0 }, 0x2262}, {{SCIM_KEY_Multi_key, SCIM_KEY_includedin, 0x1000338, 0, 0 }, 0x2284}, {{SCIM_KEY_Multi_key, SCIM_KEY_includes, 0x1000338, 0, 0 }, 0x2285}, {{SCIM_KEY_Multi_key, SCIM_KEY_leftcaret, 0x1000338, 0, 0 }, 0x226E}, {{SCIM_KEY_Multi_key, SCIM_KEY_rightcaret, 0x1000338, 0, 0 }, 0x226F}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_parenleft, 0, 0 }, 0x208D}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_parenright, 0, 0 }, 0x208E}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_plus, 0, 0 }, 0x208A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_0, 0, 0 }, 0x2080}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_1, 0, 0 }, 0x2081}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_2, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_3, 0, 0 }, 0x2083}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_4, 0, 0 }, 0x2084}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_5, 0, 0 }, 0x2085}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_6, 0, 0 }, 0x2086}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_7, 0, 0 }, 0x2087}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_8, 0, 0 }, 0x2088}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_9, 0, 0 }, 0x2089}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_equal, 0, 0 }, 0x208C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_Space, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_Add, 0, 0 }, 0x208A}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_0, 0, 0 }, 0x2080}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_1, 0, 0 }, 0x2081}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_2, 0, 0 }, 0x2082}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_3, 0, 0 }, 0x2083}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_4, 0, 0 }, 0x2084}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_5, 0, 0 }, 0x2085}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_6, 0, 0 }, 0x2086}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_7, 0, 0 }, 0x2087}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_8, 0, 0 }, 0x2088}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_9, 0, 0 }, 0x2089}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, SCIM_KEY_KP_Equal, 0, 0 }, 0x208C}, {{SCIM_KEY_Multi_key, SCIM_KEY_underbar, 0x1002212, 0, 0 }, 0x208B}, {{SCIM_KEY_Multi_key, SCIM_KEY_rightshoe, 0x1000338, 0, 0 }, 0x2285}, {{SCIM_KEY_Multi_key, SCIM_KEY_leftshoe, 0x1000338, 0, 0 }, 0x2284}, {{SCIM_KEY_Multi_key, SCIM_KEY_righttack, 0x1000338, 0, 0 }, 0x22AC}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_D, 0, 0 }, 0x0110}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_G, 0, 0 }, 0x01E4}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_H, 0, 0 }, 0x0126}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_I, 0, 0 }, 0x0197}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_L, 0, 0 }, 0x0141}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_O, 0, 0 }, 0x00D8}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_T, 0, 0 }, 0x0166}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_Z, 0, 0 }, 0x01B5}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_b, 0, 0 }, 0x0180}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_d, 0, 0 }, 0x0111}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_g, 0, 0 }, 0x01E5}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_h, 0, 0 }, 0x0127}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_i, 0, 0 }, 0x0268}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_l, 0, 0 }, 0x0142}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_o, 0, 0 }, 0x00F8}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_t, 0, 0 }, 0x0167}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_z, 0, 0 }, 0x01B6}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_Cyrillic_ghe, 0, 0 }, 0x0493}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_Cyrillic_ka, 0, 0 }, 0x049F}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_Cyrillic_GHE, 0, 0 }, 0x0492}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_Cyrillic_KA, 0, 0 }, 0x049E}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_leftarrow, 0, 0 }, 0x219A}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, SCIM_KEY_rightarrow, 0, 0 }, 0x219B}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, 0x1000294, 0, 0 }, 0x02A1}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, 0x10004ae, 0, 0 }, 0x04B0}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, 0x10004af, 0, 0 }, 0x04B1}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Divide, 0x1002194, 0, 0 }, 0x21AE}, {{SCIM_KEY_Multi_key, SCIM_KEY_KP_Equal, 0x1000338, 0, 0 }, 0x2260}, {{SCIM_KEY_Multi_key, 0x10005b4, SCIM_KEY_hebrew_yod, 0, 0 }, 0xFB1D}, {{SCIM_KEY_Multi_key, 0x10005b7, SCIM_KEY_hebrew_aleph, 0, 0 }, 0xFB2E}, {{SCIM_KEY_Multi_key, 0x10005b7, 0x10005f2, 0, 0 }, 0xFB1F}, {{SCIM_KEY_Multi_key, 0x10005b8, SCIM_KEY_hebrew_aleph, 0, 0 }, 0xFB2F}, {{SCIM_KEY_Multi_key, 0x10005b9, SCIM_KEY_hebrew_waw, 0, 0 }, 0xFB4B}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_aleph, 0, 0 }, 0xFB30}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_bet, 0, 0 }, 0xFB31}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_gimel, 0, 0 }, 0xFB32}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_dalet, 0, 0 }, 0xFB33}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_he, 0, 0 }, 0xFB34}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_waw, 0, 0 }, 0xFB35}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_zain, 0, 0 }, 0xFB36}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_tet, 0, 0 }, 0xFB38}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_yod, 0, 0 }, 0xFB39}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_finalkaph, 0, 0 }, 0xFB3A}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_kaph, 0, 0 }, 0xFB3B}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_lamed, 0, 0 }, 0xFB3C}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_mem, 0, 0 }, 0xFB3E}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_nun, 0, 0 }, 0xFB40}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_samech, 0, 0 }, 0xFB41}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_finalpe, 0, 0 }, 0xFB43}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_pe, 0, 0 }, 0xFB44}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_zade, 0, 0 }, 0xFB46}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_kuf, 0, 0 }, 0xFB47}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_resh, 0, 0 }, 0xFB48}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_shin, 0, 0 }, 0xFB49}, {{SCIM_KEY_Multi_key, 0x10005bc, SCIM_KEY_hebrew_taf, 0, 0 }, 0xFB4A}, {{SCIM_KEY_Multi_key, 0x10005bf, SCIM_KEY_hebrew_bet, 0, 0 }, 0xFB4C}, {{SCIM_KEY_Multi_key, 0x10005bf, SCIM_KEY_hebrew_kaph, 0, 0 }, 0xFB4D}, {{SCIM_KEY_Multi_key, 0x10005bf, SCIM_KEY_hebrew_pe, 0, 0 }, 0xFB4E}, {{SCIM_KEY_Multi_key, 0x10005c1, SCIM_KEY_hebrew_shin, 0, 0 }, 0xFB2A}, {{SCIM_KEY_Multi_key, 0x10005c1, 0x10005bc, SCIM_KEY_hebrew_shin, 0 }, 0xFB2C}, {{SCIM_KEY_Multi_key, 0x10005c1, 0x100fb49, 0, 0 }, 0xFB2C}, {{SCIM_KEY_Multi_key, 0x10005c2, SCIM_KEY_hebrew_shin, 0, 0 }, 0xFB2B}, {{SCIM_KEY_Multi_key, 0x10005c2, 0x10005bc, SCIM_KEY_hebrew_shin, 0 }, 0xFB2D}, {{SCIM_KEY_Multi_key, 0x10005c2, 0x100fb49, 0, 0 }, 0xFB2D}, {{SCIM_KEY_Multi_key, 0x1000653, SCIM_KEY_Arabic_alef, 0, 0 }, 0x0622}, {{SCIM_KEY_Multi_key, 0x1000654, SCIM_KEY_Arabic_alef, 0, 0 }, 0x0623}, {{SCIM_KEY_Multi_key, 0x1000654, SCIM_KEY_Arabic_waw, 0, 0 }, 0x0624}, {{SCIM_KEY_Multi_key, 0x1000654, SCIM_KEY_Arabic_yeh, 0, 0 }, 0x0626}, {{SCIM_KEY_Multi_key, 0x1000654, 0x10006c1, 0, 0 }, 0x06C2}, {{SCIM_KEY_Multi_key, 0x1000654, 0x10006d2, 0, 0 }, 0x06D3}, {{SCIM_KEY_Multi_key, 0x1000654, 0x10006d5, 0, 0 }, 0x06C0}, {{SCIM_KEY_Multi_key, 0x1000655, SCIM_KEY_Arabic_alef, 0, 0 }, 0x0625}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000915, 0, 0 }, 0x0958}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000916, 0, 0 }, 0x0959}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000917, 0, 0 }, 0x095A}, {{SCIM_KEY_Multi_key, 0x100093c, 0x100091c, 0, 0 }, 0x095B}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000921, 0, 0 }, 0x095C}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000922, 0, 0 }, 0x095D}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000928, 0, 0 }, 0x0929}, {{SCIM_KEY_Multi_key, 0x100093c, 0x100092b, 0, 0 }, 0x095E}, {{SCIM_KEY_Multi_key, 0x100093c, 0x100092f, 0, 0 }, 0x095F}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000930, 0, 0 }, 0x0931}, {{SCIM_KEY_Multi_key, 0x100093c, 0x1000933, 0, 0 }, 0x0934}, {{SCIM_KEY_Multi_key, 0x10009bc, 0x10009a1, 0, 0 }, 0x09DC}, {{SCIM_KEY_Multi_key, 0x10009bc, 0x10009a2, 0, 0 }, 0x09DD}, {{SCIM_KEY_Multi_key, 0x10009bc, 0x10009af, 0, 0 }, 0x09DF}, {{SCIM_KEY_Multi_key, 0x10009c7, 0x10009be, 0, 0 }, 0x09CB}, {{SCIM_KEY_Multi_key, 0x10009c7, 0x10009d7, 0, 0 }, 0x09CC}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a16, 0, 0 }, 0x0A59}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a17, 0, 0 }, 0x0A5A}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a1c, 0, 0 }, 0x0A5B}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a2b, 0, 0 }, 0x0A5E}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a32, 0, 0 }, 0x0A33}, {{SCIM_KEY_Multi_key, 0x1000a3c, 0x1000a38, 0, 0 }, 0x0A36}, {{SCIM_KEY_Multi_key, 0x1000b3c, 0x1000b21, 0, 0 }, 0x0B5C}, {{SCIM_KEY_Multi_key, 0x1000b3c, 0x1000b22, 0, 0 }, 0x0B5D}, {{SCIM_KEY_Multi_key, 0x1000b47, 0x1000b3e, 0, 0 }, 0x0B4B}, {{SCIM_KEY_Multi_key, 0x1000b47, 0x1000b56, 0, 0 }, 0x0B48}, {{SCIM_KEY_Multi_key, 0x1000b47, 0x1000b57, 0, 0 }, 0x0B4C}, {{SCIM_KEY_Multi_key, 0x1000bc6, 0x1000bbe, 0, 0 }, 0x0BCA}, {{SCIM_KEY_Multi_key, 0x1000bc6, 0x1000bd7, 0, 0 }, 0x0BCC}, {{SCIM_KEY_Multi_key, 0x1000bc7, 0x1000bbe, 0, 0 }, 0x0BCB}, {{SCIM_KEY_Multi_key, 0x1000bd7, 0x1000b92, 0, 0 }, 0x0B94}, {{SCIM_KEY_Multi_key, 0x1000c46, 0x1000c56, 0, 0 }, 0x0C48}, {{SCIM_KEY_Multi_key, 0x1000cbf, 0x1000cd5, 0, 0 }, 0x0CC0}, {{SCIM_KEY_Multi_key, 0x1000cc6, 0x1000cc2, 0, 0 }, 0x0CCA}, {{SCIM_KEY_Multi_key, 0x1000cc6, 0x1000cc2, 0x1000cd5, 0 }, 0x0CCB}, {{SCIM_KEY_Multi_key, 0x1000cc6, 0x1000cd5, 0, 0 }, 0x0CC7}, {{SCIM_KEY_Multi_key, 0x1000cc6, 0x1000cd6, 0, 0 }, 0x0CC8}, {{SCIM_KEY_Multi_key, 0x1000cca, 0x1000cd5, 0, 0 }, 0x0CCB}, {{SCIM_KEY_Multi_key, 0x1000d46, 0x1000d3e, 0, 0 }, 0x0D4A}, {{SCIM_KEY_Multi_key, 0x1000d46, 0x1000d57, 0, 0 }, 0x0D4C}, {{SCIM_KEY_Multi_key, 0x1000d47, 0x1000d3e, 0, 0 }, 0x0D4B}, {{SCIM_KEY_Multi_key, 0x1000dd9, 0x1000dca, 0, 0 }, 0x0DDA}, {{SCIM_KEY_Multi_key, 0x1000dd9, 0x1000dcf, 0, 0 }, 0x0DDC}, {{SCIM_KEY_Multi_key, 0x1000dd9, 0x1000dcf, 0x1000dca, 0 }, 0x0DDD}, {{SCIM_KEY_Multi_key, 0x1000dd9, 0x1000ddf, 0, 0 }, 0x0DDE}, {{SCIM_KEY_Multi_key, 0x1000ddc, 0x1000dca, 0, 0 }, 0x0DDD}, {{SCIM_KEY_Multi_key, 0x1000f71, 0x1000f72, 0, 0 }, 0x0F73}, {{SCIM_KEY_Multi_key, 0x1000f71, 0x1000f74, 0, 0 }, 0x0F75}, {{SCIM_KEY_Multi_key, 0x1000f71, 0x1000f80, 0, 0 }, 0x0F81}, {{SCIM_KEY_Multi_key, 0x1000f90, 0x1000fb5, 0, 0 }, 0x0FB9}, {{SCIM_KEY_Multi_key, 0x1000f92, 0x1000fb7, 0, 0 }, 0x0F93}, {{SCIM_KEY_Multi_key, 0x1000f9c, 0x1000fb7, 0, 0 }, 0x0F9D}, {{SCIM_KEY_Multi_key, 0x1000fa1, 0x1000fb7, 0, 0 }, 0x0FA2}, {{SCIM_KEY_Multi_key, 0x1000fa6, 0x1000fb7, 0, 0 }, 0x0FA7}, {{SCIM_KEY_Multi_key, 0x1000fab, 0x1000fb7, 0, 0 }, 0x0FAC}, {{SCIM_KEY_Multi_key, 0x1000fb2, 0x1000f80, 0, 0 }, 0x0F76}, {{SCIM_KEY_Multi_key, 0x1000fb3, 0x1000f80, 0, 0 }, 0x0F78}, {{SCIM_KEY_Multi_key, 0x1000fb5, 0x1000f40, 0, 0 }, 0x0F69}, {{SCIM_KEY_Multi_key, 0x1000fb7, 0x1000f42, 0, 0 }, 0x0F43}, {{SCIM_KEY_Multi_key, 0x1000fb7, 0x1000f4c, 0, 0 }, 0x0F4D}, {{SCIM_KEY_Multi_key, 0x1000fb7, 0x1000f51, 0, 0 }, 0x0F52}, {{SCIM_KEY_Multi_key, 0x1000fb7, 0x1000f56, 0, 0 }, 0x0F57}, {{SCIM_KEY_Multi_key, 0x1000fb7, 0x1000f5b, 0, 0 }, 0x0F5C}, {{SCIM_KEY_Multi_key, 0x100102e, 0x1001025, 0, 0 }, 0x1026}, {{SCIM_KEY_Multi_key, 0x1001100, 0x1001100, 0, 0 }, 0x1101}, {{SCIM_KEY_Multi_key, 0x1001102, 0x1001100, 0, 0 }, 0x1113}, {{SCIM_KEY_Multi_key, 0x1001102, 0x1001102, 0, 0 }, 0x1114}, {{SCIM_KEY_Multi_key, 0x1001102, 0x1001103, 0, 0 }, 0x1115}, {{SCIM_KEY_Multi_key, 0x1001102, 0x1001107, 0, 0 }, 0x1116}, {{SCIM_KEY_Multi_key, 0x1001103, 0x1001100, 0, 0 }, 0x1117}, {{SCIM_KEY_Multi_key, 0x1001103, 0x1001103, 0, 0 }, 0x1104}, {{SCIM_KEY_Multi_key, 0x1001105, 0x1001102, 0, 0 }, 0x1118}, {{SCIM_KEY_Multi_key, 0x1001105, 0x1001105, 0, 0 }, 0x1119}, {{SCIM_KEY_Multi_key, 0x1001105, 0x100110b, 0, 0 }, 0x111B}, {{SCIM_KEY_Multi_key, 0x1001105, 0x1001112, 0, 0 }, 0x111A}, {{SCIM_KEY_Multi_key, 0x1001106, 0x1001107, 0, 0 }, 0x111C}, {{SCIM_KEY_Multi_key, 0x1001106, 0x100110b, 0, 0 }, 0x111D}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001100, 0, 0 }, 0x111E}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001102, 0, 0 }, 0x111F}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001103, 0, 0 }, 0x1120}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001107, 0, 0 }, 0x1108}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001107, 0x100110b, 0 }, 0x112C}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0, 0 }, 0x1121}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0x1001100, 0 }, 0x1122}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0x1001103, 0 }, 0x1123}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0x1001107, 0 }, 0x1124}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0x1001109, 0 }, 0x1125}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001109, 0x100110c, 0 }, 0x1126}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100110a, 0, 0 }, 0x1125}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100110b, 0, 0 }, 0x112B}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100110c, 0, 0 }, 0x1127}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100110e, 0, 0 }, 0x1128}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001110, 0, 0 }, 0x1129}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001111, 0, 0 }, 0x112A}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100112b, 0, 0 }, 0x112C}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100112d, 0, 0 }, 0x1122}, {{SCIM_KEY_Multi_key, 0x1001107, 0x100112f, 0, 0 }, 0x1123}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001132, 0, 0 }, 0x1124}, {{SCIM_KEY_Multi_key, 0x1001107, 0x1001136, 0, 0 }, 0x1126}, {{SCIM_KEY_Multi_key, 0x1001108, 0x100110b, 0, 0 }, 0x112C}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001100, 0, 0 }, 0x112D}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001102, 0, 0 }, 0x112E}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001103, 0, 0 }, 0x112F}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001105, 0, 0 }, 0x1130}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001106, 0, 0 }, 0x1131}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001107, 0, 0 }, 0x1132}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001107, 0x1001100, 0 }, 0x1133}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001109, 0, 0 }, 0x110A}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001109, 0x1001109, 0 }, 0x1134}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100110a, 0, 0 }, 0x1134}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100110b, 0, 0 }, 0x1135}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100110c, 0, 0 }, 0x1136}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100110e, 0, 0 }, 0x1137}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100110f, 0, 0 }, 0x1138}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001110, 0, 0 }, 0x1139}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001111, 0, 0 }, 0x113A}, {{SCIM_KEY_Multi_key, 0x1001109, 0x1001112, 0, 0 }, 0x113B}, {{SCIM_KEY_Multi_key, 0x1001109, 0x100111e, 0, 0 }, 0x1133}, {{SCIM_KEY_Multi_key, 0x100110a, 0x1001109, 0, 0 }, 0x1134}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001100, 0, 0 }, 0x1141}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001103, 0, 0 }, 0x1142}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001106, 0, 0 }, 0x1143}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001107, 0, 0 }, 0x1144}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001109, 0, 0 }, 0x1145}, {{SCIM_KEY_Multi_key, 0x100110b, 0x100110b, 0, 0 }, 0x1147}, {{SCIM_KEY_Multi_key, 0x100110b, 0x100110c, 0, 0 }, 0x1148}, {{SCIM_KEY_Multi_key, 0x100110b, 0x100110e, 0, 0 }, 0x1149}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001110, 0, 0 }, 0x114A}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001111, 0, 0 }, 0x114B}, {{SCIM_KEY_Multi_key, 0x100110b, 0x1001140, 0, 0 }, 0x1146}, {{SCIM_KEY_Multi_key, 0x100110c, 0x100110b, 0, 0 }, 0x114D}, {{SCIM_KEY_Multi_key, 0x100110c, 0x100110c, 0, 0 }, 0x110D}, {{SCIM_KEY_Multi_key, 0x100110e, 0x100110f, 0, 0 }, 0x1152}, {{SCIM_KEY_Multi_key, 0x100110e, 0x1001112, 0, 0 }, 0x1153}, {{SCIM_KEY_Multi_key, 0x1001111, 0x1001107, 0, 0 }, 0x1156}, {{SCIM_KEY_Multi_key, 0x1001111, 0x100110b, 0, 0 }, 0x1157}, {{SCIM_KEY_Multi_key, 0x1001112, 0x1001112, 0, 0 }, 0x1158}, {{SCIM_KEY_Multi_key, 0x1001121, 0x1001100, 0, 0 }, 0x1122}, {{SCIM_KEY_Multi_key, 0x1001121, 0x1001103, 0, 0 }, 0x1123}, {{SCIM_KEY_Multi_key, 0x1001121, 0x1001107, 0, 0 }, 0x1124}, {{SCIM_KEY_Multi_key, 0x1001121, 0x1001109, 0, 0 }, 0x1125}, {{SCIM_KEY_Multi_key, 0x1001121, 0x100110c, 0, 0 }, 0x1126}, {{SCIM_KEY_Multi_key, 0x1001132, 0x1001100, 0, 0 }, 0x1133}, {{SCIM_KEY_Multi_key, 0x100113c, 0x100113c, 0, 0 }, 0x113D}, {{SCIM_KEY_Multi_key, 0x100113e, 0x100113e, 0, 0 }, 0x113F}, {{SCIM_KEY_Multi_key, 0x100114e, 0x100114e, 0, 0 }, 0x114F}, {{SCIM_KEY_Multi_key, 0x1001150, 0x1001150, 0, 0 }, 0x1151}, {{SCIM_KEY_Multi_key, 0x1001161, 0x1001169, 0, 0 }, 0x1176}, {{SCIM_KEY_Multi_key, 0x1001161, 0x100116e, 0, 0 }, 0x1177}, {{SCIM_KEY_Multi_key, 0x1001161, 0x1001175, 0, 0 }, 0x1162}, {{SCIM_KEY_Multi_key, 0x1001163, 0x1001169, 0, 0 }, 0x1178}, {{SCIM_KEY_Multi_key, 0x1001163, 0x100116d, 0, 0 }, 0x1179}, {{SCIM_KEY_Multi_key, 0x1001163, 0x1001175, 0, 0 }, 0x1164}, {{SCIM_KEY_Multi_key, 0x1001165, 0x1001169, 0, 0 }, 0x117A}, {{SCIM_KEY_Multi_key, 0x1001165, 0x100116e, 0, 0 }, 0x117B}, {{SCIM_KEY_Multi_key, 0x1001165, 0x1001173, 0, 0 }, 0x117C}, {{SCIM_KEY_Multi_key, 0x1001165, 0x1001175, 0, 0 }, 0x1166}, {{SCIM_KEY_Multi_key, 0x1001167, 0x1001169, 0, 0 }, 0x117D}, {{SCIM_KEY_Multi_key, 0x1001167, 0x100116e, 0, 0 }, 0x117E}, {{SCIM_KEY_Multi_key, 0x1001167, 0x1001175, 0, 0 }, 0x1168}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001161, 0, 0 }, 0x116A}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001161, 0x1001175, 0 }, 0x116B}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001162, 0, 0 }, 0x116B}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001165, 0, 0 }, 0x117F}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001166, 0, 0 }, 0x1180}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001168, 0, 0 }, 0x1181}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001169, 0, 0 }, 0x1182}, {{SCIM_KEY_Multi_key, 0x1001169, 0x100116e, 0, 0 }, 0x1183}, {{SCIM_KEY_Multi_key, 0x1001169, 0x1001175, 0, 0 }, 0x116C}, {{SCIM_KEY_Multi_key, 0x100116a, 0x1001175, 0, 0 }, 0x116B}, {{SCIM_KEY_Multi_key, 0x100116d, 0x1001163, 0, 0 }, 0x1184}, {{SCIM_KEY_Multi_key, 0x100116d, 0x1001164, 0, 0 }, 0x1185}, {{SCIM_KEY_Multi_key, 0x100116d, 0x1001167, 0, 0 }, 0x1186}, {{SCIM_KEY_Multi_key, 0x100116d, 0x1001169, 0, 0 }, 0x1187}, {{SCIM_KEY_Multi_key, 0x100116d, 0x1001175, 0, 0 }, 0x1188}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001161, 0, 0 }, 0x1189}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001162, 0, 0 }, 0x118A}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001165, 0, 0 }, 0x116F}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001165, 0x1001173, 0 }, 0x118B}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001165, 0x1001175, 0 }, 0x1170}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001166, 0, 0 }, 0x1170}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001168, 0, 0 }, 0x118C}, {{SCIM_KEY_Multi_key, 0x100116e, 0x100116e, 0, 0 }, 0x118D}, {{SCIM_KEY_Multi_key, 0x100116e, 0x1001175, 0, 0 }, 0x1171}, {{SCIM_KEY_Multi_key, 0x100116e, 0x100117c, 0, 0 }, 0x118B}, {{SCIM_KEY_Multi_key, 0x100116f, 0x1001173, 0, 0 }, 0x118B}, {{SCIM_KEY_Multi_key, 0x100116f, 0x1001175, 0, 0 }, 0x1170}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001161, 0, 0 }, 0x118E}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001165, 0, 0 }, 0x118F}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001166, 0, 0 }, 0x1190}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001167, 0, 0 }, 0x1191}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001168, 0, 0 }, 0x1192}, {{SCIM_KEY_Multi_key, 0x1001172, 0x100116e, 0, 0 }, 0x1193}, {{SCIM_KEY_Multi_key, 0x1001172, 0x1001175, 0, 0 }, 0x1194}, {{SCIM_KEY_Multi_key, 0x1001173, 0x100116e, 0, 0 }, 0x1195}, {{SCIM_KEY_Multi_key, 0x1001173, 0x1001173, 0, 0 }, 0x1196}, {{SCIM_KEY_Multi_key, 0x1001173, 0x1001175, 0, 0 }, 0x1174}, {{SCIM_KEY_Multi_key, 0x1001174, 0x100116e, 0, 0 }, 0x1197}, {{SCIM_KEY_Multi_key, 0x1001175, 0x1001161, 0, 0 }, 0x1198}, {{SCIM_KEY_Multi_key, 0x1001175, 0x1001163, 0, 0 }, 0x1199}, {{SCIM_KEY_Multi_key, 0x1001175, 0x1001169, 0, 0 }, 0x119A}, {{SCIM_KEY_Multi_key, 0x1001175, 0x100116e, 0, 0 }, 0x119B}, {{SCIM_KEY_Multi_key, 0x1001175, 0x1001173, 0, 0 }, 0x119C}, {{SCIM_KEY_Multi_key, 0x1001175, 0x100119e, 0, 0 }, 0x119D}, {{SCIM_KEY_Multi_key, 0x100119e, 0x1001165, 0, 0 }, 0x119F}, {{SCIM_KEY_Multi_key, 0x100119e, 0x100116e, 0, 0 }, 0x11A0}, {{SCIM_KEY_Multi_key, 0x100119e, 0x1001175, 0, 0 }, 0x11A1}, {{SCIM_KEY_Multi_key, 0x100119e, 0x100119e, 0, 0 }, 0x11A2}, {{SCIM_KEY_Multi_key, 0x10011a8, 0x10011a8, 0, 0 }, 0x11A9}, {{SCIM_KEY_Multi_key, 0x10011a8, 0x10011af, 0, 0 }, 0x11C3}, {{SCIM_KEY_Multi_key, 0x10011a8, 0x10011ba, 0, 0 }, 0x11AA}, {{SCIM_KEY_Multi_key, 0x10011a8, 0x10011ba, 0x10011a8, 0 }, 0x11C4}, {{SCIM_KEY_Multi_key, 0x10011a8, 0x10011e7, 0, 0 }, 0x11C4}, {{SCIM_KEY_Multi_key, 0x10011aa, 0x10011a8, 0, 0 }, 0x11C4}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011a8, 0, 0 }, 0x11C5}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011ae, 0, 0 }, 0x11C6}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011ba, 0, 0 }, 0x11C7}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011bd, 0, 0 }, 0x11AC}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011c0, 0, 0 }, 0x11C9}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011c2, 0, 0 }, 0x11AD}, {{SCIM_KEY_Multi_key, 0x10011ab, 0x10011eb, 0, 0 }, 0x11C8}, {{SCIM_KEY_Multi_key, 0x10011ae, 0x10011a8, 0, 0 }, 0x11CA}, {{SCIM_KEY_Multi_key, 0x10011ae, 0x10011af, 0, 0 }, 0x11CB}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011a8, 0, 0 }, 0x11B0}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011a8, 0x10011ba, 0 }, 0x11CC}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011aa, 0, 0 }, 0x11CC}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011ab, 0, 0 }, 0x11CD}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011ae, 0, 0 }, 0x11CE}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011ae, 0x10011c2, 0 }, 0x11CF}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011af, 0, 0 }, 0x11D0}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b7, 0, 0 }, 0x11B1}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b7, 0x10011a8, 0 }, 0x11D1}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b7, 0x10011ba, 0 }, 0x11D2}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b8, 0, 0 }, 0x11B2}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b8, 0x10011ba, 0 }, 0x11D3}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b8, 0x10011bc, 0 }, 0x11D5}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b8, 0x10011c2, 0 }, 0x11D4}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011b9, 0, 0 }, 0x11D3}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011ba, 0, 0 }, 0x11B3}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011ba, 0x10011ba, 0 }, 0x11D6}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011bb, 0, 0 }, 0x11D6}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011bf, 0, 0 }, 0x11D8}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011c0, 0, 0 }, 0x11B4}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011c1, 0, 0 }, 0x11B5}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011c2, 0, 0 }, 0x11B6}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011da, 0, 0 }, 0x11D1}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011dd, 0, 0 }, 0x11D2}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011e5, 0, 0 }, 0x11D4}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011e6, 0, 0 }, 0x11D5}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011eb, 0, 0 }, 0x11D7}, {{SCIM_KEY_Multi_key, 0x10011af, 0x10011f9, 0, 0 }, 0x11D9}, {{SCIM_KEY_Multi_key, 0x10011b0, 0x10011ba, 0, 0 }, 0x11CC}, {{SCIM_KEY_Multi_key, 0x10011b1, 0x10011a8, 0, 0 }, 0x11D1}, {{SCIM_KEY_Multi_key, 0x10011b1, 0x10011ba, 0, 0 }, 0x11D2}, {{SCIM_KEY_Multi_key, 0x10011b2, 0x10011ba, 0, 0 }, 0x11D3}, {{SCIM_KEY_Multi_key, 0x10011b2, 0x10011bc, 0, 0 }, 0x11D5}, {{SCIM_KEY_Multi_key, 0x10011b2, 0x10011c2, 0, 0 }, 0x11D4}, {{SCIM_KEY_Multi_key, 0x10011b3, 0x10011ba, 0, 0 }, 0x11D6}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011a8, 0, 0 }, 0x11DA}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011af, 0, 0 }, 0x11DB}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011b8, 0, 0 }, 0x11DC}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011ba, 0, 0 }, 0x11DD}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011ba, 0x10011ba, 0 }, 0x11DE}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011bb, 0, 0 }, 0x11DE}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011bc, 0, 0 }, 0x11E2}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011be, 0, 0 }, 0x11E0}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011c2, 0, 0 }, 0x11E1}, {{SCIM_KEY_Multi_key, 0x10011b7, 0x10011eb, 0, 0 }, 0x11DF}, {{SCIM_KEY_Multi_key, 0x10011b8, 0x10011af, 0, 0 }, 0x11E3}, {{SCIM_KEY_Multi_key, 0x10011b8, 0x10011ba, 0, 0 }, 0x11B9}, {{SCIM_KEY_Multi_key, 0x10011b8, 0x10011bc, 0, 0 }, 0x11E6}, {{SCIM_KEY_Multi_key, 0x10011b8, 0x10011c1, 0, 0 }, 0x11E4}, {{SCIM_KEY_Multi_key, 0x10011b8, 0x10011c2, 0, 0 }, 0x11E5}, {{SCIM_KEY_Multi_key, 0x10011ba, 0x10011a8, 0, 0 }, 0x11E7}, {{SCIM_KEY_Multi_key, 0x10011ba, 0x10011ae, 0, 0 }, 0x11E8}, {{SCIM_KEY_Multi_key, 0x10011ba, 0x10011af, 0, 0 }, 0x11E9}, {{SCIM_KEY_Multi_key, 0x10011ba, 0x10011b8, 0, 0 }, 0x11EA}, {{SCIM_KEY_Multi_key, 0x10011ba, 0x10011ba, 0, 0 }, 0x11BB}, {{SCIM_KEY_Multi_key, 0x10011bc, 0x10011a8, 0, 0 }, 0x11EC}, {{SCIM_KEY_Multi_key, 0x10011bc, 0x10011a8, 0x10011a8, 0 }, 0x11ED}, {{SCIM_KEY_Multi_key, 0x10011bc, 0x10011a9, 0, 0 }, 0x11ED}, {{SCIM_KEY_Multi_key, 0x10011bc, 0x10011bc, 0, 0 }, 0x11EE}, {{SCIM_KEY_Multi_key, 0x10011bc, 0x10011bf, 0, 0 }, 0x11EF}, {{SCIM_KEY_Multi_key, 0x10011c1, 0x10011b8, 0, 0 }, 0x11F3}, {{SCIM_KEY_Multi_key, 0x10011c1, 0x10011bc, 0, 0 }, 0x11F4}, {{SCIM_KEY_Multi_key, 0x10011c2, 0x10011ab, 0, 0 }, 0x11F5}, {{SCIM_KEY_Multi_key, 0x10011c2, 0x10011af, 0, 0 }, 0x11F6}, {{SCIM_KEY_Multi_key, 0x10011c2, 0x10011b7, 0, 0 }, 0x11F7}, {{SCIM_KEY_Multi_key, 0x10011c2, 0x10011b8, 0, 0 }, 0x11F8}, {{SCIM_KEY_Multi_key, 0x10011ce, 0x10011c2, 0, 0 }, 0x11CF}, {{SCIM_KEY_Multi_key, 0x10011dd, 0x10011ba, 0, 0 }, 0x11DE}, {{SCIM_KEY_Multi_key, 0x10011ec, 0x10011a8, 0, 0 }, 0x11ED}, {{SCIM_KEY_Multi_key, 0x10011f0, 0x10011ba, 0, 0 }, 0x11F1}, {{SCIM_KEY_Multi_key, 0x10011f0, 0x10011eb, 0, 0 }, 0x11F2}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_apostrophe, 0, 0 }, 0x1FCE}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_grave, 0, 0 }, 0x1FCD}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_asciitilde, 0, 0 }, 0x1FCF}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_acute, 0, 0 }, 0x1FCE}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_combining_grave, 0, 0 }, 0x1FCD}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_combining_acute, 0, 0 }, 0x1FCE}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_dead_grave, 0, 0 }, 0x1FCD}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_dead_acute, 0, 0 }, 0x1FCE}, {{SCIM_KEY_Multi_key, 0x1001fbf, SCIM_KEY_dead_tilde, 0, 0 }, 0x1FCF}, {{SCIM_KEY_Multi_key, 0x1001fbf, 0x1000342, 0, 0 }, 0x1FCF}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_apostrophe, 0, 0 }, 0x1FDE}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_grave, 0, 0 }, 0x1FDD}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_asciitilde, 0, 0 }, 0x1FDF}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_acute, 0, 0 }, 0x1FDE}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_combining_grave, 0, 0 }, 0x1FDD}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_combining_acute, 0, 0 }, 0x1FDE}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_dead_grave, 0, 0 }, 0x1FDD}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_dead_acute, 0, 0 }, 0x1FDE}, {{SCIM_KEY_Multi_key, 0x1001ffe, SCIM_KEY_dead_tilde, 0, 0 }, 0x1FDF}, {{SCIM_KEY_Multi_key, 0x1001ffe, 0x1000342, 0, 0 }, 0x1FDF}, {{SCIM_KEY_Multi_key, 0x1002203, 0x1000338, 0, 0 }, 0x2204}, {{SCIM_KEY_Multi_key, 0x1002208, 0x1000338, 0, 0 }, 0x2209}, {{SCIM_KEY_Multi_key, 0x100220b, 0x1000338, 0, 0 }, 0x220C}, {{SCIM_KEY_Multi_key, 0x1002223, 0x1000338, 0, 0 }, 0x2224}, {{SCIM_KEY_Multi_key, 0x1002225, 0x1000338, 0, 0 }, 0x2226}, {{SCIM_KEY_Multi_key, 0x100223c, 0x1000338, 0, 0 }, 0x2241}, {{SCIM_KEY_Multi_key, 0x1002243, 0x1000338, 0, 0 }, 0x2244}, {{SCIM_KEY_Multi_key, 0x1002248, 0x1000338, 0, 0 }, 0x2249}, {{SCIM_KEY_Multi_key, 0x100224d, 0x1000338, 0, 0 }, 0x226D}, {{SCIM_KEY_Multi_key, 0x1002272, 0x1000338, 0, 0 }, 0x2274}, {{SCIM_KEY_Multi_key, 0x1002273, 0x1000338, 0, 0 }, 0x2275}, {{SCIM_KEY_Multi_key, 0x1002276, 0x1000338, 0, 0 }, 0x2278}, {{SCIM_KEY_Multi_key, 0x1002277, 0x1000338, 0, 0 }, 0x2279}, {{SCIM_KEY_Multi_key, 0x100227a, 0x1000338, 0, 0 }, 0x2280}, {{SCIM_KEY_Multi_key, 0x100227b, 0x1000338, 0, 0 }, 0x2281}, {{SCIM_KEY_Multi_key, 0x100227c, 0x1000338, 0, 0 }, 0x22E0}, {{SCIM_KEY_Multi_key, 0x100227d, 0x1000338, 0, 0 }, 0x22E1}, {{SCIM_KEY_Multi_key, 0x1002286, 0x1000338, 0, 0 }, 0x2288}, {{SCIM_KEY_Multi_key, 0x1002287, 0x1000338, 0, 0 }, 0x2289}, {{SCIM_KEY_Multi_key, 0x1002291, 0x1000338, 0, 0 }, 0x22E2}, {{SCIM_KEY_Multi_key, 0x1002292, 0x1000338, 0, 0 }, 0x22E3}, {{SCIM_KEY_Multi_key, 0x10022a8, 0x1000338, 0, 0 }, 0x22AD}, {{SCIM_KEY_Multi_key, 0x10022a9, 0x1000338, 0, 0 }, 0x22AE}, {{SCIM_KEY_Multi_key, 0x10022ab, 0x1000338, 0, 0 }, 0x22AF}, {{SCIM_KEY_Multi_key, 0x10022b2, 0x1000338, 0, 0 }, 0x22EA}, {{SCIM_KEY_Multi_key, 0x10022b3, 0x1000338, 0, 0 }, 0x22EB}, {{SCIM_KEY_Multi_key, 0x10022b4, 0x1000338, 0, 0 }, 0x22EC}, {{SCIM_KEY_Multi_key, 0x10022b5, 0x1000338, 0, 0 }, 0x22ED}, {{SCIM_KEY_Multi_key, 0x1002add, 0x1000338, 0, 0 }, 0x2ADC}, {{0x100030f, SCIM_KEY_A, 0, 0, 0 }, 0x0200}, {{0x100030f, SCIM_KEY_E, 0, 0, 0 }, 0x0204}, {{0x100030f, SCIM_KEY_I, 0, 0, 0 }, 0x0208}, {{0x100030f, SCIM_KEY_O, 0, 0, 0 }, 0x020C}, {{0x100030f, SCIM_KEY_R, 0, 0, 0 }, 0x0210}, {{0x100030f, SCIM_KEY_U, 0, 0, 0 }, 0x0214}, {{0x100030f, SCIM_KEY_a, 0, 0, 0 }, 0x0201}, {{0x100030f, SCIM_KEY_e, 0, 0, 0 }, 0x0205}, {{0x100030f, SCIM_KEY_i, 0, 0, 0 }, 0x0209}, {{0x100030f, SCIM_KEY_o, 0, 0, 0 }, 0x020D}, {{0x100030f, SCIM_KEY_r, 0, 0, 0 }, 0x0211}, {{0x100030f, SCIM_KEY_u, 0, 0, 0 }, 0x0215}, {{0x100030f, 0x1000474, 0, 0, 0 }, 0x0476}, {{0x100030f, 0x1000475, 0, 0, 0 }, 0x0477}, {{0x1000311, SCIM_KEY_A, 0, 0, 0 }, 0x0202}, {{0x1000311, SCIM_KEY_E, 0, 0, 0 }, 0x0206}, {{0x1000311, SCIM_KEY_I, 0, 0, 0 }, 0x020A}, {{0x1000311, SCIM_KEY_O, 0, 0, 0 }, 0x020E}, {{0x1000311, SCIM_KEY_R, 0, 0, 0 }, 0x0212}, {{0x1000311, SCIM_KEY_U, 0, 0, 0 }, 0x0216}, {{0x1000311, SCIM_KEY_a, 0, 0, 0 }, 0x0203}, {{0x1000311, SCIM_KEY_e, 0, 0, 0 }, 0x0207}, {{0x1000311, SCIM_KEY_i, 0, 0, 0 }, 0x020B}, {{0x1000311, SCIM_KEY_o, 0, 0, 0 }, 0x020F}, {{0x1000311, SCIM_KEY_r, 0, 0, 0 }, 0x0213}, {{0x1000311, SCIM_KEY_u, 0, 0, 0 }, 0x0217}, {{0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1F08}, {{0x1000313, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x1F18}, {{0x1000313, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x1F28}, {{0x1000313, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1F38}, {{0x1000313, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x1F48}, {{0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x1F68}, {{0x1000313, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1F00}, {{0x1000313, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x1F10}, {{0x1000313, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1F20}, {{0x1000313, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1F30}, {{0x1000313, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x1F40}, {{0x1000313, SCIM_KEY_Greek_rho, 0, 0, 0 }, 0x1FE4}, {{0x1000313, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1F50}, {{0x1000313, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1F60}, {{0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0, 0 }, 0x1F09}, {{0x1000314, SCIM_KEY_Greek_EPSILON, 0, 0, 0 }, 0x1F19}, {{0x1000314, SCIM_KEY_Greek_ETA, 0, 0, 0 }, 0x1F29}, {{0x1000314, SCIM_KEY_Greek_IOTA, 0, 0, 0 }, 0x1F39}, {{0x1000314, SCIM_KEY_Greek_OMICRON, 0, 0, 0 }, 0x1F49}, {{0x1000314, SCIM_KEY_Greek_RHO, 0, 0, 0 }, 0x1FEC}, {{0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0, 0 }, 0x1F59}, {{0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0, 0 }, 0x1F69}, {{0x1000314, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1F01}, {{0x1000314, SCIM_KEY_Greek_epsilon, 0, 0, 0 }, 0x1F11}, {{0x1000314, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1F21}, {{0x1000314, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1F31}, {{0x1000314, SCIM_KEY_Greek_omicron, 0, 0, 0 }, 0x1F41}, {{0x1000314, SCIM_KEY_Greek_rho, 0, 0, 0 }, 0x1FE5}, {{0x1000314, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1F51}, {{0x1000314, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1F61}, {{0x1000324, SCIM_KEY_U, 0, 0, 0 }, 0x1E72}, {{0x1000324, SCIM_KEY_u, 0, 0, 0 }, 0x1E73}, {{0x1000325, SCIM_KEY_A, 0, 0, 0 }, 0x1E00}, {{0x1000325, SCIM_KEY_a, 0, 0, 0 }, 0x1E01}, {{0x1000326, SCIM_KEY_S, 0, 0, 0 }, 0x0218}, {{0x1000326, SCIM_KEY_T, 0, 0, 0 }, 0x021A}, {{0x1000326, SCIM_KEY_s, 0, 0, 0 }, 0x0219}, {{0x1000326, SCIM_KEY_t, 0, 0, 0 }, 0x021B}, {{0x100032d, SCIM_KEY_D, 0, 0, 0 }, 0x1E12}, {{0x100032d, SCIM_KEY_E, 0, 0, 0 }, 0x1E18}, {{0x100032d, SCIM_KEY_L, 0, 0, 0 }, 0x1E3C}, {{0x100032d, SCIM_KEY_N, 0, 0, 0 }, 0x1E4A}, {{0x100032d, SCIM_KEY_T, 0, 0, 0 }, 0x1E70}, {{0x100032d, SCIM_KEY_U, 0, 0, 0 }, 0x1E76}, {{0x100032d, SCIM_KEY_d, 0, 0, 0 }, 0x1E13}, {{0x100032d, SCIM_KEY_e, 0, 0, 0 }, 0x1E19}, {{0x100032d, SCIM_KEY_l, 0, 0, 0 }, 0x1E3D}, {{0x100032d, SCIM_KEY_n, 0, 0, 0 }, 0x1E4B}, {{0x100032d, SCIM_KEY_t, 0, 0, 0 }, 0x1E71}, {{0x100032d, SCIM_KEY_u, 0, 0, 0 }, 0x1E77}, {{0x100032e, SCIM_KEY_H, 0, 0, 0 }, 0x1E2A}, {{0x100032e, SCIM_KEY_h, 0, 0, 0 }, 0x1E2B}, {{0x1000330, SCIM_KEY_E, 0, 0, 0 }, 0x1E1A}, {{0x1000330, SCIM_KEY_I, 0, 0, 0 }, 0x1E2C}, {{0x1000330, SCIM_KEY_U, 0, 0, 0 }, 0x1E74}, {{0x1000330, SCIM_KEY_e, 0, 0, 0 }, 0x1E1B}, {{0x1000330, SCIM_KEY_i, 0, 0, 0 }, 0x1E2D}, {{0x1000330, SCIM_KEY_u, 0, 0, 0 }, 0x1E75}, {{0x1000331, SCIM_KEY_B, 0, 0, 0 }, 0x1E06}, {{0x1000331, SCIM_KEY_D, 0, 0, 0 }, 0x1E0E}, {{0x1000331, SCIM_KEY_K, 0, 0, 0 }, 0x1E34}, {{0x1000331, SCIM_KEY_L, 0, 0, 0 }, 0x1E3A}, {{0x1000331, SCIM_KEY_N, 0, 0, 0 }, 0x1E48}, {{0x1000331, SCIM_KEY_R, 0, 0, 0 }, 0x1E5E}, {{0x1000331, SCIM_KEY_T, 0, 0, 0 }, 0x1E6E}, {{0x1000331, SCIM_KEY_Z, 0, 0, 0 }, 0x1E94}, {{0x1000331, SCIM_KEY_b, 0, 0, 0 }, 0x1E07}, {{0x1000331, SCIM_KEY_d, 0, 0, 0 }, 0x1E0F}, {{0x1000331, SCIM_KEY_h, 0, 0, 0 }, 0x1E96}, {{0x1000331, SCIM_KEY_k, 0, 0, 0 }, 0x1E35}, {{0x1000331, SCIM_KEY_l, 0, 0, 0 }, 0x1E3B}, {{0x1000331, SCIM_KEY_n, 0, 0, 0 }, 0x1E49}, {{0x1000331, SCIM_KEY_r, 0, 0, 0 }, 0x1E5F}, {{0x1000331, SCIM_KEY_t, 0, 0, 0 }, 0x1E6F}, {{0x1000331, SCIM_KEY_z, 0, 0, 0 }, 0x1E95}, {{0x1000342, SCIM_KEY_Greek_iotadieresis, 0, 0, 0 }, 0x1FD7}, {{0x1000342, SCIM_KEY_Greek_upsilondieresis, 0, 0, 0 }, 0x1FE7}, {{0x1000342, SCIM_KEY_Greek_alpha, 0, 0, 0 }, 0x1FB6}, {{0x1000342, SCIM_KEY_Greek_eta, 0, 0, 0 }, 0x1FC6}, {{0x1000342, SCIM_KEY_Greek_iota, 0, 0, 0 }, 0x1FD6}, {{0x1000342, SCIM_KEY_Greek_upsilon, 0, 0, 0 }, 0x1FE6}, {{0x1000342, SCIM_KEY_Greek_omega, 0, 0, 0 }, 0x1FF6}, {{0x1000342, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_iota, 0, 0 }, 0x1FD7}, {{0x1000342, SCIM_KEY_dead_diaeresis, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1FE7}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_iota, 0 }, 0x1FD7}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_quotedbl, SCIM_KEY_Greek_upsilon, 0 }, 0x1FE7}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0F}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_ETA, 0 }, 0x1F2F}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3F}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_UPSILON, 0 }, 0x1F5F}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6F}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_alpha, 0 }, 0x1F07}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_eta, 0 }, 0x1F27}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_iota, 0 }, 0x1F37}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_upsilon, 0 }, 0x1F57}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenleft, SCIM_KEY_Greek_omega, 0 }, 0x1F67}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ALPHA, 0 }, 0x1F0E}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_ETA, 0 }, 0x1F2E}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_IOTA, 0 }, 0x1F3E}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_OMEGA, 0 }, 0x1F6E}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_alpha, 0 }, 0x1F06}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_eta, 0 }, 0x1F26}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_iota, 0 }, 0x1F36}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_upsilon, 0 }, 0x1F56}, {{0x1000342, SCIM_KEY_Multi_key, SCIM_KEY_parenright, SCIM_KEY_Greek_omega, 0 }, 0x1F66}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0E}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2E}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3E}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6E}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F06}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F26}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F36}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F56}, {{0x1000342, 0x1000313, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F66}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_ALPHA, 0, 0 }, 0x1F0F}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_ETA, 0, 0 }, 0x1F2F}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_IOTA, 0, 0 }, 0x1F3F}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_UPSILON, 0, 0 }, 0x1F5F}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_OMEGA, 0, 0 }, 0x1F6F}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_alpha, 0, 0 }, 0x1F07}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_eta, 0, 0 }, 0x1F27}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_iota, 0, 0 }, 0x1F37}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_upsilon, 0, 0 }, 0x1F57}, {{0x1000342, 0x1000314, SCIM_KEY_Greek_omega, 0, 0 }, 0x1F67}, {{0x1000342, 0x1001f00, 0, 0, 0 }, 0x1F06}, {{0x1000342, 0x1001f01, 0, 0, 0 }, 0x1F07}, {{0x1000342, 0x1001f08, 0, 0, 0 }, 0x1F0E}, {{0x1000342, 0x1001f09, 0, 0, 0 }, 0x1F0F}, {{0x1000342, 0x1001f20, 0, 0, 0 }, 0x1F26}, {{0x1000342, 0x1001f21, 0, 0, 0 }, 0x1F27}, {{0x1000342, 0x1001f28, 0, 0, 0 }, 0x1F2E}, {{0x1000342, 0x1001f29, 0, 0, 0 }, 0x1F2F}, {{0x1000342, 0x1001f30, 0, 0, 0 }, 0x1F36}, {{0x1000342, 0x1001f31, 0, 0, 0 }, 0x1F37}, {{0x1000342, 0x1001f38, 0, 0, 0 }, 0x1F3E}, {{0x1000342, 0x1001f39, 0, 0, 0 }, 0x1F3F}, {{0x1000342, 0x1001f50, 0, 0, 0 }, 0x1F56}, {{0x1000342, 0x1001f51, 0, 0, 0 }, 0x1F57}, {{0x1000342, 0x1001f59, 0, 0, 0 }, 0x1F5F}, {{0x1000342, 0x1001f60, 0, 0, 0 }, 0x1F66}, {{0x1000342, 0x1001f61, 0, 0, 0 }, 0x1F67}, {{0x1000342, 0x1001f68, 0, 0, 0 }, 0x1F6E}, {{0x1000342, 0x1001f69, 0, 0, 0 }, 0x1F6F}, scim-master/src/scim_config_agent.cpp000066400000000000000000000355231415264260100202440ustar00rootroot00000000000000/* * Smart Common Input Method * * Copyright (c) 2002-2005 James Su * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * * $Id: scim_config_agent.cpp,v 1.10 2005/07/03 08:36:42 suzhe Exp $ * */ #define Uses_STL_IOSTREAM #define Uses_C_LOCALE #define Uses_SCIM_CONFIG_MODULE #define Uses_SCIM_HELPER #define Uses_SCIM_CONFIG_PATH #include "scim_private.h" #include #include using namespace scim; using std::cout; using std::cerr; using std::endl; enum DataType { DATA_TYPE_STRING, DATA_TYPE_INT, DATA_TYPE_DOUBLE, DATA_TYPE_BOOL, DATA_TYPE_STRING_LIST, DATA_TYPE_INT_LIST }; enum Command { DO_NOTHING, GET_DATA, SET_DATA, DEL_KEY }; static String trim_blank (const String &str) { String::size_type begin, len; begin = str.find_first_not_of (" \t\n\v"); if (begin == String::npos) return String (); len = str.find_last_not_of (" \t\n\v") - begin + 1; return str.substr (begin, len); } static String get_param_portion (const String &str) { String::size_type begin = str.find_first_of (" \t\n\v="); if (begin == String::npos) return str; return str.substr (0, begin); } static String get_value_portion (const String &str) { String::size_type begin = str.find_first_of ("="); if (begin == String::npos || (begin + 1) == str.length ()) return String (""); return trim_blank (str.substr (begin + 1, String::npos)); } int main (int argc, char *argv []) { static ConfigModule config_module; ConfigPointer config; std::vector config_list; String def_config; String key; String value; String display; DataType type = DATA_TYPE_STRING; Command cmd = DO_NOTHING; bool reload = false; bool global = false; int i; char *p = getenv ("DISPLAY"); if (p) display = String (p); //get modules list scim_get_config_module_list (config_list); //Use simple Config module as default if available. if (config_list.size ()) { def_config = scim_global_config_read (SCIM_GLOBAL_CONFIG_DEFAULT_CONFIG_MODULE, String ("simple")); if (std::find (config_list.begin (), config_list.end (), def_config) == config_list.end ()) def_config = config_list [0]; } else { cerr << "No config module found.\n"; return -1; } // parse command options i = 0; while (i= argc) break; if (String ("-h") == argv [i] || String ("--help") == argv [i]) { cout << "Usage: " << argv [0] << "