diff options
author | Santhosh Thottingal <santhosh.thottingal@gmail.com> | 2009-05-03 21:31:17 +0530 |
---|---|---|
committer | Santhosh Thottingal <santhosh.thottingal@gmail.com> | 2009-05-03 21:31:17 +0530 |
commit | 6d33918b6b8e90f80b3ea78b659fea155b2cb1e0 (patch) | |
tree | eab2fef7f698715a15f78bf416d35624f58c2375 /input-methods | |
parent | 7a81f78656d6a386231c0497819ace63a0079798 (diff) | |
download | Rachana.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.tar.gz Rachana.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.tar.xz Rachana.git-6d33918b6b8e90f80b3ea78b659fea155b2cb1e0.zip |
initial version of ibus-sulekha
Diffstat (limited to 'input-methods')
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 <santhosh.thottingal@gmail.com></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 <santhosh.thottingal@gmail.com></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 <santhosh.thottingal@gmail.com></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 <santhosh.thottingal@gmail.com></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 <santhosh.thottingal@gmail.com></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 <santhosh.thottingal@gmail.com></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 Binary files differnew file mode 100644 index 0000000..facc945 --- /dev/null +++ b/input-methods/ibus-sulekha/icons/sulekha.png |