From 6d33918b6b8e90f80b3ea78b659fea155b2cb1e0 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Sun, 3 May 2009 21:31:17 +0530 Subject: initial version of ibus-sulekha --- input-methods/ibus-sulekha | 1 - input-methods/ibus-sulekha/.gitignore | 36 + input-methods/ibus-sulekha/AUTHORS | 2 + input-methods/ibus-sulekha/COPYING | 339 +++++ input-methods/ibus-sulekha/ChangeLog | 0 input-methods/ibus-sulekha/Makefile.am | 63 + input-methods/ibus-sulekha/NEWS | 0 input-methods/ibus-sulekha/README | 1 + input-methods/ibus-sulekha/autogen.sh | 11 + input-methods/ibus-sulekha/configure.ac | 77 + input-methods/ibus-sulekha/engine/Makefile.am | 63 + input-methods/ibus-sulekha/engine/autocomplete.py | 53 + input-methods/ibus-sulekha/engine/factory.py | 60 + .../ibus-sulekha/engine/ibus-engine-sulekha | 29 + .../ibus-sulekha/engine/ibus-engine-sulekha.in | 29 + input-methods/ibus-sulekha/engine/keymap.py | 65 + .../ibus-sulekha/engine/keymaps/inscript_ml_IN | 95 ++ .../ibus-sulekha/engine/keymaps/swanalekha_ml_IN | 1578 ++++++++++++++++++++ input-methods/ibus-sulekha/engine/main.py | 96 ++ input-methods/ibus-sulekha/engine/sulekha.py | 223 +++ input-methods/ibus-sulekha/engine/sulekha.xml | 27 + input-methods/ibus-sulekha/engine/sulekha.xml.in | 27 + .../ibus-sulekha/engine/sulekha.xml.in.in | 27 + input-methods/ibus-sulekha/engine/trainer.py | 133 ++ input-methods/ibus-sulekha/icons/Makefile.am | 29 + input-methods/ibus-sulekha/icons/ibus-sulekha.svg | 81 + input-methods/ibus-sulekha/icons/sulekha.png | Bin 0 -> 1794 bytes 27 files changed, 3144 insertions(+), 1 deletion(-) delete mode 160000 input-methods/ibus-sulekha create mode 100644 input-methods/ibus-sulekha/.gitignore create mode 100644 input-methods/ibus-sulekha/AUTHORS create mode 100644 input-methods/ibus-sulekha/COPYING create mode 100644 input-methods/ibus-sulekha/ChangeLog create mode 100644 input-methods/ibus-sulekha/Makefile.am create mode 100644 input-methods/ibus-sulekha/NEWS create mode 100644 input-methods/ibus-sulekha/README create mode 100755 input-methods/ibus-sulekha/autogen.sh create mode 100644 input-methods/ibus-sulekha/configure.ac create mode 100644 input-methods/ibus-sulekha/engine/Makefile.am create mode 100644 input-methods/ibus-sulekha/engine/autocomplete.py create mode 100644 input-methods/ibus-sulekha/engine/factory.py create mode 100644 input-methods/ibus-sulekha/engine/ibus-engine-sulekha create mode 100644 input-methods/ibus-sulekha/engine/ibus-engine-sulekha.in create mode 100644 input-methods/ibus-sulekha/engine/keymap.py create mode 100644 input-methods/ibus-sulekha/engine/keymaps/inscript_ml_IN create mode 100644 input-methods/ibus-sulekha/engine/keymaps/swanalekha_ml_IN create mode 100644 input-methods/ibus-sulekha/engine/main.py create mode 100644 input-methods/ibus-sulekha/engine/sulekha.py create mode 100644 input-methods/ibus-sulekha/engine/sulekha.xml create mode 100644 input-methods/ibus-sulekha/engine/sulekha.xml.in create mode 100644 input-methods/ibus-sulekha/engine/sulekha.xml.in.in create mode 100644 input-methods/ibus-sulekha/engine/trainer.py create mode 100644 input-methods/ibus-sulekha/icons/Makefile.am create mode 100644 input-methods/ibus-sulekha/icons/ibus-sulekha.svg create mode 100644 input-methods/ibus-sulekha/icons/sulekha.png diff --git a/input-methods/ibus-sulekha b/input-methods/ibus-sulekha deleted file mode 160000 index 1d7c4cc..0000000 --- a/input-methods/ibus-sulekha +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1d7c4cc697322fc8cbd21f3fe0b49cd41c563dde diff --git a/input-methods/ibus-sulekha/.gitignore b/input-methods/ibus-sulekha/.gitignore new file mode 100644 index 0000000..64ff685 --- /dev/null +++ b/input-methods/ibus-sulekha/.gitignore @@ -0,0 +1,36 @@ +*.pyc +*.la +*.lo +*.loT +*.o +*.so +*~ +tags +Makefile.qmake +Makefile +Makefile.in +.deps +.libs +ABOUT-NLS +INSTALL +aclocal.m4 +autom4te.cache +compile +config.guess +config.h +config.h.in +config.log +config.rpath +config.status +config.sub +configure +depcomp +gtk-doc.make +install-sh +libtool +ltmain.sh +missing +stamp-h1 +py-compile +ibus-pinyin*.tar.* +ibus-pinyin.spec diff --git a/input-methods/ibus-sulekha/AUTHORS b/input-methods/ibus-sulekha/AUTHORS new file mode 100644 index 0000000..91c9b57 --- /dev/null +++ b/input-methods/ibus-sulekha/AUTHORS @@ -0,0 +1,2 @@ + +Santhosh Thottingal diff --git a/input-methods/ibus-sulekha/COPYING b/input-methods/ibus-sulekha/COPYING new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/input-methods/ibus-sulekha/COPYING @@ -0,0 +1,339 @@ + 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. diff --git a/input-methods/ibus-sulekha/ChangeLog b/input-methods/ibus-sulekha/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/input-methods/ibus-sulekha/Makefile.am b/input-methods/ibus-sulekha/Makefile.am new file mode 100644 index 0000000..a372e96 --- /dev/null +++ b/input-methods/ibus-sulekha/Makefile.am @@ -0,0 +1,63 @@ +# vim:set noet ts=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +SUBDIRS = \ + engine \ + icons \ + m4 \ + $(NULL) + +ACLOCAL_AMFLAGS = -I m4 + +EXTRA_DIST = \ + autogen.sh \ + @PACKAGE_NAME@.spec.in \ + $(NULL) + +noinst_DIST = \ + $(NULL) + + +DISTCLEANFILES = \ + po/stamp-it \ + $(NULL) + +rpm: dist @PACKAGE_NAME@.spec + rpmbuild -bb \ + --define "_sourcedir `pwd`" \ + --define "_builddir `pwd`" \ + --define "_specdir `pwd`" \ + --define "_rpmdir `pwd`" \ + --define "_srcrpmdir `pwd`" \ + @PACKAGE_NAME@.spec + +srpm: dist @PACKAGE_NAME@.spec + rpmbuild -bs \ + --define "_sourcedir `pwd`" \ + --define "_builddir `pwd`" \ + --define "_srcrpmdir `pwd`" \ + --define "_rpmdir `pwd`" \ + --define "_specdir `pwd`" \ + @PACKAGE_NAME@.spec + +clean-rpm: + $(RM) -r "`uname -i`" + +clean-local: clean-rpm diff --git a/input-methods/ibus-sulekha/NEWS b/input-methods/ibus-sulekha/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/input-methods/ibus-sulekha/README b/input-methods/ibus-sulekha/README new file mode 100644 index 0000000..bd24daf --- /dev/null +++ b/input-methods/ibus-sulekha/README @@ -0,0 +1 @@ +ibus-sulekha- Predictive text entry system diff --git a/input-methods/ibus-sulekha/autogen.sh b/input-methods/ibus-sulekha/autogen.sh new file mode 100755 index 0000000..94f8fd3 --- /dev/null +++ b/input-methods/ibus-sulekha/autogen.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -e +set -x + +autopoint +libtoolize --automake --copy +aclocal -I m4 +# autoheader +automake --add-missing --copy +autoconf +./configure --enable-maintainer-mode $* diff --git a/input-methods/ibus-sulekha/configure.ac b/input-methods/ibus-sulekha/configure.ac new file mode 100644 index 0000000..46a5381 --- /dev/null +++ b/input-methods/ibus-sulekha/configure.ac @@ -0,0 +1,77 @@ +# vim:set et ts=4: +# +# ibus-pinyin - The PinYin engine for IBus +# +# Copyright (c) 2007-2008 Huang Peng +# +# 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. + +# if not 1, append datestamp to the version number. +m4_define([package_name], [ibus-sulekha]) +m4_define([ibus_released], [0]) +m4_define([ibus_major_version], [1]) +m4_define([ibus_minor_version], [1]) +m4_define([ibus_micro_version], [0]) +m4_define(ibus_maybe_datestamp, + m4_esyscmd([if test x]ibus_released[ != x1; then date +.%Y%m%d | tr -d '\n\r'; fi])) + +m4_define([ibus_version], + ibus_major_version.ibus_minor_version.ibus_micro_version[]ibus_maybe_datestamp) + +AC_INIT([package_name], [ibus_version], [http://code.google.com/p/ibus/issues/entry], [package_name]) +AM_INIT_AUTOMAKE([1.10]) +# AC_GNU_SOURCE + +# AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +# define PACKAGE_VERSION_* variables +# AS_VERSION +# AS_NANO +# AM_SANITY_CHECK +AM_MAINTAINER_MODE +# AM_DISABLE_STATIC +# AC_PROG_CC +# AM_PROG_CC_C_O +# AC_PROG_CXX +# AC_ISC_POSIX +# AC_HEADER_STDC +# AM_PROG_LIBTOOL + +#check python +AM_PATH_PYTHON([2.5]) + +# define GETTEXT_* variables +GETTEXT_PACKAGE="$PACKAGE_NAME" +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only architecture-independent data directory.]) + +#AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION(0.16.1) + + +# OUTPUT files +AC_CONFIG_FILES(po/Makefile.in +Makefile +ibus-pinyin.spec +engine/Makefile +engine/ibus-engine-sulekha +engine/sulekha.xml.in +setup/Makefile +icons/Makefile +m4/Makefile +) + +AC_OUTPUT diff --git a/input-methods/ibus-sulekha/engine/Makefile.am b/input-methods/ibus-sulekha/engine/Makefile.am new file mode 100644 index 0000000..5da4982 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/Makefile.am @@ -0,0 +1,63 @@ +# vim:set noet ts=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +engine_sulekha_PYTHON = \ + factory.py \ + main.py \ + sulekha.py \ + keymap.py \ + autocomplete.py \ + sulekha.db \ + $(NULL) +engine_sulekha_DATA = \ + $(NULL) +engine_sulekhadir = $(datadir)/ibus-sulekha/engine + +libexec_SCRIPTS = ibus-engine-sulekha + +engine_DATA = sulekha.xml +enginedir = $(datadir)/ibus/component + +EXTRA_DIST = \ + ibus-engine-sulekha.in \ + sulekha.xml.in \ + $(NULL) + +CLEANFILES = \ + sulekha.xml \ + *.pyc \ + $(NULL) + +sulekha.xml: sulekha.xml.in + ( \ + libexecdir=${libexecdir}; \ + pkgdatadir=${pkgdatadir}; \ + s=`cat $<`; \ + eval "echo \"$${s}\""; \ + ) > $@ + +test: + $(ENV) \ + IBUS_SULEKHA_LOCATION=$(abs_top_srcdir) \ + DBUS_DEBUG=true \ + LANG=en_US \ + PYTHONPATH=$(abs_top_srcdir):$(pyexecdir) \ + $(PYTHON) $(srcdir)/main.py + diff --git a/input-methods/ibus-sulekha/engine/autocomplete.py b/input-methods/ibus-sulekha/engine/autocomplete.py new file mode 100644 index 0000000..fbc1694 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/autocomplete.py @@ -0,0 +1,53 @@ +# vim:set et sts=4 sw=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +import sqlite3 +import re +import os +import sys +tz = re.compile('-[0-2]\d:00$') +class Autocomplete(): + def __init__(self, language="en_US"): + database=os.path.dirname(__file__) +'/sulekha.db' + self.__connection = sqlite3.connect(database) + # Create a cursor object to do the interacting. + self.__cursor = self.__connection.cursor() + self.__language=language + def get_autocompletion_suggestions(self, string): + wordlist=[] + records =self.__cursor.execute("select word from words_"+ self.__language + \ + " where language = '"+ self.__language +"' \ + and word like '"+ string + "%' \ + order by frequency desc limit 5 " ) + for record in records: + word = tz.sub('', record[0]) + wordlist.append(word) + return wordlist + + def set_langauge(self, language) : + self.language=language + + +if __name__ == '__main__': + autocomplete= Autocomplete() + candidate_list= autocomplete.get_autocompletion_suggestions(sys.argv[1]) + for candidate in candidate_list: + print candidate + diff --git a/input-methods/ibus-sulekha/engine/factory.py b/input-methods/ibus-sulekha/engine/factory.py new file mode 100644 index 0000000..06a557e --- /dev/null +++ b/input-methods/ibus-sulekha/engine/factory.py @@ -0,0 +1,60 @@ +# vim:set et sts=4 sw=4: +# +# ibus-tmpl - The Input Bus template project +# +# Copyright (c) 2007-2008 Huang Peng +# +# 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. + +import ibus +import os +import sulekha +from gettext import dgettext +_ = lambda a : dgettext("ibus-sulekha", a) +N_ = lambda a : a + + +class EngineFactory(ibus.EngineFactoryBase): + FACTORY_PATH = "/org/smc/IBus/engines/Sulekha/Factory" + ENGINE_PATH = "/org/smc/IBus/engines/Sulekha/Engine" + NAME = _("Sulekha") + LANG = "ml_IN" + ICON = os.getenv("IBUS_SULEKHA_LOCATION") + "/icons/ibus-sulekha.svg" + AUTHORS = "Santhosh Thottingal " + CREDITS = "GPLv2+" + def __init__(self, bus): + self.__bus = bus + #pinyin.PinYinEngine.CONFIG_RELOADED(bus) + super(EngineFactory, self).__init__(bus) + + self.__id = 0 + self.__config = self.__bus.get_config() + + self.__config.connect("reloaded", self.__config_reloaded_cb) + self.__config.connect("value-changed", self.__config_value_changed_cb) + def create_engine(self, engine_name): + if engine_name == "sulekha": + self.__id += 1 + return sulekha.SulekhaEngine(self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id)) + return super(EngineFactory, self).create_engine(engine_name) + + def __config_reloaded_cb(self, config): + #pinyin.PinYinEngine.CONFIG_RELOADED(self.__bus) + print "Configuration reloaded" + + def __config_value_changed_cb(self, config, section, name, value): + #pinyin.PinYinEngine.CONFIG_VALUE_CHANGED(self.__bus, section, name, value) + print "Configuration changed" + diff --git a/input-methods/ibus-sulekha/engine/ibus-engine-sulekha b/input-methods/ibus-sulekha/engine/ibus-engine-sulekha new file mode 100644 index 0000000..8637e17 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/ibus-engine-sulekha @@ -0,0 +1,29 @@ +#!/bin/sh +# vim:set noet ts=4: +# +# ibus-tmpl - The Input Bus template project +# +# Copyright (c) 2007-2008 Huang Peng +# +# 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. +prefix=/usr +exec_prefix=${prefix} +libexecdir=${exec_prefix}/libexec +pyexecdir=${exec_prefix}/lib/python2.5/site-packages +export PYTHONPATH=${exec_prefix}/lib/python2.5/site-packages:$PYTHONPATH +export IBUS_SULEKHA_LOCATION=/usr/share/ibus-sulekha +export LIBEXECDIR=$libexecdir +exec python /usr/share/ibus-sulekha/engine/main.py $@ + diff --git a/input-methods/ibus-sulekha/engine/ibus-engine-sulekha.in b/input-methods/ibus-sulekha/engine/ibus-engine-sulekha.in new file mode 100644 index 0000000..ad5253b --- /dev/null +++ b/input-methods/ibus-sulekha/engine/ibus-engine-sulekha.in @@ -0,0 +1,29 @@ +#!/bin/sh +# vim:set noet ts=4: +# +# ibus-tmpl - The Input Bus template project +# +# Copyright (c) 2007-2008 Huang Peng +# +# 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. +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libexecdir=@libexecdir@ +pyexecdir=@pyexecdir@ +export PYTHONPATH=@pyexecdir@:$PYTHONPATH +export IBUS_SULEKHA_LOCATION=@prefix@/share/ibus-sulekha +export LIBEXECDIR=$libexecdir +exec python @prefix@/share/ibus-sulekha/engine/main.py $@ + diff --git a/input-methods/ibus-sulekha/engine/keymap.py b/input-methods/ibus-sulekha/engine/keymap.py new file mode 100644 index 0000000..8f049ca --- /dev/null +++ b/input-methods/ibus-sulekha/engine/keymap.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# +# Sulekha +# +# Copyright (c) 2009 Santhosh Thottingal +# +# +# 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 +import os +class Keymap: + def __init__(self, map="inscript_ml_IN"): + self. keymap_dict = self.load_key_map(map) + + def get_candidates(self,key): + if self. keymap_dict == None : + return None + if self. keymap_dict.has_key(key) : + value = self.keymap_dict[key] + candidate_list=value.split(":") + for candidate in candidate_list: + candidate = candidate.replace("\"",""); + candidate_list[candidate_list.index(candidate)] = candidate + return candidate_list + else : + return None + def load_key_map(self, map): + keymap_dict=dict() + try: + keymap_file = open("/usr/share/ibus-sulekha/engine/keymaps/"+map, 'r') + except: + print "Could not find keymaps/"+map + " file." + return None + while True: + line = keymap_file .readline() + if line == "": + break + line=line.strip() + try: + key = line.split("=")[0].strip() + value = line.split("=")[1].strip() + key = key.replace("\"","") + value = value.replace("\"","") + keymap_dict[key]=value + except: + continue + return keymap_dict +if __name__ == '__main__': + keymap= Keymap("swanalekha_ml_IN") + candidate_list= keymap.get_candidates("k") + for candidate in candidate_list: + print candidate + diff --git a/input-methods/ibus-sulekha/engine/keymaps/inscript_ml_IN b/input-methods/ibus-sulekha/engine/keymaps/inscript_ml_IN new file mode 100644 index 0000000..bbbd0d4 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/keymaps/inscript_ml_IN @@ -0,0 +1,95 @@ + "0" = "൦" + "1" = "൧" + "@" = "@" + "2" = "൨" + "3" = "൩" + "$" = "$" + "4" = "൪" + "%" = "%" + "5" = "൫" + "^" = "^" + "6" = "൬" + "7" = "൭" + "*" = "*" + "8" = "൮" + "(" = "(" + "9" = "൯" + "" = "" + "0" = "൦" + "_" "ഃ" + "-" = "-" + "+" = "ഋ" + "=" "ൃ" + "Q" = "ഔ" + "q" "ൌ" + "W" = "ഐ" + "w" "ൈ" + "E" = "ആ" + "e" "ാ" + "R" = "ഈ" + "r" "ീ" + "T" = "ഊ" + "t" "ൂ" + "Y" = "ഭ" + "y" = "ബ" + "U" = "ങ" + "u" = "ഹ" + "I" = "ഘ" + "i" = "ഗ" + "O" = "ധ" + "o" = "ദ" + "P" = "ഝ" + "p" = "ജ" + "{" = "ഢ" + "[" = "ഡ" + "}" = "ഞ" + "]" = "‍" + "A" = "ഓ" + "a" "ോ" + "S" = "ഏ" + "s" "േ" + "D" = "അ" + "d" "്" + "F" = "ഇ" + "f" "ി" + "G" = "ഉ" + "g" "ു" + "H" = "ഫ" + "h" = "പ" + "J" = "റ" + "j" = "ര" + "K" = "ഖ" + "k" = "ക" + "L" = "ഥ" + "l" = "ത" + "=" = "ഛ" + ";" = "ച" + "\"" = "ഠ" + "'" = "ട" + "|" = "|" + "\" = "‌" + "~" = "ഒ" + "`" "ൊ" + "Z" = "എ" + "z" "െ" + "X" = "X" + "x" "ം" + "C" = "ണ" + "c" = "മ" + "V" = "V" + "v" = "ന" + "B" = "ഴ" + "b" = "വ" + "N" = "ള" + "n" = "ല" + "M" = "ശ" + "m" = "സ" + "<" = "ഷ" + "," = "," + ">" = ">" + "." = "." + "/" = "യ" + "#" "്ര" + "&" = "ക്ഷ" + + diff --git a/input-methods/ibus-sulekha/engine/keymaps/swanalekha_ml_IN b/input-methods/ibus-sulekha/engine/keymaps/swanalekha_ml_IN new file mode 100644 index 0000000..adf43de --- /dev/null +++ b/input-methods/ibus-sulekha/engine/keymaps/swanalekha_ml_IN @@ -0,0 +1,1578 @@ +# ml-swanalekha.mim -- m17n version of Swanalekha Malayalam input method +# Copyright 2008, Santhosh Thottingal , Swathanthra Malayalam Computing + +# This file is part of the m17n contrib; a sub-part of the m17n +# library. + +# The m17n 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. + +# The m17n 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 the m17n library; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + "^" = "്" + "~" = "‌" + "_" = "‌" + "@A" = "ാ" + "a" = "അ":"ആ":"എ" + "A" = "ആ":"എ" + "@aa" = "ാ" + "aa" = "ആ" + "@ae" = "േ" + "ae" = "ഏ" + "@aH" = "ഃ" + "@ah" = ""ഃ" + "aH" = "അഃ" + "@ai" = "ൈ" + "ai" = "ഐ" + "@am" = "ം" + "@aM" = "ം" + "aM" = "അം" + "@au" = "ൗ" + "au" = "ഔ" + "B" = "ഭ്":"ബ്":"ബി" + "b" = "ബ്":"ബ്ബ്":"ബി" + "Ba" = "ഭ":"ബ":"ബാ" + "ba" = "ബ" + "BA" = "ഭാ":"ബി.എ." + "bA" = "ബാ" + "Baa" = "ഭാ":"ബാ" + "baa" = "ബാ" + "bae" = "ബേ" + "baH" = "ബഃ" + "BaH" = "ഭഃ" + "bai" = "ബൈ":"ബായ്" + "Bai" = "ഭൈ" + "BaM" = "ഭം" + "baM" = "ബം" + "bau" = "ബൗ":"ബൌ":"ഭൗ" + "Bau" = "ഭൗ":"ഭൌ" + "be" = "ബെ" + "Be" = "ഭെ" + "bE" = "ബേ" + "BE" = "ഭേ" + "bee" = "ബീ" + "Bee" = "ഭീ" + "bei" = "ബൈ" + "Bei" = "ഭൈ" +"bh^" = "ഭ്" + "bh" = "ഭ്" + "bha" = "ഭ" + "bhA" = "ഭാ" + "bhaa" = "ഭാ" + "bhae" = "ഭേ" + "bhaH" = "ഭഃ" + "bhai" = "ഭൈ":"ഭായ്" + "bhaM" = "ഭം" + "bhau" = "ഭൗ":"ഭൌ" + "bhE" = "ഭേ" + "bhe" = "ഭെ" + "bhee" = "ഭീ" + "bhei" = "ഭൈ" + "bhi" = "ഭി" + "bhI" = "ഭീ" + "bhii" = "ഭീ" + "bho" = "ഭൊ" + "bhO" = "ഭോ" + "bhoo" = "ഭൂ" + "bhou" = "ഭൌ" + "bhR" = "ഭൃ" + "bhU" = "ഭൂ" + "bhu" = "ഭു" + "bhuu" = "ഭൂ" + "Bi" = "ഭി":"ബൈ" + "bi" = "ബി":"ബൈ" + "BI" = "ഭീ" + "bI" = "ബീ" + "Bii" = "ഭീ" + "bii" = "ബീ" + "Bo" = "ഭൊ":"ബോ" + "bo" = "ബൊ" + "bO" = "ബോ" + "BO" = "ഭോ" + "boo" = "ബൂ":"ബോ" + "Boo" = "ഭൂ" + "bou" = "ബൌ" + "Bou" = "ഭൌ" + "bR" = "ബൃ" + "BR" = "ഭൃ" + "Bu" = "ഭു":"ബു" + "BU" = "ഭൂ" + "bU" = "ബൂ" + "bu" = "ബു" + "buu" = "ബൂ" + "Buu" = "ഭൂ" + "c" = "ക്":"കു്":"ക്‍":"സി" + "C" = "സി" + "ca" = "ക":"കാ":"കേ" + "cA" = "കാ" + "caa" = "കാ" + "cae" = "കേ" + "cai" = "കൈ" + "cau" = "കൗ" + "ce" = "കെ":"സ്" + "cE" = "കേ" + "cee" = "കീ" + "cei" = "കൈ" + "ch^" = "ച്" + "Ch^" = "ഛ്" + "ch" = "ച്":"ചു്":"ച്ച്":"ച്ചു്":"ക്ക്":"ക്കു്" + "Ch" = "ഛ്" + "Cha" = "ഛ":"ച":"ച്ച":"ഛഃ" + "cha" = "ച":"ച്ച":"ച്ഛ":"ചഃ" + "ChA" = "ഛാ" + "chA" = "ചാ" + "chaa" = "ചാ" + "Chaa" = "ഛാ" + "chae" = "ചേ" + "Chae" = "ഛേ" + "chaH" = "ചഃ" + "ChaH" = "ഛഃ" + "chai" = "ചൈ":"ചായ്" + "Chai" = "ഛൈ" + "chaM" = "ചം" + "ChaM" = "ഛം" + "Chau" = "ഛൗ":"ഛൌ" + "chau" = "ചൗ" + "che" = "ചെ":"ച്ചെ" + "chE" = "ചേ" + "ChE" = "ഛേ" + "Che" = "ഛെ" + "chee" = "ചീ":"ച്ചീ" + "Chee" = "ഛീ" + "Chei" = "ഛൈ" + "chei" = "ചൈ" + "chh^" = "ഛ്" + "chh" = "ഛ്" + "chha" = "ഛ":"ച്ച" + "chhA" = "ഛാ" + "chhaa" = "ഛാ" + "chhae" = "ഛേ" + "chhaH" = "ഛഃ" + "chhai" = "ഛൈ" + "chhaM" = "ഛം" + "chhau" = "ഛൗ":"ഛൌ" + "chhE" = "ഛേ" + "chhe" = "ഛെ" + "chhee" = "ഛീ" + "chhei" = "ഛൈ" + "chhi" = "ഛി" + "chhI" = "ഛീ" + "chhii" = "ഛീ" + "chho" = "ഛൊ" + "chhO" = "ഛോ" + "chhoo" = "ഛൂ" + "chhou" = "ഛൌ" + "chhR" = "ഛൃ" + "chhu" = "ഛു" + "chhU" = "ഛൂ" + "chhuu" = "ഛൂ" + "Chi" = "ഛി":"ചി" + "chi" = "ചി":"ച്ചി":"ചൈ" + "chI" = "ചീ" + "ChI" = "ഛീ" + "chii" = "ചീ" + "Chii" = "ഛീ" + "cho" = "ചൊ":"ചോ" + "Cho" = "ഛൊ" + "ChO" = "ഛോ" + "chO" = "ചോ" + "choo" = "ചൂ":"ച്ചൂ":"ചോ" + "Choo" = "ഛൂ" + "chou" = "ചൌ" + "Chou" = "ഛൌ" + "ChR" = "ഛൃ" + "chR" = "ചൃ" + "Chu" = "ഛു":"ചു" + "chu" = "ചു":"ച്യു" + "chU" = "ചൂ" + "ChU" = "ഛൂ" + "chuu" = "ചൂ":"ച്ചൂ" + "Chuu" = "ഛൂ" + "ci" = "കി":"സി":"സൈ" + "cI" = "കീ" + "ck" = "ക്ക്" + "cO" = "കോ" + "co" = "കൊ" + "coo" = "കൂ" + "cou" = "കൌ" + "cR" = "കൃ" + "cu" = "കു" + "cU" = "കൂ" + "cuu" = "കൂ" + "d^" = "ദ്" + "D^" = "ഡ്" + "D" = "ഡ്":"ഡു്":"ദ്":"ഡി" + "d" = "ദ്":"ദു്":"ട്":"ടു്":"ഡി":"ദ്ദ്" + "da" = "ദ":"ട":"ഡ":"ദഃ" + "Da" = "ഡ":"ദ":"ഠ" + "dA" = "ദാ":"ടാ" + "DA" = "ഡാ":"ദാ" + "daa" = "ദാ":"ടാ" + "Daa" = "ഡാ":"ദാ" + "dae" = "ദേ" + "Dae" = "ഡേ" + "DaH" = "ഡഃ" + "daH" = "ദഃ" + "dai" = "ദൈ":"ഡായ്" + "Dai" = "ഡൈ" + "DaM" = "ഡം" + "daM" = "ദം" + "Dau" = "ഡൗ":"ഡൌ" + "dau" = "ദൗ":"ദൌ" + "de" = "ദെ":"ടെ":"തെ" + "dE" = "ദേ":"തേ" + "De" = "ഡെ":"ടെ" + "DE" = "ഡേ" + "dee" = "ദീ":"ടീ" + "Dee" = "ഡീ" + "dei" = "ദൈ":"ഡേയ്" + "Dei" = "ഡൈ" + "dh^" = "ധ്" + "Dh^" = "ഢ്" + "dh" = "ധ്":"ധു്" + "Dh" = "ഢ്" + "Dha" = "ഢ" + "dha" = "ധ" + "DhA" = "ഢാ" + "dhA" = "ധാ" + "Dhaa" = "ഢാ" + "dhaa" = "ധാ" + "dhae" = "ധേ" + "Dhae" = "ഢേ" + "dhaH" = "ധഃ" + "DhaH" = "ഢഃ" + "Dhai" = "ഢൈ" + "dhai" = "ധൈ" + "dhaM" = "ധം" + "DhaM" = "ഢം" + "dhau" = "ധൗ":"ധൌ" + "Dhau" = "ഢൗ":"ഢൌ" + "Dhe" = "ഢെ" + "dhE" = "ധേ" + "dhe" = "ധെ" + "DhE" = "ഢേ" + "dhee" = "ധീ" + "Dhee" = "ഢീ" + "Dhei" = "ഢൈ" + "dhei" = "ധൈ" + "dhI" = "ധീ" + "Dhi" = "ഢി" + "DhI" = "ഢീ" + "dhi" = "ധി" + "Dhii" = "ഢീ" + "dhii" = "ധീ" + "Dho" = "ഢൊ" + "DhO" = "ഢോ" + "dhO" = "ധോ" + "dho" = "ധൊ" + "Dhoo" = "ഢൂ" + "dhoo" = "ധൂ" + "Dhou" = "ഢൌ" + "dhou" = "ധൌ" + "dhR" = "ധൃ" + "DhR" = "ഢൃ" + "dhu" = "ധു" + "DhU" = "ഢൂ" + "Dhu" = "ഢു" + "dhU" = "ധൂ" + "dhuu" = "ധൂ" + "Dhuu" = "ഢൂ" + "di" = "ദി":"ടി":"ധി":"ഥി":"ഡൈ" + "dI" = "ദീ":"ടീ" + "DI" = "ഡീ" + "Di" = "ഡി" + "dii" = "ദീ":"ടീ" + "Dii" = "ഡീ" + "Do" = "ഡൊ":"ദൊ" + "do" = "ദൊ" + "dO" = "ദോ" + "DO" = "ഡോ" + "doo" = "ദൂ" + "Doo" = "ഡൂ" + "Dou" = "ഡൌ" + "dou" = "ദൌ" + "dR" = "ദൃ" + "DR" = "ഡൃ" + "du" = "ദു":"ടു":"ദുഃ":"തു" + "Du" = "ഡു":"ദു":"ദുഃ" + "dU" = "ദൂ" + "DU" = "ഡൂ" + "Duu" = "ഡൂ" + "duu" = "ദൂ" + "@e" = ""െ" + "@E" = ""േ" + "E" = "ഏ":"ഇ" + "e" = "എ":"ഇ" + "@ee" = ""ീ" + "ee" = "ഈ" + "@ei" = ""ൈ" + "ei" = "ഐ" + "F^" = "ഫ്" + "f^" = "ഫ്" + "F" = "ഫ്":"എഫ്" + "f" = "ഫ്":"എഫ്" + "Fa" = "ഫ" + "fa" = "ഫ" + "fA" = "ഫാ" + "FA" = "ഫാ" + "faa" = "ഫാ" + "Faa" = "ഫാ" + "faH" = "ഫഃ" + "FaH" = "ഫഃ" + "fai" = "ഫൈ" + "Fai" = "ഫൈ" + "FaM" = "ഫം" + "faM" = "ഫം" + "fau" = "ഫൗ":"ഫൌ" + "Fau" = "ഫൗ":"ഫൌ" + "fe" = "ഫെ" + "Fe" = "ഫെ" + "fE" = "ഫേ" + "FE" = "ഫേ" + "Fee" = "ഫീ" + "fee" = "ഫീ" + "fei" = "ഫൈ" + "Fei" = "ഫൈ" + "Fi" = "ഫി" + "fI" = "ഫീ" + "FI" = "ഫീ" + "fi" = "ഫി" + "Fii" = "ഫീ" + "fii" = "ഫീ" + "fo" = "ഫൊ" + "FO" = "ഫോ" + "Fo" = "ഫൊ" + "fO" = "ഫോ" + "Foo" = "ഫൂ" + "foo" = "ഫൂ" + "Fou" = "ഫൌ" + "fou" = "ഫൌ" + "FR" = "ഫൃ" + "fR" = "ഫൃ" + "FU" = "ഫൂ" + "Fu" = "ഫു" + "fu" = "ഫു" + "fU" = "ഫൂ" + "Fuu" = "ഫൂ" + "fuu" = "ഫൂ" + "g^" = "ഗ്" + "G^" = "ഘ്" + "G" = "ഘ്":"ഘു്":"ജി":"ഗ്ഗി" + "g" = "ഗ്":"ഗു്":"ജി" + "ga" = "ഗ":"ജ":"ക":"ഖ" + "Ga" = "ഘ":"ഗ":"ഗ്ഗ":"ജ" + "GA" = "ഘാ":"ഗ്ഗാ" + "gA" = "ഗാ" + "Gaa" = "ഘാ":"ഗ്ഗാ" + "gaa" = "ഗാ" + "Gae" = "ഘേ":"ഗ്ഗേ" + "gae" = "ഗേ" + "GaH" = "ഘഃ" + "gaH" = "ഗഃ" + "Gai" = "ഘൈ":"ഗയ്":"ഗെയ്":"ഗ്ഗൈ" + "gai" = "ഗൈ" + "gaM" = "ഗം" + "GaM" = "ഘം" + "Gau" = "ഘൗ":"ഗൗ":"ഘൌ" + "gau" = "ഗൗ":"ഗൌ" + "Ge" = "ഘെ":"ഗെ":"ഗ്ഗെ":"ജെ" + "GE" = "ഘേ":"ഗ്ഗേ" + "ge" = "ഗെ" + "gE" = "ഗേ" + "Gee" = "ഘീ":"ഗ്ഗീ" + "gee" = "ഗീ" + "Gei" = "ഘൈ":"ഗ്ഗൈ" + "gei" = "ഗൈ" + "gh^" = "ഘ്" + "gh" = "ഘ്":"ഘു്" + "gha" = "ഘ":"ഖ" + "ghA" = "ഘാ" + "ghaa" = "ഘാ" + "ghae" = "ഘേ" + "ghaH" = "ഘഃ" + "ghai" = "ഘൈ" + "ghaM" = "ഘം" + "ghau" = "ഘൗ" + "ghE" = "ഘേ" + "ghe" = "ഘെ" + "ghee" = "ഘീ" + "ghei" = "ഘൈ" + "ghi" = "ഘി" + "ghI" = "ഘീ" + "ghii" = "ഘീ" + "ghO" = "ഘോ" + "gho" = "ഘൊ" + "ghoo" = "ഘൂ" + "ghou" = "ഘൌ" + "ghR" = "ഘൃ" + "ghu" = "ഘു" + "ghU" = "ഘൂ" + "ghuu" = "ഘൂ" + "gi" = "ഗി":"കി":"ജി" + "GI" = "ഘീ":"ഗ്ഗീ":"ഗ്ഗി" + "Gi" = "ഘി":"ഗ്ഗി" + "gI" = "ഗീ" + "Gii" = "ഘീ":"ഗ്ഗീ" + "gii" = "ഗീ" + "Go" = "ഘൊ":"ഗോ":"ഗൊ":"ഗ്ഗൊ" + "go" = "ഗൊ":"ഗോ" + "GO" = "ഘോ" + "gO" = "ഗോ" + "goo" = "ഗൂ":"ഗോ" + "Goo" = "ഘൂ":"ഗ്ഗൂ":"ഘോ":"ഗ്ഗോ" + "gou" = "ഗൌ" + "Gou" = "ഘൌ" + "GR" = "ഘൃ":"ഗ്ഗൃ" + "gR" = "ഗൃ" + "Gu" = "ഘു":"ഗു":"ഗ്ഗു" + "GU" = "ഘൂ":"ഗ്ഗൂ" + "gU" = "ഗൂ" + "gu" = "ഗു" + "Guu" = "ഘൂ":"ഗ്ഗൂ" + "guu" = "ഗൂ" + "h^" = "ഹ്" + "h" = "ഹ്":"എച്":"എച്ച്" + "H" = "എച്ച്" + "ha" = "ഹ":"ഹാ":"ഹഃ" + "hA" = "ഹാ" + "haa" = "ഹാ" + "haH" = "ഹഃ" + "hai" = "ഹൈ":"ഹായ്" + "haM" = "ഹം" + "hau" = "ഹൗ" + "he" = "ഹെ":"ഹി" + "hE" = "ഹേ" + "hee" = "ഹീ" + "hei" = "ഹൈ":"ഹേയ്" + "hi" = "ഹി":"ഹായ്" + "hI" = "ഹീ" + "hii" = "ഹീ" + "ho" = "ഹൊ":"ഹോ" + "hO" = "ഹോ" + "hoo" = "ഹൂ" + "hou" = "ഹൌ" + "hR" = "ഹൃ" + "hU" = "ഹൂ" + "hu" = "ഹു" + "huu" = "ഹൂ" + "@i" = ""ി" + "@I" = ""ീ" + "i" = "ഇ":"ഈ":"ഐ" + "I" = "ഈ":"ഐ" + "@ii" = ""ീ" + "ii" = "ഈ" + "j^" = "ജ്" + "J^" = "ഝ്" + "J" = "ഝ്":"ജെ" + "j" = "ജ്":"ജു്":"ജെ" + "Ja" = "ഝ":"ജ":"ജെ" + "ja" = "ജ":"ജെ" + "jA" = "ജാ" + "JA" = "ഝാ" + "Jaa" = "ഝാ" + "jaa" = "ജാ" + "jae" = "ജേ" + "Jae" = "ഝേ" + "jaH" = "ജഃ" + "JaH" = "ഝഃ" + "Jai" = "ഝൈ":"ജയ്" + "jai" = "ജൈ":"ജയ്" + "JaM" = "ഝം" + "jaM" = "ജം" + "jau" = "ജൗ":"ജൌ" + "Jau" = "ഝൗ":"ഝൌ" + "je" = "ജെ":"ജീ" + "JE" = "ഝേ" + "jE" = "ജേ" + "Je" = "ഝെ" + "Jee" = "ഝീ":"ജീ" + "jee" = "ജീ" + "Jei" = "ഝൈ" + "jei" = "ജൈ" + "jh^" = "ഝ്":"ഝ്" + "jh" = "ഝ്" + "jha" = "ഝ" + "jhA" = "ഝാ" + "jhaa" = "ഝാ" + "jhae" = "ഝേ" + "jhaH" = "ഝഃ" + "jhai" = "ഝൈ" + "jhaM" = "ഝം" + "jhau" = "ഝൗ":"ഝൌ" + "jhe" = "ഝെ" + "jhE" = "ഝേ" + "jhee" = "ഝീ" + "jhei" = "ഝൈ" + "jhi" = "ഝി" + "jhI" = "ഝീ" + "jhii" = "ഝീ" + "jhO" = "ഝോ" + "jho" = "ഝൊ" + "jhoo" = "ഝൂ":"ഝോ" + "jhou" = "ഝൌ" + "jhR" = "ഝൃ" + "jhu" = "ഝു" + "jhU" = "ഝൂ" + "jhuu" = "ഝൂ" + "Ji" = "ഝി":"ജി":"ജൈ" + "ji" = "ജി":"ജൈ" + "jI" = "ജീ" + "JI" = "ഝീ" + "jii" = "ജീ" + "Jii" = "ഝീ" + "Jo" = "ഝൊ":"ജോ":"ജൊ" + "jO" = "ജോ" + "JO" = "ഝോ" + "jo" = "ജൊ" + "Joo" = "ഝൂ":"ജൂ":"ഝോ" + "joo" = "ജൂ" + "jou" = "ജൌ" + "Jou" = "ഝൌ" + "JR" = "ഝൃ":"ജെ.ആര്‍" + "jR" = "ജൃ" + "JU" = "ഝൂ":"ജെ.യു." + "Ju" = "ഝു":"ജു" + "ju" = "ജു" + "jU" = "ജൂ" + "Juu" = "ഝൂ":"ജൂ" + "juu" = "ജൂ" + "K^" = "ഖ്":"ഖു്" + "k^" = "ക്" + "k~" = "ക്‍" + "k_" = "ക്‍" + "K" = "ഖ്":"ഖു്":"കെ" + "k" = "ക്":"കു്":"ക്‍":"ക്ക്":"ക്കു്":"കെ" + "ka" = "ക":"ഗ":"ഖ":"ഘ":"കഃ" + "Ka" = "ഖ":"ക":"ക്ക" + "KA" = "ഖാ" + "kA" = "കാ" + "kaa" = "കാ":"ഗാ" + "Kaa" = "ഖാ" + "kae" = "കേ" + "Kae" = "ഖേ" + "KaH" = "ഖഃ" + "kaH" = "കഃ" + "kai" = "കൈ":"കയ്" + "Kai" = "ഖൈ" + "kaM" = "കം" + "KaM" = "ഖം" + "kau" = "കൗ":"കൌ" + "Kau" = "ഖൗ" + "Ke" = "ഖെ":"കെ" + "kE" = "കേ" + "ke" = "കെ" + "KE" = "ഖേ" + "Kee" = "ഖീ":"കീ" + "kee" = "കീ" + "kei" = "കൈ":"കെയ്" + "Kei" = "ഖൈ" + "kh^" = "ഖ്" + "kh" = "ഖ്":"ഖു്":"ഘ്":"ഘു്" + "kha" = "ഖ":"ക്ക":"ഘ" + "khA" = "ഖാ" + "khaa" = "ഖാ" + "khae" = "ഖേ" + "khaH" = "ഖഃ" + "khai" = "ഖൈ" + "khaM" = "ഖം" + "khau" = "ഖൗ":"ഖൌ" + "khe" = "ഖെ" + "khE" = "ഖേ" + "khee" = "ഖീ" + "khei" = "ഖൈ" + "khi" = "ഖി":"ക്കി" + "khI" = "ഖീ" + "khii" = "ഖീ" + "khO" = "ഖോ" + "kho" = "ഖൊ" + "khoo" = "ഖൂ" + "khou" = "ഖൌ" + "khR" = "ഖൃ" + "khu" = "ഖു":"ഘു" + "khU" = "ഖൂ" + "khuu" = "ഖൂ" + "KI" = "ഖ" + "ki" = "കി":"ഗി":"ഘി":"ഖി":"കൈ" + "Ki" = "ഖി":"കി" + "kI" = "കീ" + "Kii" = "ഖീ" + "kii" = "കീ" + "Ko" = "ഖൊ":"കൊ":"കോ" + "ko" = "കൊ" + "KO" = "ഖോ" + "kO" = "കോ" + "Koo" = "ഖൂ":"കൂ":"കോ" + "koo" = "കൂ":"കോ" + "Kou" = "ഖൌ" + "kou" = "കൌ" + "KR" = "ഖൃ" + "kR" = "കൃ" + "Ku" = "ഖു":"കു" + "ku" = "കു":"കൂ" + "KU" = "ഖൂ" + "kU" = "കൂ" + "Kuu" = "ഖൂ":"കൂ" + "kuu" = "കൂ" + "l^^^" = "ൡ" + "L^^^" = "ൡ" + "L^^" = "ഌ" + "l^^" = "ഌ" + "l^" = "ല്" + "L^" = "ള്" + "L~" = "ള്‍" + "l~" = "ല്‍" + "l_" = "ല്‍" + "L_" = "ള്‍" + "l" = "ല്":"ല്‍":"ള്‍":"ലു്":"എല്‍" + "L" = "ള്":"ള്‍":"ളു്":"എല്‍":"ള്ള്" + "La" = "ള":"ല" + "la" = "ല":"ള" + "LA" = "ളാ" + "lA" = "ലാ" + "Laa" = "ളാ":"ലാ" + "laa" = "ലാ":"ളാ" + "Lae" = "ളേ":"ലേ" + "lae" = "ലേ" + "LaH" = "ളഃ" + "laH" = "ലഃ" + "lai" = "ലൈ" + "Lai" = "ളൈ" + "laM" = "ലം" + "LaM" = "ളം" + "Lau" = "ളൗ":"ലൗ":"ളൌ" + "lau" = "ലൗ" + "Le" = "ളെ":"ലെ" + "le" = "ലെ":"ളെ" + "LE" = "ളേ":"ലേ" + "lE" = "ലേ" + "Lee" = "ളീ":"ലീ" + "lee" = "ലീ":"ളീ" + "lei" = "ലൈ" + "Lei" = "ളൈ" + "li" = "ലി":"ളി":"ലൈ":"ളൈ" + "Li" = "ളി":"ലി" + "lI" = "ലീ" + "LI" = "ളീ" + "lii" = "ലീ" + "Lii" = "ളീ" + "Lo" = "ളൊ":"ലോ":"ലൊ" + "lo" = "ലൊ":"ലോ" + "LO" = "ളോ" + "lO" = "ലോ" + "loo" = "ലൂ":"ലോ" + "Loo" = "ളൂ":"ലൂ" + "Lou" = "ളൌ" + "lou" = "ലൌ" + "LR" = "ളൃ" + "lR" = "ലൃ" + "Lu" = "ളു":"ലു" + "lu" = "ലു":"ളു" + "LU" = "ളൂ" + "lU" = "ലൂ" + "Luu" = "ളൂ":"ളൂ" + "luu" = "ലൂ" + "M^" = "മ്" + "m^" = "മ്" + "m~" = ""ം" + "M~" = ""ം" + "m_" = ""ം" + "M_" = ""ം" + "M" = "മ്":"ം":"എം" + "m" = "മ്":"ം":"എം" + "Ma" = "മ":"മ്മ" + "ma" = "മ":"മ്മ":"മഃ" + "MA" = "മാ" + "mA" = "മാ" + "maa" = "മാ" + "Maa" = "മാ" + "mae" = "മേ" + "Mae" = "മേ" + "maH" = "മഃ" + "MaH" = "മഃ" + "Mai" = "മൈ":"മയ്" + "mai" = "മൈ":"മയ്" + "MaM" = "മം" + "maM" = "മം" + "mau" = "മൗ":"മൌ" + "Mau" = "മൗ":"മൌ" + "ME" = "മേ" + "mE" = "മേ" + "me" = "മെ" + "Me" = "മെ" + "mee" = "മീ" + "Mee" = "മീ" + "Mei" = "മെയ്":"മൈ" + "mei" = "മെയ്":"മൈ" + "mi" = "മി" + "Mi" = "മി" + "mI" = "മീ" + "MI" = "മീ" + "Mii" = "മീ" + "mii" = "മീ" + "mo" = "മൊ":"മോ" + "Mo" = "മൊ":"മോ" + "mO" = "മോ" + "MO" = "മോ" + "moo" = "മൂ":"മോ" + "Moo" = "മൂ":"മോ" + "mou" = "മൌ" + "Mou" = "മൌ" + "mR" = "മൃ" + "MR" = "മൃ" + "MU" = "മൂ" + "Mu" = "മു" + "mU" = "മൂ" + "mu" = "മു" + "Muu" = "മൂ" + "muu" = "മൂ" + "n^" = "ന്" + "N^" = "ണ്" + "N~" = "ണ്‍" + "n~" = "ന്‍" + "n_" = "ന്‍" + "N_" = "ണ്‍" + "n" = "ന്":"ന്‍":"നു്":"ണ്‍":"ണ്":"ന്ന്":"എന്‍" + "N" = "ണ്":"ണ്‍":"ണു്":"ന്‍":"ണ്ണ്":"ണ്ണു്":"എന്‍" + "Na" = "ണ":"ന":"നാ":"ണ്ണ" + "na" = "ന":"ണ":"നഃ" + "NA" = "ണാ" + "nA" = "നാ" + "naa" = "നാ":"ണാ" + "Naa" = "ണാ":"നാ" + "Nae" = "ണേ" + "nae" = "നേ" + "naH" = "നഃ" + "NaH" = "ണഃ" + "nai" = "നൈ":"നായ്" + "Nai" = "ണൈ" + "naM" = "നം" + "NaM" = "ണം" + "nau" = "നൗ":"നൌ" + "Nau" = "ണൗ":"ണൌ" + "nc" = "ങ്ക്" + "nch^" = "ഞ്ച്" + "nch" = "ഞ്ച്":"ഞ്ചു്" + "ncha" = "ഞ്ച":"ഞ്ചാ" + "nchA" = "ഞ്ചാ" + "nchaa" = "ഞ്ചാ" + "nchaH" = "ഞ്ചഃ" + "nchai" = "ഞ്ചൈ" + "nchaM" = "ഞ്ചം" + "nchau" = "ഞ്ചൌ":"ഞ്ചൌ" + "nche" = "ഞ്ചെ":"ഞ്ചി" + "nchE" = "ഞ്ചേ" + "nchee" = "ഞ്ചീ" + "nchei" = "ഞ്ചൈ" + "nchi" = "ഞ്ചി" + "nchI" = "ഞ്ചീ" + "nchii" = "ഞ്ചീ" + "ncho" = "ഞ്ചൊ" + "nchO" = "ഞ്ചോ" + "nchoo" = "ഞ്ചൂ" + "nchou" = "ഞ്ചൌ" + "nchR" = "ഞ്ചൃ" + "nchu" = "ഞ്ചു" + "nchU" = "ഞ്ചൂ" + "nchuu" = "ഞ്ചൂ" + "ne" = "നെ":"ണെ":"ന്‍":"ണ്‍" + "Ne" = "ണെ" + "NE" = "ണേ" + "nE" = "നേ" + "Nee" = "ണീ":"നീ":"ണേ":"നീ" + "nee" = "നീ":"നേ" + "Nei" = "ണൈ" + "nei" = "നെയ്":"നൈ" + "ng^" = "ങ്" + "ng" = "ങ്ങ്":"ങ്ങു്":"ങ്":"ങു്" + "Nga" = "ങ":"ങ്ങ" + "NgA" = "ങാ" + "nga" = "ങ്ങ":"ങ" + "ngA" = "ങ്ങാ":"ങാ" + "Ngaa" = "ങാ" + "ngaa" = "ങ്ങാ":"ങാ" + "ngae" = "ങ്ങേ":"ങേ" + "NgaH" = "ങഃ" + "Ngai" = "ങൈ" + "ngai" = "ങ്ങൈ":"ങൈ" + "ngaM" = "ങ്ങം":"ങം" + "Ngau" = "ങൗ" + "ngau" = "ങ്ങൗ":"ങൗ" + "Nge" = "ങെ" + "NgE" = "ങേ" + "nge" = "ങ്ങെ":"ങെ":"ങ്ങൈ" + "ngE" = "ങ്ങേ":"ങേ" + "Ngee" = "ങീ" + "ngee" = "ങ്ങീ":"ങീ" + "ngei" = "ങൈ" + "Ngei" = "ങൈ" + "Ngi" = "ങി" + "ngI" = "ങ്ങീ":"ങീ" + "ngi" = "ങ്ങി":"ങി" + "Ngii" = "ങീ" + "ngii" = "ങ്ങീ":"ങീ" + "Ngo" = "ങൊ" + "NgO" = "ങോ" + "ngO" = "ങ്ങോ":"ങോ" + "ngo" = "ങ്ങൊ":"ങൊ" + "Ngoo" = "ങൂ" + "ngoo" = "ങ്ങൂ":"ങൂ" + "ngou" = "ങൌ":"ങൌ" + "Ngou" = "ങൌ" + "NgR" = "ങൃ" + "ngR" = "ങ്ങൃ":"ങൃ" + "ngU" = "ങൂ":"ങ്ങൂ" + "Ngu" = "ങു" + "ngu" = "ങ്ങു":"ങു" + "Nguu" = "ങൂ" + "nguu" = "ങ്ങൂ":"ങൂ" + "ni" = "നി":"ണി":"നൈ" + "nI" = "നീ":"ണീ" + "Ni" = "ണി":"ണ്ണി" + "NI" = "ണീ" + "nii" = "നീ":"ണീ" + "Nii" = "ണീ" + "nj^" = "ഞ്" + "nj" = "ഞ്":"ഞ്ഞ്":"ഞ്ഞു്" + "nja" = "ഞ":"ഞ്ച":"ഞ്ഞ" + "njA" = "ഞാ" + "njaa" = "ഞാ":"ഞ്ചാ" + "njae" = "ഞേ":"ഞ്ഞേ" + "njaH" = "ഞഃ" + "njai" = "ഞൈ":"ഞ്ഞൈ" + "njaM" = "ഞം" + "njau" = "ഞൗ":"ഞൌ":"ഞ്ഞൗ" + "nje" = "ഞെ":"ഞ്ഞെ":"ഞ്ചെ" + "njE" = "ഞേ":"ഞ്ഞേ" + "njee" = "ഞീ":"ഞ്ചീ" + "njei" = "ഞ്ചൈ":"ഞൈ":"ഞ്ഞൈ" + "nji" = "ഞി":"ഞ്ഞി":"ഞ്ചി" + "njI" = "ഞീ" + "njii" = "ഞീ" + "njo" = "ഞൊ":"ഞ്ഞോ":"ഞ്ചൊ" + "njO" = "ഞോ":"ഞ്ഞോ":"ഞ്ചോ" + "njoo" = "ഞൂ":"ഞ്ഞൂ" + "njou" = "ഞൌ" + "njR" = "ഞൃ" + "nju" = "ഞു":"ഞ്ഞു":"ഞ്ചു" + "njU" = "ഞൂ" + "njuu" = "ഞൂ":"ഞ്ഞൂ":"ഞ്ചൂ" + "nk^" = "ങ്ക്" + "nk" = "ങ്ക്":"ങ്കു്" + "nka" = "ങ്ക" + "nkA" = "ങ്കാ" + "nkaa" = "ങ്കാ" + "nkaH" = "ങ്കഃ" + "nkai" = "ങ്കൈ":"ങ്കായ്" + "nkaM" = "ങ്കം" + "nkau" = "ങ്കൗ":"ങ്കൌ" + "nkE" = "ങ്കേ" + "nke" = "ങ്കെ" + "nkee" = "ങ്കീ" + "nkei" = "ങ്കൈ" + "nki" = "ങ്കി" + "nkI" = "ങ്കീ" + "nkii" = "ങ്കീ" + "nko" = "ങ്കൊ":"ങ്കോ" + "nkO" = "ങ്കോ" + "nkoo" = "ങ്കൂ" + "nkou" = "ങ്കൌ" + "nkR" = "ങ്കൃ" + "nku" = "ങ്കു" + "nkU" = "ങ്കൂ" + "nkuu" = "ങ്കൂ" + "no" = "നൊ":"ണൊ":"നോ" + "No" = "ണൊ":"നോ" + "NO" = "ണോ":"നോ" + "nO" = "നോ" + "Noo" = "ണൂ":"നൂ" + "noo" = "നൂ":"ണൂ" + "nou" = "നൌ" + "Nou" = "ണൌ" + "nR" = "നൃ" + "NR" = "ണൃ" + "nt^" = "ന്റ്" + "nt" = "ന്റ്":"ന്റു്" + "nta" = "ന്റ":"ണ്ട" + "ntA" = "ന്റാ" + "ntaa" = "ന്റാ" + "ntae" = "ന്റേ" + "ntaH" = "ന്റഃ" + "ntai" = "ന്റൈ" + "ntaM" = "ന്റം" + "ntau" = "ന്റൗ" + "ntE" = "ന്റേ" + "nte" = "ന്റെ" + "ntee" = "ന്റീ" + "ntei" = "ന്റൈ" + "nth^" = "ന്ത്" + "nth" = "ന്ത്":"ന്തു്" + "ntha" = "ന്ത":"ന്ദ" + "nthA" = "ന്താ" + "nthaa" = "ന്താ" + "nthaH" = "ന്തഃ" + "nthai" = "ന്തൈ" + "nthaM" = "ന്തം" + "nthau" = "ന്തൗ":"ന്തൌ" + "nthE" = "ന്തേ":"ന്ദേ" + "nthe" = "ന്തെ" + "nthee" = "ന്തീ":"ന്ദീ" + "nthei" = "ന്തൈ" + "nthi" = "ന്തി":"ന്ദി" + "nthI" = "ന്തീ" + "nthii" = "ന്തീ" + "ntho" = "ന്തൊ" + "nthO" = "ന്തോ" + "nthoo" = "ന്തൂ" + "nthou" = "ന്തൌ" + "nthR" = "ന്തൃ" + "nthu" = "ന്തു" + "nthU" = "ന്തൂ" + "nthuu" = "ന്തൂ" + "nti" = "ന്റി":"ണ്ടി" + "ntI" = "ന്റീ" + "ntii" = "ന്റീ" + "nto" = "ന്റൊ" + "ntO" = "ന്റോ" + "ntoo" = "ന്റൂ" + "ntou" = "ന്റൌ" + "ntR" = "ന്റൃ" + "ntU" = "ന്റൂ" + "ntu" = "ന്റു" + "ntuu" = "ന്റൂ" + "nu" = "നു":"ണു":"ണ്" + "nU" = "നൂ":"ണൂ" + "Nu" = "ണു" + "NU" = "ണൂ" + "nuu" = "നൂ":"ണൂ" + "Nuu" = "ണൂ":"നൂ" + "@o" = ""ൊ" + "@O" = ""ോ" + "o" = "ഒ" + "O" = "ഓ" + "@oo" = ""ൂ" + "oo" = "ഊ":"ഓ" + "@ou" = ""ൌ" + "ou" = "ഔ" + "p^" = "പ്" + "P^" = "പ്" + "p" = "പ്":"പു്":"പ്പ്":"പ്പു്":"പി" + "P" = "പ്":"പ്പ്":"പ്പു്":"പി" + "Pa" = "പ":"പ":"പ" + "pa" = "പ" + "PA" = "പാ" + "pA" = "പാ" + "paa" = "പാ" + "Paa" = "പാ" + "Pae" = "പേ" + "pae" = "പേ" + "paH" = "പഃ" + "PaH" = "പഃ" + "pai" = "പൈ":"പയ്":"പായ്" + "Pai" = "പൈ":"പയ്":"പായ്" + "paM" = "പം" + "PaM" = "പം" + "Pau" = "പൗ":"പൌ" + "pau" = "പൗ":"പൌ" + "Pe" = "പെ":"പി" + "pe" = "പെ":"പി" + "PE" = "പേ" + "pE" = "പേ" + "Pee" = "പീ":"പീ":"പീ":"പേ" + "pee" = "പീ":"പേ" + "pei" = "പെയ്":"പൈ" + "Pei" = "പെയ്":"പൈ" + "ph^" = "ഫ്" + "ph" = "ഫ്":"പി.എച്." + "pha" = "ഫ" + "phA" = "ഫാ" + "phaa" = "ഫാ" + "phaH" = "ഫഃ" + "phai" = "ഫൈ" + "phaM" = "ഫം" + "phau" = "ഫൗ":"ഫൌ" + "phe" = "ഫെ" + "phE" = "ഫേ" + "phee" = "ഫീ" + "phei" = "ഫൈ" + "phi" = "ഫി" + "phI" = "ഫീ" + "phii" = "ഫീ" + "pho" = "ഫൊ":"ഫോ" + "phO" = "ഫോ" + "phoo" = "ഫൂ" + "phou" = "ഫൌ" + "phR" = "ഫൃ" + "phu" = "ഫു" + "phU" = "ഫൂ" + "phuu" = "ഫൂ" + "Pi" = "പി":"പൈ":"പി":"പൈ":"പ്പി":"പി":"പൈ" + "pi" = "പി":"പൈ":"പ്പി" + "pI" = "പീ" + "PI" = "പീ" + "Pii" = "പീ" + "pii" = "പീ" + "pO" = "പോ" + "Po" = "പൊ" + "PO" = "പോ" + "po" = "പൊ" + "Poo" = "പൂ":"പൂ":"പോ":"പൂ" + "poo" = "പൂ":"പോ" + "pou" = "പൌ" + "Pou" = "പൌ" + "pR" = "പൃ" + "PR" = "പൃ" + "Pu" = "പു":"പു":"പു" + "pu" = "പു" + "PU" = "പൂ" + "pU" = "പൂ" + "Puu" = "പൂ" + "puu" = "പൂ" + "Q" = "ക്യൂ" + "q" = "ക്യു" + "@R" = ""ൃ" + "R^^" = "ൠ" + "r^^" = "ൠ" + "r^" = "ഋ" + "R^" = "റ്" + "r~" = "ര്‍" + "R~" = "ര്‍" + "R_" = "ര്‍" + "r_" = "ര്‍" + "r" = "ര്":"ര്‍":"രു്":"ആര്‍" + "R" = "റ്":"ര്‍":"റു്":"ആര്‍" + "Ra" = "റ":"ര":"രാ" + "ra" = "ര":"റ" + "rA" = "രാ" + "RA" = "റാ" + "raa" = "രാ":"റാ" + "Raa" = "റാ" + "Rae" = "റേ" + "rae" = "രേ" + "RaH" = "റഃ" + "raH" = "രഃ" + "rai" = "രൈ":"രായ്" + "Rai" = "റൈ":"റായ്" + "RaM" = "റം" + "raM" = "രം" + "Rau" = "റൗ" + "rau" = "രൗ" + "re" = "രെ" + "Re" = "റെ" + "rE" = "രേ" + "RE" = "റേ" + "Ree" = "റീ":"രീ":"റേ" + "ree" = "രീ" + "rei" = "രൈ":"രെയ്" + "Rei" = "റൈ":"റെയ്" + "ri" = "രി":"റി":"രൈ":"റൈ" + "Ri" = "റി":"രി" + "rI" = "രീ" + "RI" = "റീ" + "rii" = "രീ" + "Rii" = "റീ" + "ro" = "രൊ":"രോ" + "rO" = "രോ" + "Ro" = "റൊ" + "RO" = "റോ" + "Roo" = "റൂ":"രൂ" + "roo" = "രൂ" + "Rou" = "റൌ" + "rou" = "രൌ" + "RR" = "ഋ" + "rr" = "ഋ" + "rR" = "രൃ" + "Ru" = "റു":"രു" + "ru" = "രു":"റു" + "RU" = "റൂ" + "rU" = "രൂ" + "Ruu" = "റൂ":"രൂ" + "ruu" = "രൂ" + "S^" = "ശ്" + "s^" = "സ്" + "s" = "സ്":"ശ്":"സ്സ്":"സു്":"സ്സു്":"എസ്" + "S" = "ശ്":"ശു്":"സ്":"ശ്ശ്":"ശ്ശു്":"എസ്" + "sa" = "സ":"ശ" + "Sa" = "ശ":"സ" + "SA" = "ശാ":"സാ" + "sA" = "സാ" + "saa" = "സാ":"ശാ" + "Saa" = "ശാ":"സാ" + "Sae" = "ശേ" + "sae" = "സേ" + "SaH" = "ശഃ":"ഷാ" + "saH" = "സഃ" + "Sai" = "ശൈ":"സൈ":"സായ്" + "sai" = "സൈ":"സായ്" + "saM" = "സം" + "SaM" = "ശം" + "sau" = "സൗ":"സൌ" + "Sau" = "ശൗ":"സൗ" + "Se" = "ശെ":"സെ":"സി" + "se" = "സെ":"സി" + "SE" = "ശേ":"എസ്.ഇ." + "sE" = "സേ" + "see" = "സീ":"ശീ" + "See" = "ശീ":"സീ" + "Sei" = "ശൈ":"സീ" + "sei" = "സൈ" + "Sh^" = "ഴ്" + "sh^" = "ഷ്" + "Sh" = "ഴ്":"ഷ്":"ഴു്" + "sh" = "ഷ്":"ഷു്" + "Sha" = "ഴ":"ഷ":"ഷാ" + "sha" = "ഷ" + "shA" = "ഷാ" + "ShA" = "ഴാ" + "Shaa" = "ഴാ" + "shaa" = "ഷാ" + "shae" = "ഷേ" + "Shae" = "ഴേ" + "ShaH" = "ഴഃ" + "shaH" = "ഷഃ" + "shai" = "ഷൈ" + "Shai" = "ഴൈ" + "shaM" = "ഷം" + "ShaM" = "ഴം" + "Shau" = "ഴൗ":"ഷൗ":"ഴൌ" + "shau" = "ഷൗ":"ഷൌ" + "She" = "ഴെ":"ഷി" + "she" = "ഷെ":"ഷി" + "shE" = "ഷേ" + "ShE" = "ഴേ" + "shee" = "ഷീ":"ഷേ" + "Shee" = "ഴീ" + "Shei" = "ഴൈ" + "shei" = "ഷൈ" + "ShI" = "ഴീ" + "shi" = "ഷി" + "Shi" = "ഴി" + "shI" = "ഷീ" + "Shii" = "ഴീ" + "shii" = "ഷീ" + "sho" = "ഷൊ":"ഷോ" + "shO" = "ഷോ" + "Sho" = "ഴൊ" + "ShO" = "ഴോ" + "Shoo" = "ഴൂ":"ഷൂ" + "shoo" = "ഷൂ" + "Shou" = "ഴൌ" + "shou" = "ഷൌ" + "ShR" = "ഴൃ" + "shR" = "ഷൃ" + "Shu" = "ഴു":"ഷു" + "shu" = "ഷു" + "ShU" = "ഴൂ" + "shU" = "ഷൂ" + "Shuu" = "ഴൂ" + "shuu" = "ഷൂ" + "Si" = "ശി":"സി" + "si" = "സി":"ശി" + "SI" = "ശീ":"എസ്.ഐ." + "sI" = "സീ" + "Sii" = "ശീ" + "sii" = "സീ" + "So" = "ശൊ":"സൊ":"സോ" + "so" = "സൊ":"ശൊ":"സോ" + "SO" = "ശോ" + "sO" = "സോ" + "Soo" = "ശൂ":"സൂ" + "soo" = "സൂ":"ശൂ" + "Sou" = "ശൌ":"സൌ" + "sou" = "സൌ" + "SR" = "ശൃ":"എസ്.ആര്‍." + "sR" = "സൃ" + "su" = "സു":"ശു" + "Su" = "ശു":"സു" + "SU" = "ശൂ" + "sU" = "സൂ" + "suu" = "സൂ":"ശൂ" + "Suu" = "ശൂ" + "t^" = "ട്" + "T^" = "ഠ്" + "t" = "ട്":"ടു്":"ട്ട്":"റ്റ്":"ത്":"ടി" + "T" = "ഠ്":"ട്ടു്":"ടി":"റ്റി" + "Ta" = "ഠ":"ട":"ത" + "ta" = "ട":"റ്റ":"ത":"ഠ" + "tA" = "ടാ":"താ":"റ്റാ":"ഠാ":"ട്ടാ" + "TA" = "ഠാ" + "taa" = "ടാ":"റ്റാ":"താ":"ഠാ":"ട്ടാ" + "Taa" = "ഠാ" + "Tae" = "ഠേ" + "tae" = "ടേ" + "taH" = "ടഃ":"തഃ" + "TaH" = "ഠഃ" + "tai" = "ടൈ":"ടായ്" + "Tai" = "ഠൈ" + "taM" = "ടം":"തം" + "TaM" = "ഠം" + "Tau" = "ഠൗ":"ഠൌ" + "tau" = "ടൗ":"ടൌ" + "Te" = "ഠെ":"ടെ":"തെ" + "te" = "ടെ":"തെ":"റ്റെ":"ഠെ" + "tE" = "ടേ":"തേ" + "TE" = "ഠേ":"ടേ" + "tea" = "ടീ":"റ്റീ":"തീ" + "tee" = "ടീ":"തീ":"റ്റീ" + "Tee" = "ഠീ" + "tei" = "ടൈ":"ടെയ്" + "Tei" = "ഠൈ" + "th^" = "ത്" + "TH^" = "ഥ്" + "Th^" = "ഥ്" + "tH^" = "ഥ്" + "th" = "ത്":"തു്":"ത്ത്":"ത്തു്" + "tH" = "ഥ്":"ഥു്" + "Th" = "ഥ്":"ഥു്" + "TH" = "ഥ്":"ഥു്" + "tha" = "ത":"ധ":"ഥ":"ത്ത":"ദ്ധ" + "THa" = "ഥ":"ത" + "Tha" = "ഥ":"ത" + "tHa" = "ഠ":"ത" + "thA" = "താ":"ഥാ":"ധാ":"ത്താ" + "ThA" = "ഥാ" + "tHA" = "ഠാ" + "THA" = "ഥാ" + "thaa" = "താ":"ഥാ":"ധാ":"ത്താ" + "Thaa" = "ഥാ":"താ" + "THaa" = "ഥാ":"താ" + "tHaa" = "ഠാ":"താ" + "tHae" = "ഠേ" + "Thae" = "ഥേ" + "THae" = "ഥേ" + "thae" = "തേ" + "tHaH" = "ഠഃ" + "thaH" = "തഃ" + "ThaH" = "ഥഃ" + "THaH" = "ഥഃ" + "THai" = "ഥൈ":"തൈ" + "tHai" = "ഠൈ":"തൈ" + "Thai" = "ഥൈ":"തൈ" + "thai" = "തൈ" + "thaM" = "തം":"ത്തം" + "ThaM" = "ഥം" + "tHaM" = "ഠം" + "THaM" = "ഥം" + "Thau" = "ഥൗ":"ഥൌ" + "tHau" = "ഠൗ":"ഠൌ" + "THau" = "ഥൗ":"ഥൌ" + "thau" = "തൗ":"തൌ" + "THe" = "ഥെ":"ദി":"തെ" + "tHe" = "ഠെ":"ദി":"തെ" + "The" = "ഥെ":"ദി":"തെ" + "tHE" = "ഠേ" + "ThE" = "ഥേ" + "the" = "തെ" + "THE" = "ഥേ" + "thE" = "തേ" + "thee" = "തീ":"ഥീ":"തേ" + "Thee" = "ഥീ":"തീ" + "tHee" = "ഠീ":"തീ" + "THee" = "ഥീ":"തീ" + "Thei" = "ഥൈ":"തെയ്" + "thei" = "തൈ":"തെയ്" + "tHei" = "ഠൈ":"തെയ്" + "THei" = "ഥൈ":"തെയ്" + "THi" = "ഥി":"തി":"ത്ഥി" + "Thi" = "ഥി":"തി":"ത്ഥി" + "tHi" = "ഠി":"തി":"ത്ഠി" + "thi" = "തി":"ത്തി":"ഥി":"ധി":"ത്ഥി":"ദ്ധി":"തൈ" + "THI" = "ഥീ" + "ThI" = "ഥീ" + "tHI" = "ഠീ" + "thI" = "തീ" + "thii" = "തീ":"ത്തീ":"ഥീ":"ധീ" + "THii" = "ഥീ" + "Thii" = "ഥീ" + "tHii" = "ഠീ" + "tho" = "തൊ":"തോ":"ത്തൊ" + "thO" = "തോ":"ത്തോ" + "tHo" = "ഠൊ" + "Tho" = "ഥൊ" + "ThO" = "ഥോ" + "THO" = "ഥോ" + "THo" = "ഥൊ" + "tHO" = "ഠോ" + "thoo" = "തൂ":"ഥൂ":"തോ" + "tHoo" = "ഥൂ":"തൂ" + "THoo" = "ഥൂ":"തൂ" + "Thoo" = "ഥൂ":"തൂ" + "Thou" = "ഥൌ" + "THou" = "ഥൌ" + "thou" = "തൌ" + "tHou" = "ഠൌ" + "THR" = "ഥൃ":"തൃ" + "ThR" = "ഥൃ":"തൃ" + "tHR" = "ഥൃ":"തൃ" + "thR" = "തൃ" + "THU" = "ഥൂ":"തൂ" + "tHu" = "ഥു":"തു" + "ThU" = "ഥൂ":"തൂ" + "tHU" = "ഥൂ":"തൂ" + "Thu" = "ഥു":"തു" + "THu" = "ഥു":"തു" + "thu" = "തു":"ത്തു" + "thU" = "തൂ" + "thuu" = "തൂ":"ഥൂ" + "tHuu" = "ഥൂ":"തൂ" + "Thuu" = "ഥൂ":"തൂ" + "THuu" = "ഥൂ":"തൂ" + "Ti" = "ഠി":"ടി":"തി":"തൈ" + "ti" = "ടി":"തി":"ട്ടി":"റ്റി":"ഠി":"ടൈ":"തൈ" + "tI" = "ടീ":"റ്റീ" + "TI" = "ഠീ" + "tii" = "ടീ" + "Tii" = "ഠീ" + "To" = "ഠൊ":"ടു":"തൊ" + "to" = "ടൊ":"ടു":"റ്റു" + "TO" = "ഠോ":"തോ" + "tO" = "ടോ" + "Too" = "ഠൂ":"ടൂ":"തൂ" + "too" = "ടൂ":"റ്റൂ":"തൂ" + "Tou" = "ഠൌ" + "tou" = "ടൌ" + "TR" = "ഠൃ" + "tR" = "ടൃ" + "TT^" = "റ്റ്" + "TT" = "റ്റ്":"റ്റു്":"ടി.ടി." + "TTa" = "റ്റ":"ട്ട" + "TTA" = "റ്റാ" + "TTaa" = "റ്റാ" + "TTah" = "റ്റഃ" + "TTai" = "റ്റൈ" + "TTaM" = "റ്റം" + "TTau" = "റ്റൗ":"റ്റൌ" + "TTe" = "റ്റെ" + "TTE" = "റ്റേ" + "TTee" = "റ്റീ" + "TTei" = "റ്റൈ" + "TTI" = "റ്റീ":"ടി.ടി.ഐ." + "TTi" = "റ്റി" + "TTii" = "റ്റീ" + "TTO" = "റ്റോ" + "TTo" = "റ്റൊ" + "TToo" = "റ്റൂ" + "TTou" = "റ്റൌ" + "TTR" = "റ്റൃ":"ടി.ടി.ആര്‍." + "TTu" = "റ്റു" + "TTU" = "റ്റൂ" + "TTuu" = "റ്റൂ" + "Tu" = "ഠു":"ടു":"തു" + "tu" = "ടു":"തു":"റ്റു":"ട്ടു" + "tU" = "ടൂ":"റ്റൂ" + "TU" = "ഠൂ" + "tuu" = "ടൂ":"തൂ":"റ്റൂ" + "Tuu" = "ഠൂ" + "@u" = ""ു" + "@U" = ""ൂ" + "u" = "ഉ":"ഊ":"യു" + "U" = "ഊ" + "@uu" = ""ൂ" + "uu" = "ഊ" + "v^" = "വ്" + "v" = "വ്":"വു്":"വ്വ്":"വ്വു്":"വി" + "V" = "വി" + "va" = "വ":"വാ" + "Va" = "വ":"വ്വ":"വാ" + "vA" = "വാ" + "Vaa" = "വാ" + "vaa" = "വാ" + "vae" = "വേ" + "vaH" = "വഃ" + "vai" = "വൈ":"വയ്" + "vaM" = "വം" + "vau" = "വൗ":"വൌ" + "ve" = "വെ" + "vE" = "വേ" + "vee" = "വീ":"വേ" + "vei" = "വൈയ്":"വൈ" + "Vi" = "വി" + "vI" = "വീ" + "vi" = "വി" + "vii" = "വീ" + "vo" = "വൊ":"വോ" + "vO" = "വോ" + "voo" = "വൂ" + "vou" = "വൌ" + "vR" = "വൃ" + "vu" = "വു" + "vU" = "വൂ" + "vuu" = "വൂ" + "W^" = "വ്" + "w^" = "വ്" + "w" = "വ്":"വു്":"വ്വ്":"ഡബ്ല്യൂ" + "W" = "വ്":"വ്വ്":"ഡബ്ല്യൂ" + "wa" = "വ" + "Wa" = "വ" + "wA" = "വാ" + "WA" = "വാ" + "Waa" = "വാ" + "waa" = "വാ" + "Wae" = "വേ" + "wae" = "വേ" + "WaH" = "വഃ" + "waH" = "വഃ" + "Wai" = "വൈ" + "wai" = "വൈ" + "WaM" = "വം" + "waM" = "വം" + "wau" = "വൗ" + "Wau" = "വൗ" + "We" = "വെ" + "WE" = "വേ" + "wE" = "വേ" + "we" = "വെ" + "Wee" = "വീ" + "wee" = "വീ" + "Wei" = "വൈ" + "wei" = "വൈ" + "wi" = "വി" + "wI" = "വീ" + "Wi" = "വി" + "WI" = "വീ" + "Wii" = "വീ" + "wii" = "വീ" + "wo" = "വൊ" + "Wo" = "വൊ" + "wO" = "വോ" + "WO" = "വോ" + "woo" = "വൂ" + "Woo" = "വൂ" + "wou" = "വൌ" + "Wou" = "വൌ" + "wR" = "വൃ" + "WR" = "വൃ" + "wu" = "വു" + "Wu" = "വു" + "WU" = "വൂ" + "wU" = "വൂ" + "wuu" = "വൂ" + "Wuu" = "വൂ" + "x^" = "ക്ഷ്" + "x" = "ക്ഷ്":"ക്സ്":"എക്സ്" + "X" = "എക്സ്" + "xa" = "ക്ഷ":"ക്സ":"ക്സെ" + "xA" = "ക്ഷാ" + "xaa" = "ക്ഷാ" + "xaH" = "ക്ഷഃ" + "xai" = "ക്ഷൈ" + "xaM" = "ക്ഷം" + "xau" = "ക്ഷൗ":"ക്ഷൌ" + "xe" = "ക്ഷെ":"ക്ഷേ":"ക്സെ":"ക്സി":"ക്ഷി" + "xE" = "ക്ഷേ" + "xee" = "ക്ഷീ" + "xei" = "ക്ഷൈ" + "xi" = "ക്ഷി":"ക്സി" + "xI" = "ക്ഷീ" + "xii" = "ക്ഷീ" + "xo" = "ക്ഷൊ" + "xO" = "ക്ഷോ" + "xoo" = "ക്ഷൂ" + "xou" = "ക്ഷൌ" + "xR" = "ക്ഷൃ" + "xu" = "ക്ഷു":"ക്സു" + "xU" = "ക്ഷൂ" + "xuu" = "ക്ഷൂ" + "y^" = "യ്" + "y" = "യ്":"യു്":"യ്യ്":"യ്യു്":"വൈ" + "Y" = "വൈ" + "Ya" = "യ" + "ya" = "യ" + "YA" = "യാ" + "yA" = "യാ" + "Yaa" = "യാ" + "yaa" = "യാ" + "yae" = "യേ" + "yaH" = "യഃ":"യഃ" + "Yai" = "യൈ" + "yai" = "യൈ" + "yaM" = "യം":"യം" + "yau" = "യൗ":"യൌ" + "Yau" = "യൗ":"യൌ" + "ye" = "യെ":"യേ" + "Ye" = "യെ":"യേ" + "YE" = "യേ":"യേ" + "yE" = "യേ" + "Yee" = "യീ" + "yee" = "യീ" + "Yei" = "യൈ" + "yei" = "യൈ" + "YI" = "യീ" + "Yi" = "യി" + "yi" = "യി" + "yI" = "യീ" + "Yii" = "യീ" + "yii" = "യീ" + "Yo" = "യൊ":"യോ" + "yo" = "യൊ" + "yO" = "യോ" + "YO" = "യോ" + "Yoo" = "യൂ" + "yoo" = "യൂ" + "you" = "യൌ":"യൂ":"യൂ":"യൌ" + "YR" = "യൃ" + "yR" = "യൃ" + "YU" = "യൂ" + "yU" = "യൂ" + "Yu" = "യു" + "yu" = "യു" + "Yuu" = "യൂ" + "yuu" = "യൂ" + "z^" = "ശ്" + "z" = "ശ്":"സ്":"ശു്":"ഇസഡ്" + "Z" = "ശ്":"സ്":"ഇസഡ്" + "za" = "ശ":"സ" + "zA" = "ശാ" + "zaa" = "ശാ":"സാ" + "zaH" = "ശഃ" + "zai" = "ശൈ" + "zaM" = "ശം" + "zau" = "ശൗ" + "zE" = "ശേ" + "ze" = "ശെ" + "zee" = "ശീ":"സീ" + "zei" = "ശൈ" + "zh^" = "ഴ്" + "zh" = "ഴ്":"ഴു്" + "zha" = "ഴ" + "zhA" = "ഴാ" + "zhaa" = "ഴാ" + "zhae" = "ഴേ" + "zhaH" = "ഴഃ" + "zhai" = "ഴൈ" + "zhaM" = "ഴം" + "zhau" = "ഴൗ":"ഴൌ" + "zhe" = "ഴെ" + "zhE" = "ഴേ" + "zhee" = "ഴീ" + "zhei" = "ഴൈ" + "zhI" = "ഴീ" + "zhi" = "ഴി" + "zhii" = "ഴീ" + "zhO" = "ഴോ" + "zho" = "ഴൊ" + "zhoo" = "ഴൂ" + "zhou" = "ഴൌ" + "zhR" = "ഴൃ" + "zhU" = "ഴൂ" + "zhu" = "ഴു" + "zhuu" = "ഴൂ" + "zi" = "ശി":"സി" + "zI" = "ശീ" + "zii" = "ശീ" + "zO" = "ശോ" + "zo" = "ശൊ" + "zoo" = "ശൂ":"സൂ" + "zou" = "ശൌ" + "zR" = "ശൃ" + "zu" = "ശു":"സു" + "zU" = "ശൂ" + "zuu" = "ശൂ" diff --git a/input-methods/ibus-sulekha/engine/main.py b/input-methods/ibus-sulekha/engine/main.py new file mode 100644 index 0000000..c64dcc7 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/main.py @@ -0,0 +1,96 @@ +# vim:set et sts=4 sw=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +import os +import sys +import getopt +import ibus +import gobject +import factory + +class IMApp: + def __init__(self, exec_by_ibus): + self.__component = ibus.Component("org.freedesktop.IBus.Sulekha", + "Sulekha Component", + "0.1.0", + "GPL", + "Peng Huang ") + self.__component.add_engine("sulekha", + "Sulekha", + "Sulekha Input method", + "ml_IN", + "GPL", + "Peng Huang ", + "", + "en") + self.__mainloop = gobject.MainLoop() + self.__bus = ibus.Bus() + self.__bus.connect("destroy", self.__bus_destroy_cb) + self.__factory = factory.EngineFactory(self.__bus) + if exec_by_ibus: + self.__bus.request_name("org.freedesktop.IBus.Sulekha", 0) + else: + self.__bus.register_component(self.__component) + + def run(self): + self.__mainloop.run() + + def __bus_destroy_cb(self, bus): + self.__mainloop.quit() + + +def launch_engine(exec_by_ibus): + IMApp(exec_by_ibus).run() + +def print_help(out, v = 0): + print >> out, "-i, --ibus execute by ibus." + print >> out, "-h, --help show this message." + print >> out, "-d, --daemonize daemonize ibus" + sys.exit(v) + +def main(): + daemonize = False + exec_by_ibus = False + shortopt = "hdi" + longopt = ["help", "daemonize", "ibus"] + try: + opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt) + except getopt.GetoptError, err: + print_help(sys.stderr, 1) + + for o, a in opts: + if o in("-h", "--help"): + print_help(sys.stdout) + elif o in ("-d", "--daemonize"): + daemonize = True + elif o in ("-i", "--ibus"): + exec_by_ibus = True + else: + print >> sys.stderr, "Unknown argument: %s" % o + print_help(sys.stderr, 1) + + if daemonize: + if os.fork(): + sys.exit() + + launch_engine(exec_by_ibus) + +if __name__ == "__main__": + main() diff --git a/input-methods/ibus-sulekha/engine/sulekha.py b/input-methods/ibus-sulekha/engine/sulekha.py new file mode 100644 index 0000000..eca5de5 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/sulekha.py @@ -0,0 +1,223 @@ +# vim:set et sts=4 sw=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +import gobject +import pango +import ibus +import keymap +import autocomplete +from ibus import keysyms +from ibus import modifier + +class SulekhaEngine(ibus.EngineBase): + + def __init__(self, bus, object_path): + super(SulekhaEngine, self).__init__(bus, object_path) + self.__keymap = keymap.Keymap("swanalekha_ml_IN") + self.__input_method="en_US" + self.__autocomplete=autocomplete.Autocomplete() + self.__is_invalidate = False + self.__preedit_string = u"" + self.__current_word = u"" + self.__lookup_table = ibus.LookupTable() + self.__prop_list = ibus.PropList() + self.__prop_list.append(ibus.Property(u"test", icon = u"ibus-locale")) + + def process_key_event(self, keyval, state): + # ignore key release events + is_press = ((state & modifier.RELEASE_MASK) == 0) + if not is_press: + return False + + if self.__preedit_string: + if keyval == keysyms.Return: + if self.__lookup_table.get_number_of_candidates() > 0: + self.__commit_string(self.__lookup_table.get_current_candidate().text) + else: + self.__commit_string(self.__preedit_string) + return True + elif keyval == keysyms.Escape: + self.__preedit_string = u"" + self.__update() + return True + elif keyval == keysyms.BackSpace: + self.__preedit_string = self.__preedit_string[:-1] + self.__current_word = self.__current_word[:-1] + self.__invalidate() + return True + elif keyval == keysyms.space: + self.__commit_string(self.__preedit_string) + previous_word=self.__current_word + self.__current_word = u"" + self.__update_prediction(previous_word) + return False + elif keyval >= keysyms._1 and keyval <= keysyms._9: + index = keyval - keysyms._1 + candidates = self.__lookup_table.get_candidates_in_current_page() + if index >= len(candidates): + return False + candidate = candidates[index].text + self.__commit_string(candidate) + return True + elif keyval == keysyms.Page_Up or keyval == keysyms.KP_Page_Up: + self.page_up() + return True + elif keyval == keysyms.Page_Down or keyval == keysyms.KP_Page_Down: + self.page_down() + return True + elif keyval == keysyms.Up: + self.cursor_up() + return True + elif keyval == keysyms.Down: + self.cursor_down() + return True + elif keyval == keysyms.Left or keyval == keysyms.Right: + return True + if keyval in xrange(keysyms.a, keysyms.z + 1) or \ + keyval in xrange(keysyms.A, keysyms.Z + 1): + if state & (modifier.CONTROL_MASK | modifier.ALT_MASK) == 0: + current_string = self.__preedit_string + if self.__input_method == "en_US": + self.__preedit_string += unichr(keyval) + else: + if self.__keymap.get_candidates(current_string+unichr(keyval))== None: + current_list = self.__keymap.get_candidates(current_string) + self.__commit_string(current_list[0]) + self.__preedit_string = unichr(keyval) + self.__update() + else: + self.__preedit_string += unichr(keyval) + self.__invalidate() + return True + else: + if keyval < 128 and self.__preedit_string: + self.__commit_string(self.__preedit_string) + + return False + + def __invalidate(self): + if self.__is_invalidate: + return + self.__is_invalidate = True + gobject.idle_add(self.__update, priority = gobject.PRIORITY_LOW) + + + def page_up(self): + if self.__lookup_table.page_up(): + self.page_up_lookup_table() + return True + return False + + def page_down(self): + if self.__lookup_table.page_down(): + self.page_down_lookup_table() + return True + return False + + def cursor_up(self): + if len(self.__lookup_table.get_candidates_in_current_page()) == 0: + return False + if self.__lookup_table.cursor_up(): + self.update_lookup_table(self.__lookup_table, True, True) + curr_text=self.__lookup_table.get_current_candidate().text + self.update_preedit(curr_text, None, len(curr_text), True) + return True + + + def cursor_down(self): + if len(self.__lookup_table.get_candidates_in_current_page()) == 0: + return False + if self.__lookup_table.cursor_down(): + self.update_lookup_table(self.__lookup_table, True, True) + curr_text=self.__lookup_table.get_current_candidate().text + self.update_preedit(curr_text, None, len(curr_text), True) + return True + + def __commit_string(self, text): + self.commit_text(ibus.Text(text)) + self.__current_word = self.__current_word + text + self.__preedit_string = u"" + self.__update() + + def __update(self): + preedit_len = len(self.__preedit_string) + attrs = ibus.AttrList() + self.__lookup_table.clean() + if self.__input_method == "en_US": + if preedit_len > 0 : + autocompletion_list = self.__get_autocompletion() + for text in autocompletion_list: + self.__lookup_table.append_candidate(ibus.Text(text)) + else: + if preedit_len > 0: + attrs.append(ibus.AttributeForeground(0xff0000, 0, preedit_len)) + candidate_list = self.__keymap.get_candidates(self.__preedit_string) + for text in candidate_list: + self.__lookup_table.append_candidate(ibus.Text(text)) + + self.update_auxiliary_text(ibus.Text(self.__preedit_string, attrs), preedit_len > 0) + attrs.append(ibus.AttributeUnderline(pango.UNDERLINE_SINGLE, 0, preedit_len)) + self.update_preedit_text(ibus.Text(self.__preedit_string, attrs), preedit_len, preedit_len > 0) + self.__update_lookup_table() + self.__is_invalidate = False + def __update_prediction(self, previous_word): + #self.__lookup_table.clean() + + #if previous_word: + # self.__lookup_table.append_candidate(ibus.Text(previous_word+"Prediction1")) + # self.__lookup_table.append_candidate(ibus.Text(previous_word+"Prediction2")) + #self.update_preedit_text(ibus.Text(self.__preedit_string, None), 0, False) + #self.__update_lookup_table() + #self.__is_invalidate = False + + def __get_autocompletion(self): + if self.__input_method == "en_US": + if(len(self.__preedit_string)<3): + return [self.__current_word] + autocompletion_candidates=self.__autocomplete.get_autocompletion_suggestions(self.__preedit_string) + else: + if(len(self.__current_word)<3): + return [self.__current_word] + autocompletion_candidates=self.__autocomplete.get_autocompletion_suggestions(self.__current_word) + return autocompletion_candidates + + def __update_lookup_table(self): + visible = self.__lookup_table.get_number_of_candidates() > 0 + self.update_lookup_table(self.__lookup_table, visible) + + def update_preedit(self, preedit_string, preedit_attrs, cursor_pos, visible): + if preedit_attrs == None: + preedit_attrs = ibus.AttrList() + attr = ibus.AttributeUnderline(ibus.ATTR_UNDERLINE_SINGLE, 0, len(preedit_string)) + preedit_attrs.append(attr) + super(SulekhaEngine, self).update_preedit_text(ibus.Text(preedit_string, preedit_attrs), cursor_pos, visible) + + def focus_in(self): + self.register_properties(self.__prop_list) + + def focus_out(self): + pass + + def reset(self): + pass + + def property_activate(self, prop_name): + print "PropertyActivate(%s)" % prop_name + diff --git a/input-methods/ibus-sulekha/engine/sulekha.xml b/input-methods/ibus-sulekha/engine/sulekha.xml new file mode 100644 index 0000000..0cd5ff2 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/sulekha.xml @@ -0,0 +1,27 @@ + + + + org.freedesktop.IBus.Sulekha + Sulekha Component + /usr/libexec/ibus-engine-sulekha --ibus + 1.1.0.20090501 + Santhosh Thottingal <santhosh.thottingal@gmail.com> + GPL + http://code.google.com/p/ibus + ibus-sulekha + + + + + sulekha + ml_IN + GPL + Santhosh Thottingal <santhosh.thottingal@gmail.com> + /usr/share/ibus-sulekha/icons/ibus-sulekha.svg + us + Sulekha + Sulekha Input Method + 99 + + + diff --git a/input-methods/ibus-sulekha/engine/sulekha.xml.in b/input-methods/ibus-sulekha/engine/sulekha.xml.in new file mode 100644 index 0000000..0165946 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/sulekha.xml.in @@ -0,0 +1,27 @@ + + + + org.freedesktop.IBus.Sulekha + Sulekha Component + ${libexecdir}/ibus-engine-sulekha --ibus + 1.1.0.20090501 + Santhosh Thottingal <santhosh.thottingal@gmail.com> + GPL + http://code.google.com/p/ibus + ibus-sulekha + + + + + sulekha + ml_IN + GPL + Santhosh Thottingal <santhosh.thottingal@gmail.com> + ${pkgdatadir}/icons/ibus-sulekha.svg + us + Sulekha + Sulekha Input Method + 99 + + + diff --git a/input-methods/ibus-sulekha/engine/sulekha.xml.in.in b/input-methods/ibus-sulekha/engine/sulekha.xml.in.in new file mode 100644 index 0000000..e6ed112 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/sulekha.xml.in.in @@ -0,0 +1,27 @@ + + + + org.freedesktop.IBus.Sulekha + Sulekha Component + ${libexecdir}/ibus-engine-sulekha --ibus + @VERSION@ + Santhosh Thottingal <santhosh.thottingal@gmail.com> + GPL + http://code.google.com/p/ibus + ibus-sulekha + + + + + sulekha + ml_IN + GPL + Santhosh Thottingal <santhosh.thottingal@gmail.com> + ${pkgdatadir}/icons/ibus-sulekha.svg + us + Sulekha + Sulekha Input Method + 99 + + + diff --git a/input-methods/ibus-sulekha/engine/trainer.py b/input-methods/ibus-sulekha/engine/trainer.py new file mode 100644 index 0000000..6adba41 --- /dev/null +++ b/input-methods/ibus-sulekha/engine/trainer.py @@ -0,0 +1,133 @@ +# vim:set et sts=4 sw=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +import sqlite3 +import re +import codecs +import getopt +import sys +tz = re.compile('-[0-2]\d:00$') +class Trainer(): + def __init__(self, language="en_US"): + self.__connection = sqlite3.connect('sulekha.db') + # Create a cursor object to do the interacting. + self.__cursor = self.__connection.cursor() + self.__language=language + + def get_frequency(self, string): + freq=0 + records = self.__cursor.execute("select frequency \ + from words_" + self.__language + \ + " where \ + language = ? and word = ?" , (self.__language, string)) + #print records.fetchall() + for record in records : + freq = int(record[0]) + return freq + + def __insert_word(self, word): + self.__cursor.execute("INSERT INTO words_"+self.__language + \ + " (id, word, frequency, language) \ + VALUES(NULL, ? , 1, ?)" , (word, self.__language)) + print ">* "+ word + " ("+ self.__language + " : 0)" + self.__connection .commit() + def __update_word(self, word, frequency): + self.__cursor.execute("UPDATE words_"+self.__language + \ + " set frequency= ?, \ + language = ? where word = ? " , (frequency, self.__language, word)) + print "> "+ word + " ("+ self.__language + " : ",frequency , ")" + self.__connection .commit() + def learn_from_file(self, file_name): + corpus_file = codecs. open(file_name,encoding='utf-8', errors='ignore') + while 1: + text=corpus_file.readline() + if text=="": + break + text = unicode(text) + words=text.split() + for word in words: + word=word.strip() + self.add_word(word) + + def create_tables(self, recreate): + try: + self.__cursor.execute("select count(word) from words_"+self.__language ) + except: + recreate=True + if recreate: + print "Creating tables" + self.__cursor.execute("drop TABLE words_"+self.__language) + self.__cursor.execute("CREATE TABLE words_"+self.__language + \ + " ( id INTEGER PRIMARY KEY, \ + word VARCHAR(100), \ + frequency NUMERIC(8), \ + language VARCHAR(10) )") + self.__connection .commit() + + def add_word(self, word): + freq=self.get_frequency(word) + if(freq==0): + self.__insert_word(word) + else: + freq= freq+1 + self.__update_word(word, freq) + def set_langauge(self, language) : + self.language=language + def close(self): + self.__connection .close() + self.__curser .close() +def print_help(out, v = 0): + print >> out, "-l, --lang language." + print >> out, "-i, --input-file input text file." + print >> out, "-h, --help show this message." + print >> out, "-r, --recreate recreate the database" + sys.exit(v) + + +if __name__ == '__main__': + shortopt = "hl:i:r" + longopt = ["help", "lang", "input-file", "recreate"] + language="en_US" + input_file="/usr/share/dict/words" + recreate=False + opts=None + try: + opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt) + except getopt.GetoptError, err: + print_help(sys.stderr, 1) + if len(opts)==0: + print_help(sys.stderr, 1) + + for o, a in opts: + if o in("-h", "--help"): + print_help(sys.stdout) + elif o in ("-l", "--lang"): + language = a + elif o in ("-i", "--input-file"): + input_file = a + elif o in ("-r", "--recreate"): + recreate=True + else: + print >> sys.stderr, "Unknown argument: %s" % o + print_help(sys.stderr, 1) + trainer = Trainer(language) + trainer.create_tables(recreate) + trainer.learn_from_file (input_file) + diff --git a/input-methods/ibus-sulekha/icons/Makefile.am b/input-methods/ibus-sulekha/icons/Makefile.am new file mode 100644 index 0000000..f7b60f9 --- /dev/null +++ b/input-methods/ibus-sulekha/icons/Makefile.am @@ -0,0 +1,29 @@ +# vim:set noet ts=4: +# +# ibus-sulekha - The Sulekha engine for IBus +# +# Copyright(c) 2009 Santhosh Thottingal +# +# 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. + +icons_DATA = \ + ibus-sulekha.svg + $(NULL) + +iconsdir = $(pkgdatadir)/icons + +EXTRA_DIST = \ + $(icons_DATA) \ + $(NULL) diff --git a/input-methods/ibus-sulekha/icons/ibus-sulekha.svg b/input-methods/ibus-sulekha/icons/ibus-sulekha.svg new file mode 100644 index 0000000..928985b --- /dev/null +++ b/input-methods/ibus-sulekha/icons/ibus-sulekha.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + മമ + + diff --git a/input-methods/ibus-sulekha/icons/sulekha.png b/input-methods/ibus-sulekha/icons/sulekha.png new file mode 100644 index 0000000..facc945 Binary files /dev/null and b/input-methods/ibus-sulekha/icons/sulekha.png differ -- cgit