summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanthosh Thottingal <santhosh.thottingal@gmail.com>2009-05-03 21:31:17 +0530
committerSanthosh Thottingal <santhosh.thottingal@gmail.com>2009-05-03 21:31:17 +0530
commit6d33918b6b8e90f80b3ea78b659fea155b2cb1e0 (patch)
treeeab2fef7f698715a15f78bf416d35624f58c2375
parent7a81f78656d6a386231c0497819ace63a0079798 (diff)
downloadAnjaliOldLipi.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.tar.gz
AnjaliOldLipi.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.tar.xz
AnjaliOldLipi.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.zip
initial version of ibus-sulekha
m---------input-methods/ibus-sulekha0
-rw-r--r--input-methods/ibus-sulekha/.gitignore36
-rw-r--r--input-methods/ibus-sulekha/AUTHORS2
-rw-r--r--input-methods/ibus-sulekha/COPYING339
-rw-r--r--input-methods/ibus-sulekha/ChangeLog0
-rw-r--r--input-methods/ibus-sulekha/Makefile.am63
-rw-r--r--input-methods/ibus-sulekha/NEWS0
-rw-r--r--input-methods/ibus-sulekha/README1
-rwxr-xr-xinput-methods/ibus-sulekha/autogen.sh11
-rw-r--r--input-methods/ibus-sulekha/configure.ac77
-rw-r--r--input-methods/ibus-sulekha/engine/Makefile.am63
-rw-r--r--input-methods/ibus-sulekha/engine/autocomplete.py53
-rw-r--r--input-methods/ibus-sulekha/engine/factory.py60
-rw-r--r--input-methods/ibus-sulekha/engine/ibus-engine-sulekha29
-rw-r--r--input-methods/ibus-sulekha/engine/ibus-engine-sulekha.in29
-rw-r--r--input-methods/ibus-sulekha/engine/keymap.py65
-rw-r--r--input-methods/ibus-sulekha/engine/keymaps/inscript_ml_IN95
-rw-r--r--input-methods/ibus-sulekha/engine/keymaps/swanalekha_ml_IN1578
-rw-r--r--input-methods/ibus-sulekha/engine/main.py96
-rw-r--r--input-methods/ibus-sulekha/engine/sulekha.py223
-rw-r--r--input-methods/ibus-sulekha/engine/sulekha.xml27
-rw-r--r--input-methods/ibus-sulekha/engine/sulekha.xml.in27
-rw-r--r--input-methods/ibus-sulekha/engine/sulekha.xml.in.in27
-rw-r--r--input-methods/ibus-sulekha/engine/trainer.py133
-rw-r--r--input-methods/ibus-sulekha/icons/Makefile.am29
-rw-r--r--input-methods/ibus-sulekha/icons/ibus-sulekha.svg81
-rw-r--r--input-methods/ibus-sulekha/icons/sulekha.pngbin0 -> 1794 bytes
27 files changed, 3144 insertions, 0 deletions
diff --git a/input-methods/ibus-sulekha b/input-methods/ibus-sulekha
deleted file mode 160000
-Subproject 1d7c4cc697322fc8cbd21f3fe0b49cd41c563dd
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 <santhosh.thottingal@gmail.com>
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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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.
+
+ <signature of Ty Coon>, 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
--- /dev/null
+++ b/input-methods/ibus-sulekha/ChangeLog
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 <santhosh.thottingal@gmail.com>
+#
+# 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
--- /dev/null
+++ b/input-methods/ibus-sulekha/NEWS
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 <shawn.p.huang@gmail.com>
+#
+# 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 <santhosh.thottingal@gmail.com>
+#
+# 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 <santhosh.thottingal@gmail.com>
+#
+# 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 <shawn.p.huang@gmail.com>
+#
+# 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 <santhosh.thottingal@gmail.com>"
+ 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 <shawn.p.huang@gmail.com>
+#
+# 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 <shawn.p.huang@gmail.com>
+#
+# 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 <santhosh.thiotttingal@gmail.com>
+#
+#
+# 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 <santhosh.thottingal@gmail.com>, 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 <santhosh.thottingal@gmail.com>
+#
+# 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 <shawn.p.huang@gmail.com>")
+ self.__component.add_engine("sulekha",
+ "Sulekha",
+ "Sulekha Input method",
+ "ml_IN",
+ "GPL",
+ "Peng Huang <shawn.p.huang@gmail.com>",
+ "",
+ "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 <santhosh.thottingal@gmail.com>
+#
+# 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- filename: sulekha.xml -->
+<component>
+ <name>org.freedesktop.IBus.Sulekha</name>
+ <description>Sulekha Component</description>
+ <exec>/usr/libexec/ibus-engine-sulekha --ibus</exec>
+ <version>1.1.0.20090501</version>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <license>GPL</license>
+ <homepage>http://code.google.com/p/ibus</homepage>
+ <textdomain>ibus-sulekha</textdomain>
+
+ <!-- for static engines -->
+ <engines>
+ <engine>
+ <name>sulekha</name>
+ <language>ml_IN</language>
+ <license>GPL</license>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <icon>/usr/share/ibus-sulekha/icons/ibus-sulekha.svg</icon>
+ <layout>us</layout>
+ <longname>Sulekha</longname>
+ <description>Sulekha Input Method</description>
+ <rank>99</rank>
+ </engine>
+ </engines>
+</component>
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 @@
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<!-- filename: sulekha.xml -->
+<component>
+ <name>org.freedesktop.IBus.Sulekha</name>
+ <description>Sulekha Component</description>
+ <exec>${libexecdir}/ibus-engine-sulekha --ibus</exec>
+ <version>1.1.0.20090501</version>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <license>GPL</license>
+ <homepage>http://code.google.com/p/ibus</homepage>
+ <textdomain>ibus-sulekha</textdomain>
+
+ <!-- for static engines -->
+ <engines>
+ <engine>
+ <name>sulekha</name>
+ <language>ml_IN</language>
+ <license>GPL</license>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <icon>${pkgdatadir}/icons/ibus-sulekha.svg</icon>
+ <layout>us</layout>
+ <longname>Sulekha</longname>
+ <description>Sulekha Input Method</description>
+ <rank>99</rank>
+ </engine>
+ </engines>
+</component>
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 @@
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<!-- filename: sulekha.xml -->
+<component>
+ <name>org.freedesktop.IBus.Sulekha</name>
+ <description>Sulekha Component</description>
+ <exec>${libexecdir}/ibus-engine-sulekha --ibus</exec>
+ <version>@VERSION@</version>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <license>GPL</license>
+ <homepage>http://code.google.com/p/ibus</homepage>
+ <textdomain>ibus-sulekha</textdomain>
+
+ <!-- for static engines -->
+ <engines>
+ <engine>
+ <name>sulekha</name>
+ <language>ml_IN</language>
+ <license>GPL</license>
+ <author>Santhosh Thottingal &lt;santhosh.thottingal@gmail.com&gt;</author>
+ <icon>${pkgdatadir}/icons/ibus-sulekha.svg</icon>
+ <layout>us</layout>
+ <longname>Sulekha</longname>
+ <description>Sulekha Input Method</description>
+ <rank>99</rank>
+ </engine>
+ </engines>
+</component>
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 <santhosh.thottingal@gmail.com>
+#
+# 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 <santhosh.thottingal@gmail.com>
+#
+# 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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.0"
+ width="48"
+ height="48"
+ id="svg2383">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3237">
+ <stop
+ id="stop3239"
+ style="stop-color:#256fef;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3241"
+ style="stop-color:#256fef;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3177">
+ <stop
+ id="stop3179"
+ style="stop-color:#0000fb;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3251"
+ style="stop-color:#0000fb;stop-opacity:0.49803922"
+ offset="0.83333331" />
+ <stop
+ id="stop3181"
+ style="stop-color:#0000fb;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="5.5772877"
+ y1="22.953403"
+ x2="42.784321"
+ y2="22.953403"
+ id="linearGradient3187"
+ xlink:href="#linearGradient3177"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="pad" />
+ <linearGradient
+ x1="5.0772877"
+ y1="22.953403"
+ x2="43.284321"
+ y2="22.953403"
+ id="linearGradient3243"
+ xlink:href="#linearGradient3237"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ id="layer1"
+ style="opacity:1">
+ <flowRoot
+ id="flowRoot2393"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion2395"><rect
+ width="42.857143"
+ height="44.285713"
+ x="2.5714285"
+ y="2"
+ id="rect2397" /></flowRegion><flowPara
+ id="flowPara2399">മമ</flowPara></flowRoot> <text
+ x="-0.42857155"
+ y="42.142857"
+ id="text2401"
+ xml:space="preserve"
+ style="font-size:100px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#2682ff;fill-opacity:1;stroke:#2331ef;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"><tspan
+ x="-0.42857155"
+ y="42.142857"
+ id="tspan2403"
+ style="fill:#2682ff;fill-opacity:1;stroke:#2331ef;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">മ</tspan></text>
+ </g>
+</svg>
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
--- /dev/null
+++ b/input-methods/ibus-sulekha/icons/sulekha.png
Binary files differ