pax_global_header00006660000000000000000000000064134664737150014532gustar00rootroot0000000000000052 comment=bb6349428de332faae90ed54322d1a341ae6f978 ibus-anthy-1.5.11/000077500000000000000000000000001346647371500137025ustar00rootroot00000000000000ibus-anthy-1.5.11/.github/000077500000000000000000000000001346647371500152425ustar00rootroot00000000000000ibus-anthy-1.5.11/.github/ISSUE_TEMPLATE.md000066400000000000000000000020041346647371500177430ustar00rootroot00000000000000Please fill in the following items if you don't know the root cause. Which distribution and version?: (E.g. Fedora 27. Check /etc/fedora-release) Which desktop environment and version?: (E.g. GNOME 3.24. Check $XDG_CURRENT_DESKTOP and your ISO image.) Which session type?: (X11 or Wayland. Check $XDG_SESSION_TYPE) Which application and version?: (E.g. gedit 3.24, leafpad, kate, xterm) IBus version?: (Run `ibus version`) ibus-anthy version?: (Open "IBus Anthy preferences" dialog (`ibus-setup-anthy`) from IBus panel menu or ibus-setup, and select "About" tab) Issue description: Steps to reproduce: 1. 1. 1. 1. Can you reproduce your problem when you restart ibus-daemon? (yes / no): (Run `ibus exit` and `ibus-daemon --xim &`) Do you see any errors when you run ibus-daemon with the verbose option?: (Run `ibus-daemon --xim --verbose &` and look at the output when you encounter your problem.) Can you reproduce your problem with a new user account instead of the current your account? (yes / no): ibus-anthy-1.5.11/.gitignore000066400000000000000000000005301346647371500156700ustar00rootroot00000000000000*.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-anthy*.tar.* ibus-anthy.spec ibus-anthy-1.5.11/AUTHORS000066400000000000000000000004241346647371500147520ustar00rootroot00000000000000 Huang Peng Hideaki ABE Takao Fujiwara Translators: ----------- fr.po: Humbert Julien zh_CN.po: Huang Peng ja.po: UTUMI Hirosi ibus-anthy-1.5.11/COPYING000066400000000000000000000431031346647371500147360ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ibus-anthy-1.5.11/ChangeLog000066400000000000000000000000001346647371500154420ustar00rootroot00000000000000ibus-anthy-1.5.11/Makefile.am000066400000000000000000000044341346647371500157430ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2019 Red Hat, Inc. # # 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. SUBDIRS = \ m4 \ po \ data \ gir \ engine \ icons \ setup \ tests \ $(NULL) ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = \ autogen.sh \ ibus-anthy.spec.in \ python-config.py \ $(NULL) noinst_DIST = \ $(NULL) DISTCLEANFILES = \ po/stamp-it \ $(NULL) dist-hook: if test -d .git ; then \ git log --name-status --date=iso > $(distdir)/ChangeLog ; \ PREV_MICRO_VERSION=`expr $(PACKAGE_VERSION_MICRO) - 1`; \ PREV_VERSION=\ "$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR).$$PREV_MICRO_VERSION"; \ echo "Changes in $(PACKAGE_NAME) $(PACKAGE_VERSION)" \ > $(distdir)/NEWS; \ echo "" >> $(distdir)/NEWS; \ git shortlog $$PREV_VERSION...$(PACKAGE_VERSION) \ >> $(distdir)/NEWS; \ echo "" >> $(distdir)/NEWS; \ git log $$PREV_VERSION...$(PACKAGE_VERSION) --reverse \ --pretty=format:'%s (%an) %h' >> $(distdir)/NEWS; \ fi rpm: dist @PACKAGE_NAME@.spec rpmbuild -bb \ --define "_sourcedir `pwd`" \ --define "_builddir `pwd`" \ --define "_srcrpmdir `pwd`" \ --define "_rpmdir `pwd`" \ --define "_specdir `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 ibus-anthy-1.5.11/NEWS000066400000000000000000000000001346647371500143670ustar00rootroot00000000000000ibus-anthy-1.5.11/README000066400000000000000000000115101346647371500145600ustar00rootroot00000000000000ibus-anthy It is a Japanese input engine for IBus. Installation ============ The following is the online document: https://github.com/ibus/ibus/wiki/Install #1. Build & Install IBus * Obtain source code IBus source code can either be download from IBus download page (https://github.com/ibus/ibus/releases) (If you use ibus for the first time, the download page is more stable than git.) $ zcat ibus-xx.tar.gz | tar xfv - $ cd ibus-xx * The 'xx' is a version number. or obtained from git with following commands: $ git clone git://github.com/ibus/ibus.git ibus $ cd ibus * 'git clone --help' shows the usage. * Build and Install After source code is extracted from tarball or git, use following command to build and install: $ ./autogen.sh --prefix='/usr' --sysconfdir='/etc' --libdir='/usr/lib' \ --enable-gtk-doc $ make $ sudo make install (Change the paths '/usr', '/etc', '/usr/lib' according to your system configuration.) or if you use Linux system, probably rpmbuild is easier to build applications. # cp ibus-xx.tar.gz /usr/src/$distributer/SOURCE # rpmbuild -bp ibus/ibus.spec.in # rpmbuild -bb ibus/ibus.spec.in * Register IBus as a Gtk immodule For i386 $ sudo update-gtk-immodules i386-redhat-linux-gnu or $ sudo gtk-query-immodules-2.0-32 \ /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so >> \ /etc/gtk-2.0/i386-redhat-linux-gnu/gtk.immodules For x86_64 $ sudo update-gtk-immodules x86_64-redhat-linux-gnu or $ sudo gtk-query-immodules-2.0-64 \ /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so >> \ /etc/gtk-2.0/x86_64-redhat-linux-gnu/gtk.immodules (Replace the string i386-redhat-linux-gnu or path /usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so with the setting that matches your system.) * Update icon caches $ ls /usr/share/icons/*/*/*/ibus* /usr/share/icons/hicolor/16x16/apps/ibus-keyboard.png /usr/share/icons/hicolor/22x22/apps/ibus-keyboard.png /usr/share/icons/hicolor/24x24/apps/ibus-keyboard.png /usr/share/icons/hicolor/32x32/apps/ibus-keyboard.png /usr/share/icons/hicolor/48x48/apps/ibus-keyboard.png /usr/share/icons/hicolor/scalable/apps/ibus-keyboard.svg $ sudo gtk-update-icon-cache /usr/share/icons/hicolor #2. Build & Install Anthy Download anthy source from Anthy Web (http://en.sourceforge.jp/projects/anthy/) $ zcat anthy-xx.tar.gz | tar xfv - $ cd anthy $ ./configure --prefix=/usr $ make $ sudo make install * The 'xx' is a version number. #3. Build & Install Kasumi Kasumi is not required but probably useful for you. Download kasumi source from Kasumi Web (http://en.sourceforge.jp/projects/kasumi/) $ zcat kasumi-xx.tar.gz | tar xfv - $ cd kasumi $ ./configure --prefix=/usr $ make $ sudo make install * The 'xx' is a version number. #4. Build & Install IBus Anthy Download ibus-anthy source from IBus download page (https://github.com/ibus/ibus-anthy/releases) or Use git clone git://github.com/ibus/ibus-anthy.git ibus-anthy $ zcat ibus-anthy-xx.tar.gz | tar xfv - $ cd ibus-anthy $ ./autogen.sh --prefix=/usr $ make $ sudo make install * The 'xx' is a version number. or if you use Linux system, probably rpmbuild is easier to build applications. # cp ibus-anthy-xx.tar.gz /usr/src/$distributer/SOURCE # rpmbuild -bp ibus-anthy/ibus-anthy.spec.in # rpmbuild -bb ibus-anthy/ibus-anthy.spec.in or if you use Linux system, probably you can install rpm with yum. # yum install --enablerepo=rawhide ibus-anthy #5. Run iBus * Run ibus-daemon to start ibus daemon with either way: * Distribution tool likes im-chooser, im-switch * Add a new /etc/xdg/autostart/ibus.desktop to invoke 'ibus-daemon --xim' * Manual $ pkill -9 ibus $ ps -ef | grep ibus $ /usr/bin/ibus-daemon --xim & After ibus-daemin is invoked, Run ibus-setup to set the preference, enable input methods, also start ibus daemon. e.g. $ ps -ef | grep ibus foo 15735 15518 0 11:30 pts/3 00:00:17 /usr/bin/ibus-daemon --xim foo 20037 15735 0 12:58 pts/3 00:00:00 /usr/libexec/ibus-gconf foo 20039 15735 0 12:58 pts/3 00:00:06 python /usr/share/ibus/ui/gtk/main.py foo 20041 1 0 12:58 pts/3 00:00:00 /usr/libexec/ibus-x11 --kill-daemon foo 20042 15735 0 12:58 pts/3 00:00:01 python /usr/share/ibus-anthy/engine/main.py --ibus #6. Run gnome, kde or old X applications * Set following environment varible for Gtk: $ GTK_IM_MODULE=ibus For KDE: $ QT_IM_MODULE=ibus and other X applications $ XMODIFIERS="@im=ibus" e.g. $ env GTK_IM_MODULE=ibus gedit To enable input method, Type Ctrl + Space. Bug Reports =========== https://github.com/ibus/ibus/wiki/BugReport Questions ========= http://groups.google.com/group/ibus-user http://groups.google.com/group/ibus-devel Also refer AUTHORS file ibus-anthy-1.5.11/autogen.sh000077500000000000000000000020261346647371500157030ustar00rootroot00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. test -n "$srcdir" || srcdir=$(dirname "$0") test -n "$srcdir" || srcdir=. olddir=$(pwd) cd "$srcdir" (test -f configure.ac) || { echo "*** ERROR: Directory '$srcdir' does not look like the top-level project directory ***" exit 1 } # shellcheck disable=SC2016 PKG_NAME=$(autoconf --trace 'AC_INIT:$1' configure.ac) if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then echo "*** WARNING: I am going to run 'configure' with no arguments." >&2 echo "*** If you wish to pass any to it, please specify them on the" >&2 echo "*** '$0' command line." >&2 echo "" >&2 fi aclocal --install || exit 1 autoreconf --verbose --force --install || exit 1 cd "$olddir" if [ "$NOCONFIGURE" = "" ]; then $srcdir/configure "$@" || exit 1 if [ "$1" = "--help" ]; then exit 0 else echo "Now type 'make' to compile $PKG_NAME" || exit 1 fi else echo "Skipping configure process." fi ibus-anthy-1.5.11/codereview.settings000066400000000000000000000001531346647371500176170ustar00rootroot00000000000000# This file is used by "git cl" to get code review information. CODE_REVIEW_SERVER: codereview.appspot.com ibus-anthy-1.5.11/configure.ac000066400000000000000000000372461346647371500162040ustar00rootroot00000000000000# vim:set et ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2019 Red Hat, Inc. # # 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. dnl - if not 1, append datestamp to the version number. m4_define([ibus_anthy_released], [1]) m4_define([ibus_anthy_major_version], [1]) m4_define([ibus_anthy_minor_version], [5]) m4_define([ibus_anthy_micro_version], [11]) m4_define([ibus_abi_current], [5]) m4_define([ibus_abi_revision], [m4_eval(100 * ibus_anthy_minor_version + ibus_anthy_micro_version)]) m4_define([ibus_abi_age], [0]) m4_define(ibus_maybe_datestamp, m4_esyscmd([if test x]ibus_anthy_released[ != x1; then date +.%Y%m%d | tr -d '\n\r'; fi])) m4_define([ibus_anthy_version], ibus_anthy_major_version.ibus_anthy_minor_version.ibus_anthy_micro_version[]ibus_maybe_datestamp) m4_define([ibus_required_version], [1.5.0]) m4_define([glib_required_version], [2.26.0]) AC_INIT([ibus-anthy], [ibus_anthy_version], [https://github.com/ibus/ibus-anthy/issues],[ibus-anthy]) AM_INIT_AUTOMAKE([1.10]) AC_GNU_SOURCE AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) dnl - define PACKAGE_VERSION_* variables AS_VERSION AS_NANO AM_SANITY_CHECK AM_MAINTAINER_MODE(enable) AC_DISABLE_STATIC AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CXX AC_HEADER_STDC LT_INIT dnl - For dislpay Date m4_define(ibus_datedisplay, m4_esyscmd(date '+%a %b %d %Y' | tr -d '\n\r')) DATE_DISPLAY="ibus_datedisplay" AC_SUBST(DATE_DISPLAY) dnl - check anthy PKG_CHECK_MODULES(ANTHY, [anthy-unicode], [ANTHY_PC=anthy-unicode], [ PKG_CHECK_MODULES(ANTHY, [anthy], [ANTHY_PC=anthy]) ]) AC_SUBST(ANTHY_PC) CFLAGS_backup="$CFLAGS" CFLAGS="$ANTHY_CFLAGS $CFLAGS" AC_CHECK_DECLS([ NTH_UNCONVERTED_CANDIDATE, NTH_KATAKANA_CANDIDATE, NTH_HIRAGANA_CANDIDATE, NTH_HALFKANA_CANDIDATE],, AC_MSG_ERROR([Could not find NTH_*_CANDIDATE values in anthy.h]), [[#include ]]) CFLAGS="$CFLAGS_backup" PKG_CHECK_MODULES(GOBJECT2, [ gobject-2.0 >= glib_required_version ]) dnl - GObject introspection GOBJECT_INTROSPECTION_REQUIRE([0.6.8]) dnl - check libanthy directory AC_ARG_WITH(anthygobject-libdir, [AC_HELP_STRING([--with-anthygobject-libdir=PATH], [file path of libanthygobject.so])], [ANTHY_GOBJECT_LIBDIR="$withval"], [ANTHY_GOBJECT_LIBDIR='$(libdir)']) AC_SUBST(ANTHY_GOBJECT_LIBDIR) dnl - check anthygir directory AC_ARG_WITH(anthygoject-girdir, [AC_HELP_STRING([--with-anthygobject-girdir=PATH], [file path of anthy.gir])], [ANTHY_GOBJECT_GIRDIR="$withval"], [ANTHY_GOBJECT_GIRDIR='$(datadir)/gir-1.0']) AC_SUBST(ANTHY_GOBJECT_GIRDIR) dnl - check anthygir directory AC_ARG_WITH(anthygobject-typelibsdir, [AC_HELP_STRING([--with-anthygobject-typelibsdir=PATH], [file path of anthy.typelibs])], [ANTHY_GOBJECT_TYPELIBSDIR="$withval"], [ANTHY_GOBJECT_TYPELIBSDIR='$(libdir)/girepository-1.0']) AC_SUBST(ANTHY_GOBJECT_TYPELIBSDIR) dnl - check env AC_PATH_PROG(ENV_IBUS_TEST, env) AC_SUBST(ENV_IBUS_TEST) dnl - define python version AC_ARG_WITH(python, AS_HELP_STRING([--with-python[=PATH]], [Select python2 or python3]), [PYTHON=$with_python], [] ) dnl export $pyexecdir using existent $PYTHON AM_PATH_PYTHON([2.5]) dnl Decided to separate python3 directory from python2 directory here dnl because engine/table.py includes unicode array so it's better to dnl use __future__.unicode_literals. dnl python3 string are always str. dnl In case __future__.unicode_literals is imported, all the literal dnl 'a' is treated as unicode and u'a' is not needed in python2. dnl But str is not unicode so we need to convert str to unicode in dnl python2 for all non-literal variables likes return values of dnl gettext, IBusConfig.get_value, get methods in GTK+ and so on. dnl It would causes to complicate python2 codes if merge python2 and dnl python3 in the same file. dnl if sys.version < '3': dnl return unicode(gettext(a), 'utf-8') dnl else: dnl return gettext(a) case "$PYTHON_VERSION" in 3.*) enable_python3=yes enable_python2=no ;; *) enable_python3=no enable_python2=yes ;; esac AM_CONDITIONAL([ENABLE_PYTHON2], [test x"$enable_python2" = x"yes"]) AM_CONDITIONAL([ENABLE_PYTHON3], [test x"$enable_python3" = x"yes"]) dnl - check the supported ibus version AC_MSG_CHECKING([if your ibus version is supported]) IBUS_VERSION_TEST=" from gi.repository import IBus def _ibus_check_version(v): major = IBus.MAJOR_VERSION minor = IBus.MINOR_VERSION micro = IBus.MICRO_VERSION if (major, minor, micro) < tuple(map(int, (v.split('.')))): raise ValueError('Required ibus %s but version of ibus is %d.%d.%d' % \ (v, major, minor, micro)) _ibus_check_version('ibus_required_version') exit(0) " $PYTHON -c "$IBUS_VERSION_TEST" if test $? -eq 0; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([no]) fi dnl - engine-env AC_MSG_CHECKING([what are the enviroments for ibus-engine-anthy]) AC_ARG_WITH(engine-env, [AC_HELP_STRING([--engine-env=ENVIRONMENTS], [ibus-engine-anthy environments likes "LD_LIBRARY_PATH=/usr/lib/anthy" for libanthy.so. default is none])], [engine_env="$withval"], [engine_env='none']) AC_MSG_RESULT($engine_env) ENV_IBUS_ENGINE="" if test x"$engine_env" != xnone; then ENV_IBUS_ENGINE="$ENV_IBUS_TEST $engine_env" fi AC_SUBST(ENV_IBUS_ENGINE) dnl - check pygtk2 AC_MSG_CHECKING([whether you enable pygtk2 anthy]) AC_ARG_ENABLE(pygtk2-anthy, AS_HELP_STRING([--enable-pygtk2-anthy=no/yes], [Install pygtk2 anthy default=no]), [], enable_pygtk2_anthy=no) AC_MSG_RESULT($enable_pygtk2_anthy) if test x"$enable_pygtk2_anthy" = xyes; then AM_CONDITIONAL(HAVE_PYGTK2_ANTHY, true) dnl - check swig AC_PATH_PROG(SWIG, swig) if test x"$SWIG" = x""; then AC_MSG_ERROR([can not find swig]) fi AC_SUBST(SWIG) AC_PATH_PROG(PYTHON_CONFIG, python$PYTHON_VERSION-config) if test x"$PYTHON_CONFIG" = x""; then AC_PATH_PROG(PYTHON_CONFIG, python-config-$PYTHON_VERSION) fi if test x"$PYTHON_CONFIG" = x""; then AC_PATH_PROG(PYTHON_CONFIG, python-config) fi if test x"$PYTHON_CONFIG" != x""; then PYTHON_CFLAGS=`$PYTHON_CONFIG --includes` PYTHON_LIBS=`$PYTHON_CONFIG --libs` else PYTHON_CFLAGS=`$PYTHON $srcdir/python-config.py --includes` PYTHON_LIBS=`$PYTHON $srcdir/python-config.py --libs` fi AC_SUBST(PYTHON_CFLAGS) AC_SUBST(PYTHON_LIBS) else AM_CONDITIONAL(HAVE_PYGTK2_ANTHY, false) fi dnl - check file path of Anthy zipcode.t AC_ARG_WITH(anthy-zipcode, [AC_HELP_STRING([--with-anthy-zipcode=FILE], [file path of Anty zipcode.t])], [ANTHY_ZIPCODE_FILE="$withval"], [ANTHY_ZIPCODE_FILE="$datadir/anthy/zipcode.t"]) test "x$prefix" = xNONE && prefix=$ac_default_prefix eval ANTHY_ZIPCODE_FILE=$ANTHY_ZIPCODE_FILE eval ANTHY_ZIPCODE_FILE=$ANTHY_ZIPCODE_FILE AC_SUBST(ANTHY_ZIPCODE_FILE) AM_CONDITIONAL([ENABLE_ZIPCODE], [test -f "$ANTHY_ZIPCODE_FILE" ]) dnl - check file path of kasumi bin AC_ARG_WITH(kasumi-exec, [AC_HELP_STRING([--with-kasumi-exec=FILE], [file path of kasumi bin])], [KASUMI_EXEC_FILE="$withval"], [KASUMI_EXEC_FILE="$bindir/kasumi"]) AC_SUBST(KASUMI_EXEC_FILE) dnl - check file path of kasumi icon AC_ARG_WITH(kasumi-icon, [AC_HELP_STRING([--with-kasumi-icon=FILE], [file path of kasumi icon])], [KASUMI_ICON_FILE="$withval"], [KASUMI_ICON_FILE="$datadir/pixmaps/kasumi.png"]) AC_SUBST(KASUMI_ICON_FILE) dnl - check preference icon name # Replaced the legacy icon gtk-preferences with preferences-desktop # because the icon is included in gnome-icon-theme-legacy package. # The following fix would be needed for old non-GNOME desktops. # https://github.com/ibus/ibus/commit/dd6acfa5013b # Otherwise you can specify the preference icon for your desktop. AC_ARG_WITH(icon-preference, [AC_HELP_STRING([--with-icon-preference=ICON_NAME], [preference icon name.])], [ICON_PREFERENCE="$withval"], [ICON_PREFERENCE='preferences-desktop']) AC_SUBST(ICON_PREFERENCE) dnl - check private png AC_MSG_CHECKING([if you install the private png file]) AC_ARG_ENABLE(private-png, AS_HELP_STRING([--enable-private-png=no/yes], [Install ibus-anthy.png default=no]), [], enable_private_png=no) AC_MSG_RESULT($enable_private_png) if test x"$enable_private_png" = xyes; then AM_CONDITIONAL(HAVE_PRIVATE_PNG, true) else AM_CONDITIONAL(HAVE_PRIVATE_PNG, false) fi dnl - check on-off keys AC_ARG_WITH(on-off-keys, [AC_HELP_STRING([--with-on-off-keys="'KEY1','KEY2',..."], [Anthy default on-off keys. default=" 'Zenkaku_Hankaku', 'Ctrl+J'".])], [ON_OFF_KEYS="$withval"], [ON_OFF_KEYS="'Zenkaku_Hankaku', 'Ctrl+J'"]) AC_SUBST(ON_OFF_KEYS) dnl - check hotkeys for ibus-anthy which is used for ibus bridge mode. dnl - Normally you don't need this so could be HOTKEYS="no" AC_ARG_WITH(hotkeys, [AC_HELP_STRING([--with-hotkeys=HOTKEYS], [Use hotkeys for ibus bridge mode. (available value: yes/no/keys)])], [HOTKEYS="$withval"], [HOTKEYS="no"]) if test x"$HOTKEYS" = x"no"; then HOTKEYS_XML="" elif test x"$HOTKEYS" = x"yes"; then HOTKEYS_XML="Control+space,Zenkaku_Hankaku" elif test x"$HOTKEYS" = x; then HOTKEYS_XML="Control+space,Zenkaku_Hankaku" elif test x"$HOTKEYS" = xnull; then HOTKEYS_XML="" else HOTKEYS_XML="${HOTKEYS}" fi AC_SUBST(HOTKEYS_XML) dnl - check symbol in IBus.EngineDesc AC_MSG_CHECKING([if IBus.EngineDesc has get_symbol]) SYMBOL_CHAR='あ' SYMBOL_CHAR_INT=0x3042 SYMBOL_TEST="from gi.repository import IBus exit(not hasattr(IBus.EngineDesc, 'get_symbol')) " $PYTHON -c "$SYMBOL_TEST" if test $? -eq 0; then SYMBOL_XML="${SYMBOL_CHAR}" AC_MSG_RESULT([yes]) else SYMBOL_XML="" AC_MSG_ERROR([ibus 1.4 or later supports symbol in IBus.EngineDesc]) fi AC_SUBST(SYMBOL_CHAR_INT) AC_SUBST(SYMBOL_XML) dnl - check symbol in IBus.Property AC_MSG_CHECKING([if IBus.Property has get_symbol]) SYMBOL_TEST="from gi.repository import IBus exit(not hasattr(IBus.Property, 'get_symbol')) " $PYTHON -c "$SYMBOL_TEST" if test $? -eq 0; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([ibus 1.5 or later supports symbol in IBus.Property]) fi dnl - check XKB option in IBus.EngineDesc AC_MSG_CHECKING([if IBus.EngineDesc has get_layout_option]) LAYOUT_OPTION_TEST="from gi.repository import IBus exit(not hasattr(IBus.EngineDesc, 'get_layout_option')) " $PYTHON -c "$LAYOUT_OPTION_TEST" if test $? -eq 0; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([ibus 1.5 or later supports layout_option in IBus.EngineDesc]) fi AC_MSG_CHECKING([if IBus.EngineDesc has get_version]) DESC_VERSION_TEST="from gi.repository import IBus exit(not hasattr(IBus.EngineDesc, 'get_version')) " $PYTHON -c "$DESC_VERSION_TEST" if test $? -eq 0; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([ibus 1.5 or later supports version in IBus.EngineDesc]) fi dnl - check icon_prop_key in IBus.EngineDesc AC_MSG_CHECKING([if IBus.EngineDesc has get_icon_prop_key]) ICON_PROP_KEY_TEST="from gi.repository import IBus exit(not hasattr(IBus.EngineDesc, 'get_icon_prop_key')) " $PYTHON -c "$ICON_PROP_KEY_TEST" if test $? -eq 0; then ICON_PROP_KEY_XML="InputMode" AC_MSG_RESULT([yes]) else ICON_PROP_KEY_XML="" AC_MSG_RESULT([ibus 1.5.11 or later supports icon-prop-key in IBus.EngineDesc]) fi AC_SUBST(ICON_PROP_KEY_XML) dnl - set ibus-anthy layout AC_ARG_WITH(layout, [AC_HELP_STRING([--with-layout=LAYOUT], [Define the layout. the default is 'jp'. Probably you could set 'default'.])], [LAYOUT="$withval"], [LAYOUT="jp"]) if test x"$LAYOUT" = x; then LAYOUT="jp" fi LAYOUT_XML="${LAYOUT}" AC_SUBST(LAYOUT) AC_SUBST(LAYOUT_XML) dnl libtool versioning dnl dnl If LT_VERSION_INFO="lt_current:lt_revision:lt_age", libibus is dnl libibus-ibus_api_version.so.(lt_current - lt_age).lt_age.lt_revision dnl If the abi is changed, but it is compatible with last version, dnl ibus_abi_current++, ibus_abi_age++; dnl If the abi is not compatible with last version, dnl ibus_abi_current++, ibus_abi_age = 0; m4_define([lt_current], [ibus_abi_current]) m4_define([lt_revision], [ibus_abi_revision]) m4_define([lt_age], [ibus_abi_age]) LT_VERSION_INFO="lt_current:lt_revision:lt_age" AC_SUBST(LT_VERSION_INFO) dnl - define GETTEXT_* variables GETTEXT_PACKAGE=ibus-anthy AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED( GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Define to the read-only architecture-independent data directory.] ) AM_GNU_GETTEXT_VERSION([0.19.8]) AM_GNU_GETTEXT([external]) dnl - OUTPUT files AC_CONFIG_FILES([ po/Makefile.in Makefile ibus-anthy.spec data/Makefile gir/Makefile engine/Makefile engine/python2/Makefile engine/python2/anthy.inputMethod.xml.in engine/python2/default.inputMethod.xml.in engine/python3/Makefile engine/python3/anthy.inputMethod.xml.in engine/python3/default.inputMethod.xml.in setup/Makefile setup/python2/Makefile setup/python3/Makefile tests/Makefile icons/Makefile m4/Makefile ]) AC_OUTPUT echo " IBus-Anthy version ibus_anthy_version GOBJECT2_CFLAGS $GOBJECT2_CFLAGS GOBJECT2_LIBS $GOBJECT2_LIBS ANTHY_PC $ANTHY_PC ANTHY_CFLAGS $ANTHY_CFLAGS ANTHY_LIBS $ANTHY_LIBS ANTHY_GOBJECT_LIBDIR $ANTHY_GOBJECT_LIBDIR ANTHY_GOBJECT_GIRDIR $ANTHY_GOBJECT_GIRDIR ANTHY_GOBJECT_TYPELIBSDIR $ANTHY_GOBJECT_TYPELIBSDIR LT_VERSION_INFO $LT_VERSION_INFO ENV_IBUS_ENGINE $ENV_IBUS_ENGINE HAVE_PYGTK2_ANTHY $enable_pygtk2_anthy python $PYTHON Enable python2 $enable_python2 Enable python3 $enable_python3 python-config $PYTHON_CONFIG PYTHON_CFLAGS $PYTHON_CFLAGS PYTHON_LIBS $PYTHON_LIBS ANTHY_ZIPCODE_FILE $ANTHY_ZIPCODE_FILE KASUMI_EXEC_FILE $KASUMI_EXEC_FILE KASUMI_ICON_FILE $KASUMI_ICON_FILE ICON_PREFERENCE $ICON_PREFERENCE ON_OFF_KEYS $ON_OFF_KEYS HOTKEYS_XML $HOTKEYS_XML SYMBOL_XML $SYMBOL_XML ICON_PROP_KEY_XML $ICON_PROP_KEY_XML LAYOUT_XML $LAYOUT_XML " ibus-anthy-1.5.11/data/000077500000000000000000000000001346647371500146135ustar00rootroot00000000000000ibus-anthy-1.5.11/data/Makefile.am000066400000000000000000000061321346647371500166510ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2010-2018 Takao Fujiwara # Copyright (c) 2010-2018 Red Hat, Inc. # # 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. dicts_DATA = \ emoji.t \ era.t \ oldchar.t \ symbol.t \ $(NULL) dictsdir = $(pkgdatadir)/dicts # rf. i18n metainfo.xml # http://www.freedesktop.org/software/appstream/docs/sect-Quickstart-Translation.html # https://blogs.gnome.org/hughsie/2016/01/25/appdata-and-the-gettext-domain/ metainfo_in_files = ibus-anthy.appdata.xml.in metainfo_DATA = org.freedesktop.ibus.engine.anthy.metainfo.xml metainfodir=$(datadir)/metainfo schemas_in_files = org.freedesktop.ibus.engine.anthy.gschema.xml.in schemas_DATA = $(schemas_in_files:.xml.in=.xml) schemasdir = $(datadir)/glib-2.0/schemas CLEANFILES = \ $(metainfo_DATA) \ $(schemas_DATA) \ emoji.t \ $(NULL) $(metainfo_DATA): $(metainfo_in_files) Makefile $(AM_V_GEN)$(MSGFMT) --xml --template $< -d $(top_srcdir)/po -o $@ $(schemas_DATA): $(schemas_in_files) $(SED) -e "s|\@ANTHY_ZIPCODE_FILE\@|$(ANTHY_ZIPCODE_FILE)|g" \ -e "s|\@KASUMI_EXEC_FILE\@|$(KASUMI_EXEC_FILE)|g" \ -e "s|\@KASUMI_ICON_FILE\@|$(KASUMI_ICON_FILE)|g" \ -e "s|\@ON_OFF_KEYS\@|$(ON_OFF_KEYS)|g" \ -e "s|\@pkgdatadir\@|$(pkgdatadir)|g" \ $< > $@ emoji.t: emoji-each.t emoji-emoji.t @echo "Generate $@"; \ $(SED) -e '/^#/d' $(srcdir)/emoji-emoji.t > emoji-emoji.t.$$$$; \ $(SED) -e "/^#@EMOJI_EMOJI@/r emoji-emoji.t.$$$$" \ $(srcdir)/emoji-each.t > emoji-each.t.$$$$; \ $(SED) -e '/^#@EMOJI_EMOJI@/d' emoji-each.t.$$$$ > emoji.t; \ rm emoji-emoji.t.$$$$ emoji-each.t.$$$$; \ $(NULL) if ENABLE_ZIPCODE dicts_DATA += zipcode.t zipcode.t: $(ANTHY_ZIPCODE_FILE) @echo "Generate $@"; \ $(PYTHON) zipcode-textdic.py $<; \ $(NULL) CLEANFILES += zipcode.t endif install-data-hook: if test -z "$(DESTDIR)"; then \ glib-compile-schemas $(schemasdir); \ fi uninstall-hook: SCHEMAS_FILES=`ls $(schemasdir)/*.gschema.xml` || true; \ if test -z "$$SCHEMAS_FILES" && \ test -f $(schemasdir)/gschemas.compiled; then \ rm $(schemasdir)/gschemas.compiled; \ fi EXTRA_DIST = \ $(metainfo_in_files) \ $(schemas_in_files) \ emoji-each.t \ emoji-emoji.t \ era.t \ oldchar.t \ symbol.t \ zipcode-textdic.py \ $(NULL) ibus-anthy-1.5.11/data/emoji-each.t000066400000000000000000001654531346647371500170170ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2015-2019 Takao Fujiwara # Copyright (c) 2015-2019 Red Hat, Inc. # # 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. # # # Fedora font package is google-noto-emoji-fonts # Ubuntu font package is fonts-noto-color-emoji # # This file was imported from im-dict-ja # im-dict-ja - Japanese word dictionary set for input method # http://github.com/fujiwarat/im-dict-ja ใ€‚ใ€‚ใ€‚ #T35*500 ๐Ÿ˜’ ใ€Œใ€ #T35*500 ๐Ÿ˜’ ใ‚ใ„ใ™ใใ‚Šใƒผใ‚€ #T35*500 ๐Ÿจ ใ‚ใ‹ใ†ใ‚“ใจ #T35*500 ๐Ÿ‘ค ใ‚ใ‹ใ†ใ‚“ใจ #T35*500 ๐Ÿ‘ฅ ใ‚ใ‹ใใชใ‚‹ #T35*500 ๐Ÿ˜ณ ใ‚ใ‹ใกใ‚ƒใ‚“ #T35*500 ๐Ÿ‘ถ ใ‚ใ‹ใกใ‚ƒใ‚“ #T35*500 ๐Ÿ‘ผ ใ‚ใ‹ใกใ‚ƒใ‚“ #T35*500 ๐Ÿคฑ ใ‚ใ‹ใ‚Š #T35*500 ๐Ÿช” ใ‚ใ‹ใ‚“ใผใ† #T35*500 ๐Ÿ‘ถ ใ‚ใ‹ใ‚“ใผใ† #T35*500 ๐Ÿ‘ผ ใ‚ใ‹ใ‚“ใผใ† #T35*500 ๐Ÿคฑ ใ‚ใใ—ใ‚… #T35*500 ๐Ÿค ใ‚ใใ—ใ‚… #T35*500 ๐Ÿ‘ญ ใ‚ใใ—ใ‚… #T35*500 ๐Ÿ‘ซ ใ‚ใใ—ใ‚… #T35*500 ๐Ÿ‘ฌ ใ‚ใ— #T35*500 ๐Ÿฆต ใ‚ใ— #T35*500 ๐Ÿฆถ ใ‚ใ—ใ‚ใจ #T35*500 ๐Ÿ‘ฃ ใ‚ใ› #T35*500 ๐Ÿ’ฆ ใ‚ใ› #T35*500 ๐Ÿ˜“ ใ‚ใ› #T35*500 ๐Ÿ˜ฐ ใ‚ใฃใ‹ใ‚“ในใƒผ #T35*500 ๐Ÿ˜› ใ‚ใฃใ‹ใ‚“ในใƒผ #T35*500 ๐Ÿ˜œ ใ‚ใฃใ‹ใ‚“ในใƒผ #T35*500 ๐Ÿ˜ ใ‚ใคใ„ #T35*500 ๐Ÿฅต ใ‚ใช #T35*500 ๐Ÿ•ณ ใ‚ใฒใ‚‹ #T35*500 ๐Ÿฆ† ใ‚ใผใ‹ใฉ #T35*500 ๐Ÿฅ‘ ใ‚ใ‚ #T35*500 โ˜‚ ใ‚ใ‚ #T35*500 โ˜” ใ‚ใ‚ #T35*500 โ›† ใ‚ใ‚ #T35*500 โ›ˆ ใ‚ใ‚ #T35*500 ๐ŸŒง ใ‚ใ‚ #T35*500 ๐Ÿฌ ใ‚ใ‚ #T35*500 ๐Ÿญ ใ‚ใ‚ใตใจ #T35*500 ๐Ÿˆ ใ‚ใ‚ใƒผใฐ #T35*500 ๐Ÿฆ  ใ‚ใ‚„ใ—ใ„ #T35*500 ๐Ÿคจ ใ‚ใ‚„ใพใ‚‹ #T35*500 ๐Ÿ™ ใ‚ใ‚‰ใ„ใใพ #T35*500 ๐Ÿฆ ใ‚ใ‚Š #T35*500 ๐Ÿœ ใ‚ใ‚Šใใ„ #T35*500 ๐Ÿฆก ใ‚ใ‚‹ใฆใƒใ‚ใฃใจ #T35*500 ๐Ÿฅ ใ‚ใ‚‹ใฑใ‹ #T35*500 ๐Ÿฆ™ ใ‚ใ‚“ใœใ‚“ใดใ‚“ #T35*500 ๐Ÿงท ใ‚ใ‚“ใฆใช #T35*500 ๐Ÿ“ก ใ‚ใ‚“ใชใ„ #T35*500 ๐Ÿ’ ใ„ใ„ใˆ #T35*500 ๐Ÿ™… ใ„ใˆ #T35*500 ๐Ÿ  ใ„ใˆ #T35*500 ๐Ÿก ใ„ใ‹ #T35*500 ๐Ÿฆ‘ ใ„ใ‹ใ‚Š #T35*500 โš“ ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ’ข ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ˜  ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ˜ก ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ˜ฃ ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ˜ค ใ„ใ‹ใ‚Š #T35*500 ๐Ÿ˜พ ใ„ใ‘ใ„ #T35*500 ๐Ÿป ใ„ใ‘ใ„ #T35*500 ๐Ÿผ ใ„ใ‘ใ„ #T35*500 ๐Ÿฝ ใ„ใ‘ใ„ #T35*500 ๐Ÿพ ใ„ใ‘ใ„ #T35*500 ๐Ÿฟ ใ„ใ‘ใ„ #T35*500 ๐Ÿฆฐ ใ„ใ‘ใ„ #T35*500 ๐Ÿฆฑ ใ„ใ‘ใ„ #T35*500 ๐Ÿฆฒ ใ„ใ‘ใ„ #T35*500 ๐Ÿฆณ ใ„ใ‘ใ„ #T35*500 โ€ ใ„ใ‘ใ„ #T35*500 โ™‚ ใ„ใ‘ใ„ #T35*500 โ™€ ใ„ใ‘ใ„ #T35*500 ๏ธŽ ใ„ใ‘ใ„ #T35*500 ๏ธ ใ„ใ—ใ‚„ใใ„ใ‚‚ #T35*500 ๐Ÿ  ใ„ใ™ #T35*500 ๐Ÿฆผ ใ„ใ™ #T35*500 ๐Ÿฆฝ ใ„ใ™ #T35*500 ๐Ÿช‘ ใ„ใ›ใˆใณ #T35*500 ๐Ÿฆž ใ„ใ›ใ #T35*500 โ›ฌ ใ„ใกใ„ #T35*500 ๐Ÿฅ‡ ใ„ใกใ” #T35*500 ๐Ÿ“ ใ„ใกใญใ‚“ใ›ใ„ #T35*500 ๐ŸŽ’ ใ„ใกใญใ‚“ใ›ใ„ #T35*500 ๐ŸŽ“ ใ„ใฆใ– #T35*500 โ™ ใ„ใงใ‚“ใ— #T35*500 ๐Ÿงฌ ใ„ใจ #T35*500 ๐Ÿงต ใ„ใจ #T35*500 ๐Ÿงถ ใ„ใช #T35*500 ๐ŸŒพ ใ„ใฌ #T35*500 ๐Ÿ• ใ„ใฌ #T35*500 ๐Ÿฉ ใ„ใฌ #T35*500 ๐Ÿถ ใ„ใฌ #T35*500 ๐Ÿฆฎ ใ„ใฌ #T35*500 ๐Ÿฆบ ใ„ใญ #T35*500 ๐ŸŒพ ใ„ใฎใ—ใ— #T35*500 ๐Ÿ— ใ„ใฎใ‚Š #T35*500 ๐Ÿคž ใ„ใ‚„ #T35*500 โ˜น ใ„ใ‚„ #T35*500 ๐Ÿ˜ง ใ„ใ‚„ #T35*500 ๐Ÿ™… ใ„ใ‚‹ใ‹ #T35*500 ๐Ÿฌ ใ„ใ‚ #T35*500 ๐Ÿป ใ„ใ‚ #T35*500 ๐Ÿผ ใ„ใ‚ #T35*500 ๐Ÿฝ ใ„ใ‚ #T35*500 ๐Ÿพ ใ„ใ‚ #T35*500 ๐Ÿฟ ใ„ใ‚ #T35*500 ๐Ÿฆฐ ใ„ใ‚ #T35*500 ๏ธ ใ„ใ‚ใ–ใ‚‹ #T35*500 ๐Ÿ™Š ใ†ใ„ใ™ใใƒผ #T35*500 ๐Ÿฅƒ ใ†ใˆใงใƒใ‚“ใ #T35*500 ๐Ÿ‘ฐ ใ†ใŠใ– #T35*500 โ™“ ใ†ใ‘ใคใ‘ #T35*500 ๐Ÿ’ ใ†ใ•ใŽ #T35*500 ๐Ÿ‡ ใ†ใ•ใŽ #T35*500 ๐Ÿฐ ใ†ใ— #T35*500 ๐Ÿ‚ ใ†ใ— #T35*500 ๐Ÿƒ ใ†ใ— #T35*500 ๐Ÿ„ ใ†ใ— #T35*500 ๐Ÿฎ ใ†ใŸใŒใ† #T35*500 ๐Ÿคจ ใ†ใกใ‚…ใ†ใ˜ใ‚“ #T35*500 ๐Ÿ‘ฝ ใ†ใพ #T35*500 ๐ŸŽ ใ†ใพ #T35*500 ๐Ÿด ใ†ใพ #T35*500 ๐Ÿฆ“ ใ†ใ‚“ใ“ #T35*500 ๐Ÿ’ฉ ใˆใ„ใŒ #T35*500 ๐ŸŽž ใˆใ„ใŒ #T35*500 ๐ŸŽฅ ใˆใ„ใŒ #T35*500 ๐ŸŽฆ ใˆใ„ใŒ #T35*500 ๐ŸŽฌ ใˆใ„ใ›ใ„ #T35*500 ๐Ÿ“ก ใˆใ„ใ‚†ใ† #T35*500 ๐Ÿฆธ ใˆใ„ใ‚†ใ† #T35*500 ๐Ÿฆน ใˆใŒใŠ #T35*500 โ˜บ ใˆใŒใŠ #T35*500 โ˜ป ใˆใŒใŠ #T35*500 ๐Ÿ˜€ ใˆใŒใŠ #T35*500 ๐Ÿ˜ ใˆใŒใŠ #T35*500 ๐Ÿ˜‚ ใˆใŒใŠ #T35*500 ๐Ÿ˜ƒ ใˆใŒใŠ #T35*500 ๐Ÿ˜„ ใˆใŒใŠ #T35*500 ๐Ÿ˜… ใˆใŒใŠ #T35*500 ๐Ÿ˜† ใˆใŒใŠ #T35*500 ๐Ÿ˜‡ ใˆใŒใŠ #T35*500 ๐Ÿ˜ˆ ใˆใŒใŠ #T35*500 ๐Ÿ˜‰ ใˆใŒใŠ #T35*500 ๐Ÿ˜Š ใˆใŒใŠ #T35*500 ๐Ÿ˜‹ ใˆใŒใŠ #T35*500 ๐Ÿ˜Œ ใˆใŒใŠ #T35*500 ๐Ÿ˜ ใˆใŒใŠ #T35*500 ๐Ÿ˜Ž ใˆใŒใŠ #T35*500 ๐Ÿ˜ธ ใˆใŒใŠ #T35*500 ๐Ÿ˜น ใˆใŒใŠ #T35*500 ๐Ÿ˜บ ใˆใŒใŠ #T35*500 ๐Ÿ˜ป ใˆใŒใŠ #T35*500 ๐Ÿ™‚ ใˆใŒใŠ #T35*500 ๐Ÿ™‹ ใˆใŒใŠ #T35*500 สฌ ใˆใŒใŠ #T35*500 ๐Ÿคฃ ใˆใŒใŠ #T35*500 ๐Ÿคฉ ใˆใŒใŠ #T35*500 ๐Ÿคช ใˆใŒใŠ #T35*500 ๐Ÿคญ ใˆใŒใŠ #T35*500 ๐Ÿฅฐ ใˆใŒใŠ #T35*500 ๐Ÿฅณ ใˆใณ #T35*500 ๐Ÿฆ ใˆใณ #T35*500 ๐Ÿฆž ใˆใณใตใ‚‰ใ„ #T35*500 ๐Ÿค ใˆใ‚€ใงใƒใƒผ #T35*500 ๐Ÿ’ฝ #@EMOJI_EMOJI@ ใˆใ‚“ #T35*500 ๐ŸŸ  ใˆใ‚“ #T35*500 ๐ŸŸก ใˆใ‚“ #T35*500 ๐ŸŸข ใˆใ‚“ #T35*500 ๐ŸŸฃ ใˆใ‚“ #T35*500 ๐ŸŸค ใˆใ‚“ใใ #T35*500 ๐Ÿงบ ใˆใ‚“ใฐใ‚“ใชใ’ #T35*500 ๐Ÿฅ ใˆใ‚“ใดใค #T35*500 โœŽ ใˆใ‚“ใดใค #T35*500 โœ ใˆใ‚“ใดใค #T35*500 โœ ใŠใ„ใ‚ใ„ #T35*500 ๐ŸŽ ใŠใ„ใ‚ใ„ #T35*500 ๐ŸŽŽ ใŠใ„ใ‚ใ„ #T35*500 ๐ŸŽ ใŠใ„ใ‚ใ„ #T35*500 ๐ŸŽ• ใŠใ„ใ‚ใ„ #T35*500 ๐Ÿ’ ใŠใ„ใ‚ใ„ #T35*500 ๐Ÿฅ‚ ใŠใ†ใ‹ใ‚“ #T35*500 โ™” ใŠใ†ใ‹ใ‚“ #T35*500 โ™• ใŠใ†ใ‹ใ‚“ #T35*500 โ™š ใŠใ†ใ‹ใ‚“ #T35*500 โ™› ใŠใ†ใ‹ใ‚“ #T35*500 ๐Ÿ‘‘ ใŠใ†ใ—ใ– #T35*500 โ™‰ ใŠใ†ใ˜ #T35*500 ๐Ÿคด ใŠใ†ใ˜ใ‚‡ #T35*500 ๐Ÿ‘ธ ใŠใ†ใ‚€ #T35*500 ๐Ÿฆœ ใŠใˆ #T35*500 ๐Ÿคข ใŠใˆ #T35*500 ๐Ÿคฎ ใŠใŠใ‹ใฟ #T35*500 ๐Ÿบ ใŠใŠใ”ใˆ #T35*500 โšž ใŠใŠใ”ใˆ #T35*500 โšŸ ใŠใ‹ใ— #T35*500 ๐Ÿฅž ใŠใ‹ใ— #T35*500 ๐Ÿก ใŠใ‹ใ— #T35*500 ๐Ÿฆ ใŠใ‹ใ— #T35*500 ๐Ÿง ใŠใ‹ใ— #T35*500 ๐Ÿจ ใŠใ‹ใ— #T35*500 ๐Ÿฉ ใŠใ‹ใ— #T35*500 ๐Ÿช ใŠใ‹ใ— #T35*500 ๐Ÿฌ ใŠใ‹ใ— #T35*500 ๐Ÿญ ใŠใ‹ใ— #T35*500 ๐Ÿฎ ใŠใ‹ใ— #T35*500 ๐Ÿฏ ใŠใ‹ใ— #T35*500 ๐Ÿฐ ใŠใ‹ใ— #T35*500 ๐Ÿฅฎ ใŠใ‹ใ— #T35*500 ๐Ÿฅฏ ใŠใ‹ใ— #T35*500 ๐Ÿง ใŠใ‹ใ‚† #T35*500 ๐Ÿฅฃ ใŠใ“ใ‚‹ #T35*500 ๐Ÿ’ข ใŠใ“ใ‚‹ #T35*500 ๐Ÿ˜  ใŠใ“ใ‚‹ #T35*500 ๐Ÿ˜ก ใŠใ“ใ‚‹ #T35*500 ๐Ÿ˜ฃ ใŠใ“ใ‚‹ #T35*500 ๐Ÿ˜ค ใŠใ“ใ‚‹ #T35*500 ๐Ÿ˜พ ใŠใ˜ใ„ใ•ใ‚“ #T35*500 ๐Ÿ‘ด ใŠใ˜ใ„ใกใ‚ƒใ‚“ #T35*500 ๐Ÿ‘ด ใŠใ˜ใŽ #T35*500 ๐Ÿ™‡ ใŠใŸใ #T35*500 ๐Ÿค“ ใŠใกใฐ #T35*500 ๐Ÿ‚ ใŠใกใ‚ƒ #T35*500 ๐Ÿง‰ ใŠใฃใ‘ใ„ #T35*500 ๐Ÿ™† ใŠใฃใ‘ใ„ #T35*500 ๐Ÿ‘Œ ใŠใฃใ‘ใƒผ #T35*500 ๐Ÿ™† ใŠใฃใ‘ใƒผ #T35*500 ๐Ÿ‘Œ ใŠใฆใ ใพ #T35*500 ๐Ÿคน ใŠใงใ‚“ #T35*500 ๐Ÿข ใŠใจใ“ #T35*500 โ™‚ ใŠใจใ“ #T35*500 ๐Ÿ‘ฆ ใŠใจใ“ #T35*500 ๐Ÿ‘ฌ ใŠใจใ“ #T35*500 ๐Ÿ‘จ ใŠใจใ“ #T35*500 ๐Ÿšน ใŠใจใ“ #T35*500 ๐Ÿคต ใŠใจใ“ #T35*500 ๐Ÿ‘ด ใŠใจใช #T35*500 ๐Ÿ‘จ ใŠใจใช #T35*500 ๐Ÿ‘ฉ ใŠใจใช #T35*500 ๐Ÿง‘ ใŠใจใช #T35*500 ๐Ÿง“ ใŠใจใ‚ใ– #T35*500 โ™ ใŠใซ #T35*500 ๐Ÿ‘น ใŠใซใŽใ‚Š #T35*500 ๐Ÿ™ ใŠใญใŒใ„ #T35*500 ๐Ÿฅบ ใŠใฎ #T35*500 ๐Ÿช“ ใŠใฐใ‚ใ•ใ‚“ #T35*500 ๐Ÿ‘ต ใŠใฐใ‚ใกใ‚ƒใ‚“ #T35*500 ๐Ÿ‘ต ใŠใฐใ‘ #T35*500 ๐Ÿ‘ป ใŠใฐใ‘ #T35*500 ๐Ÿงž ใŠใฐใ‘ #T35*500 ๐ŸงŸ ใŠใฒใคใ˜ใ– #T35*500 โ™‰ ใŠใตใƒใ™ #T35*500 ๐Ÿข ใŠใพใ‚‚ใ‚Š #T35*500 ๐Ÿงฟ ใŠใ‚‚ใกใ‚ƒ #T35*500 ๐Ÿงธ ใŠใ‚‚ใกใ‚ƒ #T35*500 ๐Ÿช€ ใŠใ‚‚ใกใ‚ƒ #T35*500 ๐Ÿช ใŠใ‚„ใ‚†ใณ #T35*500 ๐Ÿ‘ ใŠใ‚„ใ‚†ใณ #T35*500 ๐Ÿ‘Ž ใŠใ‚‰ใ†ใƒผใŸใ‚“ #T35*500 ๐Ÿฆง ใŠใ‚Œใ‚“ใ˜ #T35*500 ๐ŸŠ ใŠใ‚“ใŒใ #T35*500 ๐ŸŽ˜ ใŠใ‚“ใŒใ #T35*500 ๐ŸŽน ใŠใ‚“ใŒใ #T35*500 ๐ŸŽบ ใŠใ‚“ใŒใ #T35*500 ๐ŸŽธ ใŠใ‚“ใŒใ #T35*500 ๐ŸŽท ใŠใ‚“ใŒใ #T35*500 ๐Ÿฅ ใŠใ‚“ใช #T35*500 โ™€ ใŠใ‚“ใช #T35*500 ๐Ÿ‘ง ใŠใ‚“ใช #T35*500 ๐Ÿ‘ญ ใŠใ‚“ใช #T35*500 ๐Ÿ‘ฉ ใŠใ‚“ใช #T35*500 ๐Ÿšบ ใŠใ‚“ใช #T35*500 ๐Ÿ‘ฐ ใŠใ‚“ใช #T35*500 ๐Ÿคฐ ใŠใ‚“ใช #T35*500 ๐Ÿ‘ต ใŠใ‚“ใท #T35*500 ๐ŸŽต ใŠใ‚“ใท #T35*500 ๐ŸŽถ ใŠใƒผใ‘ใƒผ #T35*500 ๐Ÿ™† ใŠใƒผใ‘ใƒผ #T35*500 ๐Ÿ‘Œ ใ‹ #T35*500 ๐ŸฆŸ ใ‹ใ„ #T35*500 ๐Ÿš ใ‹ใ„ #T35*500 ๐Ÿฆช ใ‹ใ„ใŠใ†ใ›ใ„ #T35*500 โ™† ใ‹ใ„ใ‚‚ใฎ #T35*500 ๐Ÿ›’ ใ‹ใ„ใ‚ #T35*500 โšž ใ‹ใ„ใ‚ #T35*500 โšŸ ใ‹ใ„ใ‚ #T35*500 ๐Ÿ’ฌ ใ‹ใ†ใผใƒผใ„ #T35*500 ๐Ÿค  ใ‹ใˆใง #T35*500 ๐Ÿ ใ‹ใˆใ‚‹ #T35*500 ๐Ÿป ใ‹ใŠ #T35*500 ๐Ÿ‘€ ใ‹ใŠ #T35*500 ๐Ÿ‘ ใ‹ใŠ #T35*500 ๐Ÿ‘‚ ใ‹ใŠ #T35*500 ๐Ÿ‘ƒ ใ‹ใŠ #T35*500 ๐Ÿ‘„ ใ‹ใŠ #T35*500 ๐Ÿ‘… ใ‹ใŠ #T35*500 โ˜น ใ‹ใŠ #T35*500 โ˜บ ใ‹ใŠ #T35*500 โ˜ป ใ‹ใŠ #T35*500 ๐Ÿ˜€ ใ‹ใŠ #T35*500 ๐Ÿ˜ ใ‹ใŠ #T35*500 ๐Ÿ˜‚ ใ‹ใŠ #T35*500 ๐Ÿ˜ƒ ใ‹ใŠ #T35*500 ๐Ÿ˜„ ใ‹ใŠ #T35*500 ๐Ÿ˜… ใ‹ใŠ #T35*500 ๐Ÿ˜† ใ‹ใŠ #T35*500 ๐Ÿ˜‡ ใ‹ใŠ #T35*500 ๐Ÿ‘ฟ ใ‹ใŠ #T35*500 ๐Ÿ˜ˆ ใ‹ใŠ #T35*500 ๐Ÿ˜‰ ใ‹ใŠ #T35*500 ๐Ÿ˜Š ใ‹ใŠ #T35*500 ๐Ÿ˜‹ ใ‹ใŠ #T35*500 ๐Ÿ˜Œ ใ‹ใŠ #T35*500 ๐Ÿ˜ ใ‹ใŠ #T35*500 ๐Ÿ˜Ž ใ‹ใŠ #T35*500 ๐Ÿ˜ ใ‹ใŠ #T35*500 ๐Ÿ˜ ใ‹ใŠ #T35*500 ๐Ÿ˜‘ ใ‹ใŠ #T35*500 ๐Ÿ˜’ ใ‹ใŠ #T35*500 ๐Ÿ˜“ ใ‹ใŠ #T35*500 ๐Ÿ˜” ใ‹ใŠ #T35*500 ๐Ÿ˜• ใ‹ใŠ #T35*500 ๐Ÿ˜– ใ‹ใŠ #T35*500 ๐Ÿ˜— ใ‹ใŠ #T35*500 ๐Ÿ˜˜ ใ‹ใŠ #T35*500 ๐Ÿ˜™ ใ‹ใŠ #T35*500 ๐Ÿ˜š ใ‹ใŠ #T35*500 ๐Ÿ˜› ใ‹ใŠ #T35*500 ๐Ÿ˜œ ใ‹ใŠ #T35*500 ๐Ÿ˜ ใ‹ใŠ #T35*500 ๐Ÿ˜ž ใ‹ใŠ #T35*500 ๐Ÿ˜Ÿ ใ‹ใŠ #T35*500 ๐Ÿ˜  ใ‹ใŠ #T35*500 ๐Ÿ˜ก ใ‹ใŠ #T35*500 ๐Ÿ˜ข ใ‹ใŠ #T35*500 ๐Ÿ˜ฃ ใ‹ใŠ #T35*500 ๐Ÿ˜ค ใ‹ใŠ #T35*500 ๐Ÿ˜ฅ ใ‹ใŠ #T35*500 ๐Ÿ˜ฆ ใ‹ใŠ #T35*500 ๐Ÿ˜ง ใ‹ใŠ #T35*500 ๐Ÿ˜จ ใ‹ใŠ #T35*500 ๐Ÿ˜ฉ ใ‹ใŠ #T35*500 ๐Ÿ˜ช ใ‹ใŠ #T35*500 ๐Ÿ˜ซ ใ‹ใŠ #T35*500 ๐Ÿ˜ฌ ใ‹ใŠ #T35*500 ๐Ÿ˜ญ ใ‹ใŠ #T35*500 ๐Ÿ˜ฎ ใ‹ใŠ #T35*500 ๐Ÿ˜ฏ ใ‹ใŠ #T35*500 ๐Ÿ˜ฐ ใ‹ใŠ #T35*500 ๐Ÿ˜ฑ ใ‹ใŠ #T35*500 ๐Ÿ˜ฒ ใ‹ใŠ #T35*500 ๐Ÿ˜ณ ใ‹ใŠ #T35*500 ๐Ÿ˜ด ใ‹ใŠ #T35*500 ๐Ÿ˜ต ใ‹ใŠ #T35*500 ๐Ÿ˜ถ ใ‹ใŠ #T35*500 ๐Ÿ˜ท ใ‹ใŠ #T35*500 ๐Ÿ˜ธ ใ‹ใŠ #T35*500 ๐Ÿ˜น ใ‹ใŠ #T35*500 ๐Ÿ˜บ ใ‹ใŠ #T35*500 ๐Ÿ˜ป ใ‹ใŠ #T35*500 ๐Ÿ˜ผ ใ‹ใŠ #T35*500 ๐Ÿ˜ฝ ใ‹ใŠ #T35*500 ๐Ÿ˜พ ใ‹ใŠ #T35*500 ๐Ÿ˜ฟ ใ‹ใŠ #T35*500 ๐Ÿ™€ ใ‹ใŠ #T35*500 ๐Ÿ™ ใ‹ใŠ #T35*500 ๐Ÿ™‚ ใ‹ใŠ #T35*500 ๐Ÿ™… ใ‹ใŠ #T35*500 ๐Ÿ™† ใ‹ใŠ #T35*500 ๐Ÿ™‡ ใ‹ใŠ #T35*500 ๐Ÿ™ˆ ใ‹ใŠ #T35*500 ๐Ÿ™‰ ใ‹ใŠ #T35*500 ๐Ÿ™Š ใ‹ใŠ #T35*500 ๐Ÿ™‹ ใ‹ใŠ #T35*500 ๐Ÿ™Œ ใ‹ใŠ #T35*500 ๐Ÿ™ ใ‹ใŠ #T35*500 ๐Ÿ™Ž ใ‹ใŠ #T35*500 ๐Ÿ™ ใ‹ใŠ #T35*500 สฌ ใ‹ใŠ #T35*500 ๐Ÿ‘ฆ ใ‹ใŠ #T35*500 ๐Ÿ‘จ ใ‹ใŠ #T35*500 ๐Ÿ‘ด ใ‹ใŠ #T35*500 ๐Ÿ‘ง ใ‹ใŠ #T35*500 ๐Ÿ‘ฉ ใ‹ใŠ #T35*500 ๐Ÿง’ ใ‹ใŠ #T35*500 ๐Ÿง‘ ใ‹ใŠ #T35*500 ๐Ÿง“ ใ‹ใŠ #T35*500 ๐Ÿ‘ต ใ‹ใŠ #T35*500 ๐Ÿง• ใ‹ใŠ #T35*500 ๐Ÿง” ใ‹ใŠ #T35*500 ๐Ÿค ใ‹ใŠ #T35*500 ๐Ÿค’ ใ‹ใŠ #T35*500 ๐Ÿค“ ใ‹ใŠ #T35*500 ๐Ÿค” ใ‹ใŠ #T35*500 ๐Ÿค• ใ‹ใŠ #T35*500 ๐Ÿค– ใ‹ใŠ #T35*500 ๐Ÿค  ใ‹ใŠ #T35*500 ๐Ÿคก ใ‹ใŠ #T35*500 ๐Ÿคข ใ‹ใŠ #T35*500 ๐Ÿคฎ ใ‹ใŠ #T35*500 ๐Ÿคฃ ใ‹ใŠ #T35*500 ๐Ÿคฉ ใ‹ใŠ #T35*500 ๐Ÿคช ใ‹ใŠ #T35*500 ๐Ÿคญ ใ‹ใŠ #T35*500 ๐Ÿคค ใ‹ใŠ #T35*500 ๐Ÿคฅ ใ‹ใŠ #T35*500 ๐Ÿคฆ ใ‹ใŠ #T35*500 ๐Ÿคง ใ‹ใŠ #T35*500 ๐Ÿคจ ใ‹ใŠ #T35*500 ๐Ÿคฏ ใ‹ใŠ #T35*500 ๐Ÿคฌ ใ‹ใŠ #T35*500 ๐Ÿคซ ใ‹ใŠ #T35*500 ๐Ÿง ใ‹ใŠ #T35*500 ๐Ÿฅฐ ใ‹ใŠ #T35*500 ๐Ÿฅณ ใ‹ใŠ #T35*500 ๐Ÿฅด ใ‹ใŠ #T35*500 ๐Ÿฅต ใ‹ใŠ #T35*500 ๐Ÿฅถ ใ‹ใŠ #T35*500 ๐Ÿฅบ ใ‹ใŠ #T35*500 ๐Ÿฅฑ ใ‹ใŠ #T35*500 ๐Ÿคด ใ‹ใŠ #T35*500 ๐Ÿ‘ธ ใ‹ใŠ #T35*500 ๐Ÿคถ ใ‹ใŠ #T35*500 ๐Ÿคท ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘€ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘‚ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ƒ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘„ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘… ใ‹ใŠใ‚‚ใ˜ #T35*500 โ˜น ใ‹ใŠใ‚‚ใ˜ #T35*500 โ˜บ ใ‹ใŠใ‚‚ใ˜ #T35*500 โ˜ป ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜€ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜‚ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ƒ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜„ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜… ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜† ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜‡ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฟ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ˆ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜‰ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜Š ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜‹ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜Œ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜Ž ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜‘ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜’ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜“ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜” ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜• ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜– ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜— ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜™ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜š ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜› ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜œ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ž ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜Ÿ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜  ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ก ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ข ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฃ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ค ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฅ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฆ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ง ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜จ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฉ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ช ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ซ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฌ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ญ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฎ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฏ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฐ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฑ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฒ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ณ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ด ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ต ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ถ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ท ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ธ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜น ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜บ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ป ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ผ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฝ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜พ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฟ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™€ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™‚ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™… ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™† ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™‡ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™ˆ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™‰ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™Š ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™‹ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™Œ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™Ž ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใ‹ใŠใ‚‚ใ˜ #T35*500 สฌ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฆ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘จ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ด ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ง ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฉ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง’ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง‘ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง“ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ต ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง• ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง” ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค’ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค“ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค” ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค• ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค– ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿค  ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคก ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคข ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฎ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฃ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฉ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคช ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคญ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคค ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฅ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฆ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคง ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคจ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฏ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคฌ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคซ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿง ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅฐ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅณ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅด ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅต ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅถ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅบ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿฅฑ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคด ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿ‘ธ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคถ ใ‹ใŠใ‚‚ใ˜ #T35*500 ๐Ÿคท ใ‹ใŒใ #T35*500 ๐Ÿงช ใ‹ใŒใ #T35*500 ๐Ÿงซ ใ‹ใŒใ #T35*500 ๐Ÿงฌ ใ‹ใ #T35*500 ๐Ÿฆช ใ‹ใใ”ใŠใ‚Š #T35*500 ๐Ÿง ใ‹ใ #T35*500 โœ ใ‹ใใฆใ‚‹ #T35*500 ๐Ÿธ ใ‹ใ• #T35*500 โ˜‚ ใ‹ใ• #T35*500 โ˜” ใ‹ใ• #T35*500 ๐ŸŒ‚ ใ‹ใ˜ #T35*500 ๐Ÿงฏ ใ‹ใ›ใ„ #T35*500 โ™‚ ใ‹ใœ #T35*500 ๐Ÿ˜ท ใ‹ใœ #T35*500 ๐Ÿค’ ใ‹ใžใ #T35*500 ๐Ÿ‘ช ใ‹ใŸ #T35*500 ๐Ÿคท ใ‹ใŸใคใ‚€ใ‚Š #T35*500 ๐ŸŒ ใ‹ใŸใช #T35*500 โš” ใ‹ใฃใจ #T35*500 ๐Ÿ’‡ ใ‹ใฃใจ #T35*500 ๐Ÿ’ˆ ใ‹ใฃใทใ‘ใƒผใ #T35*500 ๐Ÿง ใ‹ใฉใพใค #T35*500 ๐ŸŽ ใ‹ใชใฅใก #T35*500 โš’ ใ‹ใชใฅใก #T35*500 โ› ใ‹ใชใฅใก #T35*500 ๐Ÿ”จ ใ‹ใซใ– #T35*500 โ™‹ ใ‹ใฌใƒผ #T35*500 ๐Ÿ›ถ ใ‹ใฐ #T35*500 ๐Ÿฆ› ใ‹ใฟ #T35*500 ๐Ÿฆฑ ใ‹ใฟ #T35*500 ๐Ÿฆฒ ใ‹ใฟ #T35*500 ๐Ÿฆณ ใ‹ใฟใใ‚Š #T35*500 ๐Ÿช’ ใ‹ใฟใชใ‚Š #T35*500 โšก ใ‹ใ‚ #T35*500 ๐Ÿข ใ‹ใ‚ใ‚‰ #T35*500 ๐Ÿ“ท ใ‹ใ‚‰ใ„ #T35*500 ๐ŸŒถ ใ‹ใ‚‰ใŠใ‘ #T35*500 ๐ŸŽ™ ใ‹ใ‚‰ใŠใ‘ #T35*500 ๐ŸŽค ใ‹ใ‚‰ใฆ #T35*500 ๐Ÿฅ‹ ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿป ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿผ ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿฝ ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿพ ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿฟ ใ‹ใ‚‰ใƒผ #T35*500 ๐Ÿฆฐ ใ‹ใ‚‰ใƒผ #T35*500 ๏ธ ใ‹ใ‚Œใ‚‹ #T35*500 ๐Ÿฅ€ ใ‹ใ‚Œใƒผ #T35*500 ๐Ÿ› ใ‹ใ‚ใ†ใ #T35*500 ๐Ÿฆฆ ใ‹ใ‚“ #T35*500 ๐Ÿฅซ ใ‹ใ‚“ใŒใˆใกใ‚…ใ† #T35*500 ๐Ÿ˜” ใ‹ใ‚“ใŒใˆใกใ‚…ใ† #T35*500 ๐Ÿ’ญ ใ‹ใ‚“ใŒใˆใกใ‚…ใ† #T35*500 ๐Ÿค” ใ‹ใ‚“ใŒใˆใกใ‚…ใ† #T35*500 .๏ฝกoO ใ‹ใ‚“ใŒใ‚‹ใƒผ #T35*500 ๐Ÿฆ’ ใ‹ใ‚“ใŒใ‚‹ใƒผ #T35*500 ๐Ÿฆ˜ ใ‹ใ‚“ใฅใ‚ #T35*500 ๐Ÿฅซ ใ‹ใ‚“ใฑใ„ #T35*500 ๐Ÿฅ‚ ใ‹ใ‚“ใ‚‰ใ‚“ใ—ใ‚ƒ #T35*500 ๐ŸŽก ใ‹ใƒผใจ #T35*500 ๐Ÿ›’ ใ‹ใƒผใ‚Šใ‚“ใ #T35*500 ๐ŸฅŒ ใŒใ„ใ“ใค #T35*500 ๐Ÿ’€ ใŒใ„ใ“ใค #T35*500 โ˜  ใŒใใ›ใ„ #T35*500 ๐ŸŽ’ ใŒใใ›ใ„ #T35*500 ๐ŸŽ“ ใŒใใต #T35*500 ๐ŸŽผ ใŒใ‘ #T35*500 ๐Ÿง— ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜ฅ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜ฆ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜ง ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜จ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜ฉ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ˜ฌ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ™€ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ™ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ™ ใŒใฃใ‹ใ‚Š #T35*500 ๐Ÿ™Ž ใŒใฃใ #T35*500 ๐ŸŽ˜ ใŒใฃใ #T35*500 ๐ŸŽน ใŒใฃใ #T35*500 ๐ŸŽบ ใŒใฃใ #T35*500 ๐ŸŽธ ใŒใฃใ #T35*500 ๐ŸŽท ใŒใฃใ #T35*500 ๐Ÿช• ใŒใฃใ“ใ† #T35*500 ๐Ÿซ ใŒใฃใ“ใ† #T35*500 ๐ŸŽ’ ใŒใฃใ“ใ† #T35*500 ๐ŸŽ“ ใŒใ‚“ใŸใ‚“ #T35*500 ๐ŸŽ ใŒใƒผใฉใพใ‚“ #T35*500 ๐Ÿ’‚ ใ #T35*500 ๐ŸŒฒ ใ #T35*500 ๐ŸŒณ ใ #T35*500 ๐ŸŒด ใใ‹ใ–ใ‚‹ #T35*500 ๐Ÿ™‰ ใใ™ #T35*500 ๐Ÿ’‹ ใใ™ #T35*500 ๐Ÿ’ ใใ™ #T35*500 ๐Ÿ˜— ใใ™ #T35*500 ๐Ÿ˜˜ ใใ™ #T35*500 ๐Ÿ˜™ ใใ™ #T35*500 ๐Ÿ˜š ใใ™ #T35*500 ๐Ÿ˜ฝ ใใ™ใพใƒผใ #T35*500 ๐Ÿ’‹ ใใฃใ—ใ‚… #T35*500 ๐Ÿฅง ใใคใญ #T35*500 ๐ŸฆŠ ใใ‚‚ใฎ #T35*500 ๐Ÿ‘˜ ใใ‚ƒในใค #T35*500 ๐Ÿฅฌ ใใ‚ƒใ‚Šใƒผใฐใฃใ #T35*500 ๐Ÿงณ ใใ‚…ใ†ใ‹ใ‚“ใกใ‚‡ใ† #T35*500 ๐Ÿฆœ ใใ‚…ใ†ใ‘ใคใ #T35*500 ๐Ÿฆ‡ ใใ‚…ใ†ใ‘ใคใ #T35*500 ๐Ÿง› ใใ‚…ใ†ใฉใ† #T35*500 โ—Ž ใใ‚…ใ†ใฉใ† #T35*500 ๐ŸŽฏ ใใ‚…ใ†ใ‚Š #T35*500 ๐Ÿฅ’ ใใ‚‡ใ†ใ‹ใ„ #T35*500 โ›ช ใใ‚‡ใ†ใต #T35*500 ๐Ÿ˜ฑ ใใ‚‡ใ†ใ‚Šใ‚…ใ† #T35*500 ๐Ÿฆ• ใใ‚‡ใ†ใ‚Šใ‚…ใ† #T35*500 ๐Ÿฆ– ใใ‚‡ใ—ใ‚… #T35*500 ๐Ÿ™‹ ใใ‚‡ใ—ใ‚… #T35*500 ๐Ÿคš ใใ‚‰ #T35*500 โญ ใใ‚‰ #T35*500 โญ‘ ใใ‚‰ #T35*500 โญ’ ใใ‚‰ #T35*500 โœฆ ใใ‚‰ #T35*500 โœง ใใ‚‰ #T35*500 โœจ ใใ‚‰ #T35*500 โœฉ ใใ‚‰ #T35*500 โœช ใใ‚‰ #T35*500 โœซ ใใ‚‰ #T35*500 โœฌ ใใ‚‰ #T35*500 โœญ ใใ‚‰ #T35*500 โœฎ ใใ‚‰ #T35*500 โœฏ ใใ‚‰ #T35*500 โœฐ ใใ‚Š #T35*500 ๐ŸŒ ใใ‚Š #T35*500 ๐ŸŒซ ใใ‚Šใค #T35*500 ๐Ÿง ใใ‚“ #T35*500 ๐Ÿฅ‡ ใใ‚“ใŽใ‚‡ #T35*500 ๐Ÿ  ใใ‚“ใ“ #T35*500 ๐Ÿงฐ ใใ‚“ใ— #T35*500 โ›’ ใใ‚“ใ— #T35*500 โ›” ใใ‚“ใ›ใ„ #T35*500 โ™€ ใใ‚“ใซใ #T35*500 ๐Ÿ’ช ใใ‚“ใฑใค #T35*500 ๐Ÿ‘ฑ ใใƒผ #T35*500 โšฟ ใใƒผ #T35*500 ๐Ÿ”‘ ใใƒผใ†ใƒ #T35*500 ๐Ÿฅ ใใƒผใผใƒผใฉ #T35*500 โŒจ ใใƒผใผใƒผใฉ #T35*500 ๐Ÿ–ฎ ใŽใŸใƒผ #T35*500 ๐ŸŽธ ใŽใ‚ƒใ #T35*500 ๐Ÿคช ใŽใ‚…ใ†ใซใ‚…ใ† #T35*500 ๐Ÿฅ› ใŽใ‚‡ใ†ใ– #T35*500 ๐ŸฅŸ ใŽใ‚“ #T35*500 ๐Ÿฅˆ ใŽใ‚“ใ“ใ† #T35*500 ๐Ÿฆ ใใ—ใ‚ƒใฟ #T35*500 ๐Ÿคง ใใ˜ใ‚ƒใ #T35*500 ๐Ÿฆš ใใ˜ใ‚‰ #T35*500 ๐Ÿ‹ ใใ˜ใ‚‰ #T35*500 ๐Ÿณ ใใ™ใ ใพ #T35*500 ๐ŸŽŠ ใใ™ใ‚Š #T35*500 ๐Ÿ’Š ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ‡ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿˆ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ‰ ใใ ใ‚‚ใฎ #T35*500 ๐ŸŠ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ‹ ใใ ใ‚‚ใฎ #T35*500 ๐ŸŒ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ ใใ ใ‚‚ใฎ #T35*500 ๐ŸŽ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ‘ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ’ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿ“ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿฅ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿฅฅ ใใ ใ‚‚ใฎ #T35*500 ๐Ÿฅญ ใใกใณใ‚‹ #T35*500 ๐Ÿ—ข ใใกในใซ #T35*500 ๐Ÿ’„ ใใฃใใƒผ #T35*500 ๐Ÿช ใใฃใใƒผ #T35*500 ๐Ÿฅ  ใใฃใใƒผ #T35*500 ๐Ÿฅจ ใใฃใใƒผ #T35*500 ๐Ÿฅฎ ใใค #T35*500 ๐Ÿ‘ž ใใค #T35*500 ๐Ÿ‘Ÿ ใใค #T35*500 ๐Ÿ‘  ใใค #T35*500 ๐Ÿ‘ก ใใค #T35*500 ๐Ÿ‘ข ใใค #T35*500 ๐Ÿฅพ ใใค #T35*500 ๐Ÿฅฟ ใใค #T35*500 ๐Ÿฉฐ ใใค #T35*500 ๐Ÿ‘ฃ ใใคใ—ใŸ #T35*500 ๐Ÿงฆ ใใพ #T35*500 ๐Ÿป ใใพ #T35*500 ๐Ÿงธ ใใ‚‚ #T35*500 ๐Ÿ•ท ใใ‚‚ #T35*500 ๐Ÿ•ธ ใใ‚‚ใ‚Š #T35*500 โ˜ ใใ‚‚ใ‚Š #T35*500 โ›… ใใ‚‚ใ‚Š #T35*500 ๐ŸŒค ใใ‚‰ใฃใ‹ใƒผ #T35*500 ๐ŸŽ‰ ใใ‚Š #T35*500 ๐ŸŒฐ ใใ‚Šใ™ใพใ™ #T35*500 ๐ŸŽ„ ใใ‚Šใ™ใพใ™ #T35*500 ๐ŸŽ… ใใ‚Šใ™ใพใ™ #T35*500 ๐Ÿคถ ใใ‚Šใฃใท #T35*500 ๐Ÿ“Ž ใใ‚‹ใพ #T35*500 ๐ŸŽ ใใ‚‹ใพ #T35*500 ๐Ÿ›บ ใใ‚‹ใพใ„ใ™ #T35*500 ๐Ÿฆผ ใใ‚‹ใพใ„ใ™ #T35*500 ๐Ÿฆฝ ใใ‚ใ†ใ™ #T35*500 ๐Ÿคถ ใใ‚ใ‚ใฃใ•ใ‚“ #T35*500 ๐Ÿฅ ใใ‚ใƒผใฐใƒผ #T35*500 โ˜˜ ใใ‚ใƒผใฐใƒผ #T35*500 ๐Ÿ€ ใใ‚ใƒผใฐใƒผ #T35*500 เฎ ใใ‚“ใ—ใ‚‡ใ† #T35*500 ๐ŸŽ– ใใ‚‰ใ™ #T35*500 ๐Ÿท ใใ‚‰ใ™ #T35*500 ๐Ÿธ ใใ‚‰ใ™ #T35*500 ๐Ÿฅ‚ ใใ‚‰ใ™ #T35*500 ๐Ÿฅƒ ใใ‚ใƒผใถ #T35*500 ๐ŸฅŠ ใใƒผ #T35*500 โœŠ ใใƒผ #T35*500 ๐Ÿค› ใใƒผ #T35*500 ๐Ÿคœ ใ‘ใ„ใ“ใ #T35*500 โš  ใ‘ใ„ใ•ใค #T35*500 ๐Ÿ‘ฎ ใ‘ใ„ใ•ใคใ‘ใ‚“ #T35*500 ๐Ÿฆบ ใ‘ใ„ใ•ใ‚“ #T35*500 ๐Ÿงฎ ใ‘ใ„ใŸใ„ #T35*500 ๐Ÿ“ฑ ใ‘ใ„ใŸใ„ #T35*500 ๐Ÿ“ฒ ใ‘ใ„ใจ #T35*500 ๐Ÿงถ ใ‘ใ„ใฐ #T35*500 ๐Ÿ‡ ใ‘ใ„ใณใ„ใ‚“ #T35*500 ๐Ÿ’‚ ใ‘ใŒ #T35*500 ๐Ÿค• ใ‘ใ—ใ‚‡ใ†ใฒใ‚“ #T35*500 ๐Ÿงด ใ‘ใฃใ“ใ‚“ #T35*500 โšญ ใ‘ใฃใ“ใ‚“ #T35*500 ๐Ÿ’’ ใ‘ใฃใ“ใ‚“ใ—ใ #T35*500 ๐Ÿ’’ ใ‘ใฐใถ #T35*500 ๐Ÿฅ™ ใ‘ใ‚“ใใ‚…ใ† #T35*500 ๐Ÿงช ใ‘ใ‚“ใใ‚…ใ† #T35*500 ๐Ÿงซ ใ‘ใ‚“ใใ‚…ใ† #T35*500 ๐Ÿงฌ ใ‘ใ‚“ใ•ใ #T35*500 ๐Ÿ” ใ‘ใ‚“ใ•ใ #T35*500 ๐Ÿ”Ž ใ‘ใ‚“ใ˜ใ‚…ใ† #T35*500 ๐Ÿ”ซ ใ‘ใ‚“ใกใ #T35*500 ๐Ÿ‘ท ใ‘ใ‚“ใณใใ‚‡ใ† #T35*500 ๐Ÿ”ฌ ใ‘ใƒผใ #T35*500 ๐Ÿฎ ใ‘ใƒผใ #T35*500 ๐Ÿฐ ใ‘ใƒผใ #T35*500 ๐ŸŽ‚ ใ‘ใƒผใ #T35*500 ๐Ÿฅง ใ‘ใƒผใ #T35*500 ๐Ÿฅฎ ใ‘ใƒผใ #T35*500 ๐Ÿง ใ‘ใƒผใ‚‹ #T35*500 ๐Ÿฅฌ ใ’ใ‚ #T35*500 ๐Ÿคข ใ’ใ‚ #T35*500 ๐Ÿคฎ ใ’ใ‚“ใคใ #T35*500 ๐Ÿ›ต ใ’ใ‚“ใพใ„ #T35*500 ๐Ÿฅฃ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽฎ ใ’ใƒผใ‚€ #T35*500 โ—Ž ใ’ใƒผใ‚€ #T35*500 ๐ŸŽฏ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽฐ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽฑ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽฒ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽณ ใ’ใƒผใ‚€ #T35*500 ๐ŸŽด ใ’ใƒผใ‚€ #T35*500 ๐Ÿงฟ ใ’ใƒผใ‚€ #T35*500 ๐Ÿงฉ ใ’ใƒผใ‚€ #T35*500 ๐Ÿงธ ใ’ใƒผใ‚€ #T35*500 โ™Ÿ ใ“ #T35*500 ๐Ÿ‘ฆ ใ“ #T35*500 ๐Ÿ‘ง ใ“ #T35*500 ๐Ÿง’ ใ“ #T35*500 ๐Ÿคฑ ใ“ใ‚ใ‚‰ #T35*500 ๐Ÿจ ใ“ใ„ใฎใผใ‚Š #T35*500 ๐ŸŽ ใ“ใ†ใ #T35*500 ๐Ÿงฐ ใ“ใ†ใ—ใ‚“ #T35*500 ๐Ÿ—˜ ใ“ใ†ใ˜ใกใ‚…ใ† #T35*500 โš’ ใ“ใ†ใ˜ใกใ‚…ใ† #T35*500 โ› ใ“ใ†ใ˜ใกใ‚…ใ† #T35*500 โ›‘ ใ“ใ†ใ˜ใ‚‡ใ† #T35*500 โ›ญ ใ“ใ†ใ˜ใ‚‡ใ† #T35*500 ๐Ÿญ ใ“ใ†ใ‚‚ใ‚Š #T35*500 ๐Ÿฆ‡ ใ“ใŠใ‚Š #T35*500 ๐ŸงŠ ใ“ใŠใ‚ใŽ #T35*500 ๐Ÿฆ— ใ“ใ“ใชใฃใค #T35*500 ๐Ÿฅฅ ใ“ใ—ใ‚‡ใ† #T35*500 ๐Ÿง‚ ใ“ใฃใ #T35*500 ๐ŸŽŒ ใ“ใฃใท #T35*500 โ˜• ใ“ใฃใท #T35*500 ๐Ÿต ใ“ใฃใท #T35*500 ๐Ÿถ ใ“ใฃใท #T35*500 ๐Ÿท ใ“ใฃใท #T35*500 ๐Ÿธ ใ“ใฃใท #T35*500 ๐Ÿน ใ“ใฃใท #T35*500 ๐Ÿบ ใ“ใฃใท #T35*500 ๐Ÿป ใ“ใฃใท #T35*500 ๐Ÿป ใ“ใฃใท #T35*500 ๐Ÿผ ใ“ใฃใท #T35*500 ๐Ÿฅ‚ ใ“ใฃใท #T35*500 ๐Ÿฅƒ ใ“ใฃใท #T35*500 ๐Ÿฅ› ใ“ใฉใ‚‚ #T35*500 ๐Ÿ‘ฆ ใ“ใฉใ‚‚ #T35*500 ๐Ÿ‘ง ใ“ใฉใ‚‚ #T35*500 ๐Ÿง’ ใ“ใฉใ‚‚ #T35*500 ๐Ÿคฑ ใ“ใฉใ‚‚ใฎใฒ #T35*500 ๐ŸŽ ใ“ใณใจ #T35*500 ๐Ÿง ใ“ใ‚ใฃใ‘ #T35*500 ๐Ÿง† ใ“ใ‚“ใฑใ™ #T35*500 ๐Ÿงญ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ’ป ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ–ฅ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ’ฝ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ’พ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ’ฟ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ“€ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ–ฑ ใ“ใ‚“ใดใ‚…ใƒผใŸใƒผ #T35*500 ๐Ÿ–ฒ ใ“ใ‚“ใ‚‰ใ‚“ #T35*500 ๐Ÿ˜– ใ“ใ‚“ใ‚ใ #T35*500 ๐Ÿ˜– ใ“ใƒผใจ #T35*500 ๐Ÿงฅ ใ“ใƒผใจ #T35*500 ๐Ÿฅผ ใ“ใƒผใฒใƒผ #T35*500 โ˜• ใ“ใƒผใฒใƒผ #T35*500 ๐Ÿต ใ”ใฏใ‚“ #T35*500 ๐Ÿ˜ ใ”ใฏใ‚“ #T35*500 ๐Ÿ™ ใ”ใฏใ‚“ #T35*500 ๐Ÿš ใ”ใผใ†ใ›ใ„ #T35*500 โœก ใ”ใผใ†ใ›ใ„ #T35*500 ๐Ÿ”ฏ ใ”ใ‚Šใ‚‰ #T35*500 ๐Ÿฆ ใ”ใ‚‹ใต #T35*500 โ›ณ ใ”ใ‚‹ใต #T35*500 ๐ŸŒ ใ”ใƒผใใ‚‹ #T35*500 ๐Ÿฅฝ ใ”ใƒผใ‚‹ #T35*500 ๐Ÿฅ… ใ•ใ„ #T35*500 ๐Ÿฆ ใ•ใ„ใใ‚“ #T35*500 ๐Ÿฆ  ใ•ใ„ใ‚“ #T35*500 ๐ŸคŸ ใ•ใ„ใ‚“ #T35*500 ๐Ÿคฒ ใ•ใ„ใ“ใ‚ #T35*500 โš€ ใ•ใ„ใ“ใ‚ #T35*500 โš ใ•ใ„ใ“ใ‚ #T35*500 โš‚ ใ•ใ„ใ“ใ‚ #T35*500 โšƒ ใ•ใ„ใ“ใ‚ #T35*500 โš„ ใ•ใ„ใ“ใ‚ #T35*500 โš… ใ•ใ„ใ“ใ‚ #T35*500 ๐ŸŽฒ ใ•ใ„ใ—ใ‚‡ใ†ใ‹ #T35*500 ๐Ÿ—• ใ•ใ„ใ ใ„ใ‹ #T35*500 ๐Ÿ—– ใ•ใ„ใต #T35*500 ๐Ÿ‘› ใ•ใ†ใช #T35*500 ๐Ÿง– ใ•ใ‹ใช #T35*500 ๐ŸŸ ใ•ใ‹ใช #T35*500 ๐Ÿ  ใ•ใ‹ใช #T35*500 ๐Ÿก ใ•ใ‹ใช #T35*500 ๐Ÿฆˆ ใ•ใใ‚‰ #T35*500 ๐ŸŒธ ใ•ใใ‚‰ใ‚“ใผ #T35*500 ๐Ÿ’ ใ•ใ‘ #T35*500 ๐Ÿถ ใ•ใ‘ #T35*500 ๐Ÿฅด ใ•ใ‘ใถ #T35*500 ๐Ÿ˜ฑ ใ•ใใ‚Š #T35*500 ๐Ÿฆ‚ ใ•ใใ‚Šใ– #T35*500 โ™ ใ•ใฃใ‹ใƒผ #T35*500 โšฝ ใ•ใฃใใ™ #T35*500 ๐ŸŽท ใ•ใผใฆใ‚“ #T35*500 ๐ŸŒต ใ•ใ‚€ใ„ #T35*500 ๐Ÿฅถ ใ•ใ‚ #T35*500 ๐Ÿฆˆ ใ•ใ‚ˆใ†ใชใ‚‰ #T35*500 ๐Ÿ‘‹ ใ•ใ‚‰ใ  #T35*500 ๐Ÿฅ— ใ•ใ‚Šใƒผ #T35*500 ๐Ÿฅป ใ•ใ‚‹ #T35*500 ๐Ÿ’ ใ•ใ‚‹ #T35*500 ๐Ÿต ใ•ใ‚“ใ„ #T35*500 ๐Ÿฅ‰ ใ•ใ‚“ใŸ #T35*500 ๐ŸŽ… ใ•ใ‚“ใŸใใ‚ใƒผใ™ #T35*500 ๐ŸŽ… ใ•ใ‚“ใฉใ†ใƒใฃใก #T35*500 ๐Ÿฅช ใ•ใ‚“ใฑใค #T35*500 ๐Ÿ’‡ ใ•ใ‚“ใฑใค #T35*500 ๐Ÿ’ˆ ใ•ใƒผใ‹ใ™ #T35*500 ๐ŸŽช ใ•ใƒผใตใƒใ‚“ #T35*500 ๐Ÿ„ ใ–ใœใ‚“ #T35*500 ๐Ÿง˜ ใ–ใ‚ŠใŒใซ #T35*500 ๐Ÿฆž ใ—ใ‡ใƒผใ #T35*500 ๐Ÿฅค ใ—ใŠ #T35*500 ๐Ÿง‚ ใ—ใŠใ‚Š #T35*500 ๐Ÿ“‘ ใ—ใ‹ #T35*500 ๐ŸฆŒ ใ—ใ‹ใ #T35*500 ๐ŸŸฅ ใ—ใ‹ใ #T35*500 ๐ŸŸฆ ใ—ใ‹ใ #T35*500 ๐ŸŸง ใ—ใ‹ใ #T35*500 ๐ŸŸจ ใ—ใ‹ใ #T35*500 ๐ŸŸฉ ใ—ใ‹ใ #T35*500 ๐ŸŸช ใ—ใ‹ใ #T35*500 ๐ŸŸซ ใ—ใ‘ใ‚“ #T35*500 ๐Ÿ“ ใ—ใ‘ใ‚“ใ‹ใ‚“ #T35*500 ๐Ÿงช ใ—ใ—ใ– #T35*500 โ™Œ ใ—ใšใ‹ #T35*500 ๐Ÿคซ ใ—ใ›ใ„ #T35*500 ๐Ÿง ใ—ใ›ใ„ #T35*500 ๐ŸงŽ ใ—ใŸ #T35*500 ๐Ÿ‘… ใ—ใŸ #T35*500 ๐Ÿ˜› ใ—ใŸ #T35*500 ๐Ÿ˜œ ใ—ใŸ #T35*500 ๐Ÿ˜ ใ—ใŸใŽ #T35*500 ๐Ÿ‘™ ใ—ใŸใŽ #T35*500 ๐Ÿฉฑ ใ—ใŸใŽ #T35*500 ๐Ÿฉฒ ใ—ใŸใŽ #T35*500 ๐Ÿฉณ ใ—ใพใ†ใพ #T35*500 ๐Ÿฆ“ ใ—ใ‚ƒใค #T35*500 ๐Ÿ‘• ใ—ใ‚ƒใ‚“ใฑใ‚“ #T35*500 ๐Ÿฅ‚ ใ—ใ‚ƒใ‚“ใบใ„ใ‚“ #T35*500 ๐Ÿฅ‚ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿป ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿผ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฝ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿพ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฟ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฆฐ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฆฑ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฆฒ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๐Ÿฆณ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 โ€ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 โ™‚ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 โ™€ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๏ธŽ ใ—ใ‚…ใ†ใ—ใ‚‡ใใ— #T35*500 ๏ธ ใ—ใ‚‡ใ†ใŠใ‚“ #T35*500 ๐Ÿ”‡ ใ—ใ‚‡ใ†ใ‹ใ #T35*500 ๐Ÿงฏ ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆป ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆพ ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆฟ ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿง ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆผ ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆฝ ใ—ใ‚‡ใ†ใŒใ„ใ—ใ‚ƒ #T35*500 ๐Ÿฆฏ ใ—ใ‚‡ใ†ใŒใใ›ใ„ #T35*500 ๐ŸŽ’ ใ—ใ‚‡ใ†ใŒใใ›ใ„ #T35*500 ๐ŸŽ“ ใ—ใ‚‡ใ†ใŒใค #T35*500 ๐ŸŽ ใ—ใ‚‡ใ†ใŒใฃใ“ใ† #T35*500 ๐ŸŽ’ ใ—ใ‚‡ใ†ใŒใฃใ“ใ† #T35*500 ๐ŸŽ“ ใ—ใ‚‡ใ†ใŽ #T35*500 โ›‰ ใ—ใ‚‡ใ†ใŽ #T35*500 โ›Š ใ—ใ‚‡ใใŽใ‚‡ใ† #T35*500 ๐Ÿ‘ฎ ใ—ใ‚‡ใใŽใ‚‡ใ† #T35*500 ๐Ÿ•ต ใ—ใ‚‡ใใŽใ‚‡ใ† #T35*500 ๐Ÿ’‚ ใ—ใ‚‡ใใŽใ‚‡ใ† #T35*500 ๐Ÿ‘ท ใ—ใ‚‡ใใ˜ #T35*500 ๐Ÿด ใ—ใ‚‡ใใ˜ #T35*500 ๐Ÿฅ„ ใ—ใ‚‡ใใ˜ #T35*500 ๐Ÿฅข ใ—ใ‚‡ใใ˜ #T35*500 ๐Ÿฑ ใ—ใ‚‡ใใ˜ #T35*500 ๐Ÿฅก ใ—ใ‚‡ใใฑใ‚“ #T35*500 ๐Ÿž ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒฑ ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒฒ ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒณ ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒด ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒต ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒพ ใ—ใ‚‡ใใถใค #T35*500 ๐ŸŒฟ ใ—ใ‚‡ใใถใค #T35*500 โ˜˜ ใ—ใ‚‡ใใถใค #T35*500 ๐Ÿ€ ใ—ใ‚‡ใใถใค #T35*500 เฎ ใ—ใ‚‡ใใถใค #T35*500 ๐Ÿ ใ—ใ‚‡ใใถใค #T35*500 ๐Ÿ‚ ใ—ใ‚‡ใใถใค #T35*500 ๐Ÿƒ ใ—ใ‚‡ใ—ใ‚“ใ—ใ‚ƒ #T35*500 ๐Ÿ”ฐ ใ—ใ‚‡ใฃใจ #T35*500 ๐Ÿฅƒ ใ—ใ‚‰ใŒ #T35*500 ๐Ÿฆณ ใ—ใ‚‰ใ‘ใ‚‹ #T35*500 ๐Ÿ˜’ ใ—ใ‚Šใ‚ใ‚‹ #T35*500 ๐Ÿฅฃ ใ—ใ‚‹ใใฏใฃใจ #T35*500 ๐ŸŽฉ ใ—ใ‚ #T35*500 โ›ซ ใ—ใ‚“ใ”ใ† #T35*500 ๐Ÿ›‘ ใ—ใ‚“ใ’ใค #T35*500 โ— ใ—ใ‚“ใ’ใค #T35*500 ๐ŸŒ‘ ใ—ใ‚“ใ’ใค #T35*500 ๐ŸŒš ใ—ใƒผใงใƒใƒผ #T35*500 ๐Ÿ’ฟ ใ˜ใ„ #T35*500 ๐Ÿ‘ด ใ˜ใ‡ใฃใจใ“ใƒผใ™ใŸใƒผ #T35*500 ๐ŸŽข ใ˜ใใใƒผใฑใšใ‚‹ #T35*500 ๐Ÿงฉ ใ˜ใ—ใ‚ƒใ #T35*500 ๐Ÿงฒ ใ˜ใฃใ‘ใ‚“ #T35*500 ๐Ÿงช ใ˜ใฃใ‘ใ‚“ #T35*500 ๐Ÿงซ ใ˜ใฃใ‘ใ‚“ #T35*500 ๐Ÿงฌ ใ˜ใฃใฑใƒผ #T35*500 ๐Ÿค ใ˜ใฆใ‚“ใ—ใ‚ƒ #T35*500 ๐Ÿšด ใ˜ใฉใ‚Š #T35*500 ๐Ÿคณ ใ˜ใ‚ƒใŒใ„ใ‚‚ #T35*500 ๐Ÿฅ” ใ˜ใ‚ƒใใ‚Šใ‚“ใ #T35*500 ๐Ÿคน ใ˜ใ‚ƒใ‚“ใ‘ใ‚“ #T35*500 โœŠ ใ˜ใ‚ƒใ‚“ใ‘ใ‚“ #T35*500 โœ‹ ใ˜ใ‚ƒใ‚“ใ‘ใ‚“ #T35*500 โœŒ ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โ˜ฅ ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โ˜ฆ ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โ˜ง ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โ˜จ ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โ˜ฉ ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 โœž ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 ๐Ÿ•† ใ˜ใ‚…ใ†ใ˜ใ‹ #T35*500 ๐Ÿ•‡ ใ˜ใ‚…ใ†ใฉใ† #T35*500 ๐Ÿฅ‹ ใ˜ใ‚…ใ†ใ‚Šใ‚‡ใ†ใ‚ใ’ #T35*500 ๐Ÿ‹ ใ˜ใ‚…ใซใ‚…ใ† #T35*500 ๐Ÿคฑ ใ˜ใ‚…ใƒผใ™ #T35*500 ๐Ÿน ใ˜ใ‚…ใƒผใ™ #T35*500 ๐Ÿฅค ใ˜ใ‚…ใƒผใ™ #T35*500 ๐Ÿฅซ ใ˜ใ‚…ใƒผใ™ #T35*500 ๐Ÿงƒ ใ˜ใ‚“ใ˜ใ‚ƒ #T35*500 โ›ฉ ใ˜ใƒผใ‚“ใš #T35*500 ๐Ÿ‘– ใ™ใ„ใˆใ„ #T35*500 ๐ŸŠ ใ™ใ„ใˆใ„ #T35*500 ๐Ÿคฟ ใ™ใ„ใ‹ #T35*500 ๐Ÿ‰ ใ™ใ„ใใ‚…ใ† #T35*500 ๐Ÿคฝ ใ™ใ„ใ—ใ‚‡ใ† #T35*500 ๐Ÿ”ฎ ใ™ใ„ใ›ใ„ #T35*500 โ˜ฟ ใ™ใ„ใ›ใ„ #T35*500 โ˜„ ใ™ใ„ใฆใ #T35*500 ๐Ÿ’ง ใ™ใ„ใƒผใค #T35*500 ๐Ÿฅž ใ™ใ„ใƒผใค #T35*500 ๐Ÿก ใ™ใ„ใƒผใค #T35*500 ๐Ÿฆ ใ™ใ„ใƒผใค #T35*500 ๐Ÿง ใ™ใ„ใƒผใค #T35*500 ๐Ÿจ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฉ ใ™ใ„ใƒผใค #T35*500 ๐Ÿช ใ™ใ„ใƒผใค #T35*500 ๐Ÿฌ ใ™ใ„ใƒผใค #T35*500 ๐Ÿญ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฎ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฏ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฐ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฅฎ ใ™ใ„ใƒผใค #T35*500 ๐Ÿฅฏ ใ™ใ„ใƒผใค #T35*500 ๐Ÿง ใ™ใ„ใƒผใค #T35*500 ๐Ÿง‡ ใ™ใ‹ใ‚“ใ #T35*500 ๐Ÿฆจ ใ™ใ‹ใƒผใต #T35*500 ๐Ÿงฃ ใ™ใ‹ใƒผใต #T35*500 ๐Ÿง• ใ™ใใƒผ #T35*500 โ›ท ใ™ใใƒผ #T35*500 ๐ŸŽฟ ใ™ใใชใ„ #T35*500 ๐Ÿค ใ™ใใ‚ใ‚‹ #T35*500 ๐Ÿคท ใ™ใใƒผใŸใƒผ #T35*500 ๐Ÿ›ด ใ™ใใƒผใŸใƒผ #T35*500 ๐Ÿ›ต ใ™ใ‘ใƒผใจ #T35*500 โ›ธ ใ™ใ‘ใƒผใจใผใƒผใฉ #T35*500 ๐Ÿ›น ใ™ใ”ใ‚ใ #T35*500 ๐ŸŽฒ ใ™ใ— #T35*500 ๐Ÿฃ ใ™ใŸใƒผ #T35*500 โ˜„ ใ™ใฆใƒใฃใ #T35*500 ๐Ÿฅ ใ™ใฆใƒผใ #T35*500 ๐Ÿฅฉ ใ™ใฎใƒผใผใƒผใฉ #T35*500 ๐Ÿ‚ ใ™ใฑใ’ใฆใƒใƒผ #T35*500 ๐Ÿ ใ™ใฑใƒผใใ‚Šใ‚“ใ #T35*500 ๐Ÿฅ‚ ใ™ใดใƒผใ‹ใƒผ #T35*500 ๐Ÿ”‡ ใ™ใดใƒผใ‹ใƒผ #T35*500 ๐Ÿ”ˆ ใ™ใดใƒผใ‹ใƒผ #T35*500 ๐Ÿ”‰ ใ™ใดใƒผใ‹ใƒผ #T35*500 ๐Ÿ”Š ใ™ใทใƒผใ‚“ #T35*500 ๐Ÿฅ„ ใ™ใฝใ‚“ใ˜ #T35*500 ๐Ÿงฝ ใ™ใฝใƒผใค #T35*500 ๐ŸŽพ ใ™ใฝใƒผใค #T35*500 โ›ท ใ™ใฝใƒผใค #T35*500 ๐ŸŽฟ ใ™ใฝใƒผใค #T35*500 ๐Ÿ€ ใ™ใฝใƒผใค #T35*500 ๐Ÿ ใ™ใฝใƒผใค #T35*500 ๐Ÿ‚ ใ™ใฝใƒผใค #T35*500 ๐Ÿƒ ใ™ใฝใƒผใค #T35*500 ๐Ÿ„ ใ™ใฝใƒผใค #T35*500 ๐Ÿ… ใ™ใฝใƒผใค #T35*500 ๐Ÿšด ใ™ใฝใƒผใค #T35*500 ๐Ÿšต ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ‡ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅˆ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ‰ ใ™ใฝใƒผใค #T35*500 ๐Ÿ† ใ™ใฝใƒผใค #T35*500 ๐Ÿ‡ ใ™ใฝใƒผใค #T35*500 ๐Ÿˆ ใ™ใฝใƒผใค #T35*500 ๐Ÿ‰ ใ™ใฝใƒผใค #T35*500 ๐ŸŠ ใ™ใฝใƒผใค #T35*500 ๐Ÿ‹ ใ™ใฝใƒผใค #T35*500 โ›ณ ใ™ใฝใƒผใค #T35*500 ๐ŸŒ ใ™ใฝใƒผใค #T35*500 ๐Ÿ ใ™ใฝใƒผใค #T35*500 ๐ŸŽ ใ™ใฝใƒผใค #T35*500 โ—Ž ใ™ใฝใƒผใค #T35*500 ๐ŸŽฏ ใ™ใฝใƒผใค #T35*500 ๐Ÿคธ ใ™ใฝใƒผใค #T35*500 ๐Ÿคน ใ™ใฝใƒผใค #T35*500 ๐Ÿคบ ใ™ใฝใƒผใค #T35*500 ๐Ÿคผ ใ™ใฝใƒผใค #T35*500 ๐Ÿคฝ ใ™ใฝใƒผใค #T35*500 ๐Ÿคพ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ… ใ™ใฝใƒผใค #T35*500 ๐ŸฅŠ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ‹ ใ™ใฝใƒผใค #T35*500 ๐Ÿง— ใ™ใฝใƒผใค #T35*500 ๐Ÿ›น ใ™ใฝใƒผใค #T35*500 โšฝ ใ™ใฝใƒผใค #T35*500 โšพ ใ™ใฝใƒผใค #T35*500 ๐ŸฅŽ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ ใ™ใฝใƒผใค #T35*500 ๐Ÿฅ ใ™ใฝใƒผใค #T35*500 ๐Ÿช‚ ใ™ใฝใƒผใค #T35*500 ๐Ÿคฟ ใ™ใพใ„ใ‚‹ #T35*500 โ˜บ ใ™ใพใ„ใ‚‹ #T35*500 โ˜ป ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜€ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜‚ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ƒ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜„ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜… ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜† ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜‡ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ˆ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜‰ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜Š ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜‹ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜Œ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜Ž ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ธ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜น ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜บ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ˜ป ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ™‚ ใ™ใพใ„ใ‚‹ #T35*500 ๐Ÿ™‹ ใ™ใพใ„ใ‚‹ #T35*500 สฌ ใ™ใ‚ใฃใจ #T35*500 ๐ŸŽฐ ใ™ใ‚ใ‚‹ #T35*500 ๐ŸงŽ ใ™ใƒผใคใ‘ใƒผใ™ #T35*500 ๐Ÿงณ ใ™ใƒผใฑใƒผใ†ใƒผใพใ‚“ #T35*500 ๐Ÿฆน ใ™ใƒผใฑใƒผใพใ‚“ #T35*500 ๐Ÿฆธ ใšใšใš #T35*500 ๐Ÿ’ค ใšใšใš #T35*500 ๐Ÿ˜ด ใšใคใ† #T35*500 ๐Ÿคฆ ใšใผใ‚“ #T35*500 ๐Ÿ‘– ใ›ใ„ #T35*500 โ™‚ ใ›ใ„ #T35*500 โ™€ ใ›ใ„ใ– #T35*500 โ™ˆ ใ›ใ„ใ– #T35*500 โ™‰ ใ›ใ„ใ– #T35*500 โ™Š ใ›ใ„ใ– #T35*500 โ™‹ ใ›ใ„ใ– #T35*500 โ™Œ ใ›ใ„ใ– #T35*500 โ™ ใ›ใ„ใ– #T35*500 โ™Ž ใ›ใ„ใ– #T35*500 โ™ ใ›ใ„ใ– #T35*500 โ™ ใ›ใ„ใ– #T35*500 โ™‘ ใ›ใ„ใ– #T35*500 โ™’ ใ›ใ„ใ– #T35*500 โ™“ ใ›ใ„ใ– #T35*500 ๐ŸงŽ ใ›ใ„ใ˜ใ‚“ #T35*500 ๐Ÿ‘จ ใ›ใ„ใ˜ใ‚“ #T35*500 ๐Ÿ‘ฉ ใ›ใ„ใ˜ใ‚“ #T35*500 ๐Ÿง‘ ใ›ใ„ใ˜ใ‚“ #T35*500 ๐Ÿง“ ใ›ใ‹ใ„ #T35*500 ๐Ÿ—บ ใ›ใ #T35*500 ๐Ÿ˜ท ใ›ใใ‚ใ‚“ #T35*500 ๐Ÿ˜ณ ใ›ใฃใ‘ใ‚“ #T35*500 ๐Ÿงผ ใ›ใ‚“ใŸใ #T35*500 ๐Ÿงบ ใ›ใ‚“ใŸใ #T35*500 ๐Ÿงฝ ใใ†ใ˜ #T35*500 ๐Ÿงน ใใใฆใ‚“ #T35*500 ๐Ÿคธ ใใฃใใ™ #T35*500 ๐Ÿงฆ ใใต #T35*500 ๐Ÿ‘ด ใใตใจใใ‚Šใƒผใ‚€ #T35*500 ๐Ÿฆ ใใตใจใใ‚Šใƒผใ‚€ #T35*500 ๐Ÿง ใใตใจใผใƒผใ‚‹ #T35*500 ๐ŸฅŽ ใใผ #T35*500 ๐Ÿ‘ต ใใ‚Š #T35*500 ๐Ÿ›ท ใใ‚ใฐใ‚“ #T35*500 ๐Ÿงฎ ใใƒผใ  #T35*500 ๐Ÿฅค ใžใฃใจ #T35*500 ๐Ÿ˜จ ใžใฃใจ #T35*500 ๐Ÿ˜ฑ ใžใฃใจใ™ใ‚‹ #T35*500 ๐Ÿ˜จ ใžใฃใจใ™ใ‚‹ #T35*500 ๐Ÿ˜ฑ ใžใ† #T35*500 ๐Ÿ˜ ใžใ‚“ใณ #T35*500 ๐ŸงŸ ใŸใ„ใ“ #T35*500 ๐Ÿฅ ใŸใ„ใใ† #T35*500 ๐Ÿคธ ใŸใ„ใตใ† #T35*500 ๐ŸŒ€ ใŸใ„ใ‚ˆใ† #T35*500 โ˜‰ ใŸใ„ใ‚ˆใ† #T35*500 โ˜€ ใŸใ„ใ‚ˆใ† #T35*500 โ˜ผ ใŸใ„ใ‚ˆใ† #T35*500 ๐ŸŒฃ ใŸใ„ใ‚ˆใ† #T35*500 ๐ŸŒž ใŸใ‹ #T35*500 ๐Ÿฆ… ใŸใใ—ใƒผใฉ #T35*500 ๐Ÿคต ใŸใ“ #T35*500 ๐Ÿ™ ใŸใ“ใ‚ใ’ #T35*500 ๐Ÿช ใŸใ“ใ™ #T35*500 ๐ŸŒฎ ใŸใค #T35*500 ๐Ÿง ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿ  ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿก ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿข ใŸใฆใ‚‚ใฎ #T35*500 โ›จ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿฅ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿฆ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿจ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿซ ใŸใฆใ‚‚ใฎ #T35*500 โ›ญ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿญ ใŸใฆใ‚‚ใฎ #T35*500 ๐Ÿ›• ใŸใชใฐใŸ #T35*500 ๐ŸŽ‹ ใŸใฎใ‚€ #T35*500 ๐Ÿฅบ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ” ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ• ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ– ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ— ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฆช ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ˜ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ™ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿš ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ› ใŸในใ‚‚ใฎ #T35*500 ๐Ÿœ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿž ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒญ ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒฎ ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒฏ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ– ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ™ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅž ใŸในใ‚‚ใฎ #T35*500 ๐ŸŸ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ  ใŸในใ‚‚ใฎ #T35*500 ๐Ÿก ใŸในใ‚‚ใฎ #T35*500 ๐Ÿข ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฃ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿค ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฆ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง ใŸในใ‚‚ใฎ #T35*500 ๐Ÿจ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฉ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿช ใŸในใ‚‚ใฎ #T35*500 ๐Ÿซ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฌ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿญ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฎ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฏ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฐ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง‡ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฑ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฒ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ˜ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿณ ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒถ ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒฝ ใŸในใ‚‚ใฎ #T35*500 ๐ŸŒฐ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฟ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿด ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ„ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ… ใŸในใ‚‚ใฎ #T35*500 ๐Ÿ† ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง€ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ‘ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ’ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ“ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ” ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ• ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ— ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅš ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅœ ใŸในใ‚‚ใฎ #T35*500 ๐ŸฅŸ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅ  ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅก ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅข ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฃ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฅ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฆ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅง ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅจ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฉ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅช ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅซ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง† ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฌ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง„ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง… ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅญ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฎ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿฅฏ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง ใŸในใ‚‚ใฎ #T35*500 ๐Ÿง‚ ใŸในใ‚‚ใฎ #T35*500 ๐Ÿงˆ ใŸใพใ” #T35*500 ๐Ÿฅš ใŸใพใ” #T35*500 ๐Ÿณ ใŸใพใ—ใ„ #T35*500 ๐Ÿงž ใŸใพใญใŽ #T35*500 ๐Ÿง… ใŸใ‚“ใ•ใ‚“ #T35*500 ๐Ÿฅค ใŸใ‚“ใ–ใ #T35*500 ๐ŸŽ‹ ใŸใ‚“ใ˜ใ‚‡ใ†ใณ #T35*500 ๐ŸŽ‚ ใŸใ‚“ใฆใ„ #T35*500 ๐Ÿ•ต ใŸใ‚“ใถใ‚‰ใƒผ #T35*500 ๐Ÿฅƒ ใŸใƒผใฐใ‚“ #T35*500 ๐Ÿ‘ณ ใ ใ„ใ‚ใ‚‚ใ‚“ใฉ #T35*500 ๐Ÿ’Ž ใ ใ„ใณใ‚“ใ #T35*500 ๐Ÿคฟ ใ ใ„ใ‚„ใ‚‚ใ‚“ใฉ #T35*500 ๐Ÿ’Ž ใ ใฃใ“ #T35*500 ๐Ÿคฑ ใ ใฃใ—ใ‚… #T35*500 ๐Ÿ’จ ใ ใพใ‚‹ #T35*500 ๐Ÿคซ ใ ใ‚“ใ” #T35*500 ๐Ÿก ใ ใ‚“ใ•ใƒผ #T35*500 ๐Ÿ’ƒ ใ ใ‚“ใ•ใƒผ #T35*500 ๐Ÿ•บ ใ ใ‚“ใ˜ใ‚‡ #T35*500 ๐Ÿ‘ซ ใ ใ‚“ใ™ #T35*500 ๐Ÿ’ƒ ใ ใ‚“ใ™ #T35*500 ๐Ÿ•บ ใ ใƒผใค #T35*500 โ—Ž ใ ใƒผใค #T35*500 ๐ŸŽฏ ใก #T35*500 ๐Ÿฉธ ใกใใ‚…ใ† #T35*500 โ™ ใกใใ‚…ใ† #T35*500 ๐ŸŒ ใกใใ‚…ใ† #T35*500 ๐ŸŒŽ ใกใใ‚…ใ† #T35*500 ๐ŸŒ ใกใใ‚…ใ† #T35*500 ๐ŸŒ ใกใ‘ใฃใจ #T35*500 ๐ŸŽซ ใกใ‘ใฃใจ #T35*500 ๐ŸŽŸ ใกใ‚ƒใใ›ใ #T35*500 ๐ŸงŽ ใกใ‚ƒใฃใ #T35*500 ๐Ÿค ใกใ‚…ใ†ใ‘ใ„ #T35*500 ๐Ÿ“ก ใกใ‚…ใ†ใ”ใ #T35*500 ๐Ÿ‘ฒ ใกใ‚…ใ†ใ—ใ‚ƒ #T35*500 ๐Ÿ’‰ ใกใ‚…ใ†ใ›ใ„ #T35*500 โšฒ ใกใ‚…ใƒผใ‚Šใฃใท #T35*500 ๐ŸŒท ใกใ‚‡ใ† #T35*500 ๐Ÿฆ‹ ใกใ‚‡ใ†ใ‹ใ #T35*500 ๐Ÿง ใกใ‚‡ใ†ใ‹ใใ—ใ‚‡ใ†ใŒใ„ #T35*500 ๐Ÿง ใกใ‚‡ใ†ใ—ใ‚‡ใ #T35*500 ๐Ÿฅฃ ใกใ‚‡ใ†ใ—ใ‚“ใ #T35*500 ๐Ÿฉบ ใกใ‚‡ใ†ใฟใ‚Šใ‚‡ใ† #T35*500 ๐Ÿง‚ ใกใ‚‡ใใ‚Šใค #T35*500 ๐Ÿง ใกใ‚‡ใ #T35*500 โœŒ ใกใ‚‡ใ“ใ‚Œใƒผใจ #T35*500 ๐Ÿซ ใกใ‚“ใ’ใ‚“ใ•ใ„ #T35*500 ๐Ÿฅฌ ใกใƒผใš #T35*500 ๐Ÿง€ ใคใˆ #T35*500 โ˜ค ใคใˆ #T35*500 ๐Ÿฆฏ ใคใ‹ใ‚Œใ‚‹ #T35*500 ๐Ÿ˜ซ ใคใ‹ใ‚Œใ‚‹ #T35*500 ๐Ÿฅฑ ใคใใฟ #T35*500 ๐ŸŽ‘ ใคใญใ‚‹ #T35*500 ๐Ÿค ใคใฎ #T35*500 ๐Ÿ‘ฟ ใคใฎ #T35*500 ๐Ÿ˜ˆ ใคใพใ‚€ #T35*500 ๐Ÿค ใคใ‚Š #T35*500 ๐ŸŽฃ ใฆ #T35*500 โœŠ ใฆ #T35*500 โœ‹ ใฆ #T35*500 โœŒ ใฆ #T35*500 ๐Ÿ‘† ใฆ #T35*500 ๐Ÿ‘‡ ใฆ #T35*500 ๐Ÿ‘ˆ ใฆ #T35*500 ๐Ÿ‘‰ ใฆ #T35*500 ๐Ÿ‘Š ใฆ #T35*500 ๐Ÿ‘‹ ใฆ #T35*500 ๐Ÿ‘Œ ใฆ #T35*500 ๐Ÿ‘ ใฆ #T35*500 ๐Ÿ‘Ž ใฆ #T35*500 ๐Ÿ‘ ใฆ #T35*500 ๐Ÿ‘ ใฆ #T35*500 ๐ŸคŸ ใฆ #T35*500 ๐ŸคŸ ใฆ #T35*500 ๐Ÿคฒ ใฆ #T35*500 ๐Ÿค ใฆ #T35*500 ๐Ÿค ใฆ #T35*500 ๐Ÿ‘ญ ใฆ #T35*500 ๐Ÿ‘ซ ใฆ #T35*500 ๐Ÿ‘ฌ ใฆใ„ใใ‚ใ†ใจ #T35*500 ๐Ÿฅก ใฆใŒใ #T35*500 โœ ใฆใŒใฟ #T35*500 ๐Ÿ’Œ ใฆใใ™ใจ #T35*500 ๏ธŽ ใฆใ“ใ‚“ใฉ #T35*500 ๐Ÿฅ‹ ใฆใ™ใจ #T35*500 ๐Ÿ“ ใฆใซใ™ #T35*500 ๐ŸŽพ ใฆใฎใฒใ‚‰ #T35*500 ๐Ÿ‘ ใฆใถใใ‚ #T35*500 ๐Ÿงค ใฆใ‚‰ #T35*500 ๐Ÿ›• ใฆใ‚Œใณ #T35*500 ๐Ÿ“บ ใฆใ‚“ใ #T35*500 ๐Ÿ‘บ ใฆใ‚“ใ #T35*500 ๐Ÿคฅ ใฆใ‚“ใ— #T35*500 ๐Ÿ‘ผ ใฆใ‚“ใจใ†ใ‚€ใ— #T35*500 ๐Ÿž ใฆใ‚“ใฎใ†ใ›ใ„ #T35*500 โ™… ใฆใ‚“ใณใ‚“ #T35*500 โš– ใฆใ‚“ใณใ‚“ใ– #T35*500 โ™Ž ใงใƒใ™ใ #T35*500 ๐Ÿ’ฝ ใงใƒใ™ใ #T35*500 ๐Ÿ’พ ใงใƒใ™ใ #T35*500 ๐Ÿ’ฟ ใงใƒใ™ใ #T35*500 ๐Ÿ“€ ใงใƒใƒผใถใ„ใงใƒใƒผ #T35*500 ๐Ÿ“€ ใงใ™ใใจใฃใท #T35*500 ๐Ÿ–ฅ ใงใ‚“ใ’ใ‚“ #T35*500 ๐Ÿ”Œ ใงใ‚“ใŸใ #T35*500 ๐Ÿ–ฉ ใงใ‚“ใก #T35*500 ๐Ÿ”‹ ใงใ‚“ใฑ #T35*500 ๐Ÿ“ถ ใงใ‚“ใ‚ #T35*500 ๐Ÿค™ ใงใ‚“ใ‚ #T35*500 ๐Ÿ“ž ใงใ‚“ใ‚ #T35*500 ๐Ÿ“ฑ ใงใ‚“ใ‚ #T35*500 ๐Ÿ“ฒ ใงใ‚“ใ‚ #T35*500 ๐Ÿ“Ÿ ใจใ„ใ‚Œ #T35*500 ๐Ÿšน ใจใ„ใ‚Œ #T35*500 ๐Ÿšบ ใจใ„ใ‚Œ #T35*500 ๐Ÿšป ใจใ„ใ‚Œ #T35*500 ๐Ÿšพ ใจใ„ใ‚Œใฃใจใบใƒผใฑใƒผ #T35*500 ๐Ÿงป ใจใ†ใŒใ‚‰ใ— #T35*500 ๐ŸŒถ ใจใ†ใใ‚‡ใ†ใŸใ‚ใƒผ #T35*500 ๐Ÿ—ผ ใจใ†ใ ใ„ #T35*500 โ›ฏ ใจใ†ใ‚‚ใ‚ใ“ใ— #T35*500 ๐ŸŒฝ ใจใ‹ใ’ #T35*500 ๐ŸฆŽ ใจใ–ใ‚“ #T35*500 ๐Ÿง— ใจใ˜ใ‚‹ #T35*500 โŒ ใจใ˜ใ‚‹ #T35*500 ๐Ÿ—™ ใจใพใจ #T35*500 ๐Ÿ… ใจใพใ‚Œ #T35*500 ๐Ÿ›‘ ใจใพใ‚‹ #T35*500 ๐Ÿ›‘ ใจใ‚‰ #T35*500 ๐Ÿ… ใจใ‚‰ #T35*500 ๐Ÿฏ ใจใ‚‰ใฃใ #T35*500 โ›Ÿ ใจใ‚‰ใฃใใผใƒผใ‚‹ #T35*500 ๐Ÿ–ฒ ใจใ‚‰ใ‚“ใ #T35*500 ๐Ÿงณ ใจใ‚‰ใ‚“ใบใฃใจ #T35*500 ๐ŸŽบ ใจใ‚Š #T35*500 ๐Ÿฃ ใจใ‚Š #T35*500 ๐Ÿค ใจใ‚Š #T35*500 ๐Ÿฅ ใจใ‚Š #T35*500 ๐Ÿฆ ใจใ‚Š #T35*500 ๐Ÿฆ… ใจใ‚Š #T35*500 ๐Ÿฆ† ใจใ‚Š #T35*500 ๐Ÿฆ‰ ใจใ‚Š #T35*500 ๐Ÿฆš ใจใ‚Š #T35*500 ๐Ÿฆœ ใจใ‚Š #T35*500 ๐Ÿฆข ใจใ‚Šใซใ #T35*500 ๐Ÿ— ใจใ‚ใตใƒใƒผ #T35*500 ๐Ÿ† ใฉใ† #T35*500 ๐Ÿฅ‰ ใฉใ†ใŒ #T35*500 ๐ŸŽฅ ใฉใ†ใŽ #T35*500 ๐Ÿฅ‹ ใฉใ†ใ #T35*500 ๐Ÿงฐ ใฉใ†ใถใค #T35*500 ๐Ÿ€ ใฉใ†ใถใค #T35*500 ๐Ÿ ใฉใ†ใถใค #T35*500 ๐Ÿ‚ ใฉใ†ใถใค #T35*500 ๐Ÿƒ ใฉใ†ใถใค #T35*500 ๐Ÿ„ ใฉใ†ใถใค #T35*500 ๐Ÿ… ใฉใ†ใถใค #T35*500 ๐Ÿ† ใฉใ†ใถใค #T35*500 ๐Ÿ‡ ใฉใ†ใถใค #T35*500 ๐Ÿˆ ใฉใ†ใถใค #T35*500 ๐Ÿ‰ ใฉใ†ใถใค #T35*500 ๐ŸŠ ใฉใ†ใถใค #T35*500 ๐Ÿ‹ ใฉใ†ใถใค #T35*500 ๐ŸŒ ใฉใ†ใถใค #T35*500 ๐Ÿ ใฉใ†ใถใค #T35*500 ๐ŸŽ ใฉใ†ใถใค #T35*500 ๐Ÿ ใฉใ†ใถใค #T35*500 ๐Ÿ ใฉใ†ใถใค #T35*500 ๐Ÿ‘ ใฉใ†ใถใค #T35*500 ๐Ÿ’ ใฉใ†ใถใค #T35*500 ๐Ÿ“ ใฉใ†ใถใค #T35*500 ๐Ÿ” ใฉใ†ใถใค #T35*500 ๐Ÿ• ใฉใ†ใถใค #T35*500 ๐Ÿฆฎ ใฉใ†ใถใค #T35*500 ๐Ÿฆบ ใฉใ†ใถใค #T35*500 ๐Ÿ– ใฉใ†ใถใค #T35*500 ๐Ÿ— ใฉใ†ใถใค #T35*500 ๐Ÿ˜ ใฉใ†ใถใค #T35*500 ๐Ÿ™ ใฉใ†ใถใค #T35*500 ๐Ÿš ใฉใ†ใถใค #T35*500 ๐Ÿฆช ใฉใ†ใถใค #T35*500 ๐Ÿ› ใฉใ†ใถใค #T35*500 ๐Ÿœ ใฉใ†ใถใค #T35*500 ๐Ÿ ใฉใ†ใถใค #T35*500 ๐Ÿž ใฉใ†ใถใค #T35*500 ๐ŸŸ ใฉใ†ใถใค #T35*500 ๐Ÿ  ใฉใ†ใถใค #T35*500 ๐Ÿก ใฉใ†ใถใค #T35*500 ๐Ÿข ใฉใ†ใถใค #T35*500 ๐Ÿฃ ใฉใ†ใถใค #T35*500 ๐Ÿค ใฉใ†ใถใค #T35*500 ๐Ÿฅ ใฉใ†ใถใค #T35*500 ๐Ÿฆ ใฉใ†ใถใค #T35*500 ๐Ÿง ใฉใ†ใถใค #T35*500 ๐Ÿจ ใฉใ†ใถใค #T35*500 ๐Ÿฉ ใฉใ†ใถใค #T35*500 ๐Ÿช ใฉใ†ใถใค #T35*500 ๐Ÿซ ใฉใ†ใถใค #T35*500 ๐Ÿฌ ใฉใ†ใถใค #T35*500 ๐Ÿญ ใฉใ†ใถใค #T35*500 ๐Ÿฎ ใฉใ†ใถใค #T35*500 ๐Ÿฏ ใฉใ†ใถใค #T35*500 ๐Ÿฐ ใฉใ†ใถใค #T35*500 ๐Ÿฑ ใฉใ†ใถใค #T35*500 ๐Ÿฒ ใฉใ†ใถใค #T35*500 ๐Ÿณ ใฉใ†ใถใค #T35*500 ๐Ÿด ใฉใ†ใถใค #T35*500 ๐Ÿต ใฉใ†ใถใค #T35*500 ๐Ÿถ ใฉใ†ใถใค #T35*500 ๐Ÿท ใฉใ†ใถใค #T35*500 ๐Ÿธ ใฉใ†ใถใค #T35*500 ๐Ÿน ใฉใ†ใถใค #T35*500 ๐Ÿบ ใฉใ†ใถใค #T35*500 ๐Ÿป ใฉใ†ใถใค #T35*500 ๐Ÿผ ใฉใ†ใถใค #T35*500 ๐Ÿฝ ใฉใ†ใถใค #T35*500 ๐Ÿฆ… ใฉใ†ใถใค #T35*500 ๐Ÿฆ† ใฉใ†ใถใค #T35*500 ๐Ÿฆ‡ ใฉใ†ใถใค #T35*500 ๐Ÿฆˆ ใฉใ†ใถใค #T35*500 ๐Ÿฆ‰ ใฉใ†ใถใค #T35*500 ๐ŸฆŠ ใฉใ†ใถใค #T35*500 ๐ŸฆŒ ใฉใ†ใถใค #T35*500 ๐Ÿฆ ใฉใ†ใถใค #T35*500 ๐ŸฆŽ ใฉใ†ใถใค #T35*500 ๐Ÿฆ ใฉใ†ใถใค #T35*500 ๐Ÿฆ ใฉใ†ใถใค #T35*500 ๐Ÿฆ‘ ใฉใ†ใถใค #T35*500 ๐Ÿฆ“ ใฉใ†ใถใค #T35*500 ๐Ÿฆ’ ใฉใ†ใถใค #T35*500 ๐Ÿฆ” ใฉใ†ใถใค #T35*500 ๐Ÿฆ• ใฉใ†ใถใค #T35*500 ๐Ÿฆ– ใฉใ†ใถใค #T35*500 ๐Ÿฆ— ใฉใ†ใถใค #T35*500 ๐Ÿฆ‹ ใฉใ†ใถใค #T35*500 ๐Ÿฆ˜ ใฉใ†ใถใค #T35*500 ๐Ÿฆ™ ใฉใ†ใถใค #T35*500 ๐Ÿฆš ใฉใ†ใถใค #T35*500 ๐Ÿฆ› ใฉใ†ใถใค #T35*500 ๐Ÿฆœ ใฉใ†ใถใค #T35*500 ๐Ÿฆ ใฉใ†ใถใค #T35*500 ๐Ÿฆž ใฉใ†ใถใค #T35*500 ๐ŸฆŸ ใฉใ†ใถใค #T35*500 ๐Ÿฆ  ใฉใ†ใถใค #T35*500 ๐Ÿฆก ใฉใ†ใถใค #T35*500 ๐Ÿฆข ใฉใ†ใถใค #T35*500 ๐Ÿงธ ใฉใ†ใถใค #T35*500 ๐Ÿฆฅ ใฉใ†ใถใค #T35*500 ๐Ÿฆฆ ใฉใ†ใถใค #T35*500 ๐Ÿฆง ใฉใ†ใถใค #T35*500 ๐Ÿฆจ ใฉใ†ใถใค #T35*500 ๐Ÿฆฉ ใฉใ‹ใŸ #T35*500 ๐Ÿ‘ท ใฉใใ‚ #T35*500 ๐Ÿ’€ ใฉใใ‚ #T35*500 โ˜  ใฉใ’ใ– #T35*500 ๐Ÿ™ ใฉใ›ใ„ #T35*500 โ™„ ใฉใ›ใ„ #T35*500 ๐Ÿช ใฉใ‚‰ใใ‚…ใ‚‰ #T35*500 ๐Ÿง› ใฉใ‚‰ใ”ใ‚“ #T35*500 ๐Ÿ‰ ใฉใ‚‰ใ”ใ‚“ #T35*500 ๐Ÿฒ ใฉใ‚‰ใ‚€ #T35*500 ๐Ÿฅ ใฉใ‚Œใ™ #T35*500 ๐Ÿ‘— ใฉใ‚Œใ™ #T35*500 ๐Ÿฅป ใฉใ‚Œใ™ #T35*500 ๐Ÿ‘ฐ ใฉใ‚“ใถใ‚Š #T35*500 ๐Ÿœ ใฉใ‚“ใถใ‚Š #T35*500 ๐Ÿฅฃ ใฉใƒผใชใค #T35*500 ๐Ÿฉ ใชใ„ใต #T35*500 ๐Ÿด ใชใˆ #T35*500 ๐ŸŒฑ ใชใŒใ‚Œใผใ— #T35*500 โ˜„ ใชใ #T35*500 ๐Ÿ˜ข ใชใ #T35*500 ๐Ÿ˜ญ ใชใ #T35*500 ๐Ÿ˜ฟ ใชใ— #T35*500 ๐Ÿ ใชใ™ #T35*500 ๐Ÿ† ใชใตใ  #T35*500 ๐Ÿ“› ใชใน #T35*500 ๐Ÿฒ ใชใน #T35*500 ๐Ÿฅ˜ ใชใพใ‘ใ‚‚ใฎ #T35*500 ๐Ÿฆฅ ใชใฟ #T35*500 ๐ŸŒŠ ใชใ‚‹ใจ #T35*500 ๐Ÿฅ ใซใ„ #T35*500 ๐Ÿฅˆ ใซใ #T35*500 ๐Ÿ– ใซใ #T35*500 ๐Ÿ— ใซใ #T35*500 ๐Ÿฅฉ ใซใใ ใ‚“ใ” #T35*500 ๐Ÿง† ใซใ˜ #T35*500 ๐ŸŒˆ ใซใฒใ‚‹ #T35*500 ๐Ÿ˜ ใซใฒใ‚‹ #T35*500 ๐Ÿ˜ผ ใซใปใ‚“ #T35*500 ๐Ÿ—พ ใซใปใ‚“ #T35*500 ๐ŸŽŒ ใซใ‚…ใ†ใŒใ #T35*500 ๐ŸŽ’ ใซใ‚…ใ†ใŒใ #T35*500 ๐ŸŽ“ ใซใ‚ใจใ‚Š #T35*500 ๐Ÿ“ ใซใ‚ใจใ‚Š #T35*500 ๐Ÿ” ใซใ‚“ใŽใ‚‡ #T35*500 ๐Ÿงœ ใซใ‚“ใŽใ‚‡ใ† #T35*500 ๐ŸŽŽ ใซใ‚“ใ—ใ‚“ #T35*500 ๐Ÿคฐ ใซใ‚“ใ˜ใ‚“ #T35*500 ๐Ÿฅ• ใซใ‚“ใซใ #T35*500 ๐Ÿง„ ใฌใ„ใใ‚‹ใฟ #T35*500 ๐Ÿงธ ใญใ„ใ‚‹ #T35*500 ๐Ÿ’… ใญใŒใ„ #T35*500 ๐Ÿฅบ ใญใŒใ† #T35*500 ๐Ÿฅบ ใญใใŸใ„ #T35*500 ๐Ÿ‘” ใญใ“ #T35*500 ๐Ÿˆ ใญใ“ #T35*500 ๐Ÿฑ ใญใ˜ #T35*500 ๐Ÿ”ฉ ใญใšใฟ #T35*500 ๐Ÿ ใญใšใฟ #T35*500 ๐Ÿญ ใญใฃใจ #T35*500 ๐Ÿฅ… ใญใค #T35*500 ๐Ÿค’ ใญใ‚€ใ„ #T35*500 ๐Ÿ˜ช ใญใ‚€ใ„ #T35*500 ๐Ÿฅฑ ใญใ‚‹ #T35*500 ๐Ÿ’ค ใญใ‚‹ #T35*500 ๐Ÿ˜ด ใฎใ† #T35*500 ๐Ÿง  ใฎใฟใ‚‚ใฎ #T35*500 โ˜• ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿต ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿถ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿท ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿธ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿน ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿบ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿป ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿป ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿผ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿฅ‚ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿฅƒ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿฅ› ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿฅค ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿฅซ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿงƒ ใฎใฟใ‚‚ใฎ #T35*500 ๐Ÿง‰ ใฎใฟใ‚‚ใฎ #T35*500 ๐ŸงŠ ใฏ #T35*500 โ˜˜ ใฏ #T35*500 ๐Ÿ€ ใฏ #T35*500 เฎ ใฏ #T35*500 ๐Ÿ ใฏ #T35*500 ๐Ÿ‚ ใฏ #T35*500 ๐Ÿƒ ใฏ #T35*500 ๐Ÿ„ ใฏ #T35*500 ๐Ÿฆท ใฏใ„ #T35*500 ๐Ÿ™† ใฏใ„ใฒใƒผใ‚‹ #T35*500 ๐Ÿ‘  ใฏใ„ใณใ™ใ‹ใ™ #T35*500 ๐ŸŒบ ใฏใ #T35*500 ๐Ÿคข ใฏใ #T35*500 ๐Ÿคฎ ใฏใใ„ #T35*500 ๐Ÿฅผ ใฏใใ—ใ‚… #T35*500 ๐Ÿ‘ ใฏใใกใ‚‡ใ† #T35*500 ๐Ÿฆข ใฏใ’ #T35*500 ๐Ÿฆฒ ใฏใ•ใฟ #T35*500 โœ€ ใฏใ•ใฟ #T35*500 โœ ใฏใ•ใฟ #T35*500 โœ‚ ใฏใ•ใฟ #T35*500 โœƒ ใฏใ•ใฟ #T35*500 โœ„ ใฏใ— #T35*500 ๐Ÿฅข ใฏใšใ‹ใ—ใ„ #T35*500 ๐Ÿ˜ณ ใฏใŸ #T35*500 โš ใฏใŸ #T35*500 โš‘ ใฏใŸ #T35*500 โ›ฟ ใฏใŸ #T35*500 ๐Ÿ ใฏใŸ #T35*500 ๐ŸŽŒ ใฏใกใฟใค #T35*500 ๐Ÿฏ ใฏใคใงใ‚“ใ—ใ‚‡ #T35*500 โ›ฎ ใฏใช #T35*500 โš˜ ใฏใช #T35*500 โœฟ ใฏใช #T35*500 โ€ ใฏใช #T35*500 ๐ŸŒท ใฏใช #T35*500 ๐ŸŒธ ใฏใช #T35*500 ๐ŸŒน ใฏใช #T35*500 ๐ŸŒบ ใฏใช #T35*500 ๐ŸŒป ใฏใช #T35*500 ๐ŸŒผ ใฏใช #T35*500 ๐Ÿ’ฎ ใฏใช #T35*500 ๐Ÿ‘ƒ ใฏใช #T35*500 ๐ŸŽ• ใฏใช #T35*500 ๐Ÿ’ ใฏใช #T35*500 ๐Ÿฅ€ ใฏใชใณ #T35*500 ๐ŸŽ† ใฏใชใณ #T35*500 ๐ŸŽ‡ ใฏใชใตใ  #T35*500 ๐ŸŽด ใฏใ‚€ใ™ใŸใƒผ #T35*500 ๐Ÿน ใฏใ‚Šใญใšใฟ #T35*500 ๐Ÿฆ” ใฏใ‚Œ #T35*500 โ˜€ ใฏใ‚Œ #T35*500 โ˜ผ ใฏใ‚Œ #T35*500 ๐ŸŒฃ ใฏใ‚ใ†ใƒใ‚“ #T35*500 ๐ŸŽƒ ใฏใ‚ใ†ใƒใƒผใ‚“ #T35*500 ๐ŸŽƒ ใฏใ‚“ใ’ใค #T35*500 โ— ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒ“ ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒ” ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒ– ใฏใ‚“ใ’ใค #T35*500 โ—‘ ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒ— ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒ› ใฏใ‚“ใ’ใค #T35*500 ๐ŸŒœ ใฏใ‚“ใฉใฐใฃใ #T35*500 ๐Ÿ‘œ ใฏใ‚“ใฉใผใƒผใ‚‹ #T35*500 ๐Ÿคพ ใฏใ‚“ใฐใƒผใŒใƒผ #T35*500 ๐Ÿ” ใฏใƒผใจ #T35*500 โ™ก ใฏใƒผใจ #T35*500 โ™ฅ ใฏใƒผใจ #T35*500 โข ใฏใƒผใจ #T35*500 โฃ ใฏใƒผใจ #T35*500 โค ใฏใƒผใจ #T35*500 โฅ ใฏใƒผใจ #T35*500 โฆ ใฏใƒผใจ #T35*500 โง ใฏใƒผใจ #T35*500 ๐Ÿ’“ ใฏใƒผใจ #T35*500 ๐Ÿ’” ใฏใƒผใจ #T35*500 ๐Ÿ’• ใฏใƒผใจ #T35*500 ๐Ÿ’– ใฏใƒผใจ #T35*500 ๐Ÿ’— ใฏใƒผใจ #T35*500 ๐Ÿ’˜ ใฏใƒผใจ #T35*500 ๐Ÿ’™ ใฏใƒผใจ #T35*500 ๐Ÿ’š ใฏใƒผใจ #T35*500 ๐Ÿ’› ใฏใƒผใจ #T35*500 ๐Ÿ’œ ใฏใƒผใจ #T35*500 ๐Ÿงก ใฏใƒผใจ #T35*500 ๐Ÿค ใฏใƒผใจ #T35*500 ๐ŸคŽ ใฏใƒผใจ #T35*500 ๐Ÿ’ ใฏใƒผใจ #T35*500 ๐Ÿ’ž ใฏใƒผใจ #T35*500 ๐Ÿ’Ÿ ใฏใƒผใจ #T35*500 ๐ŸŽ” ใฏใƒผใจ #T35*500 ๐Ÿ–ค ใฏใƒผใจ #T35*500 ๐Ÿฅฐ ใฏใƒผใถ #T35*500 ๐ŸŒฟ ใฐใ„ใŠใ‚Šใ‚“ #T35*500 ๐ŸŽป ใฐใ„ใ #T35*500 ๐Ÿ ใฐใ„ใ #T35*500 ๐Ÿ›ด ใฐใ„ใ #T35*500 ๐Ÿ›ต ใฐใ„ใฐใ„ #T35*500 ๐Ÿ‘‹ ใฐใใ ใ‚“ #T35*500 ๐Ÿ’ฃ ใฐใใ ใ‚“ #T35*500 ๐Ÿงจ ใฐใใกใ #T35*500 ๐Ÿงจ ใฐใใฏใค #T35*500 ๐Ÿ’ฅ ใฐใใฏใค #T35*500 ๐Ÿคฏ ใฐใ‘ใฃใจ #T35*500 ๐Ÿฅ– ใฐใ™ใ‘ใฃใจ #T35*500 ๐Ÿงบ ใฐใ™ใ‘ใฃใจใผใƒผใ‚‹ #T35*500 ๐Ÿ€ ใฐใŸใƒผ #T35*500 ๐Ÿงˆ ใฐใฃใ #T35*500 ๐Ÿ‘œ ใฐใฃใŸ #T35*500 ๐Ÿฆ— ใฐใฃใฆใ‚Šใƒผ #T35*500 ๐Ÿ”‹ ใฐใชใช #T35*500 ๐ŸŒ ใฐใ‚‰ #T35*500 ๐ŸŒน ใฐใ‚Œใƒผ #T35*500 ๐Ÿฉฐ ใฐใ‚“ใ–ใ„ #T35*500 ๐Ÿ™Œ ใฐใ‚“ใ˜ใ‚‡ใƒผ #T35*500 ๐Ÿช• ใฐใ‚“ใใ†ใ“ใ† #T35*500 ๐Ÿฉน ใฑใ„ #T35*500 ๐Ÿฅง ใฑใ„ใชใฃใทใ‚‹ #T35*500 ๐Ÿ ใฑใ™ใŸ #T35*500 ๐Ÿ ใฑใšใ‚‹ #T35*500 ๐Ÿงฉ ใฑใใ“ใ‚“ #T35*500 ๐Ÿ’ป ใฑใ‚‰ใ—ใ‚…ใƒผใจ #T35*500 ๐Ÿช‚ ใฑใ‚‰ใใ‚‹ #T35*500 โ›ฑ ใฑใ‚Œใฃใจ #T35*500 ๐ŸŽจ ใฑใ‚“ #T35*500 ๐Ÿž ใฑใ‚“ #T35*500 ๐ŸŒญ ใฑใ‚“ #T35*500 ๐ŸŒฎ ใฑใ‚“ #T35*500 ๐ŸŒฏ ใฑใ‚“ #T35*500 ๐Ÿฅ ใฑใ‚“ #T35*500 ๐Ÿฅ– ใฑใ‚“ #T35*500 ๐Ÿฅ™ ใฑใ‚“ #T35*500 ๐Ÿฉ ใฑใ‚“ #T35*500 ๐Ÿฅž ใฑใ‚“ #T35*500 ๐Ÿฅช ใฑใ‚“ #T35*500 ๐Ÿฅฎ ใฑใ‚“ #T35*500 ๐Ÿฅฏ ใฑใ‚“ใ #T35*500 ๐Ÿคฏ ใฑใ‚“ใ‘ใƒผใ #T35*500 ๐Ÿฅž ใฑใ‚“ใ  #T35*500 ๐Ÿผ ใฑใ‚“ใก #T35*500 ๐Ÿ‘Š ใฑใ‚“ใก #T35*500 ๐Ÿค› ใฑใ‚“ใก #T35*500 ๐Ÿคœ ใฑใƒผ #T35*500 โœ‹ ใฑใƒผ #T35*500 ๐Ÿคš ใฑใƒผใฆใƒ #T35*500 ๐ŸŽˆ ใฑใƒผใฆใƒ #T35*500 ๐ŸŽ‰ ใฑใƒผใฆใƒ #T35*500 ๐ŸŽŠ ใฑใƒผใฆใƒ #T35*500 ๐Ÿฅ‚ ใฑใƒผใฆใƒ #T35*500 ๐Ÿฅณ ใฒ #T35*500 ๐Ÿ”ฅ ใฒ #T35*500 ๐Ÿช” ใฒใ’ #T35*500 ๐Ÿง” ใฒใ’ใใ‚Š #T35*500 ๐Ÿช’ ใฒใ“ใ†ใ #T35*500 โœˆ ใฒใคใŽ #T35*500 โšฐ ใฒใคใ˜ #T35*500 ๐Ÿ ใฒใคใ˜ #T35*500 ๐Ÿ‘ ใฒใคใ˜ #T35*500 ๐Ÿฆ™ ใฒใจ #T35*500 ๐Ÿ‘ถ ใฒใจ #T35*500 ๐Ÿ‘ผ ใฒใจ #T35*500 ๐Ÿ‘ฆ ใฒใจ #T35*500 ๐Ÿ‘จ ใฒใจ #T35*500 ๐Ÿ‘ด ใฒใจ #T35*500 ๐Ÿ‘ง ใฒใจ #T35*500 ๐Ÿ‘ฉ ใฒใจ #T35*500 ๐Ÿง’ ใฒใจ #T35*500 ๐Ÿง‘ ใฒใจ #T35*500 ๐Ÿง“ ใฒใจ #T35*500 ๐Ÿ‘ต ใฒใจ #T35*500 ๐Ÿ‘ฑ ใฒใจ #T35*500 ๐Ÿ‘ณ ใฒใจ #T35*500 ๐Ÿ‘ฒ ใฒใจ #T35*500 ๐Ÿง• ใฒใจ #T35*500 ๐Ÿง” ใฒใจ #T35*500 ๐Ÿคฑ ใฒใจ #T35*500 ๐Ÿฆต ใฒใจ #T35*500 ๐Ÿฆถ ใฒใจ #T35*500 ๐Ÿฆธ ใฒใจ #T35*500 ๐Ÿฆน ใฒใจ #T35*500 ๐Ÿฆด ใฒใจ #T35*500 ๐Ÿฆท ใฒใจใ•ใ—ใ‚†ใณ #T35*500 ๐Ÿ‘† ใฒใจใ•ใ—ใ‚†ใณ #T35*500 ๐Ÿ‘‡ ใฒใจใ•ใ—ใ‚†ใณ #T35*500 ๐Ÿ‘ˆ ใฒใจใ•ใ—ใ‚†ใณ #T35*500 ๐Ÿ‘‰ ใฒใชใพใคใ‚Š #T35*500 ๐ŸŽŽ ใฒใฎใ„ใ‚Š #T35*500 ๐ŸŒ‡ ใฒใฎใง #T35*500 ๐ŸŒ„ ใฒใฎใง #T35*500 ๐ŸŒ… ใฒใพใ‚ใ‚Š #T35*500 ๐ŸŒป ใฒใ‚ #T35*500 ๐Ÿ‘ธ ใฒใ‚ƒใใฆใ‚“ #T35*500 ๐Ÿ’ฏ ใฒใ‚‡ใ† #T35*500 ๐Ÿ† ใฒใ‚‡ใ†ใ—ใ #T35*500 ๐Ÿ›‘ ใฒใ‚ˆใ“ #T35*500 ๐Ÿฃ ใฒใ‚ˆใ“ #T35*500 ๐Ÿค ใฒใ‚ˆใ“ #T35*500 ๐Ÿฅ ใฒใ‚ˆใ“ #T35*500 ๐Ÿฆ ใฒใ‚‰ใ‚ใ #T35*500 ๐Ÿ’ก ใฒใ‚“ใจ #T35*500 ๐Ÿ’ก ใฒใƒผใ‚ใƒผ #T35*500 ๐Ÿฆธ ใฒใƒผใ‚ใƒผ #T35*500 ๐Ÿฆน ใณใใซ #T35*500 ๐Ÿ‘™ ใณใ™ใ‘ใฃใจ #T35*500 ๐Ÿช ใณใ™ใ‘ใฃใจ #T35*500 ๐Ÿฅ  ใณใ™ใ‘ใฃใจ #T35*500 ๐Ÿฅจ ใณใ›ใ„ใถใค #T35*500 ๐Ÿฆ  ใณใฃใใ‚Š #T35*500 ๐Ÿ˜ฎ ใณใฃใใ‚Š #T35*500 ๐Ÿ˜ฐ ใณใฃใใ‚Š #T35*500 ๐Ÿ˜ฒ ใณใงใŠ #T35*500 ๐Ÿ“น ใณใ‚‡ใ†ใ„ใ‚“ #T35*500 โ›จ ใณใ‚‡ใ†ใ„ใ‚“ #T35*500 ๐Ÿฅ ใณใ‚‡ใ†ใ #T35*500 ๐Ÿ˜ท ใณใ‚‡ใ†ใ #T35*500 ๐Ÿค’ ใณใ‚‡ใ†ใ #T35*500 ๐Ÿค• ใณใ‚‡ใ†ใ #T35*500 ๐Ÿคข ใณใ‚‡ใ†ใ #T35*500 ๐Ÿคฎ ใณใ‚‡ใ†ใ #T35*500 ๐Ÿคง ใณใ‚Šใ‚„ใƒผใฉ #T35*500 ๐ŸŽฑ ใณใ‚‹ #T35*500 ๐Ÿข ใณใ‚“ #T35*500 ๐Ÿงด ใณใƒผใ‚‹ #T35*500 ๐Ÿบ ใณใƒผใ‚‹ #T35*500 ๐Ÿป ใดใ‚ใฎ #T35*500 ๐ŸŽ˜ ใดใ‚ใฎ #T35*500 ๐ŸŽน ใดใˆใ‚ #T35*500 ๐Ÿคก ใดใใซใฃใ #T35*500 ๐Ÿงบ ใดใใ‚‹ใ™ #T35*500 ๐Ÿฅ’ ใดใ– #T35*500 ๐Ÿ• ใดใฎใใŠ #T35*500 ๐Ÿคฅ ใดใ‚“ #T35*500 ๐Ÿ“Œ ใดใ‚“ #T35*500 ๐Ÿ“ ใดใƒผใ™ #T35*500 โœŒ ใดใƒผใชใฃใค #T35*500 ๐Ÿฅœ ใตใใ™ใชใƒผ #T35*500 ๐Ÿค ใตใใฃใใ™ #T35*500 ๐Ÿ“  ใตใใ‚‰ใตใ‡ใ‚‹ #T35*500 ๐Ÿง† ใตใƒใŽใ‚ #T35*500 โ›ธ ใตใƒใ‚‹ใ‚€ #T35*500 ๐ŸŽž ใตใƒใ‚‹ใ‚€ #T35*500 ๐ŸŽฅ ใตใƒใ‚‹ใ‚€ #T35*500 ๐ŸŽฌ ใตใ†ใ›ใ‚“ #T35*500 ๐ŸŽˆ ใตใ†ใ‚Šใ‚“ #T35*500 ๐ŸŽ ใตใ‡ใ‚“ใ—ใ‚“ใ #T35*500 ๐Ÿคบ ใตใ‰ใƒผใ #T35*500 ๐Ÿด ใตใ‰ใƒผใกใ‚…ใ‚“ใใฃใใƒผ #T35*500 ๐Ÿฅ  ใตใ #T35*500 ๐ŸŽฉ ใตใ #T35*500 ๐Ÿ‘’ ใตใ #T35*500 ๐Ÿงข ใตใ #T35*500 ๐Ÿ‘“ ใตใ #T35*500 ๐Ÿฅฝ ใตใ #T35*500 ๐Ÿ‘” ใตใ #T35*500 ๐Ÿ‘• ใตใ #T35*500 ๐Ÿ‘™ ใตใ #T35*500 ๐Ÿฉฑ ใตใ #T35*500 ๐Ÿฉฒ ใตใ #T35*500 ๐Ÿฉณ ใตใ #T35*500 ๐Ÿ‘š ใตใ #T35*500 ๐Ÿ‘— ใตใ #T35*500 ๐Ÿ‘˜ ใตใ #T35*500 ๐Ÿงฃ ใตใ #T35*500 ๐Ÿง• ใตใ #T35*500 ๐Ÿงค ใตใ #T35*500 ๐Ÿงฅ ใตใ #T35*500 ๐Ÿฅผ ใตใ #T35*500 ๐Ÿฆบ ใตใ #T35*500 ๐Ÿฅป ใตใ #T35*500 ๐Ÿ‘– ใตใ #T35*500 ๐Ÿงฆ ใตใ #T35*500 ๐Ÿ‘ž ใตใ #T35*500 ๐Ÿ‘Ÿ ใตใ #T35*500 ๐Ÿ‘  ใตใ #T35*500 ๐Ÿ‘ก ใตใ #T35*500 ๐Ÿ‘ข ใตใ #T35*500 ๐Ÿฅพ ใตใ #T35*500 ๐Ÿฅฟ ใตใ #T35*500 ๐Ÿฉฐ ใตใ #T35*500 ๐Ÿคต ใตใ #T35*500 ๐Ÿ‘ฐ ใตใใ–ใค #T35*500 ๐Ÿ˜• ใตใใ‚ใ† #T35*500 ๐Ÿฆ‰ ใตใใ‚ใ‚‰ใ„ #T35*500 ๐Ÿคช ใตใ #T35*500 ๐Ÿก ใตใ–ใ‘ใ‚‹ #T35*500 ๐Ÿคช ใตใ˜ใ•ใ‚“ #T35*500 ๐Ÿ—ป ใตใŸใ”ใ– #T35*500 โ™Š ใตใคใ† #T35*500 ๐Ÿ˜ ใตใญ #T35*500 โ›ด ใตใญ #T35*500 โ›ต ใตใ‚‰ใ„ใฑใ‚“ #T35*500 ๐Ÿณ ใตใ‚‰ใตใ‚‰ #T35*500 ๐Ÿ˜ต ใตใ‚‰ใตใ‚‰ #T35*500 ๐Ÿ’ซ ใตใ‚‰ใฟใ‚“ใ” #T35*500 ๐Ÿฆฉ ใตใ‚‰ใ‚“ใ™ใฑใ‚“ #T35*500 ๐Ÿฅ– ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ‡ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿˆ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ‰ ใตใ‚‹ใƒผใค #T35*500 ๐ŸŠ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ‹ ใตใ‚‹ใƒผใค #T35*500 ๐ŸŒ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ ใตใ‚‹ใƒผใค #T35*500 ๐ŸŽ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ‘ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ’ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿ“ ใตใ‚‹ใƒผใค #T35*500 ๐Ÿฅ ใตใ‚Œใ‚“ใก #T35*500 ๐Ÿฅ ใตใ‚Œใ‚“ใก #T35*500 ๐Ÿฅ– ใตใ‚ #T35*500 ๐Ÿง– ใตใ‚ #T35*500 ๐Ÿงผ ใตใ‚ #T35*500 ๐Ÿงฝ ใตใ‚ใฃใดใƒผใงใƒใ™ใ #T35*500 ๐Ÿ’พ ใตใ‚“ใ™ใ„ #T35*500 โ›ฒ ใถใŸ #T35*500 ๐Ÿ– ใถใŸ #T35*500 ๐Ÿ— ใถใŸ #T35*500 ๐Ÿท ใถใŸ #T35*500 ๐Ÿฝ ใถใฃใใพใƒผใ #T35*500 ๐Ÿ”– ใถใฉใ† #T35*500 ๐Ÿ‡ ใถใ‚Šใจใƒผ #T35*500 ๐ŸŒฏ ใถใ‚ใฃใ #T35*500 ๐Ÿงฑ ใถใ‚ใฃใ“ใ‚Š #T35*500 ๐Ÿฅฆ ใถใƒผใ‘ใฃใจ #T35*500 ๐ŸŽ• ใถใƒผใ‘ใฃใจ #T35*500 ๐Ÿ’ ใถใƒผใค #T35*500 ๐Ÿ‘ข ใถใƒผใค #T35*500 ๐Ÿฅพ ใทใ‚Šใ‚“ #T35*500 ๐Ÿฎ ใทใ‚Šใ‚“ใŸใƒผ #T35*500 ๐Ÿ–จ ใทใ‚Œใœใ‚“ใจ #T35*500 ๐ŸŽ ใทใ‚Œใœใ‚“ใจ #T35*500 ๐Ÿ“ฆ ใทใ‚Œใœใ‚“ใจ #T35*500 ๐Ÿงง ใทใ‚Œใฃใคใ‡ใ‚‹ #T35*500 ๐Ÿฅจ ใธใ‚ใƒผ #T35*500 ๐Ÿฆฑ ใธใ‚ใƒผ #T35*500 ๐Ÿฆฒ ใธใ‚ใƒผ #T35*500 ๐Ÿฆณ ใธใ„ใ˜ใ‚‡ใ†ใ†ใ‚“ใฆใ‚“ #T35*500 ๐Ÿ˜ ใธใ„ใ˜ใ‚‡ใ†ใ†ใ‚“ใฆใ‚“ #T35*500 ๐Ÿ˜ฏ ใธใ„ใ˜ใ‚‡ใ†ใ†ใ‚“ใฆใ‚“ #T35*500 ๐Ÿ˜ถ ใธใ„ใ˜ใ‚‡ใ†ใ—ใ‚“ #T35*500 ๐Ÿ˜ ใธใ„ใ˜ใ‚‡ใ†ใ—ใ‚“ #T35*500 ๐Ÿ˜ฏ ใธใ„ใ˜ใ‚‡ใ†ใ—ใ‚“ #T35*500 ๐Ÿ˜ถ ใธใฃใฉใปใ‚“ #T35*500 ๐ŸŽง ใธใณ #T35*500 ๐Ÿ ใธใ‚“ใŒใŠ #T35*500 ๐Ÿคช ในใ™ใจ #T35*500 ๐Ÿฆบ ในใ‚‹ #T35*500 ๐Ÿ”” ในใ‚‹ #T35*500 ๐Ÿ•ญ ในใ‚ #T35*500 ๐Ÿ˜› ในใ‚ #T35*500 ๐Ÿ˜œ ในใ‚ #T35*500 ๐Ÿ˜ ในใ‚“ใใ‚‡ใ† #T35*500 ๐Ÿ“ ในใ‚“ใจใ† #T35*500 ๐Ÿฑ ในใ‚“ใจใ† #T35*500 ๐Ÿฅก ในใƒผ #T35*500 ๐Ÿ˜› ในใƒผ #T35*500 ๐Ÿ˜œ ในใƒผ #T35*500 ๐Ÿ˜ ในใƒผใใ‚‹ #T35*500 ๐Ÿฅฏ ในใƒผใ“ใ‚“ #T35*500 ๐Ÿฅ“ ในใƒผใ‚‹ #T35*500 ๐Ÿ‘ฐ ใบใ„ใ‚“ใจใ‚ใƒผใจ #T35*500 ๐ŸŽญ ใบใ‚“ #T35*500 โœ‘ ใบใ‚“ #T35*500 โœ’ ใบใ‚“ใŽใ‚“ #T35*500 ๐Ÿง ใปใ†ใ #T35*500 ๐Ÿงน ใปใ†ใใ†ใใ‚“ใ— #T35*500 ๐Ÿคฌ ใปใ†ใกใ‚‡ใ† #T35*500 ๐Ÿ”ช ใปใ— #T35*500 โญ ใปใ— #T35*500 โญ‘ ใปใ— #T35*500 โญ’ ใปใ— #T35*500 โœฆ ใปใ— #T35*500 โœง ใปใ— #T35*500 โœจ ใปใ— #T35*500 โœฉ ใปใ— #T35*500 โœช ใปใ— #T35*500 โœซ ใปใ— #T35*500 โœฌ ใปใ— #T35*500 โœญ ใปใ— #T35*500 โœฎ ใปใ— #T35*500 โœฏ ใปใ— #T35*500 โœฐ ใปใ— #T35*500 โš ใปใ— #T35*500 ๐ŸŒŸ ใปใ— #T35*500 ๐ŸŒ  ใปใ— #T35*500 ๐Ÿคฉ ใปใ— #T35*500 ๐Ÿช ใปใ˜ใ‚‡ใ #T35*500 ๐Ÿฆป ใปใ˜ใ‚‡ใ #T35*500 ๐Ÿฆพ ใปใ˜ใ‚‡ใ #T35*500 ๐Ÿฆฟ ใปใกใ‚‡ใ†ใ #T35*500 ๐Ÿฆป ใปใฃใจใ‘ใƒผใ #T35*500 ๐Ÿฅž ใปใฃใจใฉใฃใ #T35*500 ๐ŸŒญ ใปใฆใ‚‹ #T35*500 ๐Ÿจ ใปใซใ‚…ใ†ใณใ‚“ #T35*500 ๐Ÿผ ใปใญ #T35*500 ๐Ÿฆด ใปใ‚“ #T35*500 ๐Ÿ“’ ใปใ‚“ #T35*500 ๐Ÿ““ ใปใ‚“ #T35*500 ๐Ÿ“” ใปใ‚“ #T35*500 ๐Ÿ“• ใปใ‚“ #T35*500 ๐Ÿ“– ใปใ‚“ #T35*500 ๐Ÿ“— ใปใ‚“ #T35*500 ๐Ÿ“˜ ใปใ‚“ #T35*500 ๐Ÿ“™ ใปใ‚“ #T35*500 ๐Ÿ“š ใปใ‚“ #T35*500 ๐Ÿ•ฎ ใผใ†ใˆใ‚“ใใ‚‡ใ† #T35*500 ๐Ÿ”ญ ใผใ†ใ’ใ‚“ #T35*500 ๐Ÿคฌ ใผใ†ใ— #T35*500 ๐ŸŽฉ ใผใ†ใ— #T35*500 ๐Ÿ‘’ ใผใ†ใ— #T35*500 ๐Ÿงข ใผใ†ใš #T35*500 ๐Ÿฆฒ ใผใ†ใ ใ‚“ใกใ‚‡ใฃใ #T35*500 ๐Ÿฆบ ใผใใ—ใ‚“ใ #T35*500 ๐ŸฅŠ ใผใƒผใจ #T35*500 โ›ต ใผใƒผใจ #T35*500 ๐Ÿ›ถ ใผใƒผใ‚Šใ‚“ใ #T35*500 ๐ŸŽณ ใผใƒผใ‚‹ #T35*500 โšฝ ใผใƒผใ‚‹ #T35*500 โšพ ใผใƒผใ‚‹ #T35*500 ๐ŸฅŽ ใผใƒผใ‚‹ #T35*500 ๐Ÿฅ ใฝใ‹ใƒผใ‚“ #T35*500 ๐Ÿ˜ฎ ใฝใ‘ในใ‚‹ #T35*500 ๐Ÿ“Ÿ ใฝใ™ใจ #T35*500 ๐Ÿ“ฎ ใฝใฆใจ #T35*500 ๐ŸŸ ใฝใฆใจ #T35*500 ๐Ÿฅ” ใฝใƒผใก #T35*500 ๐Ÿ‘ ใพใ„ใ #T35*500 ๐ŸŽ™ ใพใ„ใ #T35*500 ๐ŸŽค ใพใ†ใ™ #T35*500 ๐Ÿ–ฑ ใพใ†ใ™ #T35*500 ๐Ÿ–ฒ ใพใ†ใ‚“ใฆใ‚“ใฐใ„ใ #T35*500 ๐Ÿšต ใพใใŒใ„ #T35*500 ๐Ÿš ใพใใ‚‚ใฎ #T35*500 ๐Ÿ“œ ใพใ™ใ #T35*500 ๐Ÿ˜ท ใพใ™ใ #T35*500 ๐ŸŽญ ใพใคใฐใฅใˆ #T35*500 ๐Ÿฆฏ ใพใฃใ•ใƒผใ˜ #T35*500 ๐Ÿ’† ใพใฃใ—ใ‚…ใ‚‹ใƒผใ‚€ #T35*500 ๐Ÿ„ ใพใฆ #T35*500 ๐Ÿง‰ ใพใซใ‚ #T35*500 ๐Ÿค“ ใพใซใใ‚…ใ‚ #T35*500 ๐Ÿ’… ใพใปใ† #T35*500 ๐Ÿง™ ใพใปใ† #T35*500 ๐Ÿงฟ ใพใ‚‹ #T35*500 ๐ŸŸ  ใพใ‚‹ #T35*500 ๐ŸŸก ใพใ‚‹ #T35*500 ๐ŸŸข ใพใ‚‹ #T35*500 ๐ŸŸฃ ใพใ‚‹ #T35*500 ๐ŸŸค ใพใ‚“ใ’ใค #T35*500 โ—‹ ใพใ‚“ใ’ใค #T35*500 ๐ŸŒ• ใพใ‚“ใ’ใค #T35*500 ๐ŸŒ ใพใ‚“ใ’ใค #T35*500 ๐ŸŽ‘ ใพใ‚“ใ”ใƒผ #T35*500 ๐Ÿฅญ ใพใ‚“ใฆใ‚“ #T35*500 ๐Ÿ’ฏ ใพใƒผใ—ใ‚ƒใ‚‹ใ‚ใƒผใค #T35*500 ๐Ÿฅ‹ ใฟใ‹ใฅใ #T35*500 ๐ŸŒ’ ใฟใ‹ใฅใ #T35*500 ๐ŸŒ˜ ใฟใ‹ใฅใ #T35*500 โ˜ฝ ใฟใ‹ใฅใ #T35*500 โ˜พ ใฟใ‹ใฅใ #T35*500 ๐ŸŒ™ ใฟใ‹ใ‚“ #T35*500 ๐ŸŠ ใฟใ–ใ‚‹ #T35*500 ๐Ÿ™ˆ ใฟใšใŒใ‚ใ– #T35*500 โ™’ ใฟใšใŽ #T35*500 ๐Ÿ‘™ ใฟใšใŽ #T35*500 ๐Ÿฉฑ ใฟใšใŽ #T35*500 ๐Ÿฉฒ ใฟใšใŽ #T35*500 ๐Ÿฉณ ใฟใคใฐใก #T35*500 ๐Ÿ ใฟใฟ #T35*500 ๐Ÿ‘‚ ใฟใฟ #T35*500 ๐Ÿฆป ใฟใฟ #T35*500 ๐Ÿง ใฟใƒผใจใผใƒผใ‚‹ #T35*500 ๐Ÿง† ใ‚€ใ’ใ‚“ #T35*500 โ™พ ใ‚€ใ— #T35*500 ๐Ÿ› ใ‚€ใ— #T35*500 ๐Ÿฆ— ใ‚€ใฒใ‚‡ใ†ใ˜ใ‚‡ใ† #T35*500 ๐Ÿ˜‘ ใ‚€ใฒใ‚‡ใ†ใ˜ใ‚‡ใ† #T35*500 ๐Ÿ˜ฏ ใ‚€ใฒใ‚‡ใ†ใ˜ใ‚‡ใ† #T35*500 ๐Ÿ˜ถ ใ‚€ใƒผใณใƒผ #T35*500 ๐ŸŽฅ ใ‚ #T35*500 ๐Ÿ‘€ ใ‚ #T35*500 ๐Ÿ‘ ใ‚ใ„ใŠใ†ใ›ใ„ #T35*500 โ™‡ ใ‚ใŒใญ #T35*500 ๐Ÿ‘“ ใ‚ใŒใญ #T35*500 ๐Ÿฅฝ ใ‚ใŒใญ #T35*500 ๐Ÿง ใ‚ใ ใ‚‹ #T35*500 ๐Ÿ… ใ‚ใ ใ‚‹ #T35*500 ๐ŸŽ– ใ‚ใ ใ‚‹ #T35*500 ๐Ÿฅ‡ ใ‚ใ ใ‚‹ #T35*500 ๐Ÿฅˆ ใ‚ใ ใ‚‹ #T35*500 ๐Ÿฅ‰ ใ‚ใ‚Šใƒผใ”ใƒผใ‚‰ใ‚“ใฉ #T35*500 ๐ŸŽ  ใ‚ใ‚ใ‚“ #T35*500 ๐Ÿˆ ใ‚ใƒผใ‚‹ #T35*500 โœ‰ ใ‚ใƒผใ‚‹ #T35*500 ๐Ÿ“ง ใ‚ใƒผใ‚‹ #T35*500 ๐Ÿ“จ ใ‚‚ใ†ใฉใ†ใ‘ใ‚“ #T35*500 ๐Ÿฆฎ ใ‚‚ใใ›ใ„ #T35*500 โ™ƒ ใ‚‚ใใ‚‹ #T35*500 ๐Ÿคฟ ใ‚‚ใก #T35*500 ๐Ÿ˜ ใ‚‚ใกใ‹ใˆใ‚Š #T35*500 ๐Ÿฅก ใ‚‚ใ‚‚ #T35*500 ๐Ÿ‘ ใ‚„ใใ„ใ‚‚ #T35*500 ๐Ÿ  ใ‚„ใใซใ #T35*500 ๐Ÿ– ใ‚„ใใซใ #T35*500 ๐Ÿ— ใ‚„ใใซใ #T35*500 ๐Ÿฅฉ ใ‚„ใใ‚…ใ† #T35*500 โšพ ใ‚„ใŽ #T35*500 ๐Ÿ ใ‚„ใŽใ– #T35*500 โ™‘ ใ‚„ใ‘ใ„ #T35*500 ๐ŸŒ‰ ใ‚„ใ•ใ„ #T35*500 ๐Ÿ… ใ‚„ใ•ใ„ #T35*500 ๐Ÿ† ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅ‘ ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅ’ ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅ” ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅ• ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅ— ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅœ ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅฆ ใ‚„ใ•ใ„ #T35*500 ๐Ÿฅฌ ใ‚„ใ•ใ„ #T35*500 ๐Ÿง„ ใ‚„ใ•ใ„ #T35*500 ๐Ÿง… ใ‚„ใ— #T35*500 ๐ŸŒด ใ‚„ใ— #T35*500 ๐Ÿฅฅ ใ‚„ใพ #T35*500 โ›ฐ ใ‚„ใ‚‚ใ‚Š #T35*500 ๐ŸฆŽ ใ‚†ใ†ใˆใ‚“ใก #T35*500 ๐ŸŽ  ใ‚†ใ†ใˆใ‚“ใก #T35*500 ๐ŸŽก ใ‚†ใ†ใˆใ‚“ใก #T35*500 ๐ŸŽข ใ‚†ใ†ใ—ใ‚‡ใ† #T35*500 ๐Ÿฅ‡ ใ‚†ใ†ใ‚Œใ„ #T35*500 ๐Ÿงž ใ‚†ใ #T35*500 โ˜ƒ ใ‚†ใ #T35*500 โ›„ ใ‚†ใ #T35*500 โ›‡ ใ‚†ใใ ใ‚‹ใพ #T35*500 โ˜ƒ ใ‚†ใใ ใ‚‹ใพ #T35*500 โ›„ ใ‚†ใใ ใ‚‹ใพ #T35*500 โ›‡ ใ‚†ใณ #T35*500 ๐Ÿ‘† ใ‚†ใณ #T35*500 ๐Ÿ‘‡ ใ‚†ใณ #T35*500 ๐Ÿ‘ˆ ใ‚†ใณ #T35*500 ๐Ÿ‘‰ ใ‚†ใณ #T35*500 ๐Ÿ‘ ใ‚†ใณ #T35*500 ๐Ÿ‘Ž ใ‚†ใƒผใตใ‰ใƒผ #T35*500 ๐Ÿ›ธ ใ‚ˆใ† #T35*500 ๐Ÿฅด ใ‚ˆใ†ใ‹ใ„ #T35*500 ๐Ÿ‘พ ใ‚ˆใ†ใ›ใ„ #T35*500 ๐Ÿ‘ผ ใ‚ˆใ†ใ›ใ„ #T35*500 ๐Ÿงš ใ‚ˆใŒ #T35*500 ๐Ÿง˜ ใ‚ˆใ’ใ‚“ #T35*500 ๐Ÿฅ  ใ‚ˆใžใ‚‰ #T35*500 ๐ŸŒƒ ใ‚ˆใ ใ‚Œ #T35*500 ๐Ÿคค ใ‚ˆใก #T35*500 ๐Ÿฅ  ใ‚ˆใฃใฑใ‚‰ใ„ #T35*500 ๐Ÿฅด ใ‚ˆใƒผใ‚ˆใƒผ #T35*500 ๐Ÿช€ ใ‚‰ใใ  #T35*500 ๐Ÿช ใ‚‰ใใ  #T35*500 ๐Ÿซ ใ‚‰ใใ‚ใ™ #T35*500 ๐Ÿฅ ใ‚‰ใใณใƒผ #T35*500 ๐Ÿ‰ ใ‚‰ใ–ใซใ‚ #T35*500 ๐Ÿฅง ใ‚‰ใ˜ใŠ #T35*500 ๐Ÿ“ป ใ‚‰ใฃใ‹ใ›ใ„ #T35*500 ๐Ÿฅœ ใ‚‰ใฃใ“ #T35*500 ๐Ÿฆฆ ใ‚‰ใฃใจ #T35*500 ๐Ÿ€ ใ‚‰ใฃใทใจใฃใท #T35*500 ๐Ÿ’ป ใ‚‰ใถใ‚ŒใŸใƒผ #T35*500 ๐Ÿ’Œ ใ‚‰ใพ #T35*500 ๐Ÿฆ™ ใ‚‰ใ‚“ใฉใ›ใ‚‹ #T35*500 ๐ŸŽ’ ใ‚‰ใ‚“ใท #T35*500 ๐Ÿช” ใ‚‰ใƒผใ‚ใ‚“ #T35*500 ๐Ÿœ ใ‚Šใใ‚…ใƒผใ‚‹ #T35*500 ๐Ÿฅƒ ใ‚Šใใ˜ใ‚‡ใ† #T35*500 ๐Ÿƒ ใ‚Šใฃใท #T35*500 ๐Ÿ’„ ใ‚Šใผใ‚“ #T35*500 ๐ŸŽ€ ใ‚Šใผใ‚“ #T35*500 ๐ŸŽ— ใ‚Šใ‚…ใ† #T35*500 ๐Ÿฒ ใ‚Šใ‚‡ใ†ใ‚Š #T35*500 ๐Ÿณ ใ‚Šใ‚“ใ #T35*500 ๐Ÿ’ ใ‚Šใ‚“ใ #T35*500 ๐Ÿ’Ž ใ‚Šใ‚“ใ” #T35*500 ๐ŸŽ ใ‚Šใ‚“ใ” #T35*500 ๐Ÿ ใ‚‹ใƒผใบ #T35*500 ๐Ÿงซ ใ‚Œใ—ใƒผใจ #T35*500 ๐Ÿงพ ใ‚Œใ™ใ‚Šใ‚“ใ #T35*500 ๐Ÿคผ ใ‚ŒใŸใ™ #T35*500 ๐Ÿฅฌ ใ‚Œใ‚‚ใ‚“ #T35*500 ๐Ÿ‹ ใ‚Œใ‚“ใŒ #T35*500 ๐Ÿงฑ ใ‚Œใ‚“ใก #T35*500 ๐Ÿ”ง ใ‚Œใƒผใ™ #T35*500 ๐Ÿ ใ‚Œใƒผใ™ #T35*500 ๐ŸŽ ใ‚ใ†ใใ #T35*500 ๐Ÿ•ฏ ใ‚ใใŒ #T35*500 ๐Ÿ“น ใ‚ใฃใ #T35*500 ๐Ÿ”’ ใ‚ใฃใ #T35*500 ๐Ÿ”“ ใ‚ใผใฃใจ #T35*500 ๐Ÿค– ใ‚ใผใฃใจ #T35*500 ๐Ÿฆพ ใ‚ใผใฃใจ #T35*500 ๐Ÿฆฟ ใ‚ใƒผใ—ใ‚‡ใ‚“ #T35*500 ๐Ÿงด ใ‚ใƒผใ™ใจใณใƒผใต #T35*500 ๐Ÿฅฉ ใ‚ใ„ใ‚“ #T35*500 ๐Ÿท ใ‚ใ„ใ‚“ #T35*500 ๐Ÿฅ‚ ใ‚ใใ›ใ„ #T35*500 โ˜‰ ใ‚ใใ›ใ„ #T35*500 โ˜ฟ ใ‚ใใ›ใ„ #T35*500 โ™€ ใ‚ใใ›ใ„ #T35*500 โ™ ใ‚ใใ›ใ„ #T35*500 โ™‚ ใ‚ใใ›ใ„ #T35*500 โ™ƒ ใ‚ใใ›ใ„ #T35*500 โ™„ ใ‚ใใ›ใ„ #T35*500 โ™… ใ‚ใใ›ใ„ #T35*500 โ™† ใ‚ใใ›ใ„ #T35*500 โ™‡ ใ‚ใใ›ใ„ #T35*500 ๐Ÿช ใ‚ใšใ‹ #T35*500 ๐Ÿค ใ‚ใฃใตใ‚‹ #T35*500 ๐Ÿง‡ ใ‚ใซ #T35*500 ๐ŸŠ ใ‚ใ‚‰ใ„ #T35*500 โ˜บ ใ‚ใ‚‰ใ„ #T35*500 โ˜ป ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜€ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜‚ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ƒ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜„ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜… ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜† ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜‡ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ˆ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜‰ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜Š ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜‹ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜Œ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜Ž ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿคฉ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿคช ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿคญ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ธ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜น ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜บ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ˜ป ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ™‚ ใ‚ใ‚‰ใ„ #T35*500 ๐Ÿ™‹ ใ‚ใ‚‰ใ„ #T35*500 สฌ ibus-anthy-1.5.11/data/emoji-emoji.t000066400000000000000000000567711346647371500172240ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2015-2019 Takao Fujiwara # Copyright (c) 2015-2019 Red Hat, Inc. # # 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. # # # Fedora font package is google-noto-emoji-fonts # Ubuntu font package is fonts-noto-color-emoji # # This file was imported from im-dict-ja # im-dict-ja - Japanese word dictionary set for input method # http://github.com/fujiwarat/im-dict-ja ใˆใ‚‚ใ˜ #T35*500 โ˜‚ ใˆใ‚‚ใ˜ #T35*500 โ˜” ใˆใ‚‚ใ˜ #T35*500 โ›† ใˆใ‚‚ใ˜ #T35*500 โ˜„ ใˆใ‚‚ใ˜ #T35*500 โ˜ค ใˆใ‚‚ใ˜ #T35*500 โ˜ฅ ใˆใ‚‚ใ˜ #T35*500 โ˜ฆ ใˆใ‚‚ใ˜ #T35*500 โ˜ง ใˆใ‚‚ใ˜ #T35*500 โ˜จ ใˆใ‚‚ใ˜ #T35*500 โ˜ฉ ใˆใ‚‚ใ˜ #T35*500 โ˜‰ ใˆใ‚‚ใ˜ #T35*500 โ˜ฟ ใˆใ‚‚ใ˜ #T35*500 โ™€ ใˆใ‚‚ใ˜ #T35*500 โ™ ใˆใ‚‚ใ˜ #T35*500 โ™‚ ใˆใ‚‚ใ˜ #T35*500 โ™ƒ ใˆใ‚‚ใ˜ #T35*500 โ™„ ใˆใ‚‚ใ˜ #T35*500 โ™… ใˆใ‚‚ใ˜ #T35*500 โ™† ใˆใ‚‚ใ˜ #T35*500 โ™‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช ใˆใ‚‚ใ˜ #T35*500 โ™ˆ ใˆใ‚‚ใ˜ #T35*500 โ™‰ ใˆใ‚‚ใ˜ #T35*500 โ™Š ใˆใ‚‚ใ˜ #T35*500 โ™‹ ใˆใ‚‚ใ˜ #T35*500 โ™Œ ใˆใ‚‚ใ˜ #T35*500 โ™ ใˆใ‚‚ใ˜ #T35*500 โ™Ž ใˆใ‚‚ใ˜ #T35*500 โ™ ใˆใ‚‚ใ˜ #T35*500 โ™ ใˆใ‚‚ใ˜ #T35*500 โ™‘ ใˆใ‚‚ใ˜ #T35*500 โ™’ ใˆใ‚‚ใ˜ #T35*500 โ™“ ใˆใ‚‚ใ˜ #T35*500 โš€ ใˆใ‚‚ใ˜ #T35*500 โš ใˆใ‚‚ใ˜ #T35*500 โš‚ ใˆใ‚‚ใ˜ #T35*500 โšƒ ใˆใ‚‚ใ˜ #T35*500 โš„ ใˆใ‚‚ใ˜ #T35*500 โš… ใˆใ‚‚ใ˜ #T35*500 โš“ ใˆใ‚‚ใ˜ #T35*500 โš” ใˆใ‚‚ใ˜ #T35*500 โš– ใˆใ‚‚ใ˜ #T35*500 โšž ใˆใ‚‚ใ˜ #T35*500 โšŸ ใˆใ‚‚ใ˜ #T35*500 โš  ใˆใ‚‚ใ˜ #T35*500 โšก ใˆใ‚‚ใ˜ #T35*500 โšฐ ใˆใ‚‚ใ˜ #T35*500 โšฒ ใˆใ‚‚ใ˜ #T35*500 โšฝ ใˆใ‚‚ใ˜ #T35*500 โšพ ใˆใ‚‚ใ˜ #T35*500 ๐ŸฅŽ ใˆใ‚‚ใ˜ #T35*500 โ˜ƒ ใˆใ‚‚ใ˜ #T35*500 โ›„ ใˆใ‚‚ใ˜ #T35*500 โ›‡ ใˆใ‚‚ใ˜ #T35*500 โ›‰ ใˆใ‚‚ใ˜ #T35*500 โ›Š ใˆใ‚‚ใ˜ #T35*500 โ›‘ ใˆใ‚‚ใ˜ #T35*500 โ›’ ใˆใ‚‚ใ˜ #T35*500 โ›” ใˆใ‚‚ใ˜ #T35*500 โ›Ÿ ใˆใ‚‚ใ˜ #T35*500 โ›ฉ ใˆใ‚‚ใ˜ #T35*500 โ›ช ใˆใ‚‚ใ˜ #T35*500 โ›ซ ใˆใ‚‚ใ˜ #T35*500 โ›ฌ ใˆใ‚‚ใ˜ #T35*500 โ›ฎ ใˆใ‚‚ใ˜ #T35*500 โ›ฏ ใˆใ‚‚ใ˜ #T35*500 โ›ฐ ใˆใ‚‚ใ˜ #T35*500 โ›ฑ ใˆใ‚‚ใ˜ #T35*500 โ›ฒ ใˆใ‚‚ใ˜ #T35*500 โ›ด ใˆใ‚‚ใ˜ #T35*500 โ›ต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›ถ ใˆใ‚‚ใ˜ #T35*500 โ›ธ ใˆใ‚‚ใ˜ #T35*500 โœ€ ใˆใ‚‚ใ˜ #T35*500 โœ ใˆใ‚‚ใ˜ #T35*500 โœ‚ ใˆใ‚‚ใ˜ #T35*500 โœƒ ใˆใ‚‚ใ˜ #T35*500 โœ„ ใˆใ‚‚ใ˜ #T35*500 โœˆ ใˆใ‚‚ใ˜ #T35*500 โœŠ ใˆใ‚‚ใ˜ #T35*500 โœ‹ ใˆใ‚‚ใ˜ #T35*500 โœŒ ใˆใ‚‚ใ˜ #T35*500 โœ ใˆใ‚‚ใ˜ #T35*500 โœŽ ใˆใ‚‚ใ˜ #T35*500 โœ ใˆใ‚‚ใ˜ #T35*500 โœ ใˆใ‚‚ใ˜ #T35*500 โœ‘ ใˆใ‚‚ใ˜ #T35*500 โœ’ ใˆใ‚‚ใ˜ #T35*500 โญ ใˆใ‚‚ใ˜ #T35*500 โญ‘ ใˆใ‚‚ใ˜ #T35*500 โญ’ ใˆใ‚‚ใ˜ #T35*500 โœฆ ใˆใ‚‚ใ˜ #T35*500 โœง ใˆใ‚‚ใ˜ #T35*500 โœจ ใˆใ‚‚ใ˜ #T35*500 โœฉ ใˆใ‚‚ใ˜ #T35*500 โœช ใˆใ‚‚ใ˜ #T35*500 โœซ ใˆใ‚‚ใ˜ #T35*500 โญ ใˆใ‚‚ใ˜ #T35*500 โญ‘ ใˆใ‚‚ใ˜ #T35*500 โญ’ ใˆใ‚‚ใ˜ #T35*500 โœฌ ใˆใ‚‚ใ˜ #T35*500 โœญ ใˆใ‚‚ใ˜ #T35*500 โœฎ ใˆใ‚‚ใ˜ #T35*500 โœฏ ใˆใ‚‚ใ˜ #T35*500 โœฐ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ€ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ‚ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒƒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ„ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ… ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ‡ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒˆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒŠ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒŽ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 โ— ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ‘ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ’ ใˆใ‚‚ใ˜ #T35*500 โ— ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ“ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ” ใˆใ‚‚ใ˜ #T35*500 โ—‹ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ• ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ– ใˆใ‚‚ใ˜ #T35*500 โ—‘ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ— ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ˜ ใˆใ‚‚ใ˜ #T35*500 โ˜ฝ ใˆใ‚‚ใ˜ #T35*500 โ˜พ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ™ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒš ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ› ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒœ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒž ใˆใ‚‚ใ˜ #T35*500 โš ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒŸ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ  ใˆใ‚‚ใ˜ #T35*500 โ˜€ ใˆใ‚‚ใ˜ #T35*500 โ˜ผ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฃ ใˆใ‚‚ใ˜ #T35*500 โ˜ ใˆใ‚‚ใ˜ #T35*500 โ›… ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒค ใˆใ‚‚ใ˜ #T35*500 โ›ˆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒง ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฑ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒณ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒด ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒต ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒถ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒพ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฟ ใˆใ‚‚ใ˜ #T35*500 โ˜˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ€ ใˆใ‚‚ใ˜ #T35*500 เฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿƒ ใˆใ‚‚ใ˜ #T35*500 โš˜ ใˆใ‚‚ใ˜ #T35*500 โœฟ ใˆใ‚‚ใ˜ #T35*500 โ€ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒท ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒธ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒน ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒบ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒป ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ€ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฝ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŠ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‹ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿž ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒญ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฎ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅž ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸ ใˆใ‚‚ใ˜ #T35*500 ๐ŸฅŸ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅข ใˆใ‚‚ใ˜ #T35*500 โ˜• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸงŠ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ€ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ฆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ‚ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽƒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ„ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ… ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ† ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ‡ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽˆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽŠ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ‹ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽŒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽŽ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ‘ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ’ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ“ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ– ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ— ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ˜ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽž ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฅ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฌ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽซ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽŸ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ  ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽก ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽข ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฃ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽจ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽช ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽญ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฎ ใˆใ‚‚ใ˜ #T35*500 โ—Ž ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฏ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฐ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฑ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฒ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽณ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช ใˆใ‚‚ใ˜ #T35*500 โ™Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽน ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ™ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽค ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽง ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽต ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽถ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽท ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽธ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽบ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽป ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช• ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽพ ใˆใ‚‚ใ˜ #T35*500 โ›ท ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ€ ใˆใ‚‚ใ˜ #T35*500 โš ใˆใ‚‚ใ˜ #T35*500 โš‘ ใˆใ‚‚ใ˜ #T35*500 โ›ฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŠ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‹ ใˆใ‚‚ใ˜ #T35*500 โ›ณ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›ด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›ต ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ… ใˆใ‚‚ใ˜ #T35*500 ๐ŸฅŠ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›น ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿข ใˆใ‚‚ใ˜ #T35*500 โ›จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿซ ใˆใ‚‚ใ˜ #T35*500 โ›ญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŠ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‹ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ‚ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ‰ ใˆใ‚‚ใ˜ #T35*500 ๐ŸฆŠ ใˆใ‚‚ใ˜ #T35*500 ๐ŸฆŒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸฆŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆž ใˆใ‚‚ใ˜ #T35*500 ๐ŸฆŸ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆ  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘Š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘Ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐ŸคŸ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 โ™” ใˆใ‚‚ใ˜ #T35*500 โ™• ใˆใ‚‚ใ˜ #T35*500 โ™š ใˆใ‚‚ใ˜ #T35*500 โ™› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘‘ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿšพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐ŸงŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘น ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘พ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’€ ใˆใ‚‚ใ˜ #T35*500 โ˜  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงž ใˆใ‚‚ใ˜ #T35*500 ๐ŸงŸ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’Š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—ข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’Ž ใˆใ‚‚ใ˜ #T35*500 โšญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 โ™ก ใˆใ‚‚ใ˜ #T35*500 โ™ฅ ใˆใ‚‚ใ˜ #T35*500 โข ใˆใ‚‚ใ˜ #T35*500 โฃ ใˆใ‚‚ใ˜ #T35*500 โค ใˆใ‚‚ใ˜ #T35*500 โฅ ใˆใ‚‚ใ˜ #T35*500 โฆ ใˆใ‚‚ใ˜ #T35*500 โง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 ๐ŸคŽ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŽ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ญ ใˆใ‚‚ใ˜ #T35*500 .๏ฝกoO ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“Ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”Š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”Ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ““ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ ใˆใ‚‚ใ˜ #T35*500 โœ‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“Ÿ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“น ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ป ใˆใ‚‚ใ˜ #T35*500 โšฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ง ใˆใ‚‚ใ˜ #T35*500 โš’ ใˆใ‚‚ใ˜ #T35*500 โ› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“ก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฎ ใˆใ‚‚ใ˜ #T35*500 โœก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”ฐ ใˆใ‚‚ใ˜ #T35*500 โœž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ”” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•ณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’พ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ’ฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ“€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฒ ใˆใ‚‚ใ˜ #T35*500 โŒจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ–ฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—˜ ใˆใ‚‚ใ˜ #T35*500 โŒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—ป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—ผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ—พ ใˆใ‚‚ใ˜ #T35*500 โ˜น ใˆใ‚‚ใ˜ #T35*500 โ˜บ ใˆใ‚‚ใ˜ #T35*500 โ˜ป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ƒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜„ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜Š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜Ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜— ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜จ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜น ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜พ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ˜ฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™€ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™‚ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™… ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™† ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™‡ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ˆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™‰ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™Š ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™‹ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™Œ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™Ž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ™ ใˆใ‚‚ใ˜ #T35*500 สฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ‘ฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค’ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค” ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค• ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค– ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค™ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคš ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค› ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคœ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคž ใˆใ‚‚ใ˜ #T35*500 ๐Ÿค  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคก ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคข ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฃ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฉ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคค ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฆ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฏ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ•บ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿคณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฅ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿง  ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›ธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿ›ท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงญ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงณ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงจ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงง ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงต ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงถ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฎ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงช ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฌ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงด ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงท ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿงฏ ใˆใ‚‚ใ˜ #T35*500 โ™พ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช“ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉธ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉน ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฉบ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช‘ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿช’ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸ  ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸก ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸข ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸฃ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸค ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸฅ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸฆ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸง ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸจ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸฉ ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸช ใˆใ‚‚ใ˜ #T35*500 ๐ŸŸซ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿป ใˆใ‚‚ใ˜ #T35*500 ๐Ÿผ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฝ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿพ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฟ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฐ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฑ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆฒ ใˆใ‚‚ใ˜ #T35*500 ๐Ÿฆณ ใˆใ‚‚ใ˜ #T35*500 โ€ ใˆใ‚‚ใ˜ #T35*500 ๏ธŽ ใˆใ‚‚ใ˜ #T35*500 ๏ธ ibus-anthy-1.5.11/data/era.t000066400000000000000000000373111346647371500155540ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2010-2013 Red Hat, Inc. # # 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. # # This file was imported from im-dict-ja # im-dict-ja - Japanese word dictionary set for input method # http://github.com/fujiwarat/im-dict-ja ใ—ใ‚‡ใ†ใ‚๏ผ‘ #T35*500 ๆ˜ญๅ’Œ1 ใ—ใ‚‡ใ†ใ‚๏ผ‘ #T35*500 1926 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ #T35*500 ๆ˜ญๅ’Œ10 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ #T35*500 1935 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ‘ #T35*500 ๆ˜ญๅ’Œ11 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ‘ #T35*500 1936 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ’ #T35*500 ๆ˜ญๅ’Œ12 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ’ #T35*500 1937 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ“ #T35*500 ๆ˜ญๅ’Œ13 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ“ #T35*500 1938 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ” #T35*500 ๆ˜ญๅ’Œ14 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ” #T35*500 1939 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ• #T35*500 ๆ˜ญๅ’Œ15 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ• #T35*500 1940 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ– #T35*500 ๆ˜ญๅ’Œ16 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ– #T35*500 1941 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ— #T35*500 ๆ˜ญๅ’Œ17 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ— #T35*500 1942 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ˜ #T35*500 ๆ˜ญๅ’Œ18 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ˜ #T35*500 1943 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ™ #T35*500 ๆ˜ญๅ’Œ19 ใ—ใ‚‡ใ†ใ‚๏ผ‘๏ผ™ #T35*500 1944 ใ—ใ‚‡ใ†ใ‚๏ผ’ #T35*500 ๆ˜ญๅ’Œ2 ใ—ใ‚‡ใ†ใ‚๏ผ’ #T35*500 1927 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ #T35*500 ๆ˜ญๅ’Œ20 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ #T35*500 1945 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ‘ #T35*500 ๆ˜ญๅ’Œ21 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ‘ #T35*500 1946 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ’ #T35*500 ๆ˜ญๅ’Œ22 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ’ #T35*500 1947 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ“ #T35*500 ๆ˜ญๅ’Œ23 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ“ #T35*500 1948 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ” #T35*500 ๆ˜ญๅ’Œ24 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ” #T35*500 1949 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ• #T35*500 ๆ˜ญๅ’Œ25 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ• #T35*500 1950 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ– #T35*500 ๆ˜ญๅ’Œ26 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ– #T35*500 1951 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ— #T35*500 ๆ˜ญๅ’Œ27 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ— #T35*500 1952 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ˜ #T35*500 ๆ˜ญๅ’Œ28 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ˜ #T35*500 1953 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ™ #T35*500 ๆ˜ญๅ’Œ29 ใ—ใ‚‡ใ†ใ‚๏ผ’๏ผ™ #T35*500 1954 ใ—ใ‚‡ใ†ใ‚๏ผ“ #T35*500 ๆ˜ญๅ’Œ3 ใ—ใ‚‡ใ†ใ‚๏ผ“ #T35*500 1928 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ #T35*500 ๆ˜ญๅ’Œ30 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ #T35*500 1955 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ‘ #T35*500 ๆ˜ญๅ’Œ31 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ‘ #T35*500 1956 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ’ #T35*500 ๆ˜ญๅ’Œ32 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ’ #T35*500 1957 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ“ #T35*500 ๆ˜ญๅ’Œ33 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ“ #T35*500 1958 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ” #T35*500 ๆ˜ญๅ’Œ34 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ” #T35*500 1959 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ• #T35*500 ๆ˜ญๅ’Œ35 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ• #T35*500 1960 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ– #T35*500 ๆ˜ญๅ’Œ36 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ– #T35*500 1961 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ— #T35*500 ๆ˜ญๅ’Œ37 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ— #T35*500 1962 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ˜ #T35*500 ๆ˜ญๅ’Œ38 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ˜ #T35*500 1963 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ™ #T35*500 ๆ˜ญๅ’Œ39 ใ—ใ‚‡ใ†ใ‚๏ผ“๏ผ™ #T35*500 1964 ใ—ใ‚‡ใ†ใ‚๏ผ” #T35*500 ๆ˜ญๅ’Œ4 ใ—ใ‚‡ใ†ใ‚๏ผ” #T35*500 1929 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ #T35*500 ๆ˜ญๅ’Œ40 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ #T35*500 1965 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ‘ #T35*500 ๆ˜ญๅ’Œ41 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ‘ #T35*500 1966 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ’ #T35*500 ๆ˜ญๅ’Œ42 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ’ #T35*500 1967 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ“ #T35*500 ๆ˜ญๅ’Œ43 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ“ #T35*500 1968 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ” #T35*500 ๆ˜ญๅ’Œ44 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ” #T35*500 1969 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ• #T35*500 ๆ˜ญๅ’Œ45 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ• #T35*500 1970 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ– #T35*500 ๆ˜ญๅ’Œ46 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ– #T35*500 1971 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ— #T35*500 ๆ˜ญๅ’Œ47 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ— #T35*500 1972 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ˜ #T35*500 ๆ˜ญๅ’Œ48 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ˜ #T35*500 1973 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ™ #T35*500 ๆ˜ญๅ’Œ49 ใ—ใ‚‡ใ†ใ‚๏ผ”๏ผ™ #T35*500 1974 ใ—ใ‚‡ใ†ใ‚๏ผ• #T35*500 ๆ˜ญๅ’Œ5 ใ—ใ‚‡ใ†ใ‚๏ผ• #T35*500 1930 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ #T35*500 ๆ˜ญๅ’Œ50 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ #T35*500 1975 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ‘ #T35*500 ๆ˜ญๅ’Œ51 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ‘ #T35*500 1976 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ’ #T35*500 ๆ˜ญๅ’Œ52 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ’ #T35*500 1977 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ“ #T35*500 ๆ˜ญๅ’Œ53 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ“ #T35*500 1978 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ” #T35*500 ๆ˜ญๅ’Œ54 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ” #T35*500 1979 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ• #T35*500 ๆ˜ญๅ’Œ55 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ• #T35*500 1980 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ– #T35*500 ๆ˜ญๅ’Œ56 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ– #T35*500 1981 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ— #T35*500 ๆ˜ญๅ’Œ57 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ— #T35*500 1982 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ˜ #T35*500 ๆ˜ญๅ’Œ58 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ˜ #T35*500 1983 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ™ #T35*500 ๆ˜ญๅ’Œ59 ใ—ใ‚‡ใ†ใ‚๏ผ•๏ผ™ #T35*500 1984 ใ—ใ‚‡ใ†ใ‚๏ผ– #T35*500 ๆ˜ญๅ’Œ6 ใ—ใ‚‡ใ†ใ‚๏ผ– #T35*500 1931 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ #T35*500 ๆ˜ญๅ’Œ60 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ #T35*500 1985 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ‘ #T35*500 ๆ˜ญๅ’Œ61 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ‘ #T35*500 1986 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ’ #T35*500 ๆ˜ญๅ’Œ62 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ’ #T35*500 1987 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ“ #T35*500 ๆ˜ญๅ’Œ63 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ“ #T35*500 1988 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ” #T35*500 ๆ˜ญๅ’Œ64 ใ—ใ‚‡ใ†ใ‚๏ผ–๏ผ” #T35*500 1989 ใ—ใ‚‡ใ†ใ‚๏ผ— #T35*500 ๆ˜ญๅ’Œ7 ใ—ใ‚‡ใ†ใ‚๏ผ— #T35*500 1932 ใ—ใ‚‡ใ†ใ‚๏ผ˜ #T35*500 ๆ˜ญๅ’Œ8 ใ—ใ‚‡ใ†ใ‚๏ผ˜ #T35*500 1933 ใ—ใ‚‡ใ†ใ‚๏ผ™ #T35*500 ๆ˜ญๅ’Œ9 ใ—ใ‚‡ใ†ใ‚๏ผ™ #T35*500 1934 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘ #T35*500 ๅคงๆญฃ1 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘ #T35*500 1912 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ #T35*500 ๅคงๆญฃ10 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ #T35*500 1921 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ‘ #T35*500 ๅคงๆญฃ11 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ‘ #T35*500 1922 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ’ #T35*500 ๅคงๆญฃ12 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ’ #T35*500 1923 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ“ #T35*500 ๅคงๆญฃ13 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ“ #T35*500 1924 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ” #T35*500 ๅคงๆญฃ14 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ” #T35*500 1925 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ• #T35*500 ๅคงๆญฃ15 ใŸใ„ใ—ใ‚‡ใ†๏ผ‘๏ผ• #T35*500 1926 ใŸใ„ใ—ใ‚‡ใ†๏ผ’ #T35*500 ๅคงๆญฃ2 ใŸใ„ใ—ใ‚‡ใ†๏ผ’ #T35*500 1913 ใŸใ„ใ—ใ‚‡ใ†๏ผ“ #T35*500 ๅคงๆญฃ3 ใŸใ„ใ—ใ‚‡ใ†๏ผ“ #T35*500 1914 ใŸใ„ใ—ใ‚‡ใ†๏ผ” #T35*500 ๅคงๆญฃ4 ใŸใ„ใ—ใ‚‡ใ†๏ผ” #T35*500 1915 ใŸใ„ใ—ใ‚‡ใ†๏ผ• #T35*500 ๅคงๆญฃ5 ใŸใ„ใ—ใ‚‡ใ†๏ผ• #T35*500 1916 ใŸใ„ใ—ใ‚‡ใ†๏ผ– #T35*500 ๅคงๆญฃ6 ใŸใ„ใ—ใ‚‡ใ†๏ผ– #T35*500 1917 ใŸใ„ใ—ใ‚‡ใ†๏ผ— #T35*500 ๅคงๆญฃ7 ใŸใ„ใ—ใ‚‡ใ†๏ผ— #T35*500 1918 ใŸใ„ใ—ใ‚‡ใ†๏ผ˜ #T35*500 ๅคงๆญฃ8 ใŸใ„ใ—ใ‚‡ใ†๏ผ˜ #T35*500 1919 ใŸใ„ใ—ใ‚‡ใ†๏ผ™ #T35*500 ๅคงๆญฃ9 ใŸใ„ใ—ใ‚‡ใ†๏ผ™ #T35*500 1920 ใธใ„ใ›ใ„๏ผ‘ #T35*500 ๅนณๆˆ1 ใธใ„ใ›ใ„๏ผ‘ #T35*500 1989 ใธใ„ใ›ใ„๏ผ‘๏ผ #T35*500 ๅนณๆˆ10 ใธใ„ใ›ใ„๏ผ‘๏ผ #T35*500 1998 ใธใ„ใ›ใ„๏ผ‘๏ผ‘ #T35*500 ๅนณๆˆ11 ใธใ„ใ›ใ„๏ผ‘๏ผ‘ #T35*500 1999 ใธใ„ใ›ใ„๏ผ‘๏ผ’ #T35*500 ๅนณๆˆ12 ใธใ„ใ›ใ„๏ผ‘๏ผ’ #T35*500 2000 ใธใ„ใ›ใ„๏ผ‘๏ผ“ #T35*500 ๅนณๆˆ13 ใธใ„ใ›ใ„๏ผ‘๏ผ“ #T35*500 2001 ใธใ„ใ›ใ„๏ผ‘๏ผ” #T35*500 ๅนณๆˆ14 ใธใ„ใ›ใ„๏ผ‘๏ผ” #T35*500 2002 ใธใ„ใ›ใ„๏ผ‘๏ผ• #T35*500 ๅนณๆˆ15 ใธใ„ใ›ใ„๏ผ‘๏ผ• #T35*500 2003 ใธใ„ใ›ใ„๏ผ‘๏ผ– #T35*500 ๅนณๆˆ16 ใธใ„ใ›ใ„๏ผ‘๏ผ– #T35*500 2004 ใธใ„ใ›ใ„๏ผ‘๏ผ— #T35*500 ๅนณๆˆ17 ใธใ„ใ›ใ„๏ผ‘๏ผ— #T35*500 2005 ใธใ„ใ›ใ„๏ผ‘๏ผ˜ #T35*500 ๅนณๆˆ18 ใธใ„ใ›ใ„๏ผ‘๏ผ˜ #T35*500 2006 ใธใ„ใ›ใ„๏ผ‘๏ผ™ #T35*500 ๅนณๆˆ19 ใธใ„ใ›ใ„๏ผ‘๏ผ™ #T35*500 2007 ใธใ„ใ›ใ„๏ผ’ #T35*500 ๅนณๆˆ2 ใธใ„ใ›ใ„๏ผ’ #T35*500 1990 ใธใ„ใ›ใ„๏ผ’๏ผ #T35*500 ๅนณๆˆ20 ใธใ„ใ›ใ„๏ผ’๏ผ #T35*500 2008 ใธใ„ใ›ใ„๏ผ’๏ผ‘ #T35*500 ๅนณๆˆ21 ใธใ„ใ›ใ„๏ผ’๏ผ‘ #T35*500 2009 ใธใ„ใ›ใ„๏ผ’๏ผ’ #T35*500 ๅนณๆˆ22 ใธใ„ใ›ใ„๏ผ’๏ผ’ #T35*500 2010 ใธใ„ใ›ใ„๏ผ’๏ผ“ #T35*500 ๅนณๆˆ23 ใธใ„ใ›ใ„๏ผ’๏ผ“ #T35*500 2011 ใธใ„ใ›ใ„๏ผ’๏ผ” #T35*500 ๅนณๆˆ24 ใธใ„ใ›ใ„๏ผ’๏ผ” #T35*500 2012 ใธใ„ใ›ใ„๏ผ’๏ผ• #T35*500 ๅนณๆˆ25 ใธใ„ใ›ใ„๏ผ’๏ผ• #T35*500 2013 ใธใ„ใ›ใ„๏ผ’๏ผ– #T35*500 ๅนณๆˆ26 ใธใ„ใ›ใ„๏ผ’๏ผ– #T35*500 2014 ใธใ„ใ›ใ„๏ผ’๏ผ— #T35*500 ๅนณๆˆ27 ใธใ„ใ›ใ„๏ผ’๏ผ— #T35*500 2015 ใธใ„ใ›ใ„๏ผ’๏ผ˜ #T35*500 ๅนณๆˆ28 ใธใ„ใ›ใ„๏ผ’๏ผ˜ #T35*500 2016 ใธใ„ใ›ใ„๏ผ’๏ผ™ #T35*500 ๅนณๆˆ29 ใธใ„ใ›ใ„๏ผ’๏ผ™ #T35*500 2017 ใธใ„ใ›ใ„๏ผ“ #T35*500 ๅนณๆˆ3 ใธใ„ใ›ใ„๏ผ“ #T35*500 1991 ใธใ„ใ›ใ„๏ผ” #T35*500 ๅนณๆˆ4 ใธใ„ใ›ใ„๏ผ” #T35*500 1992 ใธใ„ใ›ใ„๏ผ• #T35*500 ๅนณๆˆ5 ใธใ„ใ›ใ„๏ผ• #T35*500 1993 ใธใ„ใ›ใ„๏ผ– #T35*500 ๅนณๆˆ6 ใธใ„ใ›ใ„๏ผ– #T35*500 1994 ใธใ„ใ›ใ„๏ผ— #T35*500 ๅนณๆˆ7 ใธใ„ใ›ใ„๏ผ— #T35*500 1995 ใธใ„ใ›ใ„๏ผ˜ #T35*500 ๅนณๆˆ8 ใธใ„ใ›ใ„๏ผ˜ #T35*500 1996 ใธใ„ใ›ใ„๏ผ™ #T35*500 ๅนณๆˆ9 ใธใ„ใ›ใ„๏ผ™ #T35*500 1997 ใ‚ใ„ใ˜๏ผ‘ #T35*500 ๆ˜Žๆฒป1 ใ‚ใ„ใ˜๏ผ‘ #T35*500 1868 ใ‚ใ„ใ˜๏ผ‘๏ผ #T35*500 ๆ˜Žๆฒป10 ใ‚ใ„ใ˜๏ผ‘๏ผ #T35*500 1877 ใ‚ใ„ใ˜๏ผ‘๏ผ‘ #T35*500 ๆ˜Žๆฒป11 ใ‚ใ„ใ˜๏ผ‘๏ผ‘ #T35*500 1878 ใ‚ใ„ใ˜๏ผ‘๏ผ’ #T35*500 ๆ˜Žๆฒป12 ใ‚ใ„ใ˜๏ผ‘๏ผ’ #T35*500 1879 ใ‚ใ„ใ˜๏ผ‘๏ผ“ #T35*500 ๆ˜Žๆฒป13 ใ‚ใ„ใ˜๏ผ‘๏ผ“ #T35*500 1880 ใ‚ใ„ใ˜๏ผ‘๏ผ” #T35*500 ๆ˜Žๆฒป14 ใ‚ใ„ใ˜๏ผ‘๏ผ” #T35*500 1881 ใ‚ใ„ใ˜๏ผ‘๏ผ• #T35*500 ๆ˜Žๆฒป15 ใ‚ใ„ใ˜๏ผ‘๏ผ• #T35*500 1882 ใ‚ใ„ใ˜๏ผ‘๏ผ– #T35*500 ๆ˜Žๆฒป16 ใ‚ใ„ใ˜๏ผ‘๏ผ– #T35*500 1883 ใ‚ใ„ใ˜๏ผ‘๏ผ— #T35*500 ๆ˜Žๆฒป17 ใ‚ใ„ใ˜๏ผ‘๏ผ— #T35*500 1884 ใ‚ใ„ใ˜๏ผ‘๏ผ˜ #T35*500 ๆ˜Žๆฒป18 ใ‚ใ„ใ˜๏ผ‘๏ผ˜ #T35*500 1885 ใ‚ใ„ใ˜๏ผ‘๏ผ™ #T35*500 ๆ˜Žๆฒป19 ใ‚ใ„ใ˜๏ผ‘๏ผ™ #T35*500 1886 ใ‚ใ„ใ˜๏ผ’ #T35*500 ๆ˜Žๆฒป2 ใ‚ใ„ใ˜๏ผ’ #T35*500 1869 ใ‚ใ„ใ˜๏ผ’๏ผ #T35*500 ๆ˜Žๆฒป20 ใ‚ใ„ใ˜๏ผ’๏ผ #T35*500 1887 ใ‚ใ„ใ˜๏ผ’๏ผ‘ #T35*500 ๆ˜Žๆฒป21 ใ‚ใ„ใ˜๏ผ’๏ผ‘ #T35*500 1888 ใ‚ใ„ใ˜๏ผ’๏ผ’ #T35*500 ๆ˜Žๆฒป22 ใ‚ใ„ใ˜๏ผ’๏ผ’ #T35*500 1889 ใ‚ใ„ใ˜๏ผ’๏ผ“ #T35*500 ๆ˜Žๆฒป23 ใ‚ใ„ใ˜๏ผ’๏ผ“ #T35*500 1890 ใ‚ใ„ใ˜๏ผ’๏ผ” #T35*500 ๆ˜Žๆฒป24 ใ‚ใ„ใ˜๏ผ’๏ผ” #T35*500 1891 ใ‚ใ„ใ˜๏ผ’๏ผ• #T35*500 ๆ˜Žๆฒป25 ใ‚ใ„ใ˜๏ผ’๏ผ• #T35*500 1892 ใ‚ใ„ใ˜๏ผ’๏ผ– #T35*500 ๆ˜Žๆฒป26 ใ‚ใ„ใ˜๏ผ’๏ผ– #T35*500 1893 ใ‚ใ„ใ˜๏ผ’๏ผ— #T35*500 ๆ˜Žๆฒป27 ใ‚ใ„ใ˜๏ผ’๏ผ— #T35*500 1894 ใ‚ใ„ใ˜๏ผ’๏ผ˜ #T35*500 ๆ˜Žๆฒป28 ใ‚ใ„ใ˜๏ผ’๏ผ˜ #T35*500 1895 ใ‚ใ„ใ˜๏ผ’๏ผ™ #T35*500 ๆ˜Žๆฒป29 ใ‚ใ„ใ˜๏ผ’๏ผ™ #T35*500 1896 ใ‚ใ„ใ˜๏ผ“ #T35*500 ๆ˜Žๆฒป3 ใ‚ใ„ใ˜๏ผ“ #T35*500 1870 ใ‚ใ„ใ˜๏ผ“๏ผ #T35*500 ๆ˜Žๆฒป30 ใ‚ใ„ใ˜๏ผ“๏ผ #T35*500 1897 ใ‚ใ„ใ˜๏ผ“๏ผ‘ #T35*500 ๆ˜Žๆฒป31 ใ‚ใ„ใ˜๏ผ“๏ผ‘ #T35*500 1898 ใ‚ใ„ใ˜๏ผ“๏ผ’ #T35*500 ๆ˜Žๆฒป32 ใ‚ใ„ใ˜๏ผ“๏ผ’ #T35*500 1899 ใ‚ใ„ใ˜๏ผ“๏ผ“ #T35*500 ๆ˜Žๆฒป33 ใ‚ใ„ใ˜๏ผ“๏ผ“ #T35*500 1900 ใ‚ใ„ใ˜๏ผ“๏ผ” #T35*500 ๆ˜Žๆฒป34 ใ‚ใ„ใ˜๏ผ“๏ผ” #T35*500 1901 ใ‚ใ„ใ˜๏ผ“๏ผ• #T35*500 ๆ˜Žๆฒป35 ใ‚ใ„ใ˜๏ผ“๏ผ• #T35*500 1902 ใ‚ใ„ใ˜๏ผ“๏ผ– #T35*500 ๆ˜Žๆฒป36 ใ‚ใ„ใ˜๏ผ“๏ผ– #T35*500 1903 ใ‚ใ„ใ˜๏ผ“๏ผ— #T35*500 ๆ˜Žๆฒป37 ใ‚ใ„ใ˜๏ผ“๏ผ— #T35*500 1904 ใ‚ใ„ใ˜๏ผ“๏ผ˜ #T35*500 ๆ˜Žๆฒป38 ใ‚ใ„ใ˜๏ผ“๏ผ˜ #T35*500 1905 ใ‚ใ„ใ˜๏ผ“๏ผ™ #T35*500 ๆ˜Žๆฒป39 ใ‚ใ„ใ˜๏ผ“๏ผ™ #T35*500 1906 ใ‚ใ„ใ˜๏ผ” #T35*500 ๆ˜Žๆฒป4 ใ‚ใ„ใ˜๏ผ” #T35*500 1871 ใ‚ใ„ใ˜๏ผ”๏ผ #T35*500 ๆ˜Žๆฒป40 ใ‚ใ„ใ˜๏ผ”๏ผ #T35*500 1907 ใ‚ใ„ใ˜๏ผ”๏ผ‘ #T35*500 ๆ˜Žๆฒป41 ใ‚ใ„ใ˜๏ผ”๏ผ‘ #T35*500 1908 ใ‚ใ„ใ˜๏ผ”๏ผ’ #T35*500 ๆ˜Žๆฒป42 ใ‚ใ„ใ˜๏ผ”๏ผ’ #T35*500 1909 ใ‚ใ„ใ˜๏ผ”๏ผ“ #T35*500 ๆ˜Žๆฒป43 ใ‚ใ„ใ˜๏ผ”๏ผ“ #T35*500 1910 ใ‚ใ„ใ˜๏ผ”๏ผ” #T35*500 ๆ˜Žๆฒป44 ใ‚ใ„ใ˜๏ผ”๏ผ” #T35*500 1911 ใ‚ใ„ใ˜๏ผ”๏ผ• #T35*500 ๆ˜Žๆฒป45 ใ‚ใ„ใ˜๏ผ”๏ผ• #T35*500 1912 ใ‚ใ„ใ˜๏ผ• #T35*500 ๆ˜Žๆฒป5 ใ‚ใ„ใ˜๏ผ• #T35*500 1872 ใ‚ใ„ใ˜๏ผ– #T35*500 ๆ˜Žๆฒป6 ใ‚ใ„ใ˜๏ผ– #T35*500 1873 ใ‚ใ„ใ˜๏ผ— #T35*500 ๆ˜Žๆฒป7 ใ‚ใ„ใ˜๏ผ— #T35*500 1874 ใ‚ใ„ใ˜๏ผ˜ #T35*500 ๆ˜Žๆฒป8 ใ‚ใ„ใ˜๏ผ˜ #T35*500 1875 ใ‚ใ„ใ˜๏ผ™ #T35*500 ๆ˜Žๆฒป9 ใ‚ใ„ใ˜๏ผ™ #T35*500 1876 ๏ผ‘๏ผ˜๏ผ–๏ผ˜ #T35*500 ๆ˜Žๆฒป1 ๏ผ‘๏ผ˜๏ผ–๏ผ™ #T35*500 ๆ˜Žๆฒป2 ๏ผ‘๏ผ˜๏ผ—๏ผ #T35*500 ๆ˜Žๆฒป3 ๏ผ‘๏ผ˜๏ผ—๏ผ‘ #T35*500 ๆ˜Žๆฒป4 ๏ผ‘๏ผ˜๏ผ—๏ผ’ #T35*500 ๆ˜Žๆฒป5 ๏ผ‘๏ผ˜๏ผ—๏ผ“ #T35*500 ๆ˜Žๆฒป6 ๏ผ‘๏ผ˜๏ผ—๏ผ” #T35*500 ๆ˜Žๆฒป7 ๏ผ‘๏ผ˜๏ผ—๏ผ• #T35*500 ๆ˜Žๆฒป8 ๏ผ‘๏ผ˜๏ผ—๏ผ– #T35*500 ๆ˜Žๆฒป9 ๏ผ‘๏ผ˜๏ผ—๏ผ— #T35*500 ๆ˜Žๆฒป10 ๏ผ‘๏ผ˜๏ผ—๏ผ˜ #T35*500 ๆ˜Žๆฒป11 ๏ผ‘๏ผ˜๏ผ—๏ผ™ #T35*500 ๆ˜Žๆฒป12 ๏ผ‘๏ผ˜๏ผ˜๏ผ #T35*500 ๆ˜Žๆฒป13 ๏ผ‘๏ผ˜๏ผ˜๏ผ‘ #T35*500 ๆ˜Žๆฒป14 ๏ผ‘๏ผ˜๏ผ˜๏ผ’ #T35*500 ๆ˜Žๆฒป15 ๏ผ‘๏ผ˜๏ผ˜๏ผ“ #T35*500 ๆ˜Žๆฒป16 ๏ผ‘๏ผ˜๏ผ˜๏ผ” #T35*500 ๆ˜Žๆฒป17 ๏ผ‘๏ผ˜๏ผ˜๏ผ• #T35*500 ๆ˜Žๆฒป18 ๏ผ‘๏ผ˜๏ผ˜๏ผ– #T35*500 ๆ˜Žๆฒป19 ๏ผ‘๏ผ˜๏ผ˜๏ผ— #T35*500 ๆ˜Žๆฒป20 ๏ผ‘๏ผ˜๏ผ˜๏ผ˜ #T35*500 ๆ˜Žๆฒป21 ๏ผ‘๏ผ˜๏ผ˜๏ผ™ #T35*500 ๆ˜Žๆฒป22 ๏ผ‘๏ผ˜๏ผ™๏ผ #T35*500 ๆ˜Žๆฒป23 ๏ผ‘๏ผ˜๏ผ™๏ผ‘ #T35*500 ๆ˜Žๆฒป24 ๏ผ‘๏ผ˜๏ผ™๏ผ’ #T35*500 ๆ˜Žๆฒป25 ๏ผ‘๏ผ˜๏ผ™๏ผ“ #T35*500 ๆ˜Žๆฒป26 ๏ผ‘๏ผ˜๏ผ™๏ผ” #T35*500 ๆ˜Žๆฒป27 ๏ผ‘๏ผ˜๏ผ™๏ผ• #T35*500 ๆ˜Žๆฒป28 ๏ผ‘๏ผ˜๏ผ™๏ผ– #T35*500 ๆ˜Žๆฒป29 ๏ผ‘๏ผ˜๏ผ™๏ผ— #T35*500 ๆ˜Žๆฒป30 ๏ผ‘๏ผ˜๏ผ™๏ผ˜ #T35*500 ๆ˜Žๆฒป31 ๏ผ‘๏ผ˜๏ผ™๏ผ™ #T35*500 ๆ˜Žๆฒป32 ๏ผ‘๏ผ™๏ผ๏ผ #T35*500 ๆ˜Žๆฒป33 ๏ผ‘๏ผ™๏ผ๏ผ‘ #T35*500 ๆ˜Žๆฒป34 ๏ผ‘๏ผ™๏ผ๏ผ’ #T35*500 ๆ˜Žๆฒป35 ๏ผ‘๏ผ™๏ผ๏ผ“ #T35*500 ๆ˜Žๆฒป36 ๏ผ‘๏ผ™๏ผ๏ผ” #T35*500 ๆ˜Žๆฒป37 ๏ผ‘๏ผ™๏ผ๏ผ• #T35*500 ๆ˜Žๆฒป38 ๏ผ‘๏ผ™๏ผ๏ผ– #T35*500 ๆ˜Žๆฒป39 ๏ผ‘๏ผ™๏ผ๏ผ— #T35*500 ๆ˜Žๆฒป40 ๏ผ‘๏ผ™๏ผ๏ผ˜ #T35*500 ๆ˜Žๆฒป41 ๏ผ‘๏ผ™๏ผ๏ผ™ #T35*500 ๆ˜Žๆฒป42 ๏ผ‘๏ผ™๏ผ‘๏ผ #T35*500 ๆ˜Žๆฒป43 ๏ผ‘๏ผ™๏ผ‘๏ผ‘ #T35*500 ๆ˜Žๆฒป44 ๏ผ‘๏ผ™๏ผ‘๏ผ’ #T35*500 ๅคงๆญฃ1 ๏ผ‘๏ผ™๏ผ‘๏ผ’ #T35*500 ๆ˜Žๆฒป45 ๏ผ‘๏ผ™๏ผ‘๏ผ“ #T35*500 ๅคงๆญฃ2 ๏ผ‘๏ผ™๏ผ‘๏ผ” #T35*500 ๅคงๆญฃ3 ๏ผ‘๏ผ™๏ผ‘๏ผ• #T35*500 ๅคงๆญฃ4 ๏ผ‘๏ผ™๏ผ‘๏ผ– #T35*500 ๅคงๆญฃ5 ๏ผ‘๏ผ™๏ผ‘๏ผ— #T35*500 ๅคงๆญฃ6 ๏ผ‘๏ผ™๏ผ‘๏ผ˜ #T35*500 ๅคงๆญฃ7 ๏ผ‘๏ผ™๏ผ‘๏ผ™ #T35*500 ๅคงๆญฃ8 ๏ผ‘๏ผ™๏ผ’๏ผ #T35*500 ๅคงๆญฃ9 ๏ผ‘๏ผ™๏ผ’๏ผ‘ #T35*500 ๅคงๆญฃ10 ๏ผ‘๏ผ™๏ผ’๏ผ’ #T35*500 ๅคงๆญฃ11 ๏ผ‘๏ผ™๏ผ’๏ผ“ #T35*500 ๅคงๆญฃ12 ๏ผ‘๏ผ™๏ผ’๏ผ” #T35*500 ๅคงๆญฃ13 ๏ผ‘๏ผ™๏ผ’๏ผ• #T35*500 ๅคงๆญฃ14 ๏ผ‘๏ผ™๏ผ’๏ผ– #T35*500 ๆ˜ญๅ’Œ1 ๏ผ‘๏ผ™๏ผ’๏ผ– #T35*500 ๅคงๆญฃ15 ๏ผ‘๏ผ™๏ผ’๏ผ— #T35*500 ๆ˜ญๅ’Œ2 ๏ผ‘๏ผ™๏ผ’๏ผ˜ #T35*500 ๆ˜ญๅ’Œ3 ๏ผ‘๏ผ™๏ผ’๏ผ™ #T35*500 ๆ˜ญๅ’Œ4 ๏ผ‘๏ผ™๏ผ“๏ผ #T35*500 ๆ˜ญๅ’Œ5 ๏ผ‘๏ผ™๏ผ“๏ผ‘ #T35*500 ๆ˜ญๅ’Œ6 ๏ผ‘๏ผ™๏ผ“๏ผ’ #T35*500 ๆ˜ญๅ’Œ7 ๏ผ‘๏ผ™๏ผ“๏ผ“ #T35*500 ๆ˜ญๅ’Œ8 ๏ผ‘๏ผ™๏ผ“๏ผ” #T35*500 ๆ˜ญๅ’Œ9 ๏ผ‘๏ผ™๏ผ“๏ผ• #T35*500 ๆ˜ญๅ’Œ10 ๏ผ‘๏ผ™๏ผ“๏ผ– #T35*500 ๆ˜ญๅ’Œ11 ๏ผ‘๏ผ™๏ผ“๏ผ— #T35*500 ๆ˜ญๅ’Œ12 ๏ผ‘๏ผ™๏ผ“๏ผ˜ #T35*500 ๆ˜ญๅ’Œ13 ๏ผ‘๏ผ™๏ผ“๏ผ™ #T35*500 ๆ˜ญๅ’Œ14 ๏ผ‘๏ผ™๏ผ”๏ผ #T35*500 ๆ˜ญๅ’Œ15 ๏ผ‘๏ผ™๏ผ”๏ผ‘ #T35*500 ๆ˜ญๅ’Œ16 ๏ผ‘๏ผ™๏ผ”๏ผ’ #T35*500 ๆ˜ญๅ’Œ17 ๏ผ‘๏ผ™๏ผ”๏ผ“ #T35*500 ๆ˜ญๅ’Œ18 ๏ผ‘๏ผ™๏ผ”๏ผ” #T35*500 ๆ˜ญๅ’Œ19 ๏ผ‘๏ผ™๏ผ”๏ผ• #T35*500 ๆ˜ญๅ’Œ20 ๏ผ‘๏ผ™๏ผ”๏ผ– #T35*500 ๆ˜ญๅ’Œ21 ๏ผ‘๏ผ™๏ผ”๏ผ— #T35*500 ๆ˜ญๅ’Œ22 ๏ผ‘๏ผ™๏ผ”๏ผ˜ #T35*500 ๆ˜ญๅ’Œ23 ๏ผ‘๏ผ™๏ผ”๏ผ™ #T35*500 ๆ˜ญๅ’Œ24 ๏ผ‘๏ผ™๏ผ•๏ผ #T35*500 ๆ˜ญๅ’Œ25 ๏ผ‘๏ผ™๏ผ•๏ผ‘ #T35*500 ๆ˜ญๅ’Œ26 ๏ผ‘๏ผ™๏ผ•๏ผ’ #T35*500 ๆ˜ญๅ’Œ27 ๏ผ‘๏ผ™๏ผ•๏ผ“ #T35*500 ๆ˜ญๅ’Œ28 ๏ผ‘๏ผ™๏ผ•๏ผ” #T35*500 ๆ˜ญๅ’Œ29 ๏ผ‘๏ผ™๏ผ•๏ผ• #T35*500 ๆ˜ญๅ’Œ30 ๏ผ‘๏ผ™๏ผ•๏ผ– #T35*500 ๆ˜ญๅ’Œ31 ๏ผ‘๏ผ™๏ผ•๏ผ— #T35*500 ๆ˜ญๅ’Œ32 ๏ผ‘๏ผ™๏ผ•๏ผ˜ #T35*500 ๆ˜ญๅ’Œ33 ๏ผ‘๏ผ™๏ผ•๏ผ™ #T35*500 ๆ˜ญๅ’Œ34 ๏ผ‘๏ผ™๏ผ–๏ผ #T35*500 ๆ˜ญๅ’Œ35 ๏ผ‘๏ผ™๏ผ–๏ผ‘ #T35*500 ๆ˜ญๅ’Œ36 ๏ผ‘๏ผ™๏ผ–๏ผ’ #T35*500 ๆ˜ญๅ’Œ37 ๏ผ‘๏ผ™๏ผ–๏ผ“ #T35*500 ๆ˜ญๅ’Œ38 ๏ผ‘๏ผ™๏ผ–๏ผ” #T35*500 ๆ˜ญๅ’Œ39 ๏ผ‘๏ผ™๏ผ–๏ผ• #T35*500 ๆ˜ญๅ’Œ40 ๏ผ‘๏ผ™๏ผ–๏ผ– #T35*500 ๆ˜ญๅ’Œ41 ๏ผ‘๏ผ™๏ผ–๏ผ— #T35*500 ๆ˜ญๅ’Œ42 ๏ผ‘๏ผ™๏ผ–๏ผ˜ #T35*500 ๆ˜ญๅ’Œ43 ๏ผ‘๏ผ™๏ผ–๏ผ™ #T35*500 ๆ˜ญๅ’Œ44 ๏ผ‘๏ผ™๏ผ—๏ผ #T35*500 ๆ˜ญๅ’Œ45 ๏ผ‘๏ผ™๏ผ—๏ผ‘ #T35*500 ๆ˜ญๅ’Œ46 ๏ผ‘๏ผ™๏ผ—๏ผ’ #T35*500 ๆ˜ญๅ’Œ47 ๏ผ‘๏ผ™๏ผ—๏ผ“ #T35*500 ๆ˜ญๅ’Œ48 ๏ผ‘๏ผ™๏ผ—๏ผ” #T35*500 ๆ˜ญๅ’Œ49 ๏ผ‘๏ผ™๏ผ—๏ผ• #T35*500 ๆ˜ญๅ’Œ50 ๏ผ‘๏ผ™๏ผ—๏ผ– #T35*500 ๆ˜ญๅ’Œ51 ๏ผ‘๏ผ™๏ผ—๏ผ— #T35*500 ๆ˜ญๅ’Œ52 ๏ผ‘๏ผ™๏ผ—๏ผ˜ #T35*500 ๆ˜ญๅ’Œ53 ๏ผ‘๏ผ™๏ผ—๏ผ™ #T35*500 ๆ˜ญๅ’Œ54 ๏ผ‘๏ผ™๏ผ˜๏ผ #T35*500 ๆ˜ญๅ’Œ55 ๏ผ‘๏ผ™๏ผ˜๏ผ‘ #T35*500 ๆ˜ญๅ’Œ56 ๏ผ‘๏ผ™๏ผ˜๏ผ’ #T35*500 ๆ˜ญๅ’Œ57 ๏ผ‘๏ผ™๏ผ˜๏ผ“ #T35*500 ๆ˜ญๅ’Œ58 ๏ผ‘๏ผ™๏ผ˜๏ผ” #T35*500 ๆ˜ญๅ’Œ59 ๏ผ‘๏ผ™๏ผ˜๏ผ• #T35*500 ๆ˜ญๅ’Œ60 ๏ผ‘๏ผ™๏ผ˜๏ผ– #T35*500 ๆ˜ญๅ’Œ61 ๏ผ‘๏ผ™๏ผ˜๏ผ— #T35*500 ๆ˜ญๅ’Œ62 ๏ผ‘๏ผ™๏ผ˜๏ผ˜ #T35*500 ๆ˜ญๅ’Œ63 ๏ผ‘๏ผ™๏ผ˜๏ผ™ #T35*500 ๅนณๆˆ1 ๏ผ‘๏ผ™๏ผ˜๏ผ™ #T35*500 ๆ˜ญๅ’Œ64 ๏ผ‘๏ผ™๏ผ™๏ผ #T35*500 ๅนณๆˆ2 ๏ผ‘๏ผ™๏ผ™๏ผ‘ #T35*500 ๅนณๆˆ3 ๏ผ‘๏ผ™๏ผ™๏ผ’ #T35*500 ๅนณๆˆ4 ๏ผ‘๏ผ™๏ผ™๏ผ“ #T35*500 ๅนณๆˆ5 ๏ผ‘๏ผ™๏ผ™๏ผ” #T35*500 ๅนณๆˆ6 ๏ผ‘๏ผ™๏ผ™๏ผ• #T35*500 ๅนณๆˆ7 ๏ผ‘๏ผ™๏ผ™๏ผ– #T35*500 ๅนณๆˆ8 ๏ผ‘๏ผ™๏ผ™๏ผ— #T35*500 ๅนณๆˆ9 ๏ผ‘๏ผ™๏ผ™๏ผ˜ #T35*500 ๅนณๆˆ10 ๏ผ‘๏ผ™๏ผ™๏ผ™ #T35*500 ๅนณๆˆ11 ๏ผ’๏ผ๏ผ๏ผ #T35*500 ๅนณๆˆ12 ๏ผ’๏ผ๏ผ๏ผ‘ #T35*500 ๅนณๆˆ13 ๏ผ’๏ผ๏ผ๏ผ’ #T35*500 ๅนณๆˆ14 ๏ผ’๏ผ๏ผ๏ผ“ #T35*500 ๅนณๆˆ15 ๏ผ’๏ผ๏ผ๏ผ” #T35*500 ๅนณๆˆ16 ๏ผ’๏ผ๏ผ๏ผ• #T35*500 ๅนณๆˆ17 ๏ผ’๏ผ๏ผ๏ผ– #T35*500 ๅนณๆˆ18 ๏ผ’๏ผ๏ผ๏ผ— #T35*500 ๅนณๆˆ19 ๏ผ’๏ผ๏ผ๏ผ˜ #T35*500 ๅนณๆˆ20 ๏ผ’๏ผ๏ผ๏ผ™ #T35*500 ๅนณๆˆ21 ๏ผ’๏ผ๏ผ‘๏ผ #T35*500 ๅนณๆˆ22 ๏ผ’๏ผ๏ผ‘๏ผ‘ #T35*500 ๅนณๆˆ23 ๏ผ’๏ผ๏ผ‘๏ผ’ #T35*500 ๅนณๆˆ24 ๏ผ’๏ผ๏ผ‘๏ผ“ #T35*500 ๅนณๆˆ25 ๏ผ’๏ผ๏ผ‘๏ผ” #T35*500 ๅนณๆˆ26 ๏ผ’๏ผ๏ผ‘๏ผ• #T35*500 ๅนณๆˆ27 ๏ผ’๏ผ๏ผ‘๏ผ– #T35*500 ๅนณๆˆ28 ๏ผ’๏ผ๏ผ‘๏ผ— #T35*500 ๅนณๆˆ29 ๏ผ’๏ผ๏ผ‘๏ผ˜ #T35*500 ๅนณๆˆ30 ๏ผ’๏ผ๏ผ‘๏ผ™ #T35*500 ๅนณๆˆ31 ibus-anthy-1.5.11/data/ibus-anthy.appdata.xml.in000066400000000000000000000016731346647371500214450ustar00rootroot00000000000000 org.freedesktop.ibus.engine.anthy GFDL-1.3 GPL-2.0 Anthy Japanese input method

The Anthy input method is designed for entering Japanese text.

Input methods are typing systems allowing users to input complex languages. They are necessary because these contain too many characters to simply be laid out on a traditional keyboard.

https://github.com/ibus/ibus/wiki https://github.com/ibus/ibus-anthy/issues https://github.com/ibus/ibus/wiki/FAQ ibus-anthy tfujiwar_AT_redhat.com
ibus-anthy-1.5.11/data/oldchar.t000066400000000000000000000025731346647371500164230ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2010-2013 Red Hat, Inc. # # 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. # # This file was imported from im-dict-ja # im-dict-ja - Japanese word dictionary set for input method # http://github.com/fujiwarat/im-dict-ja # # Typing 'va' can convert 'ใƒท' with this dictionary. ใ†ใ‚›ใ #T35*500 ใƒท ใ†ใ‚›ใƒ #T35*500 ใƒธ ใ†ใ‚›ใ‡ #T35*500 ใƒน ใ†ใ‚›ใ‰ #T35*500 ใƒบ # ใ€ณ, ใ€ตand ใ€ด can be used instead. ใŠใชใ˜ #T35*500 ใ€ฑ ใŠใชใ˜ #T35*500 ใ€ฒ ใใฎใ˜ #T35*500 ใ€ฑ ใใฎใ˜ #T35*500 ใ€ฒ ใใ‚Šใ‹ใˆใ— #T35*500 ใ€ฑ ใใ‚Šใ‹ใˆใ— #T35*500 ใ€ฒ ใฆใ‚“ #T35*500 ใ€ฑ ใฆใ‚“ #T35*500 ใ€ฒ ibus-anthy-1.5.11/data/org.freedesktop.ibus.engine.anthy.gschema.xml.in000066400000000000000000001417371346647371500260150ustar00rootroot00000000000000 3 Input Mode 0 Typing Mode 0 Conversion Segment Mode true Show Input Mode false Show Typing Mode false Show Segment Mode true Show Dictionary Mode false Show Dictionary Configuration true Show Preferences 0 Period Style 1 Symbol Style 1 Ten Key Mode 0 Behavior on Focus out 0 Behavior on Period ',.ใ€ใ€‚๏ผŒ๏ผŽ' Trigger Periods 10 Page Size false Half Width Symbol false Half Width Number false Half Width Space true Latin with Shift 'default' Shortcut Type ['@KASUMI_EXEC_FILE@', 'kasumi'] Dictionary Administration Command ['@KASUMI_EXEC_FILE@', 'kasumi', '-a'] Add Word Command '@KASUMI_ICON_FILE@' Dictionary configuration icon ['default', 'jp', 'us', 'jp[ctrl:swapcaps]', 'us[ctrl:swapcaps]', 'jp[ctrl:swapcaps,compose:rctrl]', 'us[ctrl:swapcaps,compose:rctrl]', 'jp[japan:kana_lock]', 'jp[japan:nicola_f_bs]', 'jp[japan:nicola_f_bs,ctrl:swapcaps]', 'jp[japan:hztg_escape]', 'jp[japan:hztg_escape,ctrl:swapcaps]' ] Keyboard Layouts 'default' Method { 'default': <{ 'minus' : <'ใƒผ'>, 'a' : <'ใ‚'>, 'i' : <'ใ„'>, 'u' : <'ใ†'>, 'e' : <'ใˆ'>, 'o' : <'ใŠ'>, 'x-a' : <'ใ'>, 'x-i' : <'ใƒ'>, 'x-u' : <'ใ…'>, 'x-e' : <'ใ‡'>, 'x-o' : <'ใ‰'>, 'l-a' : <'ใ'>, 'l-i' : <'ใƒ'>, 'l-u' : <'ใ…'>, 'l-e' : <'ใ‡'>, 'l-o' : <'ใ‰'>, 'w-h-a' : <'ใ†ใ'>, 'w-h-i' : <'ใ†ใƒ'>, 'w-h-e' : <'ใ†ใ‡'>, 'w-h-o' : <'ใ†ใ‰'>, 'w-y-a' : <'ใ†ใ‚ƒ'>, 'w-y-u' : <'ใ†ใ‚…'>, 'w-y-o' : <'ใ†ใ‚‡'>, 'v-a' : <'ใƒดใ'>, 'v-i' : <'ใƒดใƒ'>, 'v-u' : <'ใƒด'>, 'v-e' : <'ใƒดใ‡'>, 'v-o' : <'ใƒดใ‰'>, 'v-y-a' : <'ใƒดใ‚ƒ'>, 'v-y-u' : <'ใƒดใ‚…'>, 'v-y-e' : <'ใƒดใƒใ‡'>, 'v-y-o' : <'ใƒดใ‚‡'>, 'k-a' : <'ใ‹'>, 'k-i' : <'ใ'>, 'k-u' : <'ใ'>, 'k-e' : <'ใ‘'>, 'k-o' : <'ใ“'>, 'l-k-a' : <'ใƒต'>, 'l-k-e' : <'ใƒถ'>, 'x-k-a' : <'ใƒต'>, 'x-k-e' : <'ใƒถ'>, 'g-a' : <'ใŒ'>, 'g-i' : <'ใŽ'>, 'g-u' : <'ใ'>, 'g-e' : <'ใ’'>, 'g-o' : <'ใ”'>, 'k-y-a' : <'ใใ‚ƒ'>, 'k-y-i' : <'ใใƒ'>, 'k-y-u' : <'ใใ‚…'>, 'k-y-e' : <'ใใ‡'>, 'k-y-o' : <'ใใ‚‡'>, 'k-w-a' : <'ใใ'>, 'k-w-i' : <'ใใƒ'>, 'k-w-u' : <'ใใ…'>, 'k-w-e' : <'ใใ‡'>, 'k-w-o' : <'ใใ‰'>, 'g-y-a' : <'ใŽใ‚ƒ'>, 'g-y-i' : <'ใŽใƒ'>, 'g-y-u' : <'ใŽใ‚…'>, 'g-y-e' : <'ใŽใ‡'>, 'g-y-o' : <'ใŽใ‚‡'>, 'g-w-a' : <'ใใ'>, 'g-w-i' : <'ใใƒ'>, 'g-w-u' : <'ใใ…'>, 'g-w-e' : <'ใใ‡'>, 'g-w-o' : <'ใใ‰'>, 's-a' : <'ใ•'>, 's-i' : <'ใ—'>, 's-u' : <'ใ™'>, 's-e' : <'ใ›'>, 's-o' : <'ใ'>, 'z-a' : <'ใ–'>, 'z-i' : <'ใ˜'>, 'z-u' : <'ใš'>, 'z-e' : <'ใœ'>, 'z-o' : <'ใž'>, 's-y-a' : <'ใ—ใ‚ƒ'>, 's-y-i' : <'ใ—ใƒ'>, 's-y-u' : <'ใ—ใ‚…'>, 's-y-e' : <'ใ—ใ‡'>, 's-y-o' : <'ใ—ใ‚‡'>, 's-h-a' : <'ใ—ใ‚ƒ'>, 's-h-i' : <'ใ—'>, 's-h-u' : <'ใ—ใ‚…'>, 's-h-e' : <'ใ—ใ‡'>, 's-h-o' : <'ใ—ใ‚‡'>, 'z-y-a' : <'ใ˜ใ‚ƒ'>, 'z-y-i' : <'ใ˜ใƒ'>, 'z-y-u' : <'ใ˜ใ‚…'>, 'z-y-e' : <'ใ˜ใ‡'>, 'z-y-o' : <'ใ˜ใ‚‡'>, 'j-a' : <'ใ˜ใ‚ƒ'>, 'j-y-a' : <'ใ˜ใ‚ƒ'>, 'j-i' : <'ใ˜'>, 'j-y-i' : <'ใ˜ใƒ'>, 'j-u' : <'ใ˜ใ‚…'>, 'j-y-u' : <'ใ˜ใ‚…'>, 'j-e' : <'ใ˜ใ‡'>, 'j-y-e' : <'ใ˜ใ‡'>, 'j-o' : <'ใ˜ใ‚‡'>, 'j-y-o' : <'ใ˜ใ‚‡'>, 's-w-i' : <'ใ™ใ…ใƒ'>, 's-w-e' : <'ใ™ใ‡'>, 'z-w-e' : <'ใšใ‡'>, 't-a' : <'ใŸ'>, 't-i' : <'ใก'>, 't-u' : <'ใค'>, 't-s-u' : <'ใค'>, 't-e' : <'ใฆ'>, 't-o' : <'ใจ'>, 'd-a' : <'ใ '>, 'd-i' : <'ใข'>, 'd-u' : <'ใฅ'>, 'd-e' : <'ใง'>, 'd-o' : <'ใฉ'>, 'x-t-u' : <'ใฃ'>, 'x-t-s-u' : <'ใฃ'>, 'l-t-u' : <'ใฃ'>, 'l-t-s-u' : <'ใฃ'>, 't-y-a' : <'ใกใ‚ƒ'>, 't-y-i' : <'ใกใƒ'>, 't-y-u' : <'ใกใ‚…'>, 't-y-e' : <'ใกใ‡'>, 't-y-o' : <'ใกใ‚‡'>, 'c-y-a' : <'ใกใ‚ƒ'>, 'c-y-i' : <'ใกใƒ'>, 'c-y-u' : <'ใกใ‚…'>, 'c-y-e' : <'ใกใ‡'>, 'c-y-o' : <'ใกใ‚‡'>, 'c-h-a' : <'ใกใ‚ƒ'>, 'c-h-i' : <'ใก'>, 'c-h-u' : <'ใกใ‚…'>, 'c-h-e' : <'ใกใ‡'>, 'c-h-o' : <'ใกใ‚‡'>, 'd-y-a' : <'ใขใ‚ƒ'>, 'd-y-i' : <'ใขใƒ'>, 'd-y-u' : <'ใขใ‚…'>, 'd-y-e' : <'ใขใ‡'>, 'd-y-o' : <'ใขใ‚‡'>, 't-s-a' : <'ใคใ'>, 't-s-i' : <'ใคใƒ'>, 't-s-e' : <'ใคใ‡'>, 't-s-o' : <'ใคใ‰'>, 't-s-y-a' : <'ใคใ‚ƒ'>, 't-s-y-u' : <'ใคใ‚…'>, 't-s-y-e' : <'ใคใƒใ‡'>, 't-s-y-o' : <'ใคใ‚‡'>, 'd-z-a' : <'ใฅใ'>, 'd-z-i' : <'ใฅใƒ'>, 'd-z-u' : <'ใฅ'>, 'd-z-e' : <'ใฅใ‡'>, 'd-z-o' : <'ใฅใ‰'>, 'd-z-y-a' : <'ใฅใ‚ƒ'>, 'd-z-y-u' : <'ใฅใ‚…'>, 'd-z-y-e' : <'ใฅใƒใ‡'>, 'd-z-y-o' : <'ใฅใ‚‡'>, 't-h-a' : <'ใฆใ‚ƒ'>, 't-h-i' : <'ใฆใƒ'>, 't-h-u' : <'ใฆใ‚…'>, 't-h-e' : <'ใฆใ‡'>, 't-h-o' : <'ใฆใ‚‡'>, 't-w-u' : <'ใจใ…'>, 'd-h-a' : <'ใงใ‚ƒ'>, 'd-h-i' : <'ใงใƒ'>, 'd-h-u' : <'ใงใ‚…'>, 'd-h-e' : <'ใงใ‡'>, 'd-h-o' : <'ใงใ‚‡'>, 'd-w-u' : <'ใฉใ…'>, 'n-a' : <'ใช'>, 'n-i' : <'ใซ'>, 'n-u' : <'ใฌ'>, 'n-e' : <'ใญ'>, 'n-o' : <'ใฎ'>, 'n-y-a' : <'ใซใ‚ƒ'>, 'n-y-i' : <'ใซใƒ'>, 'n-y-u' : <'ใซใ‚…'>, 'n-y-e' : <'ใซใ‡'>, 'n-y-o' : <'ใซใ‚‡'>, 'h-a' : <'ใฏ'>, 'h-i' : <'ใฒ'>, 'h-u' : <'ใต'>, 'h-e' : <'ใธ'>, 'h-o' : <'ใป'>, 'b-a' : <'ใฐ'>, 'b-i' : <'ใณ'>, 'b-u' : <'ใถ'>, 'b-e' : <'ใน'>, 'b-o' : <'ใผ'>, 'p-a' : <'ใฑ'>, 'p-i' : <'ใด'>, 'p-u' : <'ใท'>, 'p-e' : <'ใบ'>, 'p-o' : <'ใฝ'>, 'h-y-a' : <'ใฒใ‚ƒ'>, 'h-y-i' : <'ใฒใƒ'>, 'h-y-u' : <'ใฒใ‚…'>, 'h-y-e' : <'ใฒใ‡'>, 'h-y-o' : <'ใฒใ‚‡'>, 'b-y-a' : <'ใณใ‚ƒ'>, 'b-y-i' : <'ใณใƒ'>, 'b-y-u' : <'ใณใ‚…'>, 'b-y-e' : <'ใณใ‡'>, 'b-y-o' : <'ใณใ‚‡'>, 'p-y-a' : <'ใดใ‚ƒ'>, 'p-y-i' : <'ใดใƒ'>, 'p-y-u' : <'ใดใ‚…'>, 'p-y-e' : <'ใดใ‡'>, 'p-y-o' : <'ใดใ‚‡'>, 'f-a' : <'ใตใ'>, 'f-i' : <'ใตใƒ'>, 'f-u' : <'ใต'>, 'f-e' : <'ใตใ‡'>, 'f-o' : <'ใตใ‰'>, 'f-y-a' : <'ใตใ‚ƒ'>, 'f-y-i' : <'ใตใƒ'>, 'f-y-u' : <'ใตใ‚…'>, 'f-y-e' : <'ใตใ‡'>, 'f-y-o' : <'ใตใ‚‡'>, 'b-w-a' : <'ใถใ'>, 'b-w-e' : <'ใถใ‡'>, 'b-w-o' : <'ใถใ‰'>, 'p-w-a' : <'ใทใ'>, 'p-w-e' : <'ใทใ‡'>, 'p-w-o' : <'ใทใ‰'>, 'm-a' : <'ใพ'>, 'm-i' : <'ใฟ'>, 'm-u' : <'ใ‚€'>, 'm-e' : <'ใ‚'>, 'm-o' : <'ใ‚‚'>, 'm-y-a' : <'ใฟใ‚ƒ'>, 'm-y-i' : <'ใฟใƒ'>, 'm-y-u' : <'ใฟใ‚…'>, 'm-y-e' : <'ใฟใ‡'>, 'm-y-o' : <'ใฟใ‚‡'>, 'y-a' : <'ใ‚„'>, 'y-i' : <'ใ„'>, 'y-u' : <'ใ‚†'>, 'y-e' : <'ใ„ใ‡'>, 'y-o' : <'ใ‚ˆ'>, 'l-y-a' : <'ใ‚ƒ'>, 'l-y-i' : <'ใƒ'>, 'l-y-u' : <'ใ‚…'>, 'l-y-e' : <'ใ‡'>, 'l-y-o' : <'ใ‚‡'>, 'x-y-a' : <'ใ‚ƒ'>, 'x-y-i' : <'ใƒ'>, 'x-y-u' : <'ใ‚…'>, 'x-y-e' : <'ใ‡'>, 'x-y-o' : <'ใ‚‡'>, 'r-a' : <'ใ‚‰'>, 'r-i' : <'ใ‚Š'>, 'r-u' : <'ใ‚‹'>, 'r-e' : <'ใ‚Œ'>, 'r-o' : <'ใ‚'>, 'r-y-a' : <'ใ‚Šใ‚ƒ'>, 'r-y-i' : <'ใ‚Šใƒ'>, 'r-y-u' : <'ใ‚Šใ‚…'>, 'r-y-e' : <'ใ‚Šใ‡'>, 'r-y-o' : <'ใ‚Šใ‚‡'>, 'w-a' : <'ใ‚'>, 'w-i' : <'ใ†ใƒ'>, 'w-u' : <'ใ†'>, 'w-e' : <'ใ†ใ‡'>, 'w-o' : <'ใ‚’'>, 'l-w-a' : <'ใ‚Ž'>, 'x-w-a' : <'ใ‚Ž'>, 'n-apostrophe' : <'ใ‚“'>, 'n-n' : <'ใ‚“'>, 'w-y-i' : <'ใ‚'>, 'w-y-e' : <'ใ‚‘'> }> } List 'jp' Method { 'jp': <{ '1' : <'ใฌ'>, '2' : <'ใต'>, '3' : <'ใ‚'>, '4' : <'ใ†'>, '5' : <'ใˆ'>, '6' : <'ใŠ'>, '7' : <'ใ‚„'>, '8' : <'ใ‚†'>, '9' : <'ใ‚ˆ'>, '0' : <'ใ‚'>, 'minus' : <'ใป'>, 'asciicircum' : <'ใธ'>, 'q' : <'ใŸ'>, 'w' : <'ใฆ'>, 'e' : <'ใ„'>, 'r' : <'ใ™'>, 't' : <'ใ‹'>, 'y' : <'ใ‚“'>, 'u' : <'ใช'>, 'i' : <'ใซ'>, 'o' : <'ใ‚‰'>, 'p' : <'ใ›'>, 'at' : <'ใ‚›'>, 'bracketleft' : <'ใ‚œ'>, 'a' : <'ใก'>, 's' : <'ใจ'>, 'd' : <'ใ—'>, 'f' : <'ใฏ'>, 'g' : <'ใ'>, 'h' : <'ใ'>, 'j' : <'ใพ'>, 'k' : <'ใฎ'>, 'l' : <'ใ‚Š'>, 'semicolon' : <'ใ‚Œ'>, 'colon' : <'ใ‘'>, 'bracketright' : <'ใ‚€'>, 'z' : <'ใค'>, 'x' : <'ใ•'>, 'c' : <'ใ'>, 'v' : <'ใฒ'>, 'b' : <'ใ“'>, 'n' : <'ใฟ'>, 'm' : <'ใ‚‚'>, 'comma' : <'ใญ'>, 'period' : <'ใ‚‹'>, 'slash' : <'ใ‚'>, 'backslash' : <'ใ‚'>, 'exclam' : <'ใฌ'>, 'quotedbl' : <'ใต'>, 'numbersign' : <'ใ'>, 'dollar' : <'ใ…'>, 'percent' : <'ใ‡'>, 'ampersand' : <'ใ‰'>, 'apostrophe' : <'ใ‚ƒ'>, 'parenleft' : <'ใ‚…'>, 'parenright' : <'ใ‚‡'>, 'asciitilde' : <'ใ‚’'>, 'equal' : <'ใ‚‘'>, 'bar' : <'ใƒผ'>, 'largeq' : <'ใŸ'>, 'largew' : <'ใฆ'>, 'largee' : <'ใƒ'>, 'larger' : <'ใ™'>, 'larget' : <'ใƒต'>, 'largey' : <'ใ‚“'>, 'largeu' : <'ใช'>, 'largei' : <'ใซ'>, 'largeo' : <'ใ‚‰'>, 'largep' : <'ใ›'>, 'grave' : <'ใ‚›'>, 'braceleft' : <'ใ€Œ'>, 'largea' : <'ใก'>, 'larges' : <'ใจ'>, 'larged' : <'ใ—'>, 'largef' : <'ใ‚Ž'>, 'largeg' : <'ใ'>, 'largeh' : <'ใ'>, 'largej' : <'ใพ'>, 'largek' : <'ใฎ'>, 'largel' : <'ใ‚Š'>, 'plus' : <'ใ‚Œ'>, 'asterisk' : <'ใƒถ'>, 'braceright' : <'ใ€'>, 'largez' : <'ใฃ'>, 'largex' : <'ใ•'>, 'largec' : <'ใ'>, 'largev' : <'ใ‚'>, 'largeb' : <'ใ“'>, 'largen' : <'ใฟ'>, 'largem' : <'ใ‚‚'>, 'less' : <'ใ€'>, 'greater' : <'ใ€‚'>, 'question' : <'ใƒป'>, 'underscore' : <'ใ‚'>, 'yen' : <'ใƒผ'> }>, 'us': <{ 'grave' : <'ใ‚'>, '1' : <'ใฌ'>, '2' : <'ใต'>, '3' : <'ใ‚'>, '4' : <'ใ†'>, '5' : <'ใˆ'>, '6' : <'ใŠ'>, '7' : <'ใ‚„'>, '8' : <'ใ‚†'>, '9' : <'ใ‚ˆ'>, '0' : <'ใ‚'>, 'minus' : <'ใป'>, 'equal' : <'ใธ'>, 'q' : <'ใŸ'>, 'w' : <'ใฆ'>, 'e' : <'ใ„'>, 'r' : <'ใ™'>, 't' : <'ใ‹'>, 'y' : <'ใ‚“'>, 'u' : <'ใช'>, 'i' : <'ใซ'>, 'o' : <'ใ‚‰'>, 'p' : <'ใ›'>, 'bracketleft' : <'ใ‚›'>, 'bracketright' : <'ใ‚œ'>, 'backslash' : <'ใ‚€'>, 'a' : <'ใก'>, 's' : <'ใจ'>, 'd' : <'ใ—'>, 'f' : <'ใฏ'>, 'g' : <'ใ'>, 'h' : <'ใ'>, 'j' : <'ใพ'>, 'k' : <'ใฎ'>, 'l' : <'ใ‚Š'>, 'semicolon' : <'ใ‚Œ'>, 'apostrophe' : <'ใ‘'>, 'z' : <'ใค'>, 'x' : <'ใ•'>, 'c' : <'ใ'>, 'v' : <'ใฒ'>, 'b' : <'ใ“'>, 'n' : <'ใฟ'>, 'm' : <'ใ‚‚'>, 'comma' : <'ใญ'>, 'period' : <'ใ‚‹'>, 'slash' : <'ใ‚'>, 'asciitilde' : <'ใ‚'>, 'exclam' : <'ใฌ'>, 'at' : <'ใต'>, 'numbersign' : <'ใ'>, 'dollar' : <'ใ…'>, 'percent' : <'ใ‡'>, 'asciicircum' : <'ใ‰'>, 'ampersand' : <'ใ‚ƒ'>, 'asterisk' : <'ใ‚…'>, 'parenleft' : <'ใ‚‡'>, 'parenright' : <'ใ‚’'>, 'underscore' : <'ใƒผ'>, 'plus' : <'ใ‚‘'>, 'largeq' : <'ใŸ'>, 'largew' : <'ใฆ'>, 'largee' : <'ใƒ'>, 'larger' : <'ใ™'>, 'larget' : <'ใƒต'>, 'largey' : <'ใ‚“'>, 'largeu' : <'ใช'>, 'largei' : <'ใซ'>, 'largeo' : <'ใ‚‰'>, 'largep' : <'ใ›'>, 'braceleft' : <'ใ€Œ'>, 'braceright' : <'ใ€'>, 'bar' : <'ใ‚€'>, 'largea' : <'ใก'>, 'larges' : <'ใจ'>, 'larged' : <'ใ—'>, 'largef' : <'ใ‚Ž'>, 'largeg' : <'ใ'>, 'largeh' : <'ใ'>, 'largej' : <'ใพ'>, 'largek' : <'ใฎ'>, 'largel' : <'ใ‚Š'>, 'colon' : <'ใ‚Œ'>, 'quotedbl' : <'ใƒถ'>, 'largez' : <'ใฃ'>, 'largex' : <'ใ•'>, 'largec' : <'ใ'>, 'largev' : <'ใ‚'>, 'largeb' : <'ใ“'>, 'largen' : <'ใฟ'>, 'largem' : <'ใ‚‚'>, 'less' : <'ใ€'>, 'greater' : <'ใ€‚'>, 'question' : <'ใƒป'> }> } List true Keyboard Layout Mode 0 Keyboard Layout 2 FMV Extension false FMV Extension 'Henkan' Right S 'Muhenkan' Left S 100 T1 75 T2 'base' Method { 'base': <{ 'q' : <['ใ€‚', '', 'ใ']>, 'w' : <['ใ‹', 'ใŒ', 'ใˆ']>, 'e' : <['ใŸ', 'ใ ', 'ใ‚Š']>, 'r' : <['ใ“', 'ใ”', 'ใ‚ƒ']>, 't' : <['ใ•', 'ใ–', 'ใ‚Œ']>, 'y' : <['ใ‚‰', 'ใ‚ˆ', 'ใฑ']>, 'u' : <['ใก', 'ใซ', 'ใข']>, 'i' : <['ใ', 'ใ‚‹', 'ใ']>, 'o' : <['ใค', 'ใพ', 'ใฅ']>, 'p' : <['๏ผŒ', 'ใ‡', 'ใด']>, 'at' : <['ใ€', '', '']>, 'bracketleft' : <['ใ‚›', 'ใ‚œ', '']>, 'a' : <['ใ†', '', 'ใ‚’']>, 's' : <['ใ—', 'ใ˜', 'ใ‚']>, 'd' : <['ใฆ', 'ใง', 'ใช']>, 'f' : <['ใ‘', 'ใ’', 'ใ‚…']>, 'g' : <['ใ›', 'ใœ', 'ใ‚‚']>, 'h' : <['ใฏ', 'ใฟ', 'ใฐ']>, 'j' : <['ใจ', 'ใŠ', 'ใฉ']>, 'k' : <['ใ', 'ใฎ', 'ใŽ']>, 'l' : <['ใ„', 'ใ‚‡', 'ใฝ']>, 'semicolon' : <['ใ‚“', 'ใฃ', '']>, 'z' : <['๏ผŽ', '', 'ใ…']>, 'x' : <['ใฒ', 'ใณ', 'ใƒผ']>, 'c' : <['ใ™', 'ใš', 'ใ‚']>, 'v' : <['ใต', 'ใถ', 'ใ‚„']>, 'b' : <['ใธ', 'ใน', 'ใƒ']>, 'n' : <['ใ‚', 'ใฌ', 'ใท']>, 'm' : <['ใ', 'ใ‚†', 'ใž']>, 'comma' : <['ใญ', 'ใ‚€', 'ใบ']>, 'period' : <['ใป', 'ใ‚', 'ใผ']>, 'slash' : <['ใƒป', 'ใ‰', '']>, '1' : <['1', '', '๏ผŸ']>, '2' : <['2', '', '๏ผ']>, '4' : <['4', '', 'ใ€Œ']>, '5' : <['5', '', 'ใ€']>, '6' : <['6', '๏ผป', '']>, '7' : <['7', '๏ผฝ', '']>, '8' : <['8', '๏ผˆ', '']>, '9' : <['9', '๏ผ‰', '']>, 'backslash' : <['๏ฟฅ', '', '']> }>, 'nicola-j-table': <{ 'colon' : <['๏ผš', '', '']>, 'at' : <['ใ€', '', '']>, 'bracketleft' : <['ใ‚›', 'ใ‚œ', '']>, 'bracketright' : <['ใ€', '', '']>, '8' : <['8', '๏ผˆ', '']>, '9' : <['9', '๏ผ‰', '']>, '0' : <['0', '', '']> }>, 'nicola-a-table': <{ 'colon' : <['๏ผš', '', '']>, 'at' : <['๏ผ ', '', '']>, 'bracketleft' : <['ใ€', '', '']>, 'bracketright' : <['ใ‚›', 'ใ‚œ', '']>, '8' : <['8', '', '']>, '9' : <['9', '๏ผˆ', '']>, '0' : <['0', '๏ผ‰', '']> }>, 'nicola-f-table': <{ 'colon' : <['ใ€', '', '']>, 'at' : <['๏ผ ', '', '']>, 'bracketleft' : <['ใ‚›', 'ใ‚œ', '']>, 'bracketright' : <['ใ€', '', '']>, '8' : <['8', '๏ผˆ', '']>, '9' : <['9', '๏ผ‰', '']>, '0' : <['0', '', '']> }>, 'kb231-j-fmv-table': <{ '3' : <['3', '', '๏ฝž']>, '0' : <['0', 'ใ€Ž', '']>, 'minus' : <['-', 'ใ€', '']>, 'equal' : <['=', '', '']> }>, 'kb231-a-fmv-table': <{ '3' : <['3', '', '๏ฝž']>, '0' : <['0', '๏ผ‰', '']>, 'minus' : <['-', 'ใ€Ž', '']>, 'equal' : <['=', 'ใ€', '']> }>, 'kb231-f-fmv-table': <{ '3' : <['3', '', '๏ฝž']>, '0' : <['0', 'ใ€Ž', '']>, 'minus' : <['-', 'ใ€', '']>, 'equal' : <['=', '', '']> }>, 'kb611-j-fmv-table': <{ 'grave' : <['โ€˜', '', '']>, 'asciicircum' : <['ใ€…', 'ยฃ', '']>, 'colon' : <['๏ผš', '', '']>, 'at' : <['ใ€', 'ยข', '']>, 'bracketleft' : <['ใ‚›', 'ใ‚œ', '']>, 'backslash' : <['๏ฟฅ', 'ยฆ', '']> }>, 'kb611-a-fmv-table': <{ 'grave' : <['ใ€…', '', 'ยฃ']>, 'colon' : <['๏ผš', '', '']>, 'at' : <['๏ผ ', '', '']>, 'bracketleft' : <['ใ€', 'ยข', '']>, 'backslash' : <['๏ฟฅ', 'ยฆ', '']> }>, 'kb611-f-fmv-table': <{ 'grave' : <['โ€˜', '', '']>, 'asciicircum' : <['ใ€…', 'ยฃ', '']>, 'colon' : <['ใ€', 'ยข', '']>, 'at' : <['๏ผ ', '', '']>, 'bracketleft' : <['ใ‚›', 'ใ‚œ', '']>, 'backslash' : <['๏ฟฅ', 'ยฆ', '']> }> } List <('template', '', '', '', false, 300, false, true, false, 'utf-8')> Template Dictionary [ <('embedded', '่ˆฌ', 'General', '', true, 0, true, true, false, 'utf-8')>, <('zipcode', 'ใ€’', 'Zip Code Conversion', '', true, -1, false, true, false, 'utf-8')>, <('symbol', '่จ˜', 'Symbol', '', true, -1, true, false, false, 'utf-8')>, <('oldchar', 'ๆ—ง', 'Old Character Style', '', true, -1, false, true, false, 'utf-8')>, <('era', 'ๅนด', 'Era', '', true, -1, false, true, false, 'utf-8')>, <('emoji', '๐Ÿ˜Š', 'Emoji', '', true, -1, false, true, false, 'utf-8')> ] Lists { 'oldchar': <['@pkgdatadir@/dicts/oldchar.t']>, 'era': <['@pkgdatadir@/dicts/era.t']>, 'zipcode': <['@pkgdatadir@/dicts/zipcode.t']>, 'symbol': <['@pkgdatadir@/dicts/symbol.t']>, 'emoji': <['@pkgdatadir@/dicts/emoji.t']> } Files [] Order { 'on_off': <[@ON_OFF_KEYS@]>, 'circle_input_mode': <['Ctrl+comma', 'Ctrl+less']>, 'circle_kana_mode': <['Ctrl+period', 'Ctrl+greater']>, 'circle_typing_method': <['Alt+Romaji', 'Ctrl+slash']>, 'circle_dict_method': <['Alt+Henkan']>, 'insert_space': <['space']>, 'insert_alternate_space': <['Shift+space']>, 'backspace': <['BackSpace', 'Ctrl+H']>, 'delete': <['Delete', 'Ctrl+D']>, 'commit': <['Return', 'KP_Enter', 'Ctrl+J', 'Ctrl+M']>, 'convert': <['space', 'KP_Space', 'Henkan']>, 'predict': <['Tab', 'ISO_Left_Tab']>, 'cancel': <['Escape', 'Ctrl+G']>, 'reconvert': <['Shift+Henkan']>, 'move_caret_first': <['Ctrl+A', 'Home']>, 'move_caret_last': <['Ctrl+E', 'End']>, 'move_caret_forward': <['Right', 'Ctrl+F']>, 'move_caret_backward': <['Left', 'Ctrl+B']>, 'select_first_segment': <['Ctrl+A', 'Home']>, 'select_last_segment': <['Ctrl+E', 'End']>, 'select_next_segment': <['Right', 'Ctrl+F']>, 'select_prev_segment': <['Left', 'Ctrl+B']>, 'shrink_segment': <['Shift+Left', 'Ctrl+I']>, 'expand_segment': <['Shift+Right', 'Ctrl+O']>, 'commit_first_segment': <['Shift+Down']>, 'commit_selected_segment': <['Ctrl+Down']>, 'select_first_candidate': <['Home']>, 'select_last_candidate': <['End']>, 'select_next_candidate': <['space', 'KP_Space', 'Tab', 'ISO_Left_Tab', 'Henkan', 'Down', 'KP_Add', 'Ctrl+N']>, 'select_prev_candidate': <['Shift+Tab', 'Shift+ISO_Left_Tab', 'Up', 'KP_Subtract', 'Ctrl+P']>, 'candidates_page_up': <['Page_Up']>, 'candidates_page_down': <['Page_Down', 'KP_Tab']>, 'select_candidates_1': <['1']>, 'select_candidates_2': <['2']>, 'select_candidates_3': <['3']>, 'select_candidates_4': <['4']>, 'select_candidates_5': <['5']>, 'select_candidates_6': <['6']>, 'select_candidates_7': <['7']>, 'select_candidates_8': <['8']>, 'select_candidates_9': <['9']>, 'select_candidates_0': <['0']>, 'convert_to_char_type_forward': <['Muhenkan']>, 'convert_to_hiragana': <['F6']>, 'convert_to_katakana': <['F7']>, 'convert_to_half': <['F8']>, 'convert_to_half_katakana': <['Shift+F8']>, 'convert_to_wide_latin': <['F9']>, 'convert_to_latin': <['F10']>, 'convert_to_hiragana_all': <['Shift+F6']>, 'convert_to_katakana_all': <['Shift+F7']>, 'convert_to_wide_latin_all': <['Shift+F9']>, 'convert_to_latin_all': <['Shift+F10']>, 'dict_admin': <['F11']>, 'add_word': <['F12']>, 'hiragana_for_latin_with_shift': <['Hiragana_Katakana']> } Default { 'on_off': <['Henkan', 'Eisu_toggle', 'Zenkaku_Hankaku']>, 'circle_input_mode': <['F10']>, 'hiragana_mode': <['Hiragana_Katakana']>, 'katakana_mode': <['Shift+Hiragana_Katakana']>, 'circle_typing_method': <['Romaji', 'Alt+Romaji']>, 'circle_dict_method': <['Alt+Henkan']>, 'convert': <['space', 'Henkan', 'Shift+space', 'Shift+Henkan']>, 'predict': <['Tab']>, 'cancel': <['Escape', 'BackSpace', 'Ctrl+H', 'Ctrl+bracketleft']>, 'commit': <['Return', 'Ctrl+M']>, 'reconvert': <['Shift+Henkan']>, 'insert_space': <['space']>, 'insert_alternate_space': <['Shift+space']>, 'backspace': <['BackSpace', 'Ctrl+H']>, 'delete': <['Delete', 'Ctrl+G']>, 'move_caret_backward': <['Left', 'Ctrl+K']>, 'move_caret_forward': <['Right', 'Ctrl+L']>, 'move_caret_first': <['Ctrl+Left']>, 'move_caret_last': <['Ctrl+Right']>, 'select_prev_segment': <['Shift+Left']>, 'select_next_segment': <['Shift+Right']>, 'select_first_segment': <['Ctrl+Left']>, 'select_last_segment': <['Ctrl+Right']>, 'expand_segment': <['Right', 'Ctrl+L']>, 'shrink_segment': <['Left', 'Ctrl+K']>, 'commit_selected_segment': <['Down', 'Ctrl+N']>, 'candidates_page_up': <['Shift+Henkan', 'Page_Up']>, 'candidates_page_down': <['Henkan', 'Page_Down']>, 'select_next_candidate': <['space', 'Tab', 'Henkan', 'Shift+space', 'Shift+Henkan']>, 'select_prev_candidate': <['Up']>, 'select_candidates_1': <['1']>, 'select_candidates_2': <['2']>, 'select_candidates_3': <['3']>, 'select_candidates_4': <['4']>, 'select_candidates_5': <['5']>, 'select_candidates_6': <['6']>, 'select_candidates_7': <['7']>, 'select_candidates_8': <['8']>, 'select_candidates_9': <['9']>, 'select_candidates_0': <['0']>, 'convert_to_hiragana': <['F6', 'Ctrl+U']>, 'convert_to_katakana': <['F7', 'Ctrl+I']>, 'convert_to_half': <['F8', 'Ctrl+O']>, 'convert_to_half_katakana': <['Shift+F8']>, 'convert_to_wide_latin': <['F9', 'Ctrl+P']>, 'convert_to_latin': <['F10', 'Ctrl+at']>, 'convert_to_hiragana_all': <['Shift+F6']>, 'convert_to_katakana_all': <['Shift+F7']>, 'convert_to_wide_latin_all': <['Shift+F9']>, 'convert_to_latin_all': <['Shift+F10']>, 'dict_admin': <['F11']>, 'add_word': <['Ctrl+F7']>, 'hiragana_for_latin_with_shift': <['Ctrl+J']> } ATOK { 'on_off': <['Shift+space']>, 'convert': <['space']>, 'predict': <['Ctrl+Q']>, 'cancel': <['Escape', 'Ctrl+G', 'Alt+Down', 'Muhenkan']>, 'commit': <['Ctrl+L', 'Ctrl+M', 'Ctrl+J', 'Return']>, 'insert_space': <['space']>, 'backspace': <['Ctrl+H', 'BackSpace']>, 'delete': <['Ctrl+D', 'Delete']>, 'circle_dict_method': <['Alt+Henkan']>, 'move_caret_backward': <['Ctrl+B', 'Left']>, 'move_caret_forward': <['Ctrl+F', 'Right']>, 'move_caret_first': <['Ctrl+A', 'Alt+Left']>, 'move_caret_last': <['Ctrl+E', 'Alt+Right']>, 'select_prev_segment': <['Ctrl+B', 'Left']>, 'select_next_segment': <['Ctrl+F', 'Right']>, 'select_first_segment': <['Ctrl+A', 'Alt+Left']>, 'select_last_segment': <['Ctrl+E', 'Alt+Right']>, 'expand_segment': <['Ctrl+O', 'F14']>, 'shrink_segment': <['Ctrl+I', 'F13']>, 'candidates_page_up': <['Tab']>, 'candidates_page_down': <['Shift+Tab']>, 'select_next_candidate': <['space', 'Ctrl+Q', 'Ctrl+P', 'Down']>, 'select_prev_candidate': <['Ctrl+N', 'Up']>, 'select_candidates_1': <['1']>, 'select_candidates_2': <['2']>, 'select_candidates_3': <['3']>, 'select_candidates_4': <['4']>, 'select_candidates_5': <['5']>, 'select_candidates_6': <['6']>, 'select_candidates_7': <['7']>, 'select_candidates_8': <['8']>, 'select_candidates_9': <['9']>, 'select_candidates_0': <['0']>, 'convert_to_hiragana': <['F6']>, 'convert_to_katakana': <['F7']>, 'convert_to_half': <['F8']>, 'convert_to_wide_latin': <['F9']>, 'convert_to_latin': <['F10']>, 'convert_to_hiragana_all': <['Shift+F6']>, 'convert_to_katakana_all': <['Shift+F7']>, 'convert_to_half_all': <['Shift+F8']>, 'convert_to_wide_latin_all': <['Shift+F9']>, 'convert_to_latin_all': <['Shift+F10']>, 'dict_admin': <['F11']>, 'add_word': <['F12']>, 'hiragana_for_latin_with_shift': <['Hiragana_Katakana']> } WNN ibus-anthy-1.5.11/data/symbol.t000066400000000000000000000407771346647371500163240ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2010-2016 Red Hat, Inc. # # 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. # # This file was imported from im-dict-ja # im-dict-ja - Japanese word dictionary set for input method # http://github.com/fujiwarat/im-dict-ja ใ‚ใฃใจใพใƒผใ #T35*0 ๏ผ  ใ„ใกใฎใ˜ #T35*0 ใ‚ ใ„ใกใฎใ˜ #T35*0 ใ‚ž ใ„ใกใฎใ˜ #T35*0 ใƒฝ ใ„ใกใฎใ˜ #T35*0 ใƒพ ใ„ใฆใ– #T35*0 โ™ ใ†ใŠใ– #T35*0 โ™“ ใˆใ‚‚ใ˜ #T35*0 ใ€„ ใˆใ‚‚ใ˜ #T35*0 โ˜Ž ใˆใ‚‚ใ˜ #T35*0 ใ€  ใˆใ‚“ #T35*0 ๏ฟฅ ใˆใ‚“ใ–ใ‚“ #T35*0 ยฑ ใˆใ‚“ใ–ใ‚“ #T35*0 X ใˆใ‚“ใ–ใ‚“ #T35*0 รท ใˆใ‚“ใ–ใ‚“ #T35*0 * ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰  ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰ฆ ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰ง ใˆใ‚“ใ–ใ‚“ #T35*0 โˆž ใˆใ‚“ใ–ใ‚“ #T35*0 โˆด ใˆใ‚“ใ–ใ‚“ #T35*0 โˆต ใˆใ‚“ใ–ใ‚“ #T35*0 ๏ผœ ใˆใ‚“ใ–ใ‚“ #T35*0 ๏ผž ใˆใ‚“ใ–ใ‚“ #T35*0 ๏ผ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ’ ใˆใ‚“ใ–ใ‚“ #T35*0 ๏ผ‹ ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰’ ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰ก ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰ช ใˆใ‚“ใ–ใ‚“ #T35*0 โ‰ซ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆฝ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆˆ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ‹ ใˆใ‚“ใ–ใ‚“ #T35*0 โІ ใˆใ‚“ใ–ใ‚“ #T35*0 โЇ ใˆใ‚“ใ–ใ‚“ #T35*0 โŠ‚ ใˆใ‚“ใ–ใ‚“ #T35*0 โŠƒ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆช ใˆใ‚“ใ–ใ‚“ #T35*0 โˆฉ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆง ใˆใ‚“ใ–ใ‚“ #T35*0 โˆจ ใˆใ‚“ใ–ใ‚“ #T35*0 ยฌ ใˆใ‚“ใ–ใ‚“ #T35*0 โ‡’ ใˆใ‚“ใ–ใ‚“ #T35*0 โ‡” ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ€ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆƒ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ  ใˆใ‚“ใ–ใ‚“ #T35*0 โŠฅ ใˆใ‚“ใ–ใ‚“ #T35*0 โŒ’ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ‚ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆ‡ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆš ใˆใ‚“ใ–ใ‚“ #T35*0 โˆซ ใˆใ‚“ใ–ใ‚“ #T35*0 โˆฌ ใŠใ†ใ—ใ– #T35*0 โ™‰ ใŠใจใ‚ใ– #T35*0 โ™ ใŠใฒใคใ˜ใ– #T35*0 โ™ˆ ใŠใ‚“ใท #T35*0 โ™ช ใŠใ‚“ใท #T35*0 ๐„ž ใŠใ‚“ใท #T35*0 ๐„ข ใŠใ‚“ใท #T35*0 ๐„ป ใŠใ‚“ใท #T35*0 ๐„ผ ใŠใ‚“ใท #T35*0 ๐„ฝ ใŠใ‚“ใท #T35*0 ๐„พ ใŠใ‚“ใท #T35*0 ๐ŸŽต ใŠใ‚“ใท #T35*0 ๐ŸŽถ ใ‹ใฃใ“ #T35*0 ใ€Œ ใ‹ใฃใ“ #T35*0 ใ€ ใ‹ใฃใ“ #T35*0 ใ€Ž ใ‹ใฃใ“ #T35*0 ใ€ ใ‹ใฃใ“ #T35*0 ใ€ˆ ใ‹ใฃใ“ #T35*0 ใ€‰ ใ‹ใฃใ“ #T35*0 ใ€Š ใ‹ใฃใ“ #T35*0 ใ€‹ ใ‹ใฃใ“ #T35*0 ใ€” ใ‹ใฃใ“ #T35*0 ใ€• ใ‹ใฃใ“ #T35*0 ๏ผป ใ‹ใฃใ“ #T35*0 ๏ผฝ ใ‹ใฃใ“ #T35*0 ใ€ ใ‹ใฃใ“ #T35*0 ใ€‘ ใ‹ใฃใ“ #T35*0 ๏ผˆ ใ‹ใฃใ“ #T35*0 ๏ผ‰ ใ‹ใฃใ“ #T35*0 ๏ฝ› ใ‹ใฃใ“ #T35*0 ๏ฝ ใ‹ใฃใ“ #T35*0 โ€˜ ใ‹ใฃใ“ #T35*0 โ€™ ใ‹ใฃใ“ #T35*0 โ€œ ใ‹ใฃใ“ #T35*0 โ€ ใ‹ใฃใ“ #T35*0 ใ€ ใ‹ใฃใ“ #T35*0 ใ€Ÿ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ด ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ต ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ถ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ท ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ธ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘น ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘บ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ป ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ผ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ‘ฝ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ’‚ ใ‹ใฃใ“ใ™ใ†ใ˜ #T35*0 โ’‡ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’œ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ž ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’Ÿ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’  ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ก ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ข ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฃ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ค ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฅ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฆ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ง ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’จ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฉ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ช ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ซ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฌ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ญ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฎ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฏ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฐ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฑ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ฒ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ณ ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ด ใ‹ใฃใ“ใ‚ใƒผใพใ˜ #T35*0 โ’ต ใ‹ใซใ– #T35*0 โ™‹ ใ‹ใถใ—ใใŒใ„ใ—ใ‚ƒ #T35*0 ใฟ ใ‹ใถใ—ใใŒใ„ใ—ใ‚ƒ #T35*0 ใˆฑ ใ‹ใถใ—ใใŒใ„ใ—ใ‚ƒ #T35*0 ใ ใใ”ใ† #T35*0 ยฉ ใใ”ใ† #T35*0 ยฎ ใใ”ใ† #T35*0 โ„— ใใ”ใ† #T35*0 โ„  ใใ”ใ† #T35*0 โ„ข ใใ”ใ† #T35*0 โˆ ใใ”ใ† #T35*0 โ‰ ใใ”ใ† #T35*0 โ‡ ใใ”ใ† #T35*0 โ€ผ ใใ‚…ใ†ใ‹ใช #T35*0 ใ‚ ใใ‚…ใ†ใ‹ใช #T35*0 ใƒฐ ใใ‚…ใ†ใ‹ใช #T35*0 ใƒธ ใใ‚…ใ†ใ‹ใช #T35*0 ใ‚‘ ใใ‚…ใ†ใ‹ใช #T35*0 ใƒฑ ใใ‚…ใ†ใ‹ใช #T35*0 ใƒน ใใ‚…ใ†ใ‹ใช #T35*0 ใƒบ ใใ‚…ใ†ใ‹ใช #T35*0 ใ‚” ใใ‚…ใ†ใ‹ใช #T35*0 ใƒท ใใ‚…ใ†ใ‹ใช #T35*0 ใƒด ใใ‚ #T35*0 ใŽž ใใ‚ #T35*0 ใŽ ใใ‚ #T35*0 ใŽ… ใใ‚ #T35*0 ใŒ” ใใ‚ #T35*0 ใŒ– ใใ‚ #T35*0 ใŒ• ใใ‚ใใ‚‰ใ‚€ #T35*0 ใŽ ใใ‚ใใ‚‰ใ‚€ #T35*0 ใŒ• ใใฎใ˜ #T35*0 ใ€ณ ใใฎใ˜ #T35*0 ใ€ต ใใฎใ˜ #T35*0 ใ€ด ใใ‚‰ใ‚€ #T35*0 ๏ฝ‡ ใใ‚‰ใ‚€ #T35*0 ใŒ˜ ใ‘ใ„ใ‘ใ„ #T35*0 ใ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”€ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”‚ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”Œ ใ‘ใ„ใ›ใ‚“ #T35*0 โ” ใ‘ใ„ใ›ใ‚“ #T35*0 โ”˜ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”” ใ‘ใ„ใ›ใ‚“ #T35*0 โ”œ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ฌ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ค ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ด ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ผ ใ‘ใ„ใ›ใ‚“ #T35*0 โ” ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ƒ ใ‘ใ„ใ›ใ‚“ #T35*0 โ” ใ‘ใ„ใ›ใ‚“ #T35*0 โ”“ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”› ใ‘ใ„ใ›ใ‚“ #T35*0 โ”— ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ฃ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ณ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ซ ใ‘ใ„ใ›ใ‚“ #T35*0 โ”ป ใ‘ใ„ใ›ใ‚“ #T35*0 โ•‹ ใ‘ใ„ใ›ใ‚“ #T35*0 ๏ฟฃ ใ‘ใ„ใ›ใ‚“ #T35*0 ๏ธณ ใ‘ใ„ใ›ใ‚“ #T35*0 ใƒผ ใ‘ใ„ใ›ใ‚“ #T35*0 ๏ธฑ ใ“ใจ #T35*0 ใƒฟ ใ“ใดใƒผใ‚‰ใ„ใจ #T35*0 ยฉ ใ“ใดใƒผใ‚‰ใ„ใจ #T35*0 โ„— ใ“ใ‚ #T35*0 โ€ป ใ•ใใ‚Šใ– #T35*0 โ™ ใ•ใ‚“ใ‹ใ #T35*0 โ–ฒ ใ•ใ‚“ใ‹ใ #T35*0 โ–ณ ใ•ใ‚“ใ‹ใ #T35*0 โ–ผ ใ•ใ‚“ใ‹ใ #T35*0 โ–ฝ ใ•ใƒผใณใ™ใพใƒผใ #T35*0 โ„  ใ—ใ‹ใ #T35*0 โ–ก ใ—ใ‹ใ #T35*0 โ–  ใ—ใ‹ใ #T35*0 โ—‡ ใ—ใ‹ใ #T35*0 โ—† ใ—ใ—ใ– #T35*0 โ™Œ ใ—ใ‚ƒใƒผใท #T35*0 โ™ฏ ใ—ใ‚‡ใ†ใฒใ‚‡ใ† #T35*0 ยฉ ใ—ใ‚‡ใ†ใฒใ‚‡ใ† #T35*0 โ„— ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 โ„– ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 โ„ก ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใฟ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŒ€ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŒž ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŒช ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŒฑ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใ‡ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฐ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆช ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆซ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฌ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆญ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฎ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฏ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใ‰€ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆท ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใ‰‚ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใ‰ƒ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆน ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆบ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฑ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆพ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆด ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฒ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆป ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆถ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆณ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆต ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆผ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฝ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆฟ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใˆธ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠค ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠฅ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠฆ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠง ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠจ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠฉ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠ– ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠ˜ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠž ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ใŠ™ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ๏ผ  ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ยฉ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 ยฎ ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 โ„— ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 โ„  ใ—ใ‚‡ใ†ใ‚Šใ‚ƒใใ‚‚ใ˜ #T35*0 โ„ข ใ—ใ‚‡ใ†ใ‚ #T35*0 ใผ ใ˜ใ™ #T35*0 ใ€„ ใ™ใ†ใŒใ #T35*0 ๏ผ‹ ใ™ใ†ใŒใ #T35*0 โˆ’ ใ™ใ†ใŒใ #T35*0 ยฑ ใ™ใ†ใŒใ #T35*0 X ใ™ใ†ใŒใ #T35*0 รท ใ™ใ†ใŒใ #T35*0 * ใ™ใ†ใŒใ #T35*0 ๏ผ ใ™ใ†ใŒใ #T35*0 โ‰  ใ™ใ†ใŒใ #T35*0 โ‰’ ใ™ใ†ใŒใ #T35*0 โ‰ก ใ™ใ†ใŒใ #T35*0 ๏ผœ ใ™ใ†ใŒใ #T35*0 ๏ผž ใ™ใ†ใŒใ #T35*0 โ‰ฆ ใ™ใ†ใŒใ #T35*0 โ‰ง ใ™ใ†ใŒใ #T35*0 โ‰ช ใ™ใ†ใŒใ #T35*0 โ‰ซ ใ™ใ†ใŒใ #T35*0 โˆž ใ™ใ†ใŒใ #T35*0 โˆฝ ใ™ใ†ใŒใ #T35*0 โˆ ใ™ใ†ใŒใ #T35*0 โˆด ใ™ใ†ใŒใ #T35*0 โˆต ใ™ใ†ใŒใ #T35*0 โˆˆ ใ™ใ†ใŒใ #T35*0 โˆ‹ ใ™ใ†ใŒใ #T35*0 โІ ใ™ใ†ใŒใ #T35*0 โЇ ใ™ใ†ใŒใ #T35*0 โŠ‚ ใ™ใ†ใŒใ #T35*0 โŠƒ ใ™ใ†ใŒใ #T35*0 โˆช ใ™ใ†ใŒใ #T35*0 โˆฉ ใ™ใ†ใŒใ #T35*0 โˆง ใ™ใ†ใŒใ #T35*0 โˆจ ใ™ใ†ใŒใ #T35*0 ยฌ ใ™ใ†ใŒใ #T35*0 โ‡’ ใ™ใ†ใŒใ #T35*0 โ‡” ใ™ใ†ใŒใ #T35*0 โˆ€ ใ™ใ†ใŒใ #T35*0 โˆƒ ใ™ใ†ใŒใ #T35*0 โˆ  ใ™ใ†ใŒใ #T35*0 โŠฅ ใ™ใ†ใŒใ #T35*0 โŒ’ ใ™ใ†ใŒใ #T35*0 โˆ‚ ใ™ใ†ใŒใ #T35*0 โˆ‡ ใ™ใ†ใŒใ #T35*0 โˆš ใ™ใ†ใŒใ #T35*0 โˆซ ใ™ใ†ใŒใ #T35*0 โˆฌ ใ™ใ†ใŒใ #T35*0 โˆฎ ใ™ใ†ใŒใ #T35*0 โˆŸ ใ™ใ†ใŒใ #T35*0 โŠฟ ใ›ใ„ใ– #T35*0 โ™ˆ ใ›ใ„ใ– #T35*0 โ™‰ ใ›ใ„ใ– #T35*0 โ™Š ใ›ใ„ใ– #T35*0 โ™‹ ใ›ใ„ใ– #T35*0 โ™Œ ใ›ใ„ใ– #T35*0 โ™ ใ›ใ„ใ– #T35*0 โ™Ž ใ›ใ„ใ– #T35*0 โ™ ใ›ใ„ใ– #T35*0 โ™ ใ›ใ„ใ– #T35*0 โ™‘ ใ›ใ„ใ– #T35*0 โ™’ ใ›ใ„ใ– #T35*0 โ™“ ใ›ใใ—ใ‚‡ใ‚“ #T35*0 ยง ใ›ใ‚“ใก #T35*0 ใŽ ใ›ใ‚“ใก #T35*0 ใŒข ใ›ใ‚“ใจ #T35*0 ยข ใ›ใ‚“ใจ #T35*0 ใŒฃ ใŸใ„ใ—ใ‚‡ใ† #T35*0 ใฝ ใŸใฆใ‹ใช #T35*0 ใ ใŸใฆใ‹ใช #T35*0 ใƒ ใŸใฆใ‹ใช #T35*0 ใ… ใŸใฆใ‹ใช #T35*0 ใ‡ ใŸใฆใ‹ใช #T35*0 ใ‰ ใŸใฆใ‹ใช #T35*0 ใฃ ใŸใฆใ‹ใช #T35*0 ใ‚ƒ ใŸใฆใ‹ใช #T35*0 ใ‚… ใŸใฆใ‹ใช #T35*0 ใ‚‡ ใŸใฆใ‹ใช #T35*0 ใ‚Ž ใŸใฆใ‹ใช #T35*0 ใ‚ก ใŸใฆใ‹ใช #T35*0 ใ‚ฃ ใŸใฆใ‹ใช #T35*0 ใ‚ฅ ใŸใฆใ‹ใช #T35*0 ใ‚ง ใŸใฆใ‹ใช #T35*0 ใ‚ฉ ใŸใฆใ‹ใช #T35*0 ใƒƒ ใŸใฆใ‹ใช #T35*0 ใƒฃ ใŸใฆใ‹ใช #T35*0 ใƒฅ ใŸใฆใ‹ใช #T35*0 ใƒง ใŸใฆใ‹ใช #T35*0 ใƒฎ ใŸใฆใ‹ใช #T35*0 ใƒต ใŸใฆใ‹ใช #T35*0 ใƒถ ใŸใฆใใ”ใ† #T35*0 โ€ ใŸใฆใใ”ใ† #T35*0 ใ€œ ใŸใฆใใ”ใ† #T35*0 โ€– ใŸใฆใใ”ใ† #T35*0 ๏ฝœ ใŸใฆใใ”ใ† #T35*0 ๏ธฐ ใŸใฆใใ”ใ† #T35*0 ๏ธต ใŸใฆใใ”ใ† #T35*0 ๏ธถ ใŸใฆใใ”ใ† #T35*0 ๏ธน ใŸใฆใใ”ใ† #T35*0 ๏ธบ ใŸใฆใใ”ใ† #T35*0 ๏ผป ใŸใฆใใ”ใ† #T35*0 ๏ผฝ ใŸใฆใใ”ใ† #T35*0 ๏ธท ใŸใฆใใ”ใ† #T35*0 ๏ธธ ใŸใฆใใ”ใ† #T35*0 ๏ธฟ ใŸใฆใใ”ใ† #T35*0 ๏น€ ใŸใฆใใ”ใ† #T35*0 ๏ธฝ ใŸใฆใใ”ใ† #T35*0 ๏ธพ ใŸใฆใใ”ใ† #T35*0 ๏น ใŸใฆใใ”ใ† #T35*0 ๏น‚ ใŸใฆใใ”ใ† #T35*0 ๏นƒ ใŸใฆใใ”ใ† #T35*0 ๏น„ ใŸใฆใใ”ใ† #T35*0 ๏ธป ใŸใฆใใ”ใ† #T35*0 ๏ธผ ใŸใฆใใ”ใ† #T35*0 ๏ผ ใŸใฆใผใ† #T35*0 โ€– ใŸใฆใผใ† #T35*0 ๏ฝœ ใŸใฆใผใ† #T35*0 ๏ผผ ใŸใฆใผใ† #T35*0 ๏ผ ใŸใ‚“ใ„ #T35*0 ๏ฟฅ ใŸใ‚“ใ„ #T35*0 ๏ผ„ ใŸใ‚“ใ„ #T35*0 ยข ใŸใ‚“ใ„ #T35*0 ยฃ ใŸใ‚“ใ„ #T35*0 ๏ผ… ใŸใ‚“ใ„ #T35*0 โ€ฐ ใŸใ‚“ใ„ #T35*0 ใŽœ ใŸใ‚“ใ„ #T35*0 ใŽŸ ใŸใ‚“ใ„ #T35*0 ใŽ ใŸใ‚“ใ„ #T35*0 ใŽ  ใŸใ‚“ใ„ #T35*0 ใŽค ใŸใ‚“ใ„ #T35*0 ๏ฝ ใŸใ‚“ใ„ #T35*0 ใŽก ใŸใ‚“ใ„ #T35*0 ใŽฅ ใŸใ‚“ใ„ #T35*0 ใŽž ใŸใ‚“ใ„ #T35*0 ใŽข ใŸใ‚“ใ„ #T35*0 ใŽŽ ใŸใ‚“ใ„ #T35*0 ๏ฝ‡ ใŸใ‚“ใ„ #T35*0 ใŽ ใŸใ‚“ใ„ #T35*0 ใ„ ใŸใ‚“ใ„ #T35*0 ใŽ– ใŸใ‚“ใ„ #T35*0 ใŽ— ใŸใ‚“ใ„ #T35*0 โ„“ ใŸใ‚“ใ„ #T35*0 ใŽ˜ ใŸใ‚“ใ„ #T35*0 ใŽณ ใŸใ‚“ใ„ #T35*0 ใŽฒ ใŸใ‚“ใ„ #T35*0 ใŽฑ ใŸใ‚“ใ„ #T35*0 ใŽฐ ใŸใ‚“ใ„ #T35*0 โ„ƒ ใŸใ‚“ใ„ #T35*0 โ„‰ ใŸใ‚“ใ„ #T35*0 ใ” ใŸใ‚“ใ„ #T35*0 ใ‹ ใŸใ‚“ใ„ #T35*0 ใސ ใŸใ‚“ใ„ #T35*0 ใŽ… ใŸใ‚“ใ„ #T35*0 ใކ ใŸใ‚“ใ„ #T35*0 ใއ ใŸใ‚“ใ„ #T35*0 TB ใŸใ‚“ใ„ #T35*0 ใ‰ ใŸใ‚“ใ„ #T35*0 ใŒข ใŸใ‚“ใ„ #T35*0 ใ ใŸใ‚“ใ„ #T35*0 ใŒ” ใŸใ‚“ใ„ #T35*0 ใŒ– ใŸใ‚“ใ„ #T35*0 ใŒ… ใŸใ‚“ใ„ #T35*0 ใŒณ ใŸใ‚“ใ„ #T35*0 ใŽ ใŸใ‚“ใ„ #T35*0 ใŒƒ ใŸใ‚“ใ„ #T35*0 ใŒถ ใŸใ‚“ใ„ #T35*0 ใŒ˜ ใŸใ‚“ใ„ #T35*0 ใŒ• ใŸใ‚“ใ„ #T35*0 ใŒง ใŸใ‚“ใ„ #T35*0 ใ‘ ใŸใ‚“ใ„ #T35*0 ใŠ ใŸใ‚“ใ„ #T35*0 ใŒน ใŸใ‚“ใ„ #T35*0 ใ— ใŸใ‚“ใ„ #T35*0 ใŒ ใŸใ‚“ใ„ #T35*0 ใ‚ ใŸใ‚“ใ„ #T35*0 ใŒฃ ใŸใ‚“ใ„ #T35*0 ใŒฆ ใŸใ‚“ใ„ #T35*0 ใŒป ใŸใ‚“ใ„ #T35*0 ใŒซ ใ ใใฆใ‚“ #T35*0 ใ‚™ ใกใ‡ใฃใใผใŸใ‚“ #T35*0 โ˜ ใกใ‡ใฃใใผใŸใ‚“ #T35*0 โ˜‘ ใกใ‡ใฃใใผใŸใ‚“ #T35*0 โ˜’ ใกใ‡ใฃใใผใฃใใ™ #T35*0 โ˜ ใกใ‡ใฃใใผใฃใใ™ #T35*0 โ˜‘ ใกใ‡ใฃใใผใฃใใ™ #T35*0 โ˜’ ใฆใ‚“ #T35*0 ใ€ ใฆใ‚“ #T35*0 ใ€‚ ใฆใ‚“ #T35*0 ๏ผŒ ใฆใ‚“ #T35*0 ๏ผŽ ใฆใ‚“ #T35*0 ใƒป ใฆใ‚“ #T35*0 ๏ผš ใฆใ‚“ #T35*0 ๏ผ› ใฆใ‚“ #T35*0 ๏ผŸ ใฆใ‚“ #T35*0 ๏ผ ใฆใ‚“ #T35*0 โ€ฆ ใฆใ‚“ #T35*0 โ€ฅ ใฆใ‚“ #T35*0 ใ‚› ใฆใ‚“ #T35*0 ใ‚œ ใฆใ‚“ #T35*0 ยด ใฆใ‚“ #T35*0 ๏ฝ€ ใฆใ‚“ #T35*0 ยจ ใฆใ‚“ #T35*0 ๏ผพ ใฆใ‚“ #T35*0 ยฐ ใฆใ‚“ #T35*0 โ€ฒ ใฆใ‚“ #T35*0 โ€ณ ใฆใ‚“ #T35*0 ใƒฝ ใฆใ‚“ #T35*0 ใƒพ ใฆใ‚“ #T35*0 ใ‚ ใฆใ‚“ #T35*0 ใ‚ž ใฆใ‚“ #T35*0 ใ€ƒ ใฆใ‚“ #T35*0 ใ€Ÿ ใฆใ‚“ #T35*0 ใ€ป ใฆใ‚“ #T35*0 ใ€ณ ใฆใ‚“ #T35*0 ใ€ต ใฆใ‚“ #T35*0 ใ€ด ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’ˆ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’‰ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’Š ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’‹ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’Œ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’Ž ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’ ใฆใ‚“ใ™ใ†ใ˜ #T35*0 โ’ ใฆใ‚“ใณใ‚“ใ– #T35*0 โ™Ž ใงใ‚“ใ‚ #T35*0 โ„ก ใงใ‚“ใ‚ #T35*0 โ˜Ž ใจใ‚‰ใ‚“ใท #T35*0 โ™ค ใจใ‚‰ใ‚“ใท #T35*0 โ™ง ใจใ‚‰ใ‚“ใท #T35*0 โ™ก ใจใ‚‰ใ‚“ใท #T35*0 โ™ข ใจใ‚‰ใ‚“ใท #T35*0 โ™  ใจใ‚‰ใ‚“ใท #T35*0 โ™ฃ ใจใ‚‰ใ‚“ใท #T35*0 โ™ฅ ใจใ‚‰ใ‚“ใท #T35*0 โ™ฆ ใจใ‚Œใƒผใฉใพใƒผใ #T35*0 โ„ข ใจใ‚“ #T35*0 ใŒง ใฉ #T35*0 โ„ƒ ใฉ #T35*0 ยฐ ใฉ #T35*0 โ„‰ ใฉใ†ใฎใ˜ #T35*0 ใ€… ใฉใ‚‹ #T35*0 ๏ผ„ ใฉใ‚‹ #T35*0 ใŒฆ ใชใœใชใ‚‰ #T35*0 โˆต ใชใ‚“ใฐใƒผ #T35*0 ๏ผฎ๏ฝ ใญใ‚“ใ”ใ† #T35*0 ใพ ใญใ‚“ใ”ใ† #T35*0 ใฝ ใญใ‚“ใ”ใ† #T35*0 ใผ ใญใ‚“ใ”ใ† #T35*0 ใป ใฎใฎใ˜ #T35*0 ใ€ƒ ใฏใ‚“ใ ใใฆใ‚“ #T35*0 ใ‚š ใฑใƒผใ›ใ‚“ใจ #T35*0 ใŒซ ใฑใƒผใ›ใ‚“ใจ #T35*0 ๏ผ… ใฑใƒผใฟใ‚‹ #T35*0 โ€ฐ ใณใ ใใŠใ‚“ #T35*0 ใ‚š ใณใ ใใŠใ‚“ #T35*0 ใ‚œ ใณใ ใใŠใ‚“ #T35*0 ล‹ ใณใ ใใŠใ‚“ #T35*0 gฬƒ ใตใŸใ”ใ– #T35*0 โ™Š ใตใ‚‰ใฃใจ #T35*0 โ™ญ ใธใ„ใ›ใ„ #T35*0 ใป ใธใ„ใปใ†ใใ‚ #T35*0 ใŽข ใธใ„ใปใ†ใ›ใ‚“ใก #T35*0 ใŽ  ใธใ„ใปใ†ใฟใ‚Š #T35*0 ใŽŸ ใธใ„ใปใ†ใ‚ใƒผใจใ‚‹ #T35*0 ใŽก ใปใ— #T35*0 โ˜… ใปใ— #T35*0 โ˜† ใปใ— #T35*0 โ€ป ใผใŸใ‚“ #T35*0 โ˜ ใผใŸใ‚“ #T35*0 โ˜‘ ใผใŸใ‚“ #T35*0 โ˜’ ใฝใ‚“ใฉ #T35*0 ยฃ ใพใ‚‹ #T35*0 โ—ฏ ใพใ‚‹ #T35*0 โ— ใพใ‚‹ #T35*0 โ—Ž ใพใ‚‹ #T35*0 ใ€‡ ใพใ‚‹ #T35*0 โ—‹ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘  ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ก ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ข ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฃ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ค ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฅ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฆ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ง ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘จ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฉ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ช ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ซ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฌ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ญ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฎ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฏ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฐ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฑ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ฒ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โ‘ณ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โถ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โท ใพใ‚‹ใ‚‚ใ˜ #T35*0 โธ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โน ใพใ‚‹ใ‚‚ใ˜ #T35*0 โบ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โป ใพใ‚‹ใ‚‚ใ˜ #T35*0 โผ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โฝ ใพใ‚‹ใ‚‚ใ˜ #T35*0 โพ ใฟใŽใ•ใ‚“ใ‹ใ #T35*0 โŠฟ ใฟใšใŒใ‚ใ– #T35*0 โ™’ ใฟใ‚Š #T35*0 ใŽœ ใฟใ‚Š #T35*0 ใ‰ ใฟใ‚Šใใ‚‰ใ‚€ #T35*0 ใŽŽ ใ‚ใ„ใ˜ #T35*0 ใพ ใ‚ใƒผใจใ‚‹ #T35*0 m ใ‚ใƒผใจใ‚‹ #T35*0 ใ ใ‚„ใŽใ– #T35*0 โ™‘ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ†’ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ† ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ†‘ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ†“ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡’ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡” ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ˜ž ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ˜œ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ˜ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ˜Ÿ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡† ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡„ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡… ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡จ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡ฆ ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡ง ใ‚„ใ˜ใ‚‹ใ— #T35*0 โ‡ฉ ใ‚†ใ†ใณใ‚“ #T35*0 ใ€’ ใ‚†ใ†ใณใ‚“ #T35*0 ใ€  ใ‚†ใˆใซ #T35*0 โˆด ใ‚ˆใ“ใผใ† #T35*0 โ€ ใ‚ˆใ“ใผใ† #T35*0 ใ€“ ใ‚ˆใ“ใผใ† #T35*0 ๏ฟฃ ใ‚ˆใ“ใผใ† #T35*0 ๏ผฟ ใ‚ˆใ“ใผใ† #T35*0 ใ€œ ใ‚ˆใ“ใผใ† #T35*0 โ€” ใ‚ˆใ‚Š #T35*0 ใ‚Ÿ ใ‚Šใฃใฝใ†ใ›ใ‚“ใก #T35*0 ใŽค ใ‚Šใฃใฝใ†ใ‚ใƒผใจใ‚‹ #T35*0 ใŽฅ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…  ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ก ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ข ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฃ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ค ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฅ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฆ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ง ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…จ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฉ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ช ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ซ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 XIII ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 XIV ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 XV ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฐ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฑ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ฒ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ณ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ด ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ต ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ถ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ท ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ธ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…น ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…บ ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 โ…ป ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 xiii ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 xiv ใ‚ใƒผใพใ™ใ†ใ˜ #T35*0 xv ibus-anthy-1.5.11/data/zipcode-textdic.py000077500000000000000000000036641346647371500203000ustar00rootroot00000000000000#!/usr/bin/python # Finally decided to import anthy zipcode.t with UTF-8 into ibus-anthy # because if digits without hyphen is grepped by engine, it could cause # the timeout issue. If digits without hyphen are sent to anthy, # digits with hyphen also need to be sent to anthy so the lookup could # include too many and unnecessary candidates. # Also wish to install the filename of 'zipcode.t' to simplify enigne. # for python2 from __future__ import print_function import codecs import sys if len(sys.argv) < 2: print('usage: %s /usr/share/anthy/zipcode.t' % sys.argv[0], file=sys.stderr) exit(-1) anthy_zipfile = sys.argv[1] try: contents = codecs.open(anthy_zipfile, 'r', 'euc_jp').read() except UnicodeDecodeError as e: print('Your file is not eucJP? %s' % anthy_zipfile, file=sys.stderr) contents = open(anthy_zipfile).read() output_zipfile = codecs.open('zipcode.t', 'w', 'utf-8') output_zipfile.write('# copied %s with UTF-8.\n#\n' % anthy_zipfile) for line in contents.split('\n'): if len(line) == 0 or line[0] == '#': output_zipfile.write('%s\n' % line) continue words = line.split() if len(words) < 3: continue if len(words[0]) < 1 or ord(words[0][0]) > 0xff: mbcs_addr = words[0] else: uni_addr = '' i = 0 for word in words[0]: # Convert ASCII number char to wide number char. if sys.version < '3': uni_addr += unichr(0xfee0 + ord(word)) else: uni_addr += chr(0xfee0 + ord(word)) if i == 2: # Insert wide hyphen if sys.version < '3': uni_addr += unichr(0x30fc) else: uni_addr += chr(0x30fc) i += 1 mbcs_addr = uni_addr output_zipfile.write('%s %s %s\n' % \ (mbcs_addr, '#T35*500', words[2])) output_zipfile.flush() output_zipfile.close() ibus-anthy-1.5.11/debian/000077500000000000000000000000001346647371500151245ustar00rootroot00000000000000ibus-anthy-1.5.11/debian/changelog000066400000000000000000000101641346647371500170000ustar00rootroot00000000000000ibus-anthy (1.2.5-1ppa1~maverick2) maverick; urgency=low * New upstream release. * debian/control: - bump standards version to 3.9.1. - add kasumi dependency. * debian/rules: - add --with-anthy-zipcode. -- Takao Fujiwara Thu, 16 Dec 2010 21:50:16 +0900 ibus-anthy (1.2.1-1) unstable; urgency=low * New upstream release. - debian/patches/broken-link: removed. - debian/patches/zipcode-t-dir: removed. * debian/control: - set maintainer to IME team, add me to uploaders. - update Vcs-* fields. -- LI Daobing Thu, 29 Apr 2010 20:21:17 +0800 ibus-anthy (1.2.0.20100313-2) unstable; urgency=low * debian/source/format: 3.0. * Fix "ibus-anthy fails to start with "File exist" error" (Closes: #575540) - debian/patches/broken-link: also remove broken link in ~/.anthy - debian/patches/zipcode-t-dir: change the dir of zipcode.t -- LI Daobing Sat, 10 Apr 2010 18:39:23 +0800 ibus-anthy (1.2.0.20100313-1) unstable; urgency=low * New upstream release. * debian/control: bump standards version to 3.8.4. -- LI Daobing Sun, 21 Mar 2010 18:36:23 +0800 ibus-anthy (1.2.0.20100115-1) unstable; urgency=low * New upstream release. - fix convert_to_half do same as convert_to_half_katakana (LP: #475031) -- LI Daobing Sun, 24 Jan 2010 16:17:50 +0800 ibus-anthy (1.2.0.20091127-1) unstable; urgency=low * New upstream release. -- LI Daobing Sat, 28 Nov 2009 14:15:30 +0800 ibus-anthy (1.2.0.20090917-1) unstable; urgency=low * new upstream release. -- LI Daobing Thu, 17 Sep 2009 19:37:06 +0800 ibus-anthy (1.2.0.20090907-1) unstable; urgency=low * new upstream release. * debian/rules: update clean rule. -- LI Daobing Mon, 14 Sep 2009 21:23:56 +0800 ibus-anthy (1.2.0.20090813-2) unstable; urgency=low [ Loรฏc Minier ] * Drop useless CROSS logic in rules; build uses dh_auto_configure. * Drop /usr/share/misc/config.{sub,.guess} conditionals since these are always present (thanks to autotools-dev bdep). * Drop bogus ibus-anthy.lintian-overrides since the binary truly lacks a manpage. * Pass -s to dh_* in binary-arch. * Drop non-existent clean0 from .PHONY. * Cleanup rules droppping boilerplate comments and superfluous whitespace. * Add XS-Python-Version/XB-Python-Version: fields. * Version the python-dev bdep to >= 2.5. * Drop useless autoconf, automake, and libtool bdeps. * Update pot file during build; bdep on intltool. [ LI Daobing ] * debian/control: bump standards version to 3.8.3. -- LI Daobing Tue, 25 Aug 2009 19:19:26 +0800 ibus-anthy (1.2.0.20090813-1) unstable; urgency=low * new upstream release. * debian/control: change vcs url. -- LI Daobing Thu, 13 Aug 2009 21:48:20 +0800 ibus-anthy (1.2.0.20090804-1) unstable; urgency=low * new upstream release. -- LI Daobing Wed, 05 Aug 2009 20:31:23 +0800 ibus-anthy (1.2.0.20090617-1) unstable; urgency=low * new upstream release. * debian/control: - depends on ibus >= 1.2 - bump standards version to 3.8.2 -- LI Daobing Sat, 20 Jun 2009 23:15:11 +0800 ibus-anthy (1.1.0.20090603-1) unstable; urgency=low * new upstream release. -- LI Daobing Sat, 06 Jun 2009 16:58:31 +0800 ibus-anthy (1.1.0.20090402-1) unstable; urgency=low * initial release to Debian (closes: #521627) * new upstream release. * debian/debian/patches/01_rpath.dpatch: merged by upstream, removed. * no patch is needed. remove dpatch from debian/* * debian/control: - bump standards version to 3.8.1. - change maintainer's email. - add ${python:Depends} to depends. -- LI Daobing Thu, 23 Apr 2009 19:47:11 +0800 ibus-anthy (0.1.1.20080912-0ubuntu1) jaunty; urgency=low * Initial release (LP: #312715) * debian/patches/01_rpath.dpatch: remove rpath in Makefile.am -- LI Daobing Fri, 13 Feb 2009 20:41:26 +0800 ibus-anthy-1.5.11/debian/compat000066400000000000000000000000021346647371500163220ustar00rootroot000000000000007 ibus-anthy-1.5.11/debian/control000066400000000000000000000017341346647371500165340ustar00rootroot00000000000000Source: ibus-anthy Section: utils Priority: optional Maintainer: IME Packaging Team Uploaders: LI Daobing Build-Depends: debhelper (>= 7), autotools-dev, swig, python-dev (>= 2.5), pkg-config, libanthy-dev, python-support, intltool Standards-Version: 3.9.1 Homepage: http://code.google.com/p/ibus XS-Python-Version: >= 2.5 Vcs-Bzr: lp:~pkg-ime/ibus/debian-ibus-anthy Vcs-Browser: https://code.launchpad.net/~pkg-ime/ibus/debian-ibus-anthy Package: ibus-anthy Architecture: any Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}, ibus (>= 1.2), anthy, kasumi XB-Python-Version: ${python:Versions} Description: anthy engine for IBus IBus is an Intelligent Input Bus. It is a new input framework for Linux OS. It provides full featured and user friendly input method user interface. It also may help developers to develop input method easily. . IBus-Anthy is an input method (IM) for Japanese, based on IBus. ibus-anthy-1.5.11/debian/copyright000066400000000000000000000024221346647371500170570ustar00rootroot00000000000000This package was debianized by: LI Daobing on Sun, 28 Dec 2008 20:30:06 +0800 It was downloaded from: http://code.google.com/p/ibus/downloads/list Upstream Author: Huang Peng Copyright: Copyright (C) 2007-2008 Huang Peng License: This package 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 package 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 package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. The Debian packaging is: Copyright (C) 2008, LI Daobing and is licensed under the GPL, see above. ibus-anthy-1.5.11/debian/rules000077500000000000000000000017731346647371500162140ustar00rootroot00000000000000#!/usr/bin/make -f config.status: dh_testdir cp -f /usr/share/misc/config.sub config.sub cp -f /usr/share/misc/config.guess config.guess dh_auto_configure -- \ --with-anthy-zipcode="/usr/share/anthy/dic/zipcode.t" build: build-stamp build-stamp: config.status dh_testdir cd po; intltool-update --pot touch $@ clean: dh_testdir dh_testroot [ ! -f Makefile ] || $(MAKE) distclean rm -f config.sub config.guess rm -f po/*.gmo dh_clean build-stamp install: build dh_testdir dh_testroot dh_prep dh_installdirs $(MAKE) DESTDIR=$(CURDIR)/debian/ibus-anthy install binary-indep: install binary-arch: install dh_testdir dh_testroot dh_installchangelogs -s dh_installdocs -s AUTHORS README dh_installexamples -s dh_pysupport -s dh_installman -s dh_lintian -s dh_link -s dh_strip -s dh_compress -s dh_fixperms -s dh_installdeb -s dh_shlibdeps -s dh_gencontrol -s dh_md5sums -s dh_builddeb -s binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install ibus-anthy-1.5.11/debian/source/000077500000000000000000000000001346647371500164245ustar00rootroot00000000000000ibus-anthy-1.5.11/debian/source/format000066400000000000000000000000141346647371500176320ustar00rootroot000000000000003.0 (quilt) ibus-anthy-1.5.11/debian/watch000066400000000000000000000001701346647371500161530ustar00rootroot00000000000000version=3 http://code.google.com/p/ibus/downloads/list \ http://ibus.googlecode.com/files/ibus-anthy-([0-9].*)\.tar\.gz ibus-anthy-1.5.11/engine/000077500000000000000000000000001346647371500151475ustar00rootroot00000000000000ibus-anthy-1.5.11/engine/.gitignore000066400000000000000000000000501346647371500171320ustar00rootroot00000000000000anthy.py anthy_wrap.c ibus-engine-anthy ibus-anthy-1.5.11/engine/Makefile.am000066400000000000000000000017121346647371500172040ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2014 Takao Fujiwara # Copyright (c) 2014 Red Hat, Inc. # # 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. SUBDIRS = if ENABLE_PYTHON2 SUBDIRS += python2 endif if ENABLE_PYTHON3 SUBDIRS += python3 endif ibus-anthy-1.5.11/engine/python2/000077500000000000000000000000001346647371500165525ustar00rootroot00000000000000ibus-anthy-1.5.11/engine/python2/Makefile.am000066400000000000000000000075061346647371500206160ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. BUILT_SOURCES = _config.py engine_anthy_PYTHON = \ _config.py \ engine.py \ factory.py \ jastring.py \ kana.py \ main.py \ romaji.py \ segment.py \ tables.py \ thumb.py \ $(NULL) engine_anthydir = $(pkgdatadir)/engine engine_anthy_built_files = $(BUILT_SOURCES) engine_anthy_built_in_files = $(addsuffix .in, $(engine_anthy_built_files)) PYGTK2_ANTHY_RAW = anthy.i PYGTK2_ANTHY_GEN = anthy.py anthy_wrap.c if HAVE_PYGTK2_ANTHY anthy_DATA = \ anthy.py \ $(NULL) anthy_LTLIBRARIES = _anthy.la anthydir = @pyexecdir@ _anthy_la_SOURCES = \ $(NULL) nodist__anthy_la_SOURCES = \ anthy_wrap.c \ $(NULL) _anthy_la_CFLAGS = \ @ANTHY_CFLAGS@ \ @PYTHON_CFLAGS@ \ $(NULL) _anthy_la_LDFLAGS = \ @ANTHY_LIBS@ \ @PYTHON_LIBS@ \ -avoid-version \ -module \ $(NULL) anthy.py anthy_wrap.c: anthy.i $(SWIG) -python $(ANTHY_CFLAGS) -I/usr/include -o anthy_wrap.c $(srcdir)/anthy.i endif libexec_SCRIPTS = ibus-engine-anthy component_DATA = anthy.xml componentdir = $(datadir)/ibus/component engine_DATA = default.xml enginedir = $(pkgdatadir)/engine # $(SYMBOL_XML) cannot be extracted in Makefile but $(libexecdir) can be # extracted to ${exec_prefix}/libexec so use capital @LIBEXECDIR@ here. %.xml: %.inputMethod.xml.in sed -e "s|\@LIBEXECDIR\@|$(libexecdir)|g" \ -e "s|\@PKGDATADIR\@|$(pkgdatadir)|g" \ $< > $@ ibus-engine-anthy: ibus-engine-anthy.in sed -e "s|\@prefix\@|$(prefix)|g" \ -e "s|\@exec_prefix\@|$(exec_prefix)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datarootdir\@|$(datarootdir)|g" \ -e "s|\@PACKAGE\@|$(PACKAGE)|g" \ -e "s|\@PYTHON\@|$(PYTHON)|g" \ -e "s|\@ENV_IBUS_ENGINE\@|$(ENV_IBUS_ENGINE)|g" \ $< > $@ _config.py: _config.py.in sed -e "s|\@pkgdatadir\@|$(pkgdatadir)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datadir\@|$(datadir)|g" \ -e "s|\@ANTHY_PC\@|$(ANTHY_PC)|g" \ -e "s|\@LAYOUT\@|$(LAYOUT)|g" \ -e "s|\@SYMBOL_CHAR_INT\@|$(SYMBOL_CHAR_INT)|g" \ -e "s|\@ICON_PREFERENCE\@|$(ICON_PREFERENCE)|g" \ -e "s|\@VERSION\@|$(VERSION)|g" \ $< > $@ test: $(ENV_IBUS_TEST) \ DBUS_DEBUG=true \ IBUS_ANTHY_PKGDATADIR=$(abs_top_srcdir) \ PYTHONPATH=$(builddir)/.libs:@pyexecdir@ \ $(PYTHON) \ $(srcdir)/main.py EXTRA_DIST = \ $(engine_anthy_built_in_files) \ $(PYGTK2_ANTHY_RAW) \ anthy.inputMethod.xml.in.in \ default.inputMethod.xml.in.in \ ibus-engine-anthy.in \ $(NULL) CLEANFILES = \ $(BUILT_SOURCES) \ $(PYGTK2_ANTHY_GEN) \ anthy.xml \ default.xml \ ibus-engine-anthy \ *.pyc \ $(NULL) DISTCLEANFILES = \ anthy.inputMethod.xml.in \ default.inputMethod.xml.in \ $(NULL) # Need a time lag between .py and .py.in files to build .py files # because *_PYTHON valuables are installed in the tarball. dist-hook: @sleep 1; \ for in_file in $(engine_anthy_built_in_files) ; do \ if [ -f $(distdir)/$(srcdir)/$$in_file ] ; then \ touch $(distdir)/$(srcdir)/$$in_file; \ fi; \ done; ibus-anthy-1.5.11/engine/python2/_config.py.in000066400000000000000000000023011346647371500211310ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. ANTHY_PC= '@ANTHY_PC@' PKGDATADIR = '@pkgdatadir@' LIBEXECDIR = '@libexecdir@' LOCALEDIR = '@datadir@/locale' LAYOUT = '@LAYOUT@' SYMBOL_CHAR = unichr(@SYMBOL_CHAR_INT@) ICON_PREFERENCE = '@ICON_PREFERENCE@' VERSION = '@VERSION@' DEBUG = False ibus-anthy-1.5.11/engine/python2/anthy.i000066400000000000000000000062051346647371500200520ustar00rootroot00000000000000/* vim:set et ts=4: */ /* * ibus-anthy - The Anthy engine for IBus * * Copyright (c) 2007-2008 Peng Huang * Copyright (c) 2010-2013 Takao Fujiwara * Copyright (c) 2007-2013 Red Hat, Inc. * * 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. */ %module anthy %{ /* Put header files here or function declarations like below */ #include %} %init %{ anthy_init (); %} /* anthy_context_t */ %include anthy/anthy.h struct anthy_context {}; %extend anthy_context { anthy_context () { return anthy_create_context (); } void reset () { anthy_reset_context (self); } int set_string (char *str) { return anthy_set_string (self, str); } void resize_segment (int a1, int a2) { anthy_resize_segment (self, a1, a2); } int get_stat (struct anthy_conv_stat *a1) { return anthy_get_stat (self, a1); } int get_segment_stat (int a1, struct anthy_segment_stat *a2) { return anthy_get_segment_stat (self, a1, a2); } char *get_segment (int a1, int a2) { int len; static char temp[512]; len = anthy_get_segment (self, a1, a2, temp, sizeof (temp)); if (len >= 0) return temp; else return NULL; } int commit_segment (int a1, int a2) { return anthy_commit_segment (self, a1, a2); } int set_prediction_string (const char *a1) { return anthy_set_prediction_string (self, a1); } int get_prediction_stat (struct anthy_prediction_stat *a1) { return anthy_get_prediction_stat (self, a1); } char *get_prediction (int a1) { int len; static char temp[512]; len = anthy_get_prediction (self, a1, temp, sizeof (temp)); if (len >= 0) return temp; else return NULL; } int commit_prediction (int a1) { return anthy_commit_prediction(self, a1); } void _print () { anthy_print_context (self); } int _set_encoding (int encoding) { return anthy_context_set_encoding (self, encoding); } int set_reconversion_mode (int mode) { return anthy_set_reconversion_mode (self, mode); } int init_personality (void) { return anthy_init_personality (); } int do_set_personality (const char *id) { return anthy_do_set_personality (id); } ~anthy_context () { anthy_release_context (self); } }; ibus-anthy-1.5.11/engine/python2/anthy.inputMethod.xml.in.in000066400000000000000000000012221346647371500237250ustar00rootroot00000000000000 org.freedesktop.IBus.Anthy Anthy Component @LIBEXECDIR@/ibus-engine-anthy --ibus @PACKAGE_VERSION@ Peng Huang <shawn.p.huang@gmail.com> GPL https://github.com/ibus/ibus/wiki ibus-anthy ~/.config/ibus-anthy/engines.xml @PKGDATADIR@/engine/default.xml ibus-anthy-1.5.11/engine/python2/default.inputMethod.xml.in.in000066400000000000000000000010711346647371500242300ustar00rootroot00000000000000 anthy ja GPL Peng Huang <shawn.p.huang@gmail.com> ibus-anthy @LAYOUT_XML@ Anthy Anthy Input Method 99 @HOTKEYS_XML@ @SYMBOL_XML@ @ICON_PROP_KEY_XML@ @PACKAGE_VERSION@ ibus-anthy ibus-anthy-1.5.11/engine/python2/engine.py000066400000000000000000003313431346647371500204000ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2018 Red Hat, Inc. # # 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. import io import os from os import environ, path import signal import sys from gettext import dgettext from main import get_userhome try: from locale import getpreferredencoding except: pass from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') gi_require_version('Anthy', '9000') from gi.repository import GLib from gi.repository import IBus from gi.repository import Anthy NTH_UNCONVERTED_CANDIDATE = Anthy.NTH_UNCONVERTED_CANDIDATE NTH_KATAKANA_CANDIDATE = Anthy.NTH_KATAKANA_CANDIDATE NTH_HIRAGANA_CANDIDATE = Anthy.NTH_HIRAGANA_CANDIDATE NTH_HALFKANA_CANDIDATE = Anthy.NTH_HALFKANA_CANDIDATE import _config as config from tables import * import jastring from segment import unichar_half_to_full sys.path.append(path.join(config.PKGDATADIR, 'setup')) from anthyprefs import AnthyPrefs _ = lambda a : dgettext('ibus-anthy', a) N_ = lambda a : a UN = lambda a : unicode(a, 'utf-8') printerr = AnthyPrefs.printerr ANTHY_CONFIG_PATH = get_userhome() + '/.anthy' if config.ANTHY_PC == 'anthy' \ else GLib.get_user_config_dir() + '/anthy'; INPUT_MODE_HIRAGANA, \ INPUT_MODE_KATAKANA, \ INPUT_MODE_HALF_WIDTH_KATAKANA, \ INPUT_MODE_LATIN, \ INPUT_MODE_WIDE_LATIN = range(5) CONV_MODE_OFF, \ CONV_MODE_ANTHY, \ CONV_MODE_HIRAGANA, \ CONV_MODE_KATAKANA, \ CONV_MODE_HALF_WIDTH_KATAKANA, \ CONV_MODE_LATIN_0, \ CONV_MODE_LATIN_1, \ CONV_MODE_LATIN_2, \ CONV_MODE_LATIN_3, \ CONV_MODE_WIDE_LATIN_0, \ CONV_MODE_WIDE_LATIN_1, \ CONV_MODE_WIDE_LATIN_2, \ CONV_MODE_WIDE_LATIN_3, \ CONV_MODE_PREDICTION = range(14) SEGMENT_DEFAULT = 0 SEGMENT_SINGLE = 1 << 0 SEGMENT_IMMEDIATE = 1 << 1 CLIPBOARD_RECONVERT = range(1) LINK_DICT_EMBEDDED, \ LINK_DICT_SINGLE = range(2) IMPORTED_EMBEDDED_DICT_DIR = 'imported_words_default.d' IMPORTED_EMBEDDED_DICT_PREFIX = 'ibus__' IMPORTED_SINGLE_DICT_PREFIX = 'imported_words_ibus__' KP_Table = {} for s in dir(IBus): if s.startswith('KEY_KP_'): v = IBus.keyval_from_name(s[7:]) if v: KP_Table[IBus.keyval_from_name(s[4:])] = v for k, v in zip(['KEY_KP_Add', 'KEY_KP_Decimal', 'KEY_KP_Divide', 'KEY_KP_Enter', 'KEY_KP_Equal', 'KEY_KP_Multiply', 'KEY_KP_Separator', 'KEY_KP_Space', 'KEY_KP_Subtract'], ['KEY_plus', 'KEY_period', 'KEY_slash', 'KEY_Return', 'KEY_equal', 'KEY_asterisk', 'KEY_comma', 'KEY_space', 'KEY_minus']): KP_Table[getattr(IBus, k)] = getattr(IBus, v) class Engine(IBus.EngineSimple): __input_mode = None __typing_mode = None __segment_mode = None __dict_mode = None __setup_pid = 0 __prefs = None __keybind = {} __thumb = None __latin_with_shift = True def __init__(self, bus, object_path): super(Engine, self).__init__(engine_name="anthy", connection=bus.get_connection(), object_path=object_path) self.add_table_by_locale(None) # create anthy context if not self.__verify_anthy_journal_file(): return Anthy.GContext.set_logger(0); self.__context = Anthy.GContext() self.__context.set_encoding(Anthy.UTF8_ENCODING) # init state self.__idle_id = 0 self.__prop_dict = {} self.__input_purpose = 0 self.__has_input_purpose = False if hasattr(IBus, 'InputPurpose'): self.__has_input_purpose = True try: self.__is_utf8 = (getpreferredencoding().lower() == 'utf-8') except: self.__is_utf8 = False self.__has_update_preedit_text_with_mode = True try: self.__ibus_check_version('1.3') except ValueError as e: printerr('Disable update_preedit_text_with_mode(): %s' % str(e)) self.__has_update_preedit_text_with_mode = False # self.__lookup_table = ibus.LookupTable.new(page_size=9, # cursor_pos=0, # cursor_visible=True, # round=True) size = self.__prefs.get_value('common', 'page-size') self.__lookup_table = IBus.LookupTable.new(page_size=size, cursor_pos=0, cursor_visible=True, round=True) self.__prop_list = self.__init_props() # Do not use self.do_process_key_event to work ISO 14755 # with Ctrl+Shift+u . # The super (parent) method of do_process_key_event is called # loop infinitely if this class overrides it. # self.process_key_event is not accessible too. self.connect('process-key-event', self.__process_key_event) self.connect('destroy', self.__destroy) self.connect('page-down', self.__page_down) self.connect('page-up', self.__page_up) self.connect('candidate-clicked', self.__candidate_clicked) self.__init_signal() # use reset to init values self.__reset() def __ibus_check_version(self, v): major = IBus.MAJOR_VERSION minor = IBus.MINOR_VERSION micro = IBus.MICRO_VERSION if (major, minor, micro) < tuple(map(int, (v.split('.')))): raise ValueError('Required ibus %s but version of ibus is ' \ '%d.%d.%d' % (v, major, minor, micro)) # http://en.sourceforge.jp/ticket/browse.php?group_id=14&tid=33075 def __verify_anthy_journal_file(self): journal = ANTHY_CONFIG_PATH + '/last-record2_default.utf8' try: f = io.open(file=journal, mode='rb') except IOError: return True f.seek(-1, io.SEEK_END) last = f.read(1) f.close() if ord(last) == 0xa: return True from gi.repository import Gtk message= N_("Could not enable Anthy.\n" \ "The end of the content of the file " \ "%s/last-record2_default.utf8 in your home " \ "directory is not '\\n'. I.e. not correct text format.\n" \ "Please fix the file or remove it by manual and " \ "restart IBus.") % ANTHY_CONFIG_PATH printerr(message) dlg = Gtk.MessageDialog(parent=None, flags=Gtk.DialogFlags.MODAL, message_type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, message_format=_(message)) dlg.run() dlg.destroy() return False # reset values of engine def __reset(self): self.__preedit_ja_string = jastring.JaString(Engine.__typing_mode, self.__latin_with_shift) self.__convert_chars = u'' self.__cursor_pos = 0 self.__convert_mode = CONV_MODE_OFF self.__segments = list() self.__lookup_table.clear() self.__lookup_table_visible = False self._MM = 0 self._SS = 0 self._H = 0 self._RMM = 0 self._RSS = 0 if self.__idle_id != 0: GLib.source_remove(self.__idle_id) self.__idle_id = 0 def __init_props(self): anthy_props = IBus.PropList() self.__set_input_mode_props(anthy_props) self.__set_typing_method_props(anthy_props) self.__set_segment_mode_props(anthy_props) self.__set_dict_mode_props(anthy_props) self.__set_dict_config_props(anthy_props) if not self.__prefs.get_value('common', 'show-preferences'): return anthy_props anthy_props.append(IBus.Property(key=u'setup', label=IBus.Text.new_from_string(_("Preferences - Anthy")), icon=config.ICON_PREFERENCE, tooltip=IBus.Text.new_from_string(_("Configure Anthy")), sensitive=True, visible=True)) return anthy_props def __init_signal(self): signal.signal(signal.SIGHUP, self.__signal_cb) signal.signal(signal.SIGINT, self.__signal_cb) signal.signal(signal.SIGQUIT, self.__signal_cb) signal.signal(signal.SIGABRT, self.__signal_cb) signal.signal(signal.SIGTERM, self.__signal_cb) def __signal_cb(self, signum, object): self.__remove_dict_files() signal.signal(signum, signal.SIG_DFL) os.kill(os.getpid(), signum) def __set_input_mode_props(self, anthy_props): # The class method is kept even if the engine is switched. if Engine.__input_mode == None: # The config value is readonly for initial engine and # the engine keeps the class method in the memory. Engine.__input_mode = INPUT_MODE_HIRAGANA Engine.__input_mode = self.__prefs.get_value('common', 'input-mode') if not self.__prefs.get_value('common', 'show-input-mode'): return # init input mode properties symbol = 'ใ‚' ''' Need to split _() by line for intltool to detect them. ''' # Translators: Specify the order of %s with your translation. # It will be "Input Mode (A)" for example. label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Input mode"), 'symbol' : symbol } input_mode_prop = IBus.Property(key=u'InputMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon='', tooltip=IBus.Text.new_from_string(_("Switch input mode")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict[u'InputMode'] = input_mode_prop props = IBus.PropList() props.append(IBus.Property(key=u'InputMode.Hiragana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Hiragana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'InputMode.Katakana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Katakana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'InputMode.HalfWidthKatakana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Halfwidth Katakana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'InputMode.Latin', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Latin")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'InputMode.WideLatin', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Wide Latin")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__input_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 input_mode_prop.set_sub_props(props) anthy_props.append(input_mode_prop) mode = Engine.__input_mode mode = 'InputMode.' + ['Hiragana', 'Katakana', 'HalfWidthKatakana', 'Latin', 'WideLatin'][mode] self.__input_mode_activate(mode, IBus.PropState.CHECKED) def __set_typing_method_props(self, anthy_props): if Engine.__typing_mode == None: Engine.__typing_mode = jastring.TYPING_MODE_ROMAJI Engine.__typing_mode = self.__prefs.get_value('common', 'typing-method') if not self.__prefs.get_value('common', 'show-typing-method'): return # typing input mode properties symbol = 'R' label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } typing_mode_prop = IBus.Property(key=u'TypingMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon='', tooltip=IBus.Text.new_from_string(_("Switch typing method")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict[u'TypingMode'] = typing_mode_prop props = IBus.PropList() props.append(IBus.Property(key=u'TypingMode.Romaji', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Romaji")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'TypingMode.Kana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Kana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'TypingMode.ThumbShift', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Thumb shift")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__typing_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 typing_mode_prop.set_sub_props(props) anthy_props.append(typing_mode_prop) mode = Engine.__typing_mode mode = 'TypingMode.' + ['Romaji', 'Kana', 'ThumbShift'][mode] self.__typing_mode_activate(mode, IBus.PropState.CHECKED) def __set_segment_mode_props(self, anthy_props): if Engine.__segment_mode == None: Engine.__segment_mode = SEGMENT_DEFAULT Engine.__segment_mode = self.__prefs.get_value('common', 'conversion-segment-mode') if not self.__prefs.get_value('common', 'show-segment-mode'): return symbol = '้€ฃ' label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Segment mode"), 'symbol' : symbol } segment_mode_prop = IBus.Property(key=u'SegmentMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon=None, tooltip=IBus.Text.new_from_string(_("Switch conversion mode")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict[u'SegmentMode'] = segment_mode_prop props = IBus.PropList() props.append(IBus.Property(key=u'SegmentMode.Multi', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Multiple segment")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'SegmentMode.Single', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Single segment")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'SegmentMode.ImmediateMulti', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Immediate conversion (multiple segment)")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'SegmentMode.ImmediateSingle', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Immediate conversion (single segment)")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__segment_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 segment_mode_prop.set_sub_props(props) anthy_props.append(segment_mode_prop) mode = Engine.__segment_mode mode = 'SegmentMode.' + ['Multi', 'Single', 'ImmediateMulti', 'ImmediateSingle'][mode] self.__segment_mode_activate(mode, IBus.PropState.CHECKED) def __set_dict_mode_props(self, anthy_props, update_prop=False): if Engine.__dict_mode == None: Engine.__dict_mode = 0 if not self.__prefs.get_value('common', 'show-dict-mode'): return dicts = self.__prefs.get_value('dict', 'list') short_label = dicts['embedded'].short_label label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Dictionary mode"), 'symbol' : short_label } dict_mode_prop = IBus.Property(key=u'DictMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(short_label), icon=None, tooltip=IBus.Text.new_from_string(_("Switch dictionary")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict[u'DictMode'] = dict_mode_prop props = IBus.PropList() long_label = dicts['embedded'].long_label props.append(IBus.Property(key=u'DictMode.embedded', prop_type=IBus.PropType.RADIO, # if long_label is UTF-8 label=IBus.Text.new_from_string(UN(_(long_label))), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) files = self.__prefs.get_value('dict', 'files') dicts = self.__prefs.get_value('dict', 'list') for id in order: dict_item = dicts[id] is_cont = False for file in files[id]: if not self.__link_dict_file(dict_item, file): is_cont = True break if is_cont: continue if not dict_item.single: continue key = 'DictMode.' + id long_label = dict_item.long_label # ibus-config 'value-changed' signal updated dict/files but # not dict/file/new yet. if long_label == None: continue # if long_label is UTF-8 if dict_item.is_system: uni_long_label = UN(_(long_label)) else: uni_long_label = UN(long_label) props.append(IBus.Property(key=UN(key), prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(uni_long_label), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__dict_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 dict_mode_prop.set_sub_props(props) if update_prop: # focus-in event will call register_properties(). # Need to switch another IME to update menus on GtkStatusIcon? anthy_props.update_property(dict_mode_prop) else: anthy_props.append(dict_mode_prop) prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name == None: return self.__dict_mode_activate(prop_name, IBus.PropState.CHECKED) def __set_dict_config_props(self, anthy_props): if not self.__prefs.get_value('common', 'show-dict-config'): return admin_command = self.__prefs.get_value('common', 'dict-admin-command') icon_path = self.__prefs.get_value('common', 'dict-config-icon') if not path.exists(admin_command[0]): return label = _("Dictionary - Anthy") # if icon_path is UTF-8 if icon_path and path.exists(icon_path): icon = UN(icon_path) else: # Translators: "Dic" means 'dictionary', One kanji may be good. label = _("Dic") icon = u'' dict_prop = IBus.Property(key=u'setup-dict-kasumi', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), icon=icon, tooltip=IBus.Text.new_from_string(_("Configure dictionaries")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict[u'setup-dict-kasumi'] = dict_prop props = IBus.PropList() props.append(IBus.Property(key=u'setup-dict-kasumi-admin', prop_type=IBus.PropType.NORMAL, label=IBus.Text.new_from_string(_("Edit dictionaries")), icon=icon, tooltip=IBus.Text.new_from_string(_("Launch the dictionary tool")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key=u'setup-dict-kasumi-word', prop_type=IBus.PropType.NORMAL, label=IBus.Text.new_from_string(_("Add words")), icon=icon, tooltip=IBus.Text.new_from_string(_("Add words to the dictionary")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 dict_prop.set_sub_props(props) anthy_props.append(dict_prop) def __get_clipboard(self, clipboard, text, data): clipboard_text = clipboard.wait_for_text () if data == CLIPBOARD_RECONVERT: self.__update_reconvert(clipboard_text) return clipboard_text def __get_single_dict_files(self): order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) files = self.__prefs.get_value('dict', 'files') dicts = self.__prefs.get_value('dict', 'list') single_files = [] for id in order: for file in files[id]: if not path.exists(file): continue dict_item = dicts[id] if dict_item.single: single_files.append(file) return single_files def __remove_dict_files(self): dicts = self.__prefs.get_value('dict', 'list') files = self.__prefs.get_value('dict', 'files') for id in files.keys(): dict_item = dicts[id] for file in files[id]: self.__remove_dict_file(dict_item, file) def update_preedit(self, string, attrs, cursor_pos, visible): text = IBus.Text.new_from_string(string) i = 0 while attrs.get(i) != None: attr = attrs.get(i) text.append_attribute(attr.get_attr_type(), attr.get_value(), attr.get_start_index(), attr.get_end_index()) i += 1 mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if self.__has_update_preedit_text_with_mode and mode == 1: self.update_preedit_text_with_mode(text, cursor_pos, visible, IBus.PreeditFocusMode.COMMIT) else: self.update_preedit_text(text, cursor_pos, visible) def update_aux_string(self, string, attrs, visible): text = IBus.Text.new_from_string(string) i = 0 while attrs.get(i) != None: attr = attrs.get(i) text.append_attribute(attr.get_attr_type(), attr.get_value(), attr.get_start_index(), attr.get_end_index()) i += 1 self.update_auxiliary_text(text, visible) def __page_up(self, obj): # only process cursor down in convert mode if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table.page_up(): return False index = self.__lookup_table.get_cursor_pos() # if candidate is UTF-8 candidate = UN(self.__lookup_table.get_candidate(index).get_text()) self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def __page_down(self, obj): # only process cursor down in convert mode if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table.page_down(): return False index = self.__lookup_table.get_cursor_pos() # if candidate is UTF-8 candidate = UN(self.__lookup_table.get_candidate(index).get_text()) self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def do_cursor_up(self): # only process cursor down in convert mode # if self.__convert_mode != CONV_MODE_ANTHY: if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_up(): return False index = self.__lookup_table.get_cursor_pos() # if candidate is UTF-8 candidate = UN(self.__lookup_table.get_candidate(index).get_text()) self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def do_cursor_down(self): # only process cursor down in convert mode # if self.__convert_mode != CONV_MODE_ANTHY: if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_down(): return False index = self.__lookup_table.get_cursor_pos() # if candidate is UTF-8 candidate = UN(self.__lookup_table.get_candidate(index).get_text()) self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def __candidate_clicked(self, obj, index, button, state): if index == 9: keyval = IBus.KEY_0 else: keyval = IBus.KEY_1 + index self.__on_key_number(keyval) def __commit_string(self, text): self.__reset() self.commit_text(IBus.Text.new_from_string(text)) self.__invalidate() def __shrink_segment(self, relative_size): self.__context.resize_segment(self.__cursor_pos, relative_size) nr_segments = self.__context.get_nr_segments() del self.__segments[self.__cursor_pos:] for i in xrange(self.__cursor_pos, nr_segments): buf = self.__context.get_segment(i, 0) text = UN(buf) self.__segments.append((0, text)) self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __shrink_segment_end(self): while self.__context.get_nr_segments() > 1: self.__context.resize_segment(self.__cursor_pos, 1) nr_segments = self.__context.get_nr_segments() del self.__segments[self.__cursor_pos:] for i in range(self.__cursor_pos, nr_segments): buf = self.__context.get_segment(i, 0) text = buf self.__segments.append((0, text)) self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def do_property_activate(self, prop_name, state): if state == IBus.PropState.CHECKED: if prop_name == None: return elif prop_name.startswith(u'InputMode.'): self.__input_mode_activate(prop_name, state) return elif prop_name.startswith(u'TypingMode.'): self.__typing_mode_activate(prop_name, state) return elif prop_name.startswith(u'SegmentMode.'): self.__segment_mode_activate(prop_name, state) return elif prop_name.startswith(u'DictMode.'): self.__dict_mode_activate(prop_name, state) return else: if prop_name == 'setup': self.__start_setup() elif prop_name == 'setup-dict-kasumi-admin': self.__start_dict_admin() elif prop_name == 'setup-dict-kasumi-word': self.__start_add_word() else: if prop_name not in self.__prop_dict.keys(): return self.__prop_dict[prop_name].set_state(state) if prop_name == 'DictMode': sub_name = self.__dict_mode_get_prop_name(self.__dict_mode) if sub_name == None: return self.__dict_mode_activate(sub_name, IBus.PropState.CHECKED) def __input_mode_activate(self, prop_name, state): input_modes = { u'InputMode.Hiragana' : (INPUT_MODE_HIRAGANA, 'ใ‚'), u'InputMode.Katakana' : (INPUT_MODE_KATAKANA, 'ใ‚ข'), u'InputMode.HalfWidthKatakana' : (INPUT_MODE_HALF_WIDTH_KATAKANA, '_๏ฝฑ'), u'InputMode.Latin' : (INPUT_MODE_LATIN, '_A'), u'InputMode.WideLatin' : (INPUT_MODE_WIDE_LATIN, '๏ผก'), } if prop_name not in input_modes: printerr('Unknown prop_name = %s' % prop_name) return mode, symbol = input_modes[prop_name] if u'InputMode' not in self.__prop_dict.keys(): # Disable to show input mode with ibus-set-anthy Engine.__input_mode = mode return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Input mode"), 'symbol' : symbol } Engine.__input_mode = mode prop = self.__prop_dict[u'InputMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __typing_mode_activate(self, prop_name, state): if u'TypingMode' not in self.__prop_dict.keys(): # Disable to show typing mode with ibus-set-anthy return typing_modes = { u'TypingMode.Romaji' : (jastring.TYPING_MODE_ROMAJI, 'R'), u'TypingMode.Kana' : (jastring.TYPING_MODE_KANA, 'ใ‹'), u'TypingMode.ThumbShift' : (jastring.TYPING_MODE_THUMB_SHIFT, '่ฆช'), } if prop_name not in typing_modes: printerr('Unknown prop_name = %s' % prop_name) return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) if prop_name == u'TypingMode.ThumbShift': self._reset_thumb() mode, symbol = typing_modes[prop_name] label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } Engine.__typing_mode = mode prop = self.__prop_dict[u'TypingMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __refresh_typing_mode_property(self): if u'TypingMode' not in self.__prop_dict: # Disable to show typing mode with ibus-set-anthy return prop = self.__prop_dict[u'TypingMode'] modes = { jastring.TYPING_MODE_ROMAJI : (u'TypingMode.Romaji', 'R'), jastring.TYPING_MODE_KANA : (u'TypingMode.Kana', 'ใ‹'), jastring.TYPING_MODE_THUMB_SHIFT : (u'TypingMode.ThumbShift', '่ฆช'), } prop_name, symbol = modes.get(Engine.__typing_mode, (None, None)) if prop_name == None or symbol == None: return label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } _prop = self.__prop_dict[prop_name] _prop.set_state(IBus.PropState.CHECKED) self.update_property(_prop) prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) def __segment_mode_activate(self, prop_name, state): if u'SegmentMode' not in self.__prop_dict.keys(): # Disable to show segment mode with ibus-set-anthy return segment_modes = { u'SegmentMode.Multi' : (SEGMENT_DEFAULT, '้€ฃ'), u'SegmentMode.Single' : (SEGMENT_SINGLE, 'ๅ˜'), u'SegmentMode.ImmediateMulti' : (SEGMENT_IMMEDIATE, '้€|้€ฃ'), u'SegmentMode.ImmediateSingle' : (SEGMENT_IMMEDIATE | SEGMENT_SINGLE, '้€|ๅ˜'), } if prop_name not in segment_modes: printerr('Unknown prop_name = %s' % prop_name) return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) mode, symbol = segment_modes[prop_name] label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Segment mode"), 'symbol' : symbol } Engine.__segment_mode = mode prop = self.__prop_dict[u'SegmentMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __dict_mode_get_prop_name(self, mode): if mode == 0: id = 'embedded' else: single_files = self.__get_single_dict_files() file = single_files[mode - 1] id = self.__get_dict_id_from_file(file) return 'DictMode.' + id def __dict_mode_activate(self, prop_name, state): if prop_name not in self.__prop_dict.keys(): # The prop_name is added. Need to restart. return i = prop_name.find('.') if i < 0: return # The id is already quoted. id = prop_name[i + 1:] file = None single_files = self.__get_single_dict_files() if id == 'embedded': pass else: found = False for file in single_files: if id == self.__get_quoted_id(file): found = True break if found == False: return if id == 'embedded': dict_name = 'default' Engine.__dict_mode = 0 else: if file not in single_files: printerr('Index error', file, single_files) return dict_name = 'ibus__' + id Engine.__dict_mode = single_files.index(file) + 1 self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) self.__context.init_personality() # dict_name is unicode but the argument is str. self.__context.do_set_personality(str(dict_name)) prop = self.__prop_dict[u'DictMode'] dicts = self.__prefs.get_value('dict', 'list') symbol = dicts[id].short_label label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Dictionary mode"), 'symbol' : symbol } prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) def __argb(self, a, r, g, b): return ((a & 0xff)<<24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff) def __rgb(self, r, g, b): return self.__argb(255, r, g, b) def do_focus_in(self): self.register_properties(self.__prop_list) self.__refresh_typing_mode_property() mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if mode == 2: self.__update_input_chars() # self.__reset() # self.__invalidate() size = self.__prefs.get_value('common', 'page-size') if size != self.__lookup_table.get_page_size(): self.__lookup_table.set_page_size(size) def do_focus_out(self): if self.__has_input_purpose: self.__input_purpose = 0 mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if mode == 0 or mode == 1: self.__reset() self.__invalidate() def do_set_content_type(self, purpose, hints): if self.__has_input_purpose: self.__input_purpose = purpose def do_disable(self): self.__reset() self.__invalidate() def do_reset(self): self.__reset() self.__invalidate() def __destroy(self, obj): if self.__idle_id != 0: GLib.source_remove(self.__idle_id) self.__idle_id = 0 # It seems do_destroy() is called when launch_engine() is called. #self.__remove_dict_files() # It seems super.destroy() does not unref the engine. def __join_all_segments(self): while True: nr_segments = self.__context.get_nr_segments() seg = nr_segments - self.__cursor_pos if seg > 1: self.__context.resize_segment(self.__cursor_pos, 1) else: break def __normalize_preedit(self, preedit): if not self.__is_utf8: return preedit for key in romaji_normalize_rule.keys(): if preedit.find(key) >= 0: for value in romaji_normalize_rule[key]: preedit = preedit.replace(key, value) return preedit # begine convert def __begin_anthy_convert(self): if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__end_anthy_convert() if self.__convert_mode == CONV_MODE_ANTHY: return self.__convert_mode = CONV_MODE_ANTHY # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(True) text = self.__normalize_preedit(text) self.__context.set_string(text.encode('utf8')) if Engine.__segment_mode & SEGMENT_SINGLE: self.__join_all_segments() nr_segments = self.__context.get_nr_segments() for i in xrange(0, nr_segments): buf = self.__context.get_segment(i, 0) text = UN(buf) self.__segments.append((0, text)) if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__cursor_pos = nr_segments - 1 else: self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False def __end_anthy_convert(self): if self.__convert_mode == CONV_MODE_OFF: return self.__convert_mode = CONV_MODE_OFF self.__convert_chars = u'' self.__segments = list() self.__cursor_pos = 0 self.__lookup_table.clear() self.__lookup_table_visible = False def __end_convert(self): self.__end_anthy_convert() # test case 'verudhi' can show U+3046 + U+309B and U+3094 def __candidate_cb(self, candidate): if not self.__is_utf8: return for key in romaji_utf8_rule.keys(): if candidate.find(key) >= 0: for value in romaji_utf8_rule[key]: candidate = candidate.replace(key, value) self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) def __fill_lookup_table(self): if self.__convert_mode == CONV_MODE_PREDICTION: nr_predictions = self.__context.get_nr_predictions() # fill lookup_table self.__lookup_table.clear() for i in xrange(0, nr_predictions): buf = self.__context.get_prediction(i) candidate = UN(buf) self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) self.__candidate_cb(candidate) return # get segment stat nr_candidates = self.__context.get_nr_candidates(self.__cursor_pos) # fill lookup_table self.__lookup_table.clear() for i in xrange(0, nr_candidates): buf = self.__context.get_segment(self.__cursor_pos, i) candidate = UN(buf) self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) self.__candidate_cb(candidate) def __invalidate(self): if self.__idle_id != 0: return self.__idle_id = GLib.idle_add(self.__update, priority = GLib.PRIORITY_LOW) # def __get_preedit(self): def __get_preedit(self, commit=False): if Engine.__input_mode == INPUT_MODE_HIRAGANA: # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(commit) elif Engine.__input_mode == INPUT_MODE_KATAKANA: # text, cursor = self.__preedit_ja_string.get_katakana() text, cursor = self.__preedit_ja_string.get_katakana(commit) elif Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA: # text, cursor = self.__preedit_ja_string.get_half_width_katakana() text, cursor = self.__preedit_ja_string.get_half_width_katakana(commit) else: text, cursor = u'', 0 return text, cursor def __update_input_chars(self): text, cursor = self.__get_preedit() attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(text))) self.update_preedit(text, attrs, cursor, not self.__preedit_ja_string.is_empty()) self.update_aux_string(u'', IBus.AttrList(), False) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update_convert_chars(self): # if self.__convert_mode == CONV_MODE_ANTHY: if self.__convert_mode == CONV_MODE_ANTHY or self.__convert_mode == CONV_MODE_PREDICTION: self.__update_anthy_convert_chars() return if self.__convert_mode == CONV_MODE_HIRAGANA: # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(True) elif self.__convert_mode == CONV_MODE_KATAKANA: # text, cursor = self.__preedit_ja_string.get_katakana() text, cursor = self.__preedit_ja_string.get_katakana(True) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: # text, cursor = self.__preedit_ja_string.get_half_width_katakana() text, cursor = self.__preedit_ja_string.get_half_width_katakana(True) elif self.__convert_mode == CONV_MODE_LATIN_0: text, cursor = self.__preedit_ja_string.get_latin() if text == text.lower(): self.__convert_mode = CONV_MODE_LATIN_1 elif self.__convert_mode == CONV_MODE_LATIN_1: text, cursor = self.__preedit_ja_string.get_latin() text = text.lower() elif self.__convert_mode == CONV_MODE_LATIN_2: text, cursor = self.__preedit_ja_string.get_latin() text = text.upper() elif self.__convert_mode == CONV_MODE_LATIN_3: text, cursor = self.__preedit_ja_string.get_latin() text = text.capitalize() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_0: text, cursor = self.__preedit_ja_string.get_wide_latin() if text == text.lower(): self.__convert_mode = CONV_MODE_WIDE_LATIN_1 elif self.__convert_mode == CONV_MODE_WIDE_LATIN_1: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.lower() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_2: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.upper() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_3: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.capitalize() self.__convert_chars = text attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(text))) attrs.append(IBus.attr_background_new(self.__rgb(200, 200, 240), 0, len(text))) attrs.append(IBus.attr_foreground_new(self.__rgb(0, 0, 0), 0, len(text))) self.update_preedit(text, attrs, len(text), True) self.update_aux_string(u'', IBus.AttrList(), self.__lookup_table_visible) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update_anthy_convert_chars(self): self.__convert_chars = u'' pos = 0 for i, (seg_index, text) in enumerate(self.__segments): self.__convert_chars += text if i < self.__cursor_pos: pos += len(text) attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(self.__convert_chars))) attrs.append(IBus.attr_background_new(self.__rgb(200, 200, 240), pos, pos + len(self.__segments[self.__cursor_pos][1]))) attrs.append(IBus.attr_foreground_new(self.__rgb(0, 0, 0), pos, pos + len(self.__segments[self.__cursor_pos][1]))) self.update_preedit(self.__convert_chars, attrs, pos, True) aux_string = u'( %d / %d )' % (self.__lookup_table.get_cursor_pos() + 1, self.__lookup_table.get_number_of_candidates()) self.update_aux_string(aux_string, IBus.AttrList(), self.__lookup_table_visible) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update(self): if self.__convert_mode == CONV_MODE_OFF: self.__update_input_chars() else: self.__update_convert_chars() self.__idle_id = 0 def __on_key_return(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: # text, cursor = self.__get_preedit() text, cursor = self.__get_preedit(True) self.__commit_string(text) elif self.__convert_mode == CONV_MODE_ANTHY: for i, (seg_index, text) in enumerate(self.__segments): self.__context.commit_segment(i, seg_index) self.__commit_string(self.__convert_chars) elif self.__convert_mode == CONV_MODE_PREDICTION: self.__context.commit_prediction(self.__segments[0][0]) self.__commit_string(self.__convert_chars) else: self.__commit_string(self.__convert_chars) return True def __on_key_escape(self): if self.__preedit_ja_string.is_empty(): return False self.__reset() self.__invalidate() return True def __on_key_back_space(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_OFF: if self.__lookup_table_visible: if self.__lookup_table.get_number_of_candidates() > 0: self.__lookup_table.set_cursor_pos(0) candidate = UN(self.__lookup_table.get_candidate(0).get_text()) self.__segments[self.__cursor_pos] = 0, candidate self.__lookup_table_visible = False elif self.__segments[self.__cursor_pos][0] != \ NTH_UNCONVERTED_CANDIDATE: buf = self.__context.get_segment(self.__cursor_pos, NTH_UNCONVERTED_CANDIDATE) self.__segments[self.__cursor_pos] = \ NTH_UNCONVERTED_CANDIDATE, UN(buf) #elif self._chk_mode('25'): ''' # FIXME: Delete the last char in the active segment. # # If we are able to delete a char in the active segment, # we also should be able to add a char in the active segment. # Currently plain preedit, no segment mode, i.e. # using self.__preedit_ja_string, can delete or add a char # but anthy active segoment mode, i.e. # using self.__segments, can not delete or add a char. # Deleting a char could be easy here but adding a char is # difficult because we need to update both self.__segments # and self.__preedit_ja_string but self.__preedit_ja_string # has no segment. To convert self.__segments to # self.__preedit_ja_string, we may use the reconvert mode # but no idea to convert keyvals to hiragana # in self__on_key_common() with multiple key typings. # Delete a char in the active segment all_text = u'' nr_segments = self.__context.get_nr_segments() for i in xrange(0, nr_segments): buf = self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE) text = UN(buf) if i == self.__cursor_pos and len(text) > 0: text = text[:len(text) - 1] all_text += text if all_text == u'': return # Set self.__preedit_ja_string by anthy context. self.__preedit_ja_string = jastring.JaString(Engine.__typing_mode, self.__latin_with_shift) self.__convert_chars = self.__normalize_preedit(all_text) for i in xrange(0, len(self.__convert_chars)): keyval = self.__convert_chars[i] self.__preedit_ja_string.insert(unichr(ord (keyval))) self.__context.set_string(self.__convert_chars.encode('utf8')) # Set self.__segments by anty context # for editable self.__segments, # save NTH_UNCONVERTED_CANDIDATE nr_segments = self.__context.get_nr_segments() if self.__cursor_pos >= nr_segments and \ nr_segments > 0: self.__cursor_pos = nr_segments - 1 for i in xrange(self.__cursor_pos, nr_segments): if i == self.__cursor_pos: index = NTH_UNCONVERTED_CANDIDATE else: index = 0 buf = self.__context.get_segment(i, index) text = UN(buf) self.__segments[i] = index, text # Update self.__lookup_table self.__fill_lookup_table() ''' else: self.__end_convert() else: self.__preedit_ja_string.remove_before() self.__invalidate() return True def __on_key_delete(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_OFF: self.__end_convert() else: self.__preedit_ja_string.remove_after() self.__invalidate() return True '''def __on_key_hiragana_katakana(self): if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() if Engine.__input_mode >= INPUT_MODE_HIRAGANA and \ Engine.__input_mode < INPUT_MODE_HALF_WIDTH_KATAKANA: Engine.__input_mode += 1 else: Engine.__input_mode = INPUT_MODE_HIRAGANA modes = { INPUT_MODE_HIRAGANA: 'ใ‚', INPUT_MODE_KATAKANA: 'ใ‚ข', INPUT_MODE_HALF_WIDTH_KATAKANA: '_๏ฝฑ' } prop = self.__prop_dict[u'InputMode'] label = modes[Engine.__input_mode] prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__invalidate() return True''' '''def __on_key_muhenka(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() new_mode = CONV_MODE_HIRAGANA if self.__convert_mode < CONV_MODE_WIDE_LATIN_3 and \ self.__convert_mode >= CONV_MODE_HIRAGANA : self.__convert_mode += 1 else: self.__convert_mode = CONV_MODE_HIRAGANA self.__invalidate() return True''' '''def __on_key_henkan(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_ANTHY: self.__begin_anthy_convert() self.__invalidate() elif self.__convert_mode == CONV_MODE_ANTHY: self.__lookup_table_visible = True self.do_cursor_down() return True''' '''def __on_key_space(self, wide=False): if Engine.__input_mode == INPUT_MODE_WIDE_LATIN or wide: # Input Wide space U+3000 wide_char = symbol_rule[unichr(IBus.KEY_space)] self.__commit_string(wide_char) return True if self.__preedit_ja_string.is_empty(): if Engine.__input_mode in (INPUT_MODE_HIRAGANA, INPUT_MODE_KATAKANA): # Input Wide space U+3000 wide_char = symbol_rule[unichr(IBus.KEY_space)] self.__commit_string(wide_char) return True else: # Input Half space U+0020 self.__commit_string(unichr(IBus.KEY_space)) return True if self.__convert_mode != CONV_MODE_ANTHY: self.__begin_anthy_convert() self.__invalidate() elif self.__convert_mode == CONV_MODE_ANTHY: self.__lookup_table_visible = True self.do_cursor_down() return True''' def __on_key_up(self): if self.__preedit_ja_string.is_empty(): return False self.__lookup_table_visible = True self.do_cursor_up() return True def __on_key_down(self): if self.__preedit_ja_string.is_empty(): return False self.__lookup_table_visible = True self.do_cursor_down() return True def __on_key_page_up(self): if self.__preedit_ja_string.is_empty(): return False if self.__lookup_table_visible == True: self.do_page_up() return True def __on_key_page_down(self): if self.__preedit_ja_string.is_empty(): return False if self.__lookup_table_visible == True: self.do_page_down() return True '''def __on_key_left(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor(-1) self.__invalidate() return True if self.__convert_mode != CONV_MODE_ANTHY: return True if self.__cursor_pos == 0: return True self.__cursor_pos -= 1 self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True''' def __on_key_right(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor(1) self.__invalidate() return True if self.__convert_mode != CONV_MODE_ANTHY: return True if self.__cursor_pos + 1 >= len(self.__segments): return True self.__cursor_pos += 1 self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __on_key_number(self, keyval): if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table_visible: return False if keyval == IBus.KEY_0: keyval = IBus.KEY_9 + 1 index = keyval - IBus.KEY_1 return self.__on_candidate_index_in_page(index) def __on_key_conv(self, mode): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() if mode == 0 or mode == 1: if self.__convert_mode == CONV_MODE_HIRAGANA + mode: return True self.__convert_mode = CONV_MODE_HIRAGANA + mode elif mode == 2: if self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return True self.__convert_mode = CONV_MODE_HALF_WIDTH_KATAKANA elif mode == 3: if CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3: self.__convert_mode += 1 if self.__convert_mode > CONV_MODE_WIDE_LATIN_3: self.__convert_mode = CONV_MODE_WIDE_LATIN_1 else: self.__convert_mode = CONV_MODE_WIDE_LATIN_0 elif mode == 4: if CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: self.__convert_mode += 1 if self.__convert_mode > CONV_MODE_LATIN_3: self.__convert_mode = CONV_MODE_LATIN_1 else: self.__convert_mode = CONV_MODE_LATIN_0 else: printerr('Unkown convert mode (%d)!' % mode) return False self.__invalidate() return True def __on_key_common(self, keyval, state=0): # If use-system-layout is FALSE in ibus 1.4.y or lower, # ibus converts the keymap and ibus-anthy needed to use # self.__commit_string # ibus 1.5.y uses XKB directly so Latin mode can return FALSE. if Engine.__input_mode == INPUT_MODE_LATIN: return False elif Engine.__input_mode == INPUT_MODE_WIDE_LATIN: # Input Wide Latin chars char = unichr(keyval) wide_char = None#symbol_rule.get(char, None) if wide_char == None: wide_char = unichar_half_to_full(char) self.__commit_string(wide_char) return True # Input Japanese if Engine.__segment_mode & SEGMENT_IMMEDIATE: # Commit nothing pass elif self.__convert_mode == CONV_MODE_ANTHY: for i, (seg_index, text) in enumerate(self.__segments): self.__context.commit_segment(i, seg_index) self.__commit_string(self.__convert_chars) elif self.__convert_mode != CONV_MODE_OFF: self.__commit_string(self.__convert_chars) # 'n' + '\'' == 'nn' in romaji if (keyval >= ord('A') and keyval <= ord('Z')) or \ (keyval >= ord('a') and keyval <= ord('z')): shift = (state & IBus.ModifierType.SHIFT_MASK) != 0 else: shift = False self.__preedit_ja_string.set_shift(shift) self.__preedit_ja_string.insert(unichr(keyval)) if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__begin_anthy_convert() self.__invalidate() return True #======================================================================= @classmethod def CONFIG_RELOADED(cls): if config.DEBUG: print 'RELOADED' if not cls.__prefs: cls.__prefs = AnthyPrefs() cls.__prefs.connect('changed', cls.CONFIG_VALUE_CHANGED) cls._init_prefs() cls.__keybind = cls._mk_keybind() jastring.JaString.SET_PREFS(cls.__prefs) @classmethod def CONFIG_VALUE_CHANGED(cls, prefs, section, key, variant): if config.DEBUG: print('VALUE_CHAMGED =', section, key, variant) if section == 'shortcut': cls.__keybind = cls._mk_keybind() elif section == 'common': if key == 'shortcut-type': cls.__keybind = cls._mk_keybind() elif key == 'latin-with-shift': value = prefs.get_value(section, key) cls.__latin_with_shift = value jastring.JaString.RESET(cls.__prefs, section, key, value) elif section == 'kana-typing-rule': value = prefs.get_value(section, key) jastring.JaString.RESET(cls.__prefs, section, key, value) @classmethod def _init_prefs(cls): prefs = cls.__prefs value = prefs.get_value('common', 'latin-with-shift') cls.__latin_with_shift = value @classmethod def _mk_keybind(cls): keybind = {} sec = cls._get_shortcut_type() shortcuts = cls.__prefs.get_value('shortcut', sec) for k in shortcuts.keys(): cmd = '_Engine__cmd_' + k for s in shortcuts[k]: keybind.setdefault(cls._s_to_key(s), []).append(cmd) return keybind @classmethod def _get_shortcut_type(cls): try: t = cls.__prefs.get_value('common', 'shortcut-type') except: t = 'default' return t @classmethod def _s_to_key(cls, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ( 'alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return cls._mk_key(keyval, state) @classmethod def _reset_thumb(cls): if cls.__thumb == None: import thumb cls.__thumb = thumb.ThumbShiftKeyboard(cls.__prefs) else: cls.__thumb.reset() @staticmethod def _mk_key(keyval, state): if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): if keyval < 0xff and \ unichr(keyval) in u'!"#$%^\'()*+,-./:;<=>?@[\]^_`{|}~': state |= IBus.ModifierType.SHIFT_MASK elif IBus.KEY_a <= keyval <= IBus.KEY_z: keyval -= (IBus.KEY_a - IBus.KEY_A) return repr([int(state), int(keyval)]) def __process_key_event(self, obj, keyval, keycode, state): try: return self.__process_key_event_internal2(keyval, keycode, state) except: import traceback traceback.print_exc() return False def __process_key_event_thumb(self, keyval, keycode, state): if self.__thumb == None: self._reset_thumb() def on_timeout(keyval): if self._MM: insert(self.__thumb.get_char(self._MM)[self._SS]) else: cmd_exec([0, RS(), LS()][self._SS]) self._H = None def start(t): self._H = GLib.timeout_add(t, on_timeout, keyval) def stop(): if self._H: GLib.source_remove(self._H) self._H = None return True return False def insert(keyval): try: self._MM = self._SS = 0 ret = self.__on_key_common(ord(keyval)) if (keyval in UN(self.__prefs.get_value('common', 'trigger-periods'))): behavior = self.__prefs.get_value('common', 'behavior-on-period') if behavior == 1: return self.__cmd_convert(keyval, state) elif behavior == 2: return self.__cmd_commit(keyval, state) return ret except: pass def cmd_exec(keyval, state=0): key = self._mk_key(keyval, state) for cmd in self.__keybind.get(key, []): if config.DEBUG: print 'cmd =', cmd try: if getattr(self, cmd)(keyval, state): return True except Exception as err: printerr('Error command: %s: %s' % (cmd, str(err))) return False def RS(): return self.__thumb.get_rs() def LS(): return self.__thumb.get_ls() def T1(): return self.__thumb.get_t1() def T2(): return self.__thumb.get_t2() state = state & (IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK | IBus.ModifierType.RELEASE_MASK) if keyval in KP_Table and self.__prefs.get_value('common', 'ten-key-mode'): keyval = KP_Table[keyval] if state & IBus.ModifierType.RELEASE_MASK: if keyval == self._MM: if stop(): insert(self.__thumb.get_char(self._MM)[self._SS]) self._MM = 0 elif (1 if keyval == RS() else 2) == self._SS: if stop(): cmd_exec([0, RS(), LS()][self._SS]) self._SS = 0 if keyval in [RS(), LS()]: self._RSS = 0 elif keyval == self._RMM: self._RMM = 0 else: if keyval in [LS(), RS()] and state == 0: if self._SS: stop() cmd_exec([0, RS(), LS()][self._SS]) self._SS = 1 if keyval == RS() else 2 start(T1()) elif self._MM: stop() self._RMM = self._MM self._RSS = 1 if keyval == RS() else 2 insert(self.__thumb.get_char(self._MM)[1 if keyval == RS() else 2]) else: if self._RSS == (1 if keyval == RS() else 2): if self._RMM: insert(self.__thumb.get_char(self._RMM)[self._RSS]) else: self._SS = 1 if keyval == RS() else 2 start(T1()) elif keyval in self.__thumb.get_chars() and state == 0: if self._MM: stop() insert(self.__thumb.get_char(self._MM)[self._SS]) start(T2()) self._MM = keyval elif self._SS: stop() self._RMM = keyval self._RSS = self._SS insert(self.__thumb.get_char(keyval)[self._SS]) else: if self._RMM == keyval: if self._RSS: insert(self.__thumb.get_char(self._RMM)[self._RSS]) else: if cmd_exec(keyval, state): return True start(T2()) self._MM = keyval else: if self._MM: stop() insert(self.__thumb.get_char(self._MM)[self._SS]) elif self._SS: stop() cmd_exec([0, RS(), LS()][self._SS]) if cmd_exec(keyval, state): return True elif 0x21 <= keyval <= 0x7e and state & \ (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) == 0: if state & IBus.ModifierType.SHIFT_MASK: insert(self.__thumb.get_shift_char(keyval, unichr(keyval))) elif self._SS == 0: insert(unichr(keyval)) else: if not self.__preedit_ja_string.is_empty(): return True return False return True def __process_key_event_internal2(self, keyval, keycode, state): if self.__has_input_purpose and \ self.__input_purpose == IBus.InputPurpose.PASSWORD: return False if Engine.__typing_mode == jastring.TYPING_MODE_THUMB_SHIFT and \ Engine.__input_mode not in [INPUT_MODE_LATIN, INPUT_MODE_WIDE_LATIN]: return self.__process_key_event_thumb(keyval, keycode, state) is_press = (state & IBus.ModifierType.RELEASE_MASK) == 0 state = state & (IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) # ignore key release events if not is_press: return False if keyval in KP_Table and self.__prefs.get_value('common', 'ten-key-mode'): keyval = KP_Table[keyval] key = self._mk_key(keyval, state) for cmd in self.__keybind.get(key, []): if config.DEBUG: print 'cmd =', cmd try: if getattr(self, cmd)(keyval, state): return True except Exception as err: printerr('Error command: %s: %s' % (cmd, str(err))) # If input mode is not LATIN, eat Ctrl+Shift+u hex_mod_mask = IBus.ModifierType.SHIFT_MASK | \ IBus.ModifierType.CONTROL_MASK if Engine.__input_mode != INPUT_MODE_LATIN and \ keyval == IBus.KEY_U and \ state & hex_mod_mask == hex_mod_mask: return True if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): return False if (IBus.KEY_exclam <= keyval <= IBus.KEY_asciitilde or keyval == IBus.KEY_yen): if Engine.__typing_mode == jastring.TYPING_MODE_KANA: if keyval == IBus.KEY_0 and state == IBus.ModifierType.SHIFT_MASK: keyval = IBus.KEY_asciitilde elif keyval == IBus.KEY_backslash and keycode in [132-8, 133-8]: keyval = IBus.KEY_yen ret = self.__on_key_common(keyval, state) if (Engine.__input_mode != INPUT_MODE_LATIN and unichr(keyval) in UN(self.__prefs.get_value('common', 'trigger-periods'))): behavior = self.__prefs.get_value('common', 'behavior-on-period') if behavior == 1: return self.__cmd_convert(keyval, state) elif behavior == 2: return self.__cmd_commit(keyval, state) return ret else: if not self.__preedit_ja_string.is_empty(): return True return False def _chk_mode(self, mode): if '0' in mode and self.__preedit_ja_string.is_empty(): return True if self.__convert_mode == CONV_MODE_OFF: if '1' in mode and not self.__preedit_ja_string.is_empty(): return True elif self.__convert_mode == CONV_MODE_ANTHY: if '2' in mode and not self.__lookup_table_visible: return True elif self.__convert_mode == CONV_MODE_PREDICTION: if '3' in mode and not self.__lookup_table_visible: return True else: if '4' in mode: return True if '5' in mode and self.__lookup_table_visible: return True return False def __get_quoted_id(self, file): id = file has_mbcs = False for i in xrange(0, len(id)): if ord(id[i]) >= 0x7f: has_mbcs = True break if has_mbcs: id = id.encode('hex') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] if id.startswith('0x'): id = id.encode('hex') has_mbcs = True if has_mbcs: id = '0x' + id return id def __get_dict_id_from_file(self, file): return self.__get_quoted_id(file) def __link_dict_file_with_mode(self, id, file, link_mode): if id == None: return if link_mode == LINK_DICT_EMBEDDED: directory = ANTHY_CONFIG_PATH + '/' + IMPORTED_EMBEDDED_DICT_DIR name = IMPORTED_EMBEDDED_DICT_PREFIX + id elif link_mode == LINK_DICT_SINGLE: directory = ANTHY_CONFIG_PATH name = IMPORTED_SINGLE_DICT_PREFIX + id else: return if path.exists(directory): if not path.isdir(directory): printerr(directory + ' is not a directory') return else: os.makedirs(directory, 0700) backup_dir = os.getcwd() os.chdir(directory) if path.lexists(directory + '/' + name): if path.islink(directory + '/' + name): printerr('Removing ' + name) os.unlink(directory + '/' + name) else: alternate = name + str(os.getpid()) printerr('Moving ' + name + ' to ' + alternate) os.rename(name, alternate) os.symlink(file, directory + '/' + name) if backup_dir != None: os.chdir(backup_dir) def __remove_dict_file_with_mode(self, id, file, link_mode): if id == None: return if link_mode == LINK_DICT_EMBEDDED: directory = ANTHY_CONFIG_PATH + '/' + IMPORTED_EMBEDDED_DICT_DIR name = IMPORTED_EMBEDDED_DICT_PREFIX + id elif link_mode == LINK_DICT_SINGLE: directory = ANTHY_CONFIG_PATH name = IMPORTED_SINGLE_DICT_PREFIX + id else: return if path.exists(directory): if not path.isdir(directory): printerr(directory + ' is not a directory') return backup_dir = os.getcwd() os.chdir(directory) if path.lexists(directory + '/' + name): os.unlink(directory + '/' + name) if backup_dir != None: os.chdir(backup_dir) def __link_dict_file(self, dict_item, file): if not path.exists(file): printerr(file + ' does not exist') return False id = dict_item.id if dict_item.embed: self.__link_dict_file_with_mode(id, file, LINK_DICT_EMBEDDED) if dict_item.single: self.__link_dict_file_with_mode(id, file, LINK_DICT_SINGLE) return True def __remove_dict_file(self, dict_item, file): id = dict_item.id if dict_item.embed: self.__remove_dict_file_with_mode(id, file, LINK_DICT_EMBEDDED) if dict_item.single: self.__remove_dict_file_with_mode(id, file, LINK_DICT_SINGLE) #mod_keys def __set_input_mode(self, mode): self.__input_mode_activate(mode, IBus.PropState.CHECKED) self.__reset() self.__invalidate() return True def __unset_current_input_mode(self): modes = { INPUT_MODE_HIRAGANA: u'InputMode.Hiragana', INPUT_MODE_KATAKANA: u'InputMode.Katakana', INPUT_MODE_HALF_WIDTH_KATAKANA: u'InputMode.HalfWidthKatakana', INPUT_MODE_LATIN: u'InputMode.Latin', INPUT_MODE_WIDE_LATIN: u'InputMode.WideLatin' } self.__input_mode_activate(modes[Engine.__input_mode], IBus.PropState.UNCHECKED) def __cmd_on_off(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() if Engine.__input_mode == INPUT_MODE_LATIN: return self.__set_input_mode(u'InputMode.Hiragana') else: return self.__set_input_mode(u'InputMode.Latin') def __cmd_circle_input_mode(self, keyval, state): modes = { INPUT_MODE_HIRAGANA: u'InputMode.Katakana', INPUT_MODE_KATAKANA: u'InputMode.HalfWidthKatakana', INPUT_MODE_HALF_WIDTH_KATAKANA: u'InputMode.Latin', INPUT_MODE_LATIN: u'InputMode.WideLatin', INPUT_MODE_WIDE_LATIN: u'InputMode.Hiragana' } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(modes[Engine.__input_mode]) def __cmd_circle_kana_mode(self, keyval, state): modes = { INPUT_MODE_HIRAGANA: u'InputMode.Katakana', INPUT_MODE_KATAKANA: u'InputMode.HalfWidthKatakana', INPUT_MODE_HALF_WIDTH_KATAKANA: u'InputMode.Hiragana', INPUT_MODE_LATIN: u'InputMode.Hiragana', INPUT_MODE_WIDE_LATIN: u'InputMode.Hiragana' } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(modes[Engine.__input_mode]) def __cmd_latin_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(u'InputMode.Latin') def __cmd_wide_latin_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(u'InputMode.WideLatin') def __cmd_hiragana_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(u'InputMode.Hiragana') def __cmd_katakana_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(u'InputMode.Katakana') def __cmd_half_katakana(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(u'InputMode.HalfWidthKatakana') # def __cmd_cancel_pseudo_ascii_mode_key(self, keyval, state): # pass def __unset_current_typing_mode(self): modes = { jastring.TYPING_MODE_ROMAJI: u'TypingMode.Romaji', jastring.TYPING_MODE_KANA: u'TypingMode.Kana', jastring.TYPING_MODE_THUMB_SHIFT: u'TypingMode.ThumbShift', } self.__typing_mode_activate(modes[Engine.__typing_mode], IBus.PropState.UNCHECKED) def __cmd_circle_typing_method(self, keyval, state): if not self._chk_mode('0'): return False modes = { jastring.TYPING_MODE_THUMB_SHIFT: u'TypingMode.Romaji', jastring.TYPING_MODE_KANA: u'TypingMode.ThumbShift', jastring.TYPING_MODE_ROMAJI: u'TypingMode.Kana', } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_typing_mode() self.__typing_mode_activate(modes[Engine.__typing_mode], IBus.PropState.CHECKED) return True def __cmd_circle_dict_method(self, keyval, state): if not self._chk_mode('0'): return False # ibus 1.5 or later needs to send UNCHECKED prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name != None: self.__dict_mode_activate(prop_name, IBus.PropState.UNCHECKED) single_files = self.__get_single_dict_files() new_mode = Engine.__dict_mode + 1 if new_mode > len(single_files): new_mode = 0 Engine.__dict_mode = new_mode prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name == None: return False self.__dict_mode_activate(prop_name, IBus.PropState.CHECKED) return True #edit_keys def __cmd_insert_space(self, keyval, state): if Engine.__input_mode == INPUT_MODE_LATIN: return False if (self.__prefs.get_value('common', 'half-width-space') or Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA): return self.__cmd_insert_half_space(keyval, state) else: return self.__cmd_insert_wide_space(keyval, state) def __cmd_insert_alternate_space(self, keyval, state): if Engine.__input_mode == INPUT_MODE_LATIN: return False if (self.__prefs.get_value('common', 'half-width-space') or Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA): return self.__cmd_insert_wide_space(keyval, state) else: return self.__cmd_insert_half_space(keyval, state) def __cmd_insert_half_space(self, keyval, state): if not self._chk_mode('0'): return False if not self.__preedit_ja_string.is_empty(): return False self.__commit_string(unichr(IBus.KEY_space)) return True def __cmd_insert_wide_space(self, keyval, state): if not self._chk_mode('0'): return False if not self.__preedit_ja_string.is_empty(): return False char = unichr(IBus.KEY_space) wide_char = symbol_rule.get(char, None) if wide_char == None: wide_char = unichar_half_to_full(char) self.__commit_string(wide_char) return True def __cmd_backspace(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_back_space() def __cmd_delete(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_delete() def __cmd_commit(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_return() def __cmd_convert(self, keyval, state): if not self._chk_mode('14'): return False self.__begin_anthy_convert() self.__invalidate() return True def __cmd_predict(self, keyval, state): if not self._chk_mode('14'): return False text, cursor = self.__preedit_ja_string.get_hiragana(True) self.__context.set_prediction_string(text.encode('utf8')) nr_predictions = self.__context.get_nr_predictions() # for i in range(nr_predictions): # print self.__context.get_prediction(i) buf = self.__context.get_prediction(0) if not buf: return False text = UN(buf) self.__segments.append((0, text)) self.__convert_mode = CONV_MODE_PREDICTION self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False self.__invalidate() return True def __cmd_cancel(self, keyval, state): return self.__cmd_cancel_all(keyval, state) def __cmd_cancel_all(self, keyval, state): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_OFF: return self.__on_key_escape() else: self.__end_convert() self.__invalidate() return True def __cmd_reconvert(self, keyval, state): if not self.__preedit_ja_string.is_empty(): # if user has inputed some chars return False # Move importing Gtk into Engine from the header # because ibus-engine-anthy --xml does not requre to open X. try: from gi.repository import Gtk clipboard_get = Gtk.Clipboard.get except ImportError: clipboard_get = lambda a : None except RuntimeError: # Do we support the engine without display? printerr("Gtk couldn't be initialized") printerr('Could not open display') clipboard_get = lambda a : None # Use Gtk.Clipboard.request_text() instead of # Gtk.Clipboard.wait_for_text() because DBus is timed out. clipboard = clipboard_get ('PRIMARY') if clipboard: clipboard.request_text (self.__get_clipboard, CLIPBOARD_RECONVERT) return True def __update_reconvert(self, clipboard_text): if clipboard_text == None: return False self.__convert_chars = UN(clipboard_text) for i in xrange(0, len(self.__convert_chars)): keyval = self.__convert_chars[i] self.__preedit_ja_string.insert(unichr(ord(keyval))) self.__context.set_string(self.__convert_chars.encode('utf-8')) nr_segments = self.__context.get_nr_segments() for i in xrange(0, nr_segments): buf = self.__context.get_segment(i, 0) text = UN(buf) self.__segments.append((0, text)) self.__convert_mode = CONV_MODE_ANTHY self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False self.__invalidate() return True # def __cmd_do_nothing(self, keyval, state): # return True #caret_keys def __move_caret(self, i): if not self._chk_mode('1'): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor( -len(self.__preedit_ja_string.get_latin()[0]) if i == 0 else i if i in [-1, 1] else len(self.__preedit_ja_string.get_latin()[0])) self.__invalidate() return True return False def __cmd_move_caret_first(self, keyval, state): return self.__move_caret(0) def __cmd_move_caret_last(self, keyval, state): return self.__move_caret(2) def __cmd_move_caret_forward(self, keyval, state): return self.__move_caret(1) def __cmd_move_caret_backward(self, keyval, state): return self.__move_caret(-1) #segments_keys def __select_segment(self, i): if not self._chk_mode('25'): return False pos = 0 if i == 0 else \ self.__cursor_pos + i if i in [-1, 1] else \ len(self.__segments) - 1 if 0 <= pos < len(self.__segments) and pos != self.__cursor_pos: self.__cursor_pos = pos self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __cmd_select_first_segment(self, keyval, state): return self.__select_segment(0) def __cmd_select_last_segment(self, keyval, state): return self.__select_segment(2) def __cmd_select_next_segment(self, keyval, state): return self.__select_segment(1) def __cmd_select_prev_segment(self, keyval, state): return self.__select_segment(-1) def __cmd_shrink_segment(self, keyval, state): if not self._chk_mode('25'): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(-1) return True def __cmd_expand_segment(self, keyval, state): if not self._chk_mode('25'): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(1) return True def __move_cursor_char_length(self, length): if Engine.__input_mode == INPUT_MODE_HIRAGANA: self.__preedit_ja_string.move_cursor_hiragana_length(length) elif Engine.__input_mode == INPUT_MODE_KATAKANA: self.__preedit_ja_string.move_cursor_katakana_length(length) elif Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA: self.__preedit_ja_string.move_cursor_half_with_katakana_length(length) else: self.__preedit_ja_string.move_cursor(length) def __commit_nth_segment(self, commit_index, keyval, state): if commit_index >= len(self.__segments): return False if self.__convert_mode == CONV_MODE_ANTHY: for i in xrange(0, commit_index + 1): (seg_index, text) = self.__segments[i] self.commit_text(IBus.Text.new_from_string(text)) text, cursor = self.__get_preedit() commit_length = 0 for i in xrange(0, commit_index + 1): buf = self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE) commit_length += len(UN(buf)) self.__move_cursor_char_length(commit_length - cursor) for i in xrange(0, commit_length): self.__preedit_ja_string.remove_before() self.__move_cursor_char_length(cursor - commit_length) del self.__segments[0:commit_index + 1] if len(self.__segments) == 0: self.__reset() else: if self.__cursor_pos > commit_index: self.__cursor_pos -= (commit_index + 1) else: self.__cursor_pos = 0 text, cursor = self.__get_preedit() self.__convert_chars = text self.__context.set_string(text.encode('utf-8')) self.__lookup_table.clear() self.__lookup_table.set_cursor_visible(False) self.__lookup_table_visible = False self.update_aux_string(u'', IBus.AttrList(), self.__lookup_table_visible) self.__fill_lookup_table() self.__invalidate() self.__update_input_chars() return True def __cmd_commit_first_segment(self, keyval, state): return self.__commit_nth_segment(0, keyval, state) def __cmd_commit_selected_segment(self, keyval, state): return self.__commit_nth_segment(self.__cursor_pos, keyval, state) #candidates_keys def __on_candidate_index_in_page(self, index): if not self._chk_mode('5'): return False if index >= self.__lookup_table.get_page_size(): return False cursor_pos = self.__lookup_table.get_cursor_pos() cursor_in_page = self.__lookup_table.get_cursor_in_page() real_index = cursor_pos - cursor_in_page + index if real_index >= self.__lookup_table.get_number_of_candidates(): return False self.__lookup_table.set_cursor_pos(real_index) index = self.__lookup_table.get_cursor_pos() candidate = UN(self.__lookup_table.get_candidate(index).get_text()) self.__segments[self.__cursor_pos] = index, candidate self.__lookup_table_visible = False self.__on_key_right() self.__invalidate() return True def __cmd_select_first_candidate(self, keyval, state): return self.__on_candidate_index_in_page(0) def __cmd_select_last_candidate(self, keyval, state): return self.__on_candidate_index_in_page( self.__lookup_table.get_page_size() - 1) def __cmd_select_next_candidate(self, keyval, state): if not self._chk_mode('235'): return False return self.__on_key_down() def __cmd_select_prev_candidate(self, keyval, state): if not self._chk_mode('235'): return False return self.__on_key_up() def __cmd_candidates_page_up(self, keyval, state): if not self._chk_mode('5'): return False return self.__on_key_page_up() def __cmd_candidates_page_down(self, keyval, state): if not self._chk_mode('5'): return False return self.__on_key_page_down() #direct_select_keys def __select_keyval(self, keyval): if not self._chk_mode('5'): return False return self.__on_key_number(keyval) def __cmd_select_candidates_1(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_2(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_3(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_4(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_5(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_6(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_7(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_8(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_9(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_0(self, keyval, state): return self.__select_keyval(keyval) #convert_keys def __cmd_convert_to_char_type_forward(self, keyval, state): if self.__convert_mode == CONV_MODE_ANTHY: n = self.__segments[self.__cursor_pos][0] if n == NTH_HIRAGANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) elif n == NTH_KATAKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif n == NTH_HALFKANA_CANDIDATE: return self.__convert_segment_to_latin(-100) elif n == -100: return self.__convert_segment_to_latin(-101) else: return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) if self.__convert_mode == CONV_MODE_KATAKANA: return self.__cmd_convert_to_half_katakana(keyval, state) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return self.__cmd_convert_to_latin(keyval, state) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__cmd_convert_to_wide_latin(keyval, state) elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3): return self.__cmd_convert_to_hiragana(keyval, state) else: return self.__cmd_convert_to_katakana(keyval, state) def __cmd_convert_to_char_type_backward(self, keyval, state): if self.__convert_mode == CONV_MODE_ANTHY: n = self.__segments[self.__cursor_pos][0] if n == NTH_KATAKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) elif n == NTH_HALFKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) elif n == -100: return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif n == -101: return self.__convert_segment_to_latin(-100) else: return self.__convert_segment_to_latin(-101) if self.__convert_mode == CONV_MODE_KATAKANA: return self.__cmd_convert_to_hiragana(keyval, state) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return self.__cmd_convert_to_katakana(keyval, state) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__cmd_convert_to_half_katakana(keyval, state) elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3): return self.__cmd_convert_to_latin(keyval, state) else: return self.__cmd_convert_to_wide_latin(keyval, state) def __convert_segment_to_kana(self, n): if self.__convert_mode == CONV_MODE_ANTHY and -4 <= n <= -2: buf = self.__context.get_segment(self.__cursor_pos, n) self.__segments[self.__cursor_pos] = n, UN(buf) self.__lookup_table_visible = False self.__invalidate() return True return False def __convert_to_hiragana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) return self.__on_key_conv(0) def __convert_to_katakana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) return self.__on_key_conv(1) def __convert_to_half_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: i, s = self.__segments[self.__cursor_pos] if i == -101: return self.__convert_segment_to_latin(-100) elif i == -100: return self.__convert_segment_to_latin(-100) if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3: return self.__on_key_conv(4) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__on_key_conv(4) return self.__on_key_conv(2) def __convert_to_half_katakana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) return self.__on_key_conv(2) def __convert_segment_to_latin(self, n): if self.__convert_mode == CONV_MODE_ANTHY and n in [-100, -101]: start = 0 for i in range(self.__cursor_pos): start += len(UN(self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE))) end = start + len(UN(self.__context.get_segment(self.__cursor_pos, NTH_UNCONVERTED_CANDIDATE))) i, s = self.__segments[self.__cursor_pos] s2 = self.__preedit_ja_string.get_raw(start, end) if n == -101: s2 = u''.join([unichar_half_to_full(c) for c in s2]) if i == n: if s == s2.lower(): s2 = s2.upper() elif s == s2.upper(): s2 = s2.capitalize() elif s == s2 or s == s2.capitalize(): s2 = s2.lower() self.__segments[self.__cursor_pos] = n, s2 self.__lookup_table_visible = False self.__invalidate() return True return False def __convert_to_wide_latin_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_latin(-101) return self.__on_key_conv(3) def __convert_to_latin_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_latin(-100) return self.__on_key_conv(4) def __cmd_convert_to_hiragana(self, keyval, state): return self.__convert_to_hiragana_internal(keyval, state, 0) def __cmd_convert_to_hiragana_all(self, keyval, state): return self.__convert_to_hiragana_internal(keyval, state, 1) def __cmd_convert_to_katakana(self, keyval, state): return self.__convert_to_katakana_internal(keyval, state, 0) def __cmd_convert_to_katakana_all(self, keyval, state): return self.__convert_to_katakana_internal(keyval, state, 1) def __cmd_convert_to_half(self, keyval, state): return self.__convert_to_half_internal(keyval, state, 0) def __cmd_convert_to_half_all(self, keyval, state): return self.__convert_to_half_internal(keyval, state, 1) def __cmd_convert_to_half_katakana(self, keyval, state): return self.__convert_to_half_katakana_internal(keyval, state, 0) def __cmd_convert_to_half_katakana_all(self, keyval, state): return self.__convert_to_half_katakana_internal(keyval, state, 1) def __cmd_convert_to_wide_latin(self, keyval, state): return self.__convert_to_wide_latin_internal(keyval, state, 0) def __cmd_convert_to_wide_latin_all(self, keyval, state): return self.__convert_to_wide_latin_internal(keyval, state, 1) def __cmd_convert_to_latin(self, keyval, state): return self.__convert_to_latin_internal(keyval, state, 0) def __cmd_convert_to_latin_all(self, keyval, state): return self.__convert_to_latin_internal(keyval, state, 1) #dictonary_keys def __cmd_dict_admin(self, keyval, state): if not self._chk_mode('0'): return False self.__start_dict_admin() return True def __cmd_add_word(self, keyval, state): if not self._chk_mode('0'): return False self.__start_add_word() return True def __cmd_start_setup(self, keyval, state): if not self._chk_mode('0'): return False self.__start_setup() return True def __start_dict_admin(self): command = self.__prefs.get_value('common', 'dict-admin-command') os.spawnl(os.P_NOWAIT, *command) def __start_add_word(self): command = self.__prefs.get_value('common', 'add-word-command') os.spawnl(os.P_NOWAIT, *command) def __start_setup(self): if Engine.__setup_pid != 0: pid, state = os.waitpid(Engine.__setup_pid, os.P_NOWAIT) if pid != Engine.__setup_pid: return Engine.__setup_pid = 0 setup_cmd = path.join(config.LIBEXECDIR, 'ibus-setup-anthy') Engine.__setup_pid = os.spawnl(os.P_NOWAIT, setup_cmd, 'ibus-setup-anthy') def __cmd_hiragana_for_latin_with_shift(self, keyval, state): self.__preedit_ja_string.set_hiragana_katakana(True) ibus-anthy-1.5.11/engine/python2/factory.py000066400000000000000000000053611346647371500206000ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import os import sys from gi import require_version as gi_require_version gi_require_version('IBus', '1.0') from gi.repository import IBus import _config as config import engine class EngineFactory(IBus.Factory): FACTORY_PATH = '/com/redhat/IBus/engines/Anthy/Factory' ENGINE_PATH = '/com/redhat/IBus/engines/Anthy/Engine' NAME = 'Anthy' LANG = 'ja' ICON = config.PKGDATADIR + '/icons/ibus-anthy.png' AUTHORS = 'Huang Peng ' CREDITS = 'GPLv2' def __init__(self, bus): self.__bus = bus engine.Engine.CONFIG_RELOADED() super(EngineFactory, self).__init__(object_path=IBus.PATH_FACTORY, connection=bus.get_connection()) self.__id = 0 bus.get_connection().signal_subscribe('org.freedesktop.DBus', 'org.freedesktop.DBus', 'NameOwnerChanged', '/org/freedesktop/DBus', None, 0, self.__name_owner_changed_cb, bus) def do_create_engine(self, engine_name): if engine_name == 'anthy': self.__id += 1 return engine.Engine(self.__bus, '%s/%d' % (self.ENGINE_PATH, self.__id)) return super(EngineFactory, self).do_create_engine(engine_name) def __name_owner_changed_cb(self, connection, sender_name, object_path, interface_name, signal_name, parameters, user_data): if signal_name == 'NameOwnerChanged': engine.Engine.CONFIG_RELOADED() ibus-anthy-1.5.11/engine/python2/ibus-engine-anthy.in000066400000000000000000000021671346647371500224360ustar00rootroot00000000000000#!/bin/sh # # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. export IBUS_PREFIX=@prefix@ export IBUS_ANTHY_PKGDATADIR=@datarootdir@/@PACKAGE@ export LIBEXECDIR=@libexecdir@ exec @ENV_IBUS_ENGINE@ @PYTHON@ @datarootdir@/@PACKAGE@/engine/main.py $@ ibus-anthy-1.5.11/engine/python2/jastring.py000066400000000000000000000273541346647371500207600ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import romaji import kana import thumb from segment import unichar_half_to_full HalfSymbolTable = {} for i in range(32, 127): if not chr(i).isalnum(): HalfSymbolTable[unichar_half_to_full(chr(i))] = chr(i) HalfNumberTable = {} for i in range(10): HalfNumberTable[unichar_half_to_full(str(i))] = str(i) PeriodTable = {u'ใ€‚': u'๏ผŽ', u'ใ€': u'๏ผŒ', u'๏ฝก': u'.', u'๏ฝค': u','} SymbolTable = {} SymbolTable[0] = {u'ใ€Œ': u'ใ€Œ', u'ใ€': u'ใ€', u'๏ผ': u'๏ผ'} SymbolTable[1] = {u'ใ€Œ': u'ใ€Œ', u'ใ€': u'ใ€', u'๏ผ': u'ใƒป'} SymbolTable[2] = {u'ใ€Œ': u'๏ผป', u'ใ€': u'๏ผฝ', u'๏ผ': u'๏ผ'} SymbolTable[3] = {u'ใ€Œ': u'๏ผป', u'ใ€': u'๏ผฝ', u'๏ผ': u'ใƒป'} TYPING_MODE_ROMAJI, \ TYPING_MODE_KANA, \ TYPING_MODE_THUMB_SHIFT = range(3) class JaString: _prefs = None _mode = TYPING_MODE_ROMAJI _shift = False _unshift = False def __init__(self, mode=TYPING_MODE_ROMAJI, latin_with_shift=True): self._init_mode(mode) if mode == TYPING_MODE_ROMAJI: romaji.RomajiSegment.SET_LATIN_WITH_SHIFT(latin_with_shift) @classmethod def _init_mode(cls, mode): cls._mode = mode cls._shift = False cls._unshift = False cls.__cursor = 0 cls.__segments = list() if mode == TYPING_MODE_ROMAJI: romaji.RomajiSegment.INIT_ROMAJI_TYPING_RULE(cls._prefs) elif mode == TYPING_MODE_KANA: kana.KanaSegment.INIT_KANA_TYPING_RULE(cls._prefs) elif mode == TYPING_MODE_THUMB_SHIFT: thumb.ThumbShiftSegment.INIT_THUMB_TYPING_RULE(cls._prefs) @classmethod def SET_PREFS(cls, prefs): cls._prefs = prefs @classmethod def RESET(cls, prefs, section, key, value): cls._prefs = prefs if section == 'kana-typing-rule': mode = TYPING_MODE_KANA kana.KanaSegment.RESET(prefs, section, key, value) cls._init_mode(mode) if section == 'common' and key == 'latin-with-shift': romaji.RomajiSegment.SET_LATIN_WITH_SHIFT(value) def set_shift(self, shift): self._shift = shift def set_hiragana_katakana(self, mode): if mode and self._mode == TYPING_MODE_ROMAJI: self._unshift = True def insert(self, c): segment_before = None segment_after = None new_segments = None if self.__cursor >= 1: segment_before = self.__segments[self.__cursor - 1] if self.__cursor < len(self.__segments): segment_after = self.__segments[self.__cursor] if segment_before and not segment_before.is_finished(): if type(segment_before) == romaji.RomajiSegment: new_segments = segment_before.append(c, self._shift, self._unshift) self._unshift = False else: new_segments = segment_before.append(c) elif segment_after and not segment_after.is_finished(): if type(segment_after) == romaji.RomajiSegment: new_segments = segment_after.prepend(c, self._shift, self._unshift) self._unshift = False else: new_segments = segment_after.prepend(c) else: if c != u'\0' and c != u'': if self._mode == TYPING_MODE_ROMAJI: new_segments = [romaji.RomajiSegment(c, u'', self._shift, self._unshift)] self._unshift = False elif self._mode == TYPING_MODE_KANA: # kana mode doesn't have shift latin in MS. new_segments = [kana.KanaSegment(c)] elif self._mode == TYPING_MODE_THUMB_SHIFT: new_segments = [thumb.ThumbShiftSegment(c)] if new_segments: self.__segments[self.__cursor:self.__cursor] = new_segments self.__cursor += len(new_segments) def remove_before(self): index = self.__cursor - 1 if index >= 0: segment = self.__segments[index] segment.pop() if segment.is_empty(): del self.__segments[index] self.__cursor = index return True return False def remove_after(self): index = self.__cursor if index < len(self.__segments): segment = self.__segments[index] segment.pop() if segment.is_empty(): del self.__segments[index] return True return False def get_string(self, type): pass def move_cursor(self, delta): self.__cursor += delta if self.__cursor < 0: self.__cursor = 0 elif self.__cursor > len(self.__segments): self.__cursor = len(self.__segments) # hiragana segments are not char lengths. # e.g. 'ya' is 1 segment and 1 char and 'kya' is 1 segment and 2 chars. def move_cursor_hiragana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = unicode(self.__segments[self.__cursor].to_hiragana()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = unicode(self.__segments[self.__cursor].to_hiragana()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def move_cursor_katakana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = unicode(self.__segments[self.__cursor].to_katanaka()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = unicode(self.__segments[self.__cursor].to_katanaka()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def move_cursor_half_with_katakana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = unicode(self.__segments[self.__cursor].to_half_width_katakana()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = unicode(self.__segments[self.__cursor].to_half_width_katakana()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def _chk_text(self, s): period = self._prefs.get_value('common', 'period-style') symbol = self._prefs.get_value('common', 'symbol-style') half_symbol = self._prefs.get_value('common', 'half-width-symbol') half_number = self._prefs.get_value('common', 'half-width-number') ret = '' for c in s: c = c if not period else PeriodTable.get(c, c) # thumb_left + '2' and '/' are different if self._mode != TYPING_MODE_THUMB_SHIFT: c = c if not symbol else SymbolTable[symbol].get(c, c) c = c if not half_symbol else HalfSymbolTable.get(c, c) c = c if not half_number else HalfNumberTable.get(c, c) ret += c return ret def get_hiragana(self, commit=False): conv = lambda s: s.to_hiragana() R = lambda s: s if not (commit and s[-1:] == u'n') else s[:-1] + u'ใ‚“' text_before = R(u''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(u''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_katakana(self, commit=False): conv = lambda s: s.to_katakana() R = lambda s: s if not (commit and s[-1:] == u'n') else s[:-1] + u'ใƒณ' text_before = R(u''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(u''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_half_width_katakana(self, commit=False): conv = lambda s: s.to_half_width_katakana() R = lambda s: s if not (commit and s[-1:] == u'n') else s[:-1] + u'๏พ' text_before = R(u''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(u''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_latin(self): conv = lambda s: s.to_latin() text_before = u''.join(map(conv, self.__segments[:self.__cursor])) text_after = u''.join(map(conv, self.__segments[self.__cursor:])) return text_before + text_after, len(text_before) def get_wide_latin(self): conv = lambda s: s.to_wide_latin() text_before = u''.join(map(conv, self.__segments[:self.__cursor])) text_after = u''.join(map(conv, self.__segments[self.__cursor:])) return text_before + text_after, len(text_before) def is_empty(self): return all(map(lambda s: s.is_empty(), self.__segments)) def get_raw(self, start, end): i = 0 r = u'' for s in self.__segments: if i >= end: break elif start <= i: r += s.to_latin() i += len(s.to_hiragana()) return r ibus-anthy-1.5.11/engine/python2/kana.py000066400000000000000000000141401346647371500200360ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from tables import * import segment _UNFINISHED_HIRAGANA = set(u'ใ‹ใใใ‘ใ“ใ•ใ—ใ™ใ›ใใŸใกใคใฆใจใฏใฒใตใธใป') class KanaSegment(segment.Segment): _prefs = None _kana_typing_rule_method = None _kana_voiced_consonant_rule = None _kana_voiced_consonant_dict = None def __init__(self, enchars=u'', jachars=u''): if not jachars: jachars = self.__get_kana_typing_rule(enchars, u'') super(KanaSegment, self).__init__(enchars, jachars) @classmethod def INIT_KANA_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._kana_typing_rule_method = None return if cls._kana_typing_rule_method == None: cls._init_kana_typing_method() if cls._kana_voiced_consonant_rule == None and \ cls._kana_typing_rule_method != None: cls._init_kana_voiced_consonant_rule() @classmethod def _init_kana_typing_method(cls, method=None): prefs = cls._prefs if method == None: method = prefs.get_value('kana-typing-rule', 'method') if method == None: method = 'jp' cls._kana_typing_rule_method = method keymap = prefs.get_value('kana-typing-rule', 'list') if cls._kana_typing_rule_method not in keymap.keys(): cls._kana_typing_rule_method = None @classmethod def _init_kana_voiced_consonant_rule(cls): prefs = cls._prefs # Create kana_voiced_consonant_rule dynamically. # E.g. 't' + '@' on jp kbd becomes Hiragana GA # 't' + '[' on us kbd becomes Hiragana GA # If the customized table provides U+309b with other chars, # it needs to be detected dynamically. cls._kana_voiced_consonant_rule = {} method = cls._kana_typing_rule_method keymap = prefs.get_value('kana-typing-rule', 'list')[method] for gkey in keymap.keys(): value = keymap[gkey] key = prefs.typing_from_config_key(gkey) if key == '': continue if value == unichr(0x309b).encode('utf-8'): for no_voiced, voiced in \ kana_voiced_consonant_no_rule.items(): rule = no_voiced + key.decode('utf-8') cls._kana_voiced_consonant_rule[rule] = voiced if value == unichr(0x309c).encode('utf-8'): for no_voiced, voiced in \ kana_semi_voiced_consonant_no_rule.items(): rule = no_voiced + key.decode('utf-8') cls._kana_voiced_consonant_rule[rule] = voiced @classmethod def RESET(cls, prefs, section, key, value): cls._prefs = prefs if section == 'kana-typing-rule' and value != None: cls._kana_typing_rule_method = None cls._kana_voiced_consonant_rule = None cls.INIT_KANA_TYPING_RULE(prefs) def __get_kana_typing_rule(self, enchars, retval=None): prefs = self._prefs value = None method = self._kana_typing_rule_method if method != None: # Need to send Unicode to typing_to_config_key instead of UTF-8 # not to separate U+A5 gkey = prefs.typing_to_config_key(enchars) if gkey == '': return None enchars = gkey keymap = prefs.get_value('kana-typing-rule', 'list')[method] value = prefs.unicode(keymap.get(enchars)) if value == '': value = None if value == None: value = retval else: value = kana_typing_rule_static.get(enchars, retval) return value def is_finished(self): return not (self._jachars in _UNFINISHED_HIRAGANA) def append(self, enchar): if enchar == u'\0' or enchar == u'': return [] if self._jachars: text = self._jachars + enchar if self._kana_voiced_consonant_rule != None: jachars = self._kana_voiced_consonant_rule.get(text, None) if jachars: self._enchars = self._enchars + enchar self._jachars = jachars return [] return [KanaSegment(enchar)] self._enchars = self._enchars + enchar self._jachars = self.__get_kana_typing_rule(self._enchars, u'') return [] def prepend(self, enchar): if enchar == u'\0' or enchar == u'': return [] if self._enchars == u'': self._enchars = enchar self._jachars = self.__get_kana_typing_rule(self._enchars, u'') return [] return [KanaSegment(enchar)] def pop(self, index=-1): if index == -1: index = len(self._enchars) - 1 if index < 0 or index >= len(self._enchars): raise IndexError('Out of bound') if self.is_finished(): self._enchars = u'' self._jachars = u'' else: enchars = list(self._enchars) del enchars[index] self._enchars = u''.join(enchars) self._jachars = self.__get_kana_typing_rule(self._enchars, u'') ibus-anthy-1.5.11/engine/python2/main.py000066400000000000000000000145721346647371500200610ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. import os from os import path import sys import getopt import locale import xml.dom.minidom from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import GLib # set_prgname before importing factory to show the name in warning # messages when import modules are failed. E.g. Gtk. GLib.set_prgname('ibus-engine-anthy') from gi.repository import IBus import _config as config import factory class IMApp: def __init__(self, exec_by_ibus): command_line = config.LIBEXECDIR + '/ibus-engine-anthy --ibus' self.__component = IBus.Component(name='org.freedesktop.IBus.Anthy', description='Anthy Component', version='0.1.0', license='GPL', author='Peng Huang ', homepage='https://github.com/ibus/ibus/wiki', command_line=command_line, textdomain='ibus-anthy') engine = IBus.EngineDesc(name='anthy', longname='Anthy', description='Anthy Input Method', language='ja', license='GPL', author='Peng Huang ', icon='ibus-anthy', layout=config.LAYOUT, symbol=config.SYMBOL_CHAR, rank=99) self.__component.add_engine(engine) self.__mainloop = GLib.MainLoop() self.__bus = IBus.Bus() self.__bus.connect('disconnected', self.__bus_disconnected_cb) self.__factory = factory.EngineFactory(self.__bus) if exec_by_ibus: self.__bus.request_name('org.freedesktop.IBus.Anthy', 0) else: self.__bus.register_component(self.__component) def run(self): self.__mainloop.run() def __bus_disconnected_cb(self, bus): self.__mainloop.quit() def launch_engine(exec_by_ibus): IMApp(exec_by_ibus).run() def get_userhome(): if 'HOME' not in os.environ: import pwd userhome = pwd.getpwuid(os.getuid()).pw_dir else: userhome = os.environ['HOME'] userhome = userhome.rstrip('/') return userhome def resync_engine_file(): user_config = path.join(get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') if not path.exists(user_config): return if not path.exists(system_config): os.unlink(user_config) return # path.getmtime depends on the build time rather than install time. def __get_engine_file_version(engine_file): version_str = '' dom = xml.dom.minidom.parse(engine_file) elements = dom.getElementsByTagName('version') nodes = [] if len(elements) > 0: nodes = elements[0].childNodes if len(nodes) > 0: version_str = nodes[0].data if type(version_str) == unicode: version_str = str(version_str) if version_str != '': version_str = version_str.strip() return version_str user_config_version = __get_engine_file_version(user_config) system_config_version = __get_engine_file_version(system_config) if system_config_version > user_config_version: import shutil shutil.copyfile(system_config, user_config) def print_xml(): user_config = os.path.join(get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = os.path.join(config.PKGDATADIR, 'engine', 'default.xml') xml = None for f in [user_config, system_config]: if os.path.exists(f): xml = f break if xml == None: print >> sys.stderr, 'Not exist: %s' % system_config return file = open(xml, 'r') print file.read() file.close() def print_help(out, v = 0): print >> out, '-i, --ibus executed by ibus.' print >> out, '-h, --help show this message.' print >> out, '-d, --daemonize daemonize ibus.' print >> out, '-x, --xml print engine xml.' sys.exit(v) def main(): try: locale.setlocale(locale.LC_ALL, '') except: pass exec_by_ibus = False daemonize = False xml = False shortopt = 'ihdx' longopt = ['ibus', 'help', 'daemonize', 'xml'] 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 elif o in ('-x', '--xml'): xml = True else: print >> sys.stderr, 'Unknown argument: %s' % o print_help(sys.stderr, 1) if daemonize: if os.fork(): sys.exit() if xml: resync_engine_file() print_xml() return launch_engine(exec_by_ibus) if __name__ == '__main__': main() ibus-anthy-1.5.11/engine/python2/romaji.py000066400000000000000000000220321346647371500204040ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from tables import * import segment def romaji_correction_rule_get(k, d): return (u'ใ‚“', k[1:2]) if k[0:1] == u'n' and not k[1:2] in u"aiueony'" else d class RomajiSegment(segment.Segment): _prefs = None _romaji_typing_rule_method = None _latin_with_shift = True _shift_mode = False def __init__(self, enchars=u'', jachars=u'', shift=False, unshift=False): if self._latin_with_shift: # If Shift key is pressed, Latin mode. # If Hiragana_Katakana key is pressed, Hiragana mode. if shift: self._shift_mode = True if unshift: self._shift_mode = False enchars_orig = enchars # Even if the chars are capital with CapsLock, Hiragana # should be converted. E.g. 'SA' enchars = enchars.lower() if not jachars and not shift: jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, u'') super(RomajiSegment, self).__init__(enchars_orig, jachars) @classmethod def INIT_ROMAJI_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._romaji_typing_rule_method = None return method = prefs.get_value('romaji-typing-rule', 'method') if method == None: method = 'default' cls._romaji_typing_rule_method = method keymap = prefs.get_value('romaji-typing-rule', 'list') if cls._romaji_typing_rule_method not in keymap.keys(): cls._romaji_typing_rule_method = None @classmethod def SET_LATIN_WITH_SHIFT(cls, latin_with_shift): # Do not use IBus.Config in every conversion for the performance. cls._latin_with_shift = latin_with_shift def __get_romaji_typing_rule(self, enchars, retval=None): prefs = self._prefs value = None method = self._romaji_typing_rule_method if method != None: # Need to send Unicode to typing_to_config_key instead of UTF-8 # not to separate U+A5 gkey = prefs.typing_to_config_key(enchars) if gkey == '': return None keymap = prefs.get_value('romaji-typing-rule', 'list')[method] value = prefs.unicode(keymap.get(gkey)) if value == '': value = None if value == None: value = retval else: value = romaji_typing_rule_static.get(enchars, retval) return value def is_finished(self): return self._jachars != u'' def append(self, enchar, shift=False, unshift=False): if self.is_finished(): if enchar == u'' and enchar == u'\0': return [] return [RomajiSegment(enchar)] text_orig = self._enchars + enchar text = text_orig.lower() if self._latin_with_shift: # If Shift key is pressed, Latin mode. # If Hiragana_Katakana key is pressed, Hiragana mode. if shift: self._shift_mode = True if unshift: self._shift_mode = False if self._shift_mode: self._enchars = text_orig return [] if shift: self._enchars = text_orig return [] jachars = self.__get_romaji_typing_rule(text, None) if jachars == None: jachars = symbol_rule.get(text, None) if jachars: self._enchars = text_orig self._jachars = jachars return [] jachars, c = romaji_double_consonat_typing_rule.get(text, (None, None)) if jachars: self._enchars = text_orig[0] self._jachars = jachars return [RomajiSegment(c)] # jachars, c = romaji_correction_rule.get(text, (None, None)) jachars, c = romaji_correction_rule_get(text, (None, None)) if jachars: self._enchars = text_orig[0] self._jachars = jachars return [RomajiSegment(c)] for i in range(-min(4, len(text)), 0): enchars = text[i:] jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, None) if jachars: jasegment = RomajiSegment(enchars, jachars) self._enchars = text_orig[:i] return [jasegment] jachars, c = romaji_double_consonat_typing_rule.get(enchars, (None, None)) if jachars: jasegment = RomajiSegment(enchars[:-len(c)], jachars) self._enchars = text_orig[:i] if c: return [jasegment, RomajiSegment(c)] return [jasegment] # jachars, c = romaji_correction_rule.get(enchars, (None, None)) jachars, c = romaji_correction_rule_get(enchars, (None, None)) if jachars: jasegment = RomajiSegment(enchars[:-len(c)], jachars) self._enchars = text_orig[:i] if c: return [jasegment, RomajiSegment(c)] return [jasegment] self._enchars = text_orig return [] def prepend(self, enchar, shift=False, unshift=False): if enchar == u'' or enchar == u'\0': return [] if self.is_finished(): return [RomajiSegment(enchar)] text_orig = enchar + self._enchars text = text_orig.lower() if self._latin_with_shift: if shift: self._shift_mode = True if unshift: self._shift_mode = False if self._shift_mode: self._enchars = text_orig return [] if shift: self._enchars = text_orig return [] jachars = self.__get_romaji_typing_rule(text, None) if jachars == None: jachars = symbol_rule.get(text, None) if jachars: self._enchars = text_orig self._jachars = jachars return [] jachars, c = romaji_double_consonat_typing_rule.get(text, (None, None)) if jachars: self._enchars = c return [RomajiSegment(text_orig[0], jachars)] # jachars, c = romaji_correction_rule.get(text, (None, None)) jachars, c = romaji_correction_rule_get(text, (None, None)) if jachars: self._enchars = c return [RomajiSegment(text_orig[0], jachars)] for i in range(min(4, len(text)), 0, -1): enchars = text[:i] jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, None) if jachars: jasegment = RomajiSegment(enchars, jachars) self._enchars = text_orig[i:] return [jasegment] jachars, c = romaji_double_consonat_typing_rule.get(enchars, (None, None)) if jachars: self._enchars = c + text_orig[i:] return [RomajiSegment(enchars[:-len(c)], jachars)] # jachars, c = romaji_correction_rule.get(enchars, (None, None)) jachars, c = romaji_correction_rule_get(enchars, (None, None)) if jachars: self._enchars = c + text_orig[i:] return [RomajiSegment(enchars[:-len(c)], jachars)] self._enchars = text_orig return [] def pop(self, index=-1): if index == -1: index = len(self._enchars) - 1 if index < 0 or index >= len(self._enchars): raise IndexError('Out of bound') if self.is_finished(): self._enchars = u'' self._jachars = u'' else: enchars = list(self._enchars) del enchars[index] self._enchars = u''.join(enchars) jachars = self.__get_romaji_typing_rule(self._enchars, None) if jachars == None: jachars = symbol_rule.get(self._enchars, u'') self._jachars = jachars ibus-anthy-1.5.11/engine/python2/segment.py000066400000000000000000000055641346647371500206000ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2007-2013 Red Hat, Inc. # # 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. from tables import * _half_full_table = [ (0x0020, 0x3000, 1), (0x0021, 0xFF01, 0x5E), ] def _h_to_f(c): code = ord (c) for half, full, size in _half_full_table: if code >= half and code < half + size: return unichr (full + code - half) return c def unichar_half_to_full(c): tdl = {'"': u'\u201d', "'": u'\u2019', '`': u'\u2018'} return tdl[c] if c in tdl else _h_to_f(c) class Segment(object): def __init__(self, enchars=u'', jachars=u''): self._enchars = enchars self._jachars = jachars def append(self, enchar): raise NotImplementedError('append() is not implemented') def prepend(self, enchar): raise NotImplementedError('prepend() is not implemented') def pop(self, index=-1): raise NotImplementedError('pop() is not implemented') def is_finished(self): raise NotImplementedError('is_finised() is not implemented') def set_enchars(self, enchars): self.enchars = enchars def get_enchars(self): return self._enchars def set_jachars(self, jachars): self._jachars = jachars def get_jachars(self): return self._jachars def to_hiragana(self): if self._jachars: return self._jachars return self._enchars def to_katakana(self): if self._jachars: return u''.join(map(lambda c: hiragana_katakana_table.get(c, (c, c, c))[0], self._jachars)) return self._enchars def to_half_width_katakana(self): if self._jachars: return u''.join(map(lambda c: hiragana_katakana_table.get(c, (c, c, c))[1], self._jachars)) return self._enchars def to_latin(self): return self._enchars def to_wide_latin(self): return u''.join(map(unichar_half_to_full, self._enchars)) def is_empty(self): if self._enchars or self._jachars: return False return True ibus-anthy-1.5.11/engine/python2/tables.py000066400000000000000000000414031346647371500204000ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2007-2013 Red Hat, Inc. # # 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. # string, result, cont romaji_typing_rule_static = { u'-' : u'ใƒผ', u'a' : u'ใ‚', u'i' : u'ใ„', u'u' : u'ใ†', u'e' : u'ใˆ', u'o' : u'ใŠ', u'xa' : u'ใ', u'xi' : u'ใƒ', u'xu' : u'ใ…', u'xe' : u'ใ‡', u'xo' : u'ใ‰', u'la' : u'ใ', u'li' : u'ใƒ', u'lu' : u'ใ…', u'le' : u'ใ‡', u'lo' : u'ใ‰', u'wha' : u'ใ†ใ', u'whi' : u'ใ†ใƒ', u'whe' : u'ใ†ใ‡', u'who' : u'ใ†ใ‰', u'va' : u'ใƒดใ', u'vi' : u'ใƒดใƒ', u'vu' : u'ใƒด', u've' : u'ใƒดใ‡', u'vo' : u'ใƒดใ‰', u'ka' : u'ใ‹', u'ki' : u'ใ', u'ku' : u'ใ', u'ke' : u'ใ‘', u'ko' : u'ใ“', u'lka' : u'ใƒต', u'lke' : u'ใƒถ', # u'xka' : u'ใ‚•', u'xka' : u'ใƒต', # u'xke' : u'ใ‚–', u'xke' : u'ใƒถ', u'ga' : u'ใŒ', u'gi' : u'ใŽ', u'gu' : u'ใ', u'ge' : u'ใ’', u'go' : u'ใ”', u'kya' : u'ใใ‚ƒ', u'kyi' : u'ใใƒ', u'kyu' : u'ใใ‚…', u'kye' : u'ใใ‡', u'kyo' : u'ใใ‚‡', u'kwa' : u'ใใ', u'gya' : u'ใŽใ‚ƒ', u'gyi' : u'ใŽใƒ', u'gyu' : u'ใŽใ‚…', u'gye' : u'ใŽใ‡', u'gyo' : u'ใŽใ‚‡', u'gwa' : u'ใใ', u'sa' : u'ใ•', u'si' : u'ใ—', u'su' : u'ใ™', u'se' : u'ใ›', u'so' : u'ใ', u'za' : u'ใ–', u'zi' : u'ใ˜', u'zu' : u'ใš', u'ze' : u'ใœ', u'zo' : u'ใž', u'sya' : u'ใ—ใ‚ƒ', u'syi' : u'ใ—ใƒ', u'syu' : u'ใ—ใ‚…', u'sye' : u'ใ—ใ‡', u'syo' : u'ใ—ใ‚‡', u'sha' : u'ใ—ใ‚ƒ', u'shi' : u'ใ—', u'shu' : u'ใ—ใ‚…', u'she' : u'ใ—ใ‡', u'sho' : u'ใ—ใ‚‡', u'zya' : u'ใ˜ใ‚ƒ', u'zyi' : u'ใ˜ใƒ', u'zyu' : u'ใ˜ใ‚…', u'zye' : u'ใ˜ใ‡', u'zyo' : u'ใ˜ใ‚‡', u'ja' : u'ใ˜ใ‚ƒ', u'jya' : u'ใ˜ใ‚ƒ', u'ji' : u'ใ˜', u'jyi' : u'ใ˜ใƒ', u'ju' : u'ใ˜ใ‚…', u'jyu' : u'ใ˜ใ‚…', u'je' : u'ใ˜ใ‡', u'jye' : u'ใ˜ใ‡', u'jo' : u'ใ˜ใ‚‡', u'jyo' : u'ใ˜ใ‚‡', u'ta' : u'ใŸ', u'ti' : u'ใก', u'tu' : u'ใค', u'tsu' : u'ใค', u'te' : u'ใฆ', u'to' : u'ใจ', u'da' : u'ใ ', u'di' : u'ใข', u'du' : u'ใฅ', u'de' : u'ใง', u'do' : u'ใฉ', u'xtu' : u'ใฃ', u'xtsu' : u'ใฃ', u'ltu' : u'ใฃ', u'ltsu' : u'ใฃ', u'tya' : u'ใกใ‚ƒ', u'tyi' : u'ใกใƒ', u'tyu' : u'ใกใ‚…', u'tye' : u'ใกใ‡', u'tyo' : u'ใกใ‚‡', u'cya' : u'ใกใ‚ƒ', u'cyi' : u'ใกใƒ', u'cyu' : u'ใกใ‚…', u'cye' : u'ใกใ‡', u'cyo' : u'ใกใ‚‡', u'cha' : u'ใกใ‚ƒ', u'chi' : u'ใก', u'chu' : u'ใกใ‚…', u'che' : u'ใกใ‡', u'cho' : u'ใกใ‚‡', u'dya' : u'ใขใ‚ƒ', u'dyi' : u'ใขใƒ', u'dyu' : u'ใขใ‚…', u'dye' : u'ใขใ‡', u'dyo' : u'ใขใ‚‡', u'tsa' : u'ใคใ', u'tsi' : u'ใคใƒ', u'tse' : u'ใคใ‡', u'tso' : u'ใคใ‰', u'tha' : u'ใฆใ‚ƒ', u'thi' : u'ใฆใƒ', u'thu' : u'ใฆใ‚…', u'the' : u'ใฆใ‡', u'tho' : u'ใฆใ‚‡', u'twu' : u'ใจใ…', u'dha' : u'ใงใ‚ƒ', u'dhi' : u'ใงใƒ', u'dhu' : u'ใงใ‚…', u'dhe' : u'ใงใ‡', u'dho' : u'ใงใ‚‡', u'dwu' : u'ใฉใ…', u'na' : u'ใช', u'ni' : u'ใซ', u'nu' : u'ใฌ', u'ne' : u'ใญ', u'no' : u'ใฎ', u'nya' : u'ใซใ‚ƒ', u'nyi' : u'ใซใƒ', u'nyu' : u'ใซใ‚…', u'nye' : u'ใซใ‡', u'nyo' : u'ใซใ‚‡', u'ha' : u'ใฏ', u'hi' : u'ใฒ', u'hu' : u'ใต', u'he' : u'ใธ', u'ho' : u'ใป', u'ba' : u'ใฐ', u'bi' : u'ใณ', u'bu' : u'ใถ', u'be' : u'ใน', u'bo' : u'ใผ', u'pa' : u'ใฑ', u'pi' : u'ใด', u'pu' : u'ใท', u'pe' : u'ใบ', u'po' : u'ใฝ', u'hya' : u'ใฒใ‚ƒ', u'hyi' : u'ใฒใƒ', u'hyu' : u'ใฒใ‚…', u'hye' : u'ใฒใ‡', u'hyo' : u'ใฒใ‚‡', u'bya' : u'ใณใ‚ƒ', u'byi' : u'ใณใƒ', u'byu' : u'ใณใ‚…', u'bye' : u'ใณใ‡', u'byo' : u'ใณใ‚‡', u'pya' : u'ใดใ‚ƒ', u'pyi' : u'ใดใƒ', u'pyu' : u'ใดใ‚…', u'pye' : u'ใดใ‡', u'pyo' : u'ใดใ‚‡', u'fa' : u'ใตใ', u'fi' : u'ใตใƒ', u'fu' : u'ใต', u'fe' : u'ใตใ‡', u'fo' : u'ใตใ‰', u'fya' : u'ใตใ‚ƒ', u'fyi' : u'ใตใƒ', u'fyu' : u'ใตใ‚…', u'fye' : u'ใตใ‡', u'fyo' : u'ใตใ‚‡', u'ma' : u'ใพ', u'mi' : u'ใฟ', u'mu' : u'ใ‚€', u'me' : u'ใ‚', u'mo' : u'ใ‚‚', u'mya' : u'ใฟใ‚ƒ', u'myi' : u'ใฟใƒ', u'myu' : u'ใฟใ‚…', u'mye' : u'ใฟใ‡', u'myo' : u'ใฟใ‚‡', u'ya' : u'ใ‚„', u'yi' : u'ใ„', u'yu' : u'ใ‚†', u'ye' : u'ใ„ใ‡', u'yo' : u'ใ‚ˆ', u'lya' : u'ใ‚ƒ', u'lyi' : u'ใƒ', u'lyu' : u'ใ‚…', u'lye' : u'ใ‡', u'lyo' : u'ใ‚‡', u'xya' : u'ใ‚ƒ', u'xyi' : u'ใƒ', u'xyu' : u'ใ‚…', u'xye' : u'ใ‡', u'xyo' : u'ใ‚‡', u'ra' : u'ใ‚‰', u'ri' : u'ใ‚Š', u'ru' : u'ใ‚‹', u're' : u'ใ‚Œ', u'ro' : u'ใ‚', u'rya' : u'ใ‚Šใ‚ƒ', u'ryi' : u'ใ‚Šใƒ', u'ryu' : u'ใ‚Šใ‚…', u'rye' : u'ใ‚Šใ‡', u'ryo' : u'ใ‚Šใ‚‡', u'wa' : u'ใ‚', u'wi' : u'ใ†ใƒ', u'wu' : u'ใ†', u'we' : u'ใ†ใ‡', u'wo' : u'ใ‚’', u'lwa' : u'ใ‚Ž', u'xwa' : u'ใ‚Ž', u'n\'' : u'ใ‚“', u'nn' : u'ใ‚“', u'wyi' : u'ใ‚', u'wye' : u'ใ‚‘', } symbol_rule = { # symbols u' ' : u'ใ€€', u',' : u'ใ€', u'.' : u'ใ€‚', u'!' : u'๏ผ', u'"' : u'\u201d', u'#' : u'๏ผƒ', u'$' : u'๏ผ„', u'%' : u'๏ผ…', u'&' : u'๏ผ†', u'\'' : u'\u2019', u'(' : u'๏ผˆ', u')' : u'๏ผ‰', u'~' : u'\uff5e', u'-' : u'ใƒผ', u'=' : u'๏ผ', u'^' : u'๏ผพ', u'\\' : u'๏ผผ', u'|' : u'๏ฝœ', u'`' : u'\u2018', u'@' : u'๏ผ ', u'{' : u'๏ฝ›', u'[' : u'ใ€Œ', u'+' : u'๏ผ‹', u';' : u'๏ผ›', u'*' : u'๏ผŠ', u':' : u'๏ผš', u'}' : u'๏ฝ', u']' : u'ใ€', u'<' : u'๏ผœ', u'>' : u'๏ผž', u'?' : u'๏ผŸ', u'/' : u'๏ผ', u'_' : u'๏ผฟ', u'ยฅ' : u'๏ฟฅ', # numbers u'0': u'๏ผ', u'1': u'๏ผ‘', u'2': u'๏ผ’', u'3': u'๏ผ“', u'4': u'๏ผ”', u'5': u'๏ผ•', u'6': u'๏ผ–', u'7': u'๏ผ—', u'8': u'๏ผ˜', u'9': u'๏ผ™', } # this is only used with romaji_typing_rule romaji_double_consonat_typing_rule = { # double consonant rule u'bb' : (u'ใฃ', u'b'), u'cc' : (u'ใฃ', u'c'), u'dd' : (u'ใฃ', u'd'), u'ff' : (u'ใฃ', u'f'), u'gg' : (u'ใฃ', u'g'), u'hh' : (u'ใฃ', u'h'), u'jj' : (u'ใฃ', u'j'), u'kk' : (u'ใฃ', u'k'), u'mm' : (u'ใฃ', u'm'), u'pp' : (u'ใฃ', u'p'), u'rr' : (u'ใฃ', u'r'), u'ss' : (u'ใฃ', u's'), u'tt' : (u'ใฃ', u't'), u'vv' : (u'ใฃ', u'v'), u'ww' : (u'ใฃ', u'w'), u'xx' : (u'ใฃ', u'x'), u'yy' : (u'ใฃ', u'y'), u'zz' : (u'ใฃ', u'z'), } # this is only used with romaji_typing_rule romaji_correction_rule = { u'nb' : (u'ใ‚“', u'b'), u'nc' : (u'ใ‚“', u'c'), u'nd' : (u'ใ‚“', u'd'), u'nf' : (u'ใ‚“', u'f'), u'ng' : (u'ใ‚“', u'g'), u'nh' : (u'ใ‚“', u'h'), u'nj' : (u'ใ‚“', u'j'), u'nk' : (u'ใ‚“', u'k'), u'nl' : (u'ใ‚“', u'l'), u'nm' : (u'ใ‚“', u'm'), u'np' : (u'ใ‚“', u'p'), u'nr' : (u'ใ‚“', u'r'), u'ns' : (u'ใ‚“', u's'), u'nt' : (u'ใ‚“', u't'), u'nv' : (u'ใ‚“', u'v'), u'nw' : (u'ใ‚“', u'w'), u'nx' : (u'ใ‚“', u'x'), u'nz' : (u'ใ‚“', u'z'), u'n\0' : (u'ใ‚“', u''), u'n,' : (u'ใ‚“', u','), u'n.' : (u'ใ‚“', u'.'), } # EUC-JP and SJIS do not have the chars romaji_utf8_rule = { u'ใ†ใ‚›' : [u'ใ‚”'], } # Hiragana normalization is needed for the personal dict. romaji_normalize_rule = { u'ใƒด' : [u'ใ†ใ‚›'], } # a port of 101kana.sty from scim-anthy kana_typing_rule_static = { # no modifiers keys u'1' : u'ใฌ', u'2' : u'ใต', u'3' : u'ใ‚', u'4' : u'ใ†', u'5' : u'ใˆ', u'6' : u'ใŠ', u'7' : u'ใ‚„', u'8' : u'ใ‚†', u'9' : u'ใ‚ˆ', u'0' : u'ใ‚', u'-' : u'ใป', u'^' : u'ใธ', u'q' : u'ใŸ', u'w' : u'ใฆ', u'e' : u'ใ„', u'r' : u'ใ™', u't' : u'ใ‹', u'y' : u'ใ‚“', u'u' : u'ใช', u'i' : u'ใซ', u'o' : u'ใ‚‰', u'p' : u'ใ›', u'@' : u'ใ‚›', u'[' : u'ใ‚œ', u'a' : u'ใก', u's' : u'ใจ', u'd' : u'ใ—', u'f' : u'ใฏ', u'g' : u'ใ', u'h' : u'ใ', u'j' : u'ใพ', u'k' : u'ใฎ', u'l' : u'ใ‚Š', u';' : u'ใ‚Œ', u':' : u'ใ‘', u']' : u'ใ‚€', u'z' : u'ใค', u'x' : u'ใ•', u'c' : u'ใ', u'v' : u'ใฒ', u'b' : u'ใ“', u'n' : u'ใฟ', u'm' : u'ใ‚‚', u',' : u'ใญ', u'.' : u'ใ‚‹', u'/' : u'ใ‚', # u'\\' : u'ใƒผ', u'\\' : u'ใ‚', # shift modifiered keys u'!' : u'ใฌ', u'"' : u'ใต', u'#' : u'ใ', u'$' : u'ใ…', u'%' : u'ใ‡', u'&' : u'ใ‰', u'\'' : u'ใ‚ƒ', u'(' : u'ใ‚…', u')' : u'ใ‚‡', u'~' : u'ใ‚’', u'=' : u'ใป', u'|' : u'ใƒผ', u'Q' : u'ใŸ', u'W' : u'ใฆ', u'E' : u'ใƒ', u'R' : u'ใ™', u'T' : u'ใƒต', u'Y' : u'ใ‚“', u'U' : u'ใช', u'I' : u'ใซ', u'O' : u'ใ‚‰', u'P' : u'ใ›', u'`' : u'ใ‚›', u'{' : u'ใ€Œ', u'A' : u'ใก', u'S' : u'ใจ', u'D' : u'ใ—', u'F' : u'ใ‚Ž', u'G' : u'ใ', u'H' : u'ใ', u'J' : u'ใพ', u'K' : u'ใฎ', u'L' : u'ใ‚Š', u'+' : u'ใ‚Œ', u'*' : u'ใƒถ', u'}' : u'ใ€', u'Z' : u'ใฃ', u'X' : u'ใ•', u'C' : u'ใ', u'V' : u'ใ‚', u'B' : u'ใ“', u'M' : u'ใ‚‚', u'N' : u'ใฟ', u'<' : u'ใ€', u'>' : u'ใ€‚', u'?' : u'ใƒป', u'_' : u'ใ‚', u'ยฅ' : u'ใƒผ', } kana_voiced_consonant_no_rule = { u'ใ‹' : u'ใŒ', u'ใ' : u'ใŽ', u'ใ' : u'ใ', u'ใ‘' : u'ใ’', u'ใ“' : u'ใ”', u'ใ•' : u'ใ–', u'ใ—' : u'ใ˜', u'ใ™' : u'ใš', u'ใ›' : u'ใœ', u'ใ' : u'ใž', u'ใŸ' : u'ใ ', u'ใก' : u'ใข', u'ใค' : u'ใฅ', u'ใฆ' : u'ใง', u'ใจ' : u'ใฉ', u'ใฏ' : u'ใฐ', u'ใฒ' : u'ใณ', u'ใต' : u'ใถ', u'ใธ' : u'ใน', u'ใป' : u'ใผ', } kana_semi_voiced_consonant_no_rule = { u'ใฏ' : u'ใฑ', u'ใฒ' : u'ใด', u'ใต' : u'ใท', u'ใธ' : u'ใบ', u'ใป' : u'ใฝ', } # Create the table dynamically with kana_voiced_consonant_no_rule # #kana_voiced_consonant_rule = { # u'ใ‹@' : u'ใŒ', # u'ใ@' : u'ใŽ', # u'ใ@' : u'ใ', # u'ใ‘@' : u'ใ’', # u'ใ“@' : u'ใ”', # u'ใ•@' : u'ใ–', # u'ใ—@' : u'ใ˜', # u'ใ™@' : u'ใš', # u'ใ›@' : u'ใœ', # u'ใ@' : u'ใž', # u'ใŸ@' : u'ใ ', # u'ใก@' : u'ใข', # u'ใค@' : u'ใฅ', # u'ใฆ@' : u'ใง', # u'ใจ@' : u'ใฉ', # u'ใฏ@' : u'ใฐ', # u'ใฒ@' : u'ใณ', # u'ใต@' : u'ใถ', # u'ใธ@' : u'ใน', # u'ใป@' : u'ใผ', # u'ใ‹`' : u'ใŒ', # u'ใ`' : u'ใŽ', # u'ใ`' : u'ใ', # u'ใ‘`' : u'ใ’', # u'ใ“`' : u'ใ”', # u'ใ•`' : u'ใ–', # u'ใ—`' : u'ใ˜', # u'ใ™`' : u'ใš', # u'ใ›`' : u'ใœ', # u'ใ`' : u'ใž', # u'ใŸ`' : u'ใ ', # u'ใก`' : u'ใข', # u'ใค`' : u'ใฅ', # u'ใฆ`' : u'ใง', # u'ใจ`' : u'ใฉ', # u'ใฏ`' : u'ใฐ', # u'ใฒ`' : u'ใณ', # u'ใต`' : u'ใถ', # u'ใธ`' : u'ใน', # u'ใป`' : u'ใผ', # u'ใฏ[' : u'ใฑ', # u'ใฒ[' : u'ใด', # u'ใต[' : u'ใท', # u'ใธ[' : u'ใบ', # u'ใป[' : u'ใฝ', #} # #kana_voiced_consonant_us_rule = { # u'ใ‹[' : u'ใŒ', # u'ใ[' : u'ใŽ', # u'ใ[' : u'ใ', # u'ใ‘[' : u'ใ’', # u'ใ“[' : u'ใ”', # u'ใ•[' : u'ใ–', # u'ใ—[' : u'ใ˜', # u'ใ™[' : u'ใš', # u'ใ›[' : u'ใœ', # u'ใ[' : u'ใž', # u'ใŸ[' : u'ใ ', # u'ใก[' : u'ใข', # u'ใค[' : u'ใฅ', # u'ใฆ[' : u'ใง', # u'ใจ[' : u'ใฉ', # u'ใฏ[' : u'ใฐ', # u'ใฒ[' : u'ใณ', # u'ใต[' : u'ใถ', # u'ใธ[' : u'ใน', # u'ใป[' : u'ใผ', # u'ใฏ]' : u'ใฑ', # u'ใฒ]' : u'ใด', # u'ใต]' : u'ใท', # u'ใธ]' : u'ใบ', # u'ใป]' : u'ใฝ', #} #hiragana, katakana, half_katakana hiragana_katakana_table = { u'ใ‚' : (u'ใ‚ข', u'๏ฝฑ'), u'ใ„' : (u'ใ‚ค', u'๏ฝฒ'), u'ใ†' : (u'ใ‚ฆ', u'๏ฝณ'), u'ใˆ' : (u'ใ‚จ', u'๏ฝด'), u'ใŠ' : (u'ใ‚ช', u'๏ฝต'), u'ใ‹' : (u'ใ‚ซ', u'๏ฝถ'), u'ใ' : (u'ใ‚ญ', u'๏ฝท'), u'ใ' : (u'ใ‚ฏ', u'๏ฝธ'), u'ใ‘' : (u'ใ‚ฑ', u'๏ฝน'), u'ใ“' : (u'ใ‚ณ', u'๏ฝบ'), u'ใŒ' : (u'ใ‚ฌ', u'๏ฝถ๏พž'), u'ใŽ' : (u'ใ‚ฎ', u'๏ฝท๏พž'), u'ใ' : (u'ใ‚ฐ', u'๏ฝธ๏พž'), u'ใ’' : (u'ใ‚ฒ', u'๏ฝน๏พž'), u'ใ”' : (u'ใ‚ด', u'๏ฝบ๏พž'), u'ใ•' : (u'ใ‚ต', u'๏ฝป'), u'ใ—' : (u'ใ‚ท', u'๏ฝผ'), u'ใ™' : (u'ใ‚น', u'๏ฝฝ'), u'ใ›' : (u'ใ‚ป', u'๏ฝพ'), u'ใ' : (u'ใ‚ฝ', u'๏ฝฟ'), u'ใ–' : (u'ใ‚ถ', u'๏ฝป๏พž'), u'ใ˜' : (u'ใ‚ธ', u'๏ฝผ๏พž'), u'ใš' : (u'ใ‚บ', u'๏ฝฝ๏พž'), u'ใœ' : (u'ใ‚ผ', u'๏ฝพ๏พž'), u'ใž' : (u'ใ‚พ', u'๏ฝฟ๏พž'), u'ใŸ' : (u'ใ‚ฟ', u'๏พ€'), u'ใก' : (u'ใƒ', u'๏พ'), u'ใค' : (u'ใƒ„', u'๏พ‚'), u'ใฆ' : (u'ใƒ†', u'๏พƒ'), u'ใจ' : (u'ใƒˆ', u'๏พ„'), u'ใ ' : (u'ใƒ€', u'๏พ€๏พž'), u'ใข' : (u'ใƒ‚', u'๏พ๏พž'), u'ใฅ' : (u'ใƒ…', u'๏พ‚๏พž'), u'ใง' : (u'ใƒ‡', u'๏พƒ๏พž'), u'ใฉ' : (u'ใƒ‰', u'๏พ„๏พž'), u'ใช' : (u'ใƒŠ', u'๏พ…'), u'ใซ' : (u'ใƒ‹', u'๏พ†'), u'ใฌ' : (u'ใƒŒ', u'๏พ‡'), u'ใญ' : (u'ใƒ', u'๏พˆ'), u'ใฎ' : (u'ใƒŽ', u'๏พ‰'), u'ใฏ' : (u'ใƒ', u'๏พŠ'), u'ใฒ' : (u'ใƒ’', u'๏พ‹'), u'ใต' : (u'ใƒ•', u'๏พŒ'), u'ใธ' : (u'ใƒ˜', u'๏พ'), u'ใป' : (u'ใƒ›', u'๏พŽ'), u'ใฐ' : (u'ใƒ', u'๏พŠ๏พž'), u'ใณ' : (u'ใƒ“', u'๏พ‹๏พž'), u'ใถ' : (u'ใƒ–', u'๏พŒ๏พž'), u'ใน' : (u'ใƒ™', u'๏พ๏พž'), u'ใผ' : (u'ใƒœ', u'๏พŽ๏พž'), u'ใฑ' : (u'ใƒ‘', u'๏พŠ๏พŸ'), u'ใด' : (u'ใƒ”', u'๏พ‹๏พŸ'), u'ใท' : (u'ใƒ—', u'๏พŒ๏พŸ'), u'ใบ' : (u'ใƒš', u'๏พ๏พŸ'), u'ใฝ' : (u'ใƒ', u'๏พŽ๏พŸ'), u'ใพ' : (u'ใƒž', u'๏พ'), u'ใฟ' : (u'ใƒŸ', u'๏พ'), u'ใ‚€' : (u'ใƒ ', u'๏พ‘'), u'ใ‚' : (u'ใƒก', u'๏พ’'), u'ใ‚‚' : (u'ใƒข', u'๏พ“'), u'ใ‚„' : (u'ใƒค', u'๏พ”'), u'ใ‚†' : (u'ใƒฆ', u'๏พ•'), u'ใ‚ˆ' : (u'ใƒจ', u'๏พ–'), u'ใ‚‰' : (u'ใƒฉ', u'๏พ—'), u'ใ‚Š' : (u'ใƒช', u'๏พ˜'), u'ใ‚‹' : (u'ใƒซ', u'๏พ™'), u'ใ‚Œ' : (u'ใƒฌ', u'๏พš'), u'ใ‚' : (u'ใƒญ', u'๏พ›'), u'ใ‚' : (u'ใƒฏ', u'๏พœ'), u'ใ‚’' : (u'ใƒฒ', u'๏ฝฆ'), u'ใ‚“' : (u'ใƒณ', u'๏พ'), u'ใ' : (u'ใ‚ก', u'๏ฝง'), u'ใƒ' : (u'ใ‚ฃ', u'๏ฝจ'), u'ใ…' : (u'ใ‚ฅ', u'๏ฝฉ'), u'ใ‡' : (u'ใ‚ง', u'๏ฝช'), u'ใ‰' : (u'ใ‚ฉ', u'๏ฝซ'), u'ใฃ' : (u'ใƒƒ', u'๏ฝฏ'), u'ใ‚ƒ' : (u'ใƒฃ', u'๏ฝฌ'), u'ใ‚…' : (u'ใƒฅ', u'๏ฝญ'), u'ใ‚‡' : (u'ใƒง', u'๏ฝฎ'), u'ใƒต' : (u'ใƒต', u'๏ฝถ'), u'ใƒถ' : (u'ใƒถ', u'๏ฝน'), u'ใ‚Ž' : (u'ใƒฎ', u'๏พœ'), u'ใ‚' : (u'ใƒฐ', u'๏ฝจ'), u'ใ‚‘' : (u'ใƒฑ', u'๏ฝช'), u'ใƒด' : (u'ใƒด', u'๏ฝณ๏พž'), # symbols u'ใƒผ' : (u'ใƒผ', u'๏ฝฐ'), u'ใ€' : (u'ใ€', u'๏ฝค'), u'ใ€‚' : (u'ใ€‚', u'๏ฝก'), u'๏ผ' : (u'๏ผ', u'!'), u'\u201d' : (u'\u201d', u'"'), u'๏ผƒ' : (u'๏ผƒ', u'#'), u'๏ผ„' : (u'๏ผ„', u'$'), u'๏ผ…' : (u'๏ผ…', u'%'), u'๏ผ†' : (u'๏ผ†', u'&'), u'\u2019' : (u'\u2019', u'\''), u'๏ผˆ' : (u'๏ผˆ', u'('), u'๏ผ‰' : (u'๏ผ‰', u')'), u'\uff5e' : (u'\uff5e', u'~'), u'๏ผ' : (u'๏ผ', u'='), u'๏ผพ' : (u'๏ผพ', u'^'), u'๏ผผ' : (u'๏ผผ', u'\\'), u'๏ฝœ' : (u'๏ฝœ', u'|'), u'\u2018' : (u'\u2018', u'`'), u'๏ผ ' : (u'๏ผ ', u'@'), u'ใ‚›' : (u'ใ‚›', u'๏พž'), u'๏ฝ›' : (u'๏ฝ›', u'{'), u'ใ‚œ' : (u'ใ‚œ', u'๏พŸ'), u'ใ€Œ' : (u'ใ€Œ', u'๏ฝข'), u'๏ผ‹' : (u'๏ผ‹', u'+'), u'๏ผ›' : (u'๏ผ›', u';'), u'๏ผŠ' : (u'๏ผŠ', u'*'), u'๏ผš' : (u'๏ผš', u':'), u'๏ฝ' : (u'๏ฝ', u'}'), u'ใ€' : (u'ใ€', u'๏ฝฃ'), u'๏ผœ' : (u'๏ผœ', u'<'), u'๏ผž' : (u'๏ผž', u'>'), u'๏ผŸ' : (u'๏ผŸ', u'?'), u'ใƒป' : (u'ใƒป', u'๏ฝฅ'), u'๏ผ' : (u'๏ผ', u'/'), u'๏ผฟ' : (u'๏ผฟ', u'_'), u'๏ฟฅ' : (u'๏ฟฅ', u'ยฅ'), # numbers u'๏ผ': (u'๏ผ', u'0'), u'๏ผ‘': (u'๏ผ‘', u'1'), u'๏ผ’': (u'๏ผ’', u'2'), u'๏ผ“': (u'๏ผ“', u'3'), u'๏ผ”': (u'๏ผ”', u'4'), u'๏ผ•': (u'๏ผ•', u'5'), u'๏ผ–': (u'๏ผ–', u'6'), u'๏ผ—': (u'๏ผ—', u'7'), u'๏ผ˜': (u'๏ผ˜', u'8'), u'๏ผ™': (u'๏ผ™', u'9'), } ibus-anthy-1.5.11/engine/python2/test.py000066400000000000000000000010221346647371500200760ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import anthy import sys ctx = anthy.anthy_context () ctx._set_encoding (2) if len(sys.argv) >= 2: ctx.set_string (sys.argv[1]) else: ctx.set_string ("ใ‹ใพใใ") conv_stat = anthy.anthy_conv_stat () seg_stat = anthy.anthy_segment_stat () ctx.get_stat (conv_stat) for i in range (0, conv_stat.nr_segment): ctx.get_segment_stat (i, seg_stat) buf = " " i = ctx.get_segment (i, 0, buf, 10) print buf[:i] # anthy.anthy_release_context (ctx) ctx = None ibus-anthy-1.5.11/engine/python2/thumb.py000066400000000000000000000503431346647371500202500ustar00rootroot00000000000000# -*- coding: utf-8 -*- # vim:set et sts=4 sw=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. __all__ = ( 'ThumbShiftKeyboard', 'ThumbShiftSegment', ) import sys from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import GLib from gi.repository import IBus import segment _THUMB_BASIC_METHOD = 'base' _table_static = { 'q': [u'ใ€‚', u'', u'ใ'], 'w': [u'ใ‹', u'ใŒ', u'ใˆ'], 'e': [u'ใŸ', u'ใ ', u'ใ‚Š'], 'r': [u'ใ“', u'ใ”', u'ใ‚ƒ'], 't': [u'ใ•', u'ใ–', u'ใ‚Œ'], 'y': [u'ใ‚‰', u'ใ‚ˆ', u'ใฑ'], 'u': [u'ใก', u'ใซ', u'ใข'], 'i': [u'ใ', u'ใ‚‹', u'ใ'], 'o': [u'ใค', u'ใพ', u'ใฅ'], 'p': [u'๏ผŒ', u'ใ‡', u'ใด'], '@': [u'ใ€', u'', u''], '[': [u'ใ‚›', u'ใ‚œ', u''], 'a': [u'ใ†', u'', u'ใ‚’'], 's': [u'ใ—', u'ใ˜', u'ใ‚'], 'd': [u'ใฆ', u'ใง', u'ใช'], 'f': [u'ใ‘', u'ใ’', u'ใ‚…'], 'g': [u'ใ›', u'ใœ', u'ใ‚‚'], 'h': [u'ใฏ', u'ใฟ', u'ใฐ'], 'j': [u'ใจ', u'ใŠ', u'ใฉ'], 'k': [u'ใ', u'ใฎ', u'ใŽ'], 'l': [u'ใ„', u'ใ‚‡', u'ใฝ'], ';': [u'ใ‚“', u'ใฃ', u''], 'z': [u'๏ผŽ', u'', u'ใ…'], 'x': [u'ใฒ', u'ใณ', u'ใƒผ'], 'c': [u'ใ™', u'ใš', u'ใ‚'], 'v': [u'ใต', u'ใถ', u'ใ‚„'], 'b': [u'ใธ', u'ใน', u'ใƒ'], 'n': [u'ใ‚', u'ใฌ', u'ใท'], 'm': [u'ใ', u'ใ‚†', u'ใž'], ',': [u'ใญ', u'ใ‚€', u'ใบ'], '.': [u'ใป', u'ใ‚', u'ใผ'], '/': [u'ใƒป', u'ใ‰', u''], '1': [u'1', u'', u'๏ผŸ'], '2': [u'2', u'', u'๏ผ'], '4': [u'4', u'', u'ใ€Œ'], '5': [u'5', u'', u'ใ€'], '6': [u'6', u'๏ผป', u''], '7': [u'7', u'๏ผฝ', u''], '8': [u'8', u'๏ผˆ', u''], '9': [u'9', u'๏ผ‰', u''], '\\': [u'๏ฟฅ', u'', u''], } _nicola_j_table_static = { ':': [u'๏ผš', u'', u''], '@': [u'ใ€', u'', u''], '[': [u'ใ‚›', u'ใ‚œ', u''], ']': [u'ใ€', u'', u''], '8': [u'8', u'๏ผˆ', u''], '9': [u'9', u'๏ผ‰', u''], '0': [u'0', u'', u''], } _nicola_a_table_static = { ':': [u'๏ผš', u'', u''], '@': [u'๏ผ ', u'', u''], '[': [u'ใ€', u'', u''], ']': [u'ใ‚›', u'ใ‚œ', u''], '8': [u'8', u'', u''], '9': [u'9', u'๏ผˆ', u''], '0': [u'0', u'๏ผ‰', u''], } _nicola_f_table_static = { ':': [u'ใ€', u'', u''], '@': [u'๏ผ ', u'', u''], '[': [u'ใ‚›', u'ใ‚œ', u''], ']': [u'ใ€', u'', u''], '8': [u'8', u'๏ผˆ', u''], '9': [u'9', u'๏ผ‰', u''], '0': [u'0', u'', u''], } _kb231_j_fmv_table_static = { '3': [u'3', u'', u'๏ฝž'], '0': [u'0', u'ใ€Ž', u''], '-': [u'-', u'ใ€', u''], '=': [u'=', u'', u''], } _kb231_a_fmv_table_static = { '3': [u'3', u'', u'๏ฝž'], '0': [u'0', u'๏ผ‰', u''], '-': [u'-', u'ใ€Ž', u''], '=': [u'=', u'ใ€', u''], } _kb231_f_fmv_table_static = { '3': [u'3', u'', u'๏ฝž'], '0': [u'0', u'ใ€Ž', u''], '-': [u'-', u'ใ€', u''], '=': [u'=', u'', u''], } _kb611_j_fmv_table_static = { '`': [u'โ€˜', u'', u''], '^': [u'ใ€…', u'ยฃ', u''], ':': [u'๏ผš', u'', u''], '@': [u'ใ€', u'ยข', u''], '[': [u'ใ‚›', u'ใ‚œ', u''], # keysyms are same and keycodes depend on the platforms. #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': [u'๏ฟฅ', u'ยฆ', u''], } _kb611_a_fmv_table_static = { '`': [u'ใ€…', u'', u'ยฃ'], ':': [u'๏ผš', u'', u''], '@': [u'๏ผ ', u'', u''], '[': [u'ใ€', u'ยข', u''], #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': [u'๏ฟฅ', u'ยฆ', u''], } _kb611_f_fmv_table_static = { '`': [u'โ€˜', u'', u''], '^': [u'ใ€…', u'ยฃ', u''], ':': [u'ใ€', u'ยข', u''], '@': [u'๏ผ ', u'', u''], '[': [u'ใ‚›', u'ใ‚œ', u''], #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': [u'๏ฟฅ', u'ยฆ', u''], } _shift_table = { 'H': u'ใฑ', 'X': u'ใด', 'V': u'ใท', 'B': u'ใบ', '>': u'ใฝ', } table_static = {} r_table_static = {} for k in _table_static.keys(): table_static[ord(k)] = _table_static[k] for c in _table_static[k]: r_table_static[c] = k kana_voiced_consonant_rule = { u'ใ‹ใ‚›' : u'ใŒ', u'ใใ‚›' : u'ใŽ', u'ใใ‚›' : u'ใ', u'ใ‘ใ‚›' : u'ใ’', u'ใ“ใ‚›' : u'ใ”', u'ใ•ใ‚›' : u'ใ–', u'ใ—ใ‚›' : u'ใ˜', u'ใ™ใ‚›' : u'ใš', u'ใ›ใ‚›' : u'ใœ', u'ใใ‚›' : u'ใž', u'ใŸใ‚›' : u'ใ ', u'ใกใ‚›' : u'ใข', u'ใคใ‚›' : u'ใฅ', u'ใฆใ‚›' : u'ใง', u'ใจใ‚›' : u'ใฉ', u'ใฏใ‚›' : u'ใฐ', u'ใฒใ‚›' : u'ใณ', u'ใตใ‚›' : u'ใถ', u'ใธใ‚›' : u'ใน', u'ใปใ‚›' : u'ใผ', u'ใฏใ‚œ' : u'ใฑ', u'ใฒใ‚œ' : u'ใด', u'ใตใ‚œ' : u'ใท', u'ใธใ‚œ' : u'ใบ', u'ใปใ‚œ' : u'ใฝ', } _UNFINISHED_HIRAGANA = set(u'ใ‹ใใใ‘ใ“ใ•ใ—ใ™ใ›ใใŸใกใคใฆใจใฏใฒใตใธใป') class ThumbShiftKeyboard: def __init__(self, prefs=None): self.__prefs = prefs self.__table = table_static self.__r_table = r_table_static self.__shift_table = {} self.__ls = 0 self.__rs = 0 self.__t1 = 0 self.__t2 = 0 self.__layout = 0 self.__fmv_extension = 2 self.__handakuten = False self.__thumb_typing_rule_method = None self.__init_thumb_typing_rule() self.__init_layout_table() if self.__prefs != None: self.reset() self.__reset_shift_table(False) def __init_thumb_typing_rule(self): prefs = self.__prefs if prefs == None: self.__thumb_typing_rule_method = None return method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = _THUMB_BASIC_METHOD self.__thumb_typing_rule_method = method keymap = prefs.get_value('thumb-typing-rule', 'list') if self.__thumb_typing_rule_method not in keymap.keys(): self.__thumb_typing_rule_method = None def __init_layout_table(self): if self.__table != {}: self.__table.clear() if self.__r_table != {}: self.__r_table.clear() method = self.__thumb_typing_rule_method if method != None: prefs = self.__prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue self.__set_bus_table(ch, value) else: for k in _table.keys(): self.__table[ord(k)] = _table_static[k] for c in _table_static[k]: self.__r_table[c] = k def __set_bus_table(self, key, value): prefs = self.__prefs if value == None or len(value) != 3: return value = [prefs.unicode(prefs.str(value[0])), prefs.unicode(prefs.str(value[1])), prefs.unicode(prefs.str(value[2]))] if value[0] == u'' and \ value[1] == u'' and value[2] == u'': return self.__table[ord(key)] = value for c in value: self.__r_table[c] = key def __reset_layout_table(self, init, j_table_label, j_table, a_table_label, a_table, f_table_label, f_table): if init: self.__init_layout_table() method = None sub_table = None if self.__layout == 0: method = j_table_label sub_table = j_table elif self.__layout == 1: method = a_table_label sub_table = a_table elif self.__layout == 2: method = f_table_label sub_table = f_table if method == None or sub_table == None: return method = self.__thumb_typing_rule_method if method != None: prefs = self.__prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue self.__set_bus_table(ch, value) else: for k in sub_table.keys(): self.__table[ord(unicode(k))] = sub_table[k] for c in sub_table[k]: self.__r_table[c] = k def __reset_extension_table(self, init): self.__reset_layout_table(init, 'nicola_j_table', _nicola_j_table_static, 'nicola_a_table', _nicola_a_table_static, 'nicola_f_table', _nicola_f_table_static) if self.__fmv_extension == 0: return if self.__fmv_extension >= 1: self.__reset_layout_table(False, 'kb231_j_fmv_table', _kb231_j_fmv_table_static, 'kb231_a_fmv_table', _kb231_a_fmv_table_static, 'kb231_f_fmv_table', _kb231_f_fmv_table_static) if self.__fmv_extension >= 2: self.__reset_layout_table(False, 'kb611_j_fmv_table', _kb611_j_fmv_table_static, 'kb611_a_fmv_table', _kb611_a_fmv_table_static, 'kb611_f_fmv_table', _kb611_f_fmv_table_static) def __reset_shift_table(self, init): self.__reset_extension_table(init) if self.__handakuten: for k in _shift_table.keys(): self.__shift_table[ord(k)] = _shift_table[k] self.__r_table[_shift_table[k]] = k elif self.__shift_table != {}: for k in _shift_table.keys(): if ord(k) in self.__shift_table: del self.__shift_table[ord(k)] if _shift_table[k] in self.__r_table: del self.__r_table[_shift_table[k]] def __s_to_key_raw(self, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ( 'alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return (keyval, state) def __get_xkb_layout(self): # Until Gdk.property_get is fixed ''' # Move importing Gdk into ThumbShiftKeyboard from the header # because ibus-engine-anthy --xml does not requre to open X. try: from gi.repository import Gdk get_default_root_window = Gdk.get_default_root_window property_get = Gdk.property_get intern = Gdk.Atom.intern except ImportError: get_default_root_window = lambda : None property_get = lambda : None intern = lambda : None except RuntimeError: # Do we support the engine without display? print >> sys.stderr, "Gdk couldn't be initialized" print >> sys.stderr, 'Could not open display' get_default_root_window = lambda : None property_get = lambda : None intern = lambda : None root_window = get_default_root_window() if not root_window: return 0 xkb_rules_names = intern('_XKB_RULES_NAMES', False) xa_string = intern('STRING', False) try: prop = property_get(root_window, xkb_rules_names, xa_string, 0, 1024, 0)[3] layout_list = prop.split('\0') except TypeError: print >> sys.stderr, \ 'This problem is fixed in the latest gobject-introspection' print >> sys.stderr, \ 'https://bugzilla.gnome.org/show_bug.cgi?id=670509' return 0 layout = 0 for data in layout_list: if data == 'jp': layout = 0 elif data == 'us': layout = 1 elif data.find('japan:nicola_f_bs') >= 0: layout = 2 elif data.find('japan:') >= 0: layout = 0 return layout ''' layout = 0 argv = ['setxkbmap', '-query'] (ret, std_out, std_error, exit_status) = \ GLib.spawn_sync(None, argv, None, GLib.SpawnFlags.SEARCH_PATH_FROM_ENVP, None, None) if not ret: print >> sys.stderr, std_error return layout for line in std_out.split('\n'): if line.startswith('layout:'): data = line.split()[1] if data == 'jp': layout = 0 elif data == 'us': layout = 1 elif line.startswith('options:'): data = line.split()[1] if data.find('japan:nicola_f_bs') >= 0: layout = 2 elif data.find('japan:') >= 0: layout = 0 return layout def __reset_layout_and_handakuten(self): mode = self.__prefs.get_value('thumb', 'keyboard-layout-mode') layout = 0 if mode == 1: layout = self.__get_xkb_layout() else: layout = self.__prefs.get_value('thumb', 'keyboard-layout') self.set_layout(layout) fmv_extension = self.__prefs.get_value('thumb', 'fmv-extension') self.set_fmv_extension(fmv_extension) handakuten = self.__prefs.get_value('thumb', 'handakuten') self.set_handakuten(handakuten) def reset(self): s = self.__prefs.get_value('thumb', 'ls') ls, state = self.__s_to_key_raw(s) if ls == 0xffffff: ls = IBus.KEY_Muhenkan self.set_ls(ls) s = self.__prefs.get_value('thumb', 'rs') rs, state = self.__s_to_key_raw(s) if rs == 0xffffff: rs = IBus.KEY_Henkan self.set_rs(rs) t1 = self.__prefs.get_value('thumb', 't1') t2 = self.__prefs.get_value('thumb', 't2') self.set_t1(t1) self.set_t2(t2) GLib.idle_add(self.__reset_layout_and_handakuten, priority = GLib.PRIORITY_LOW) def get_ls(self): return self.__ls def set_ls(self, ls): self.__ls = ls def get_rs(self): return self.__rs def set_rs(self, rs): self.__rs = rs def get_t1(self): return self.__t1 def set_t1(self, t1): self.__t1 = t1 def get_t2(self): return self.__t2 def set_t2(self, t2): self.__t2 = t2 def get_layout(self): return self.__layout def set_layout(self, layout): if self.__layout == layout: return self.__layout = layout self.__reset_shift_table(True) def get_fmv_extension (self): return self.__fmv_extension def set_fmv_extension (self, fmv_extension): if self.__fmv_extension == fmv_extension: return self.__fmv_extension = fmv_extension self.__reset_shift_table(True) def get_handakuten(self): return self.__handakuten def set_handakuten(self, handakuten): if self.__handakuten == handakuten: return self.__handakuten = handakuten self.__reset_shift_table(True) def get_char(self, key, fallback=None): return self.__table.get(key, fallback) def get_chars(self): return self.__table.keys() def get_r_char(self, key, fallback=None): return self.__r_table.get(key, fallback) def get_r_chars(self): return self.__r_table.keys() def get_shift_char(self, key, fallback=None): return self.__shift_table.get(key, fallback) def get_shift_chars(self): return self.__shift_table.keys() class ThumbShiftSegment(segment.Segment): _prefs = None _thumb_typing_rule_section_base = None _thumb_typing_rule_section = None _r_table = {} def __init__(self, enchars=u'', jachars=u''): if not jachars: if u'!' <= enchars <= u'~': jachars = segment.unichar_half_to_full(enchars) else: jachars = enchars enchars = self._r_table.get(jachars, u'') super(ThumbShiftSegment, self).__init__(enchars, jachars) @classmethod def INIT_THUMB_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._thumb_typing_rule_section = None return method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = _THUMB_BASIC_METHOD cls._thumb_typing_rule_method = method keymap = prefs.get_value('thumb-typing-rule', 'list') if cls._thumb_typing_rule_method not in keymap.keys(): cls._thumb_typing_rule_method = None cls._init_layout_table() @classmethod def _init_layout_table(cls): if cls._r_table != {}: cls._r_table.clear() method = cls._thumb_typing_rule_method if method != None: prefs = cls._prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue cls._set_bus_table(ch, value) else: for k in _table.keys(): for c in _table_static[k]: cls._r_table[c] = k @classmethod def _set_bus_table(cls, key, value): prefs = cls._prefs if value == None or len(value) != 3: return value = [prefs.unicode(prefs.str(value[0])), prefs.unicode(prefs.str(value[1])), prefs.unicode(prefs.str(value[2]))] if value[0] == u'' and \ value[1] == u'' and value[2] == u'': return for c in value: cls._r_table[c] = key def is_finished(self): return not (self._jachars in _UNFINISHED_HIRAGANA) def append(self, enchar): if enchar == u'\0' or enchar == u'': return [] text = self._jachars + enchar jachars = kana_voiced_consonant_rule.get(text, None) if jachars: self._enchars = self._enchars + self._r_table.get(enchar, u'') self._jachars = jachars return [] return [ThumbShiftSegment(enchar)] def prepend(self, enchar): if enchar == u'\0' or enchar == u'': return [] if self._jachars == u'': if 0x21 <= enchars <= 0x7e: self._enchars = enchar self._jachars = segment.unichar_half_to_full(enchars) else: self._enchars = self._r_table.get(enchar, u'') self._jachars = enchar return [] return [ThumbShiftSegment(enchar)] def pop(self, index=-1): self._enchars = u'' self._jachars = u'' return ibus-anthy-1.5.11/engine/python3/000077500000000000000000000000001346647371500165535ustar00rootroot00000000000000ibus-anthy-1.5.11/engine/python3/Makefile.am000066400000000000000000000075061346647371500206170ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. BUILT_SOURCES = _config.py engine_anthy_PYTHON = \ _config.py \ engine.py \ factory.py \ jastring.py \ kana.py \ main.py \ romaji.py \ segment.py \ tables.py \ thumb.py \ $(NULL) engine_anthydir = $(pkgdatadir)/engine engine_anthy_built_files = $(BUILT_SOURCES) engine_anthy_built_in_files = $(addsuffix .in, $(engine_anthy_built_files)) PYGTK2_ANTHY_RAW = anthy.i PYGTK2_ANTHY_GEN = anthy.py anthy_wrap.c if HAVE_PYGTK2_ANTHY anthy_DATA = \ anthy.py \ $(NULL) anthy_LTLIBRARIES = _anthy.la anthydir = @pyexecdir@ _anthy_la_SOURCES = \ $(NULL) nodist__anthy_la_SOURCES = \ anthy_wrap.c \ $(NULL) _anthy_la_CFLAGS = \ @ANTHY_CFLAGS@ \ @PYTHON_CFLAGS@ \ $(NULL) _anthy_la_LDFLAGS = \ @ANTHY_LIBS@ \ @PYTHON_LIBS@ \ -avoid-version \ -module \ $(NULL) anthy.py anthy_wrap.c: anthy.i $(SWIG) -python $(ANTHY_CFLAGS) -I/usr/include -o anthy_wrap.c $(srcdir)/anthy.i endif libexec_SCRIPTS = ibus-engine-anthy component_DATA = anthy.xml componentdir = $(datadir)/ibus/component engine_DATA = default.xml enginedir = $(pkgdatadir)/engine # $(SYMBOL_XML) cannot be extracted in Makefile but $(libexecdir) can be # extracted to ${exec_prefix}/libexec so use capital @LIBEXECDIR@ here. %.xml: %.inputMethod.xml.in sed -e "s|\@LIBEXECDIR\@|$(libexecdir)|g" \ -e "s|\@PKGDATADIR\@|$(pkgdatadir)|g" \ $< > $@ ibus-engine-anthy: ibus-engine-anthy.in sed -e "s|\@prefix\@|$(prefix)|g" \ -e "s|\@exec_prefix\@|$(exec_prefix)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datarootdir\@|$(datarootdir)|g" \ -e "s|\@PACKAGE\@|$(PACKAGE)|g" \ -e "s|\@PYTHON\@|$(PYTHON)|g" \ -e "s|\@ENV_IBUS_ENGINE\@|$(ENV_IBUS_ENGINE)|g" \ $< > $@ _config.py: _config.py.in sed -e "s|\@pkgdatadir\@|$(pkgdatadir)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datadir\@|$(datadir)|g" \ -e "s|\@ANTHY_PC\@|$(ANTHY_PC)|g" \ -e "s|\@LAYOUT\@|$(LAYOUT)|g" \ -e "s|\@SYMBOL_CHAR_INT\@|$(SYMBOL_CHAR_INT)|g" \ -e "s|\@ICON_PREFERENCE\@|$(ICON_PREFERENCE)|g" \ -e "s|\@VERSION\@|$(VERSION)|g" \ $< > $@ test: $(ENV_IBUS_TEST) \ DBUS_DEBUG=true \ IBUS_ANTHY_PKGDATADIR=$(abs_top_srcdir) \ PYTHONPATH=$(builddir)/.libs:@pyexecdir@ \ $(PYTHON) \ $(srcdir)/main.py EXTRA_DIST = \ $(engine_anthy_built_in_files) \ $(PYGTK2_ANTHY_RAW) \ anthy.inputMethod.xml.in.in \ default.inputMethod.xml.in.in \ ibus-engine-anthy.in \ $(NULL) CLEANFILES = \ $(BUILT_SOURCES) \ $(PYGTK2_ANTHY_GEN) \ anthy.xml \ default.xml \ ibus-engine-anthy \ *.pyc \ $(NULL) DISTCLEANFILES = \ anthy.inputMethod.xml.in \ default.inputMethod.xml.in \ $(NULL) # Need a time lag between .py and .py.in files to build .py files # because *_PYTHON valuables are installed in the tarball. dist-hook: @sleep 1; \ for in_file in $(engine_anthy_built_in_files) ; do \ if [ -f $(distdir)/$(srcdir)/$$in_file ] ; then \ touch $(distdir)/$(srcdir)/$$in_file; \ fi; \ done; ibus-anthy-1.5.11/engine/python3/_config.py.in000066400000000000000000000022761346647371500211450ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. ANTHY_PC= '@ANTHY_PC@' PKGDATADIR = '@pkgdatadir@' LIBEXECDIR = '@libexecdir@' LOCALEDIR = '@datadir@/locale' LAYOUT = '@LAYOUT@' SYMBOL_CHAR = chr(@SYMBOL_CHAR_INT@) ICON_PREFERENCE = '@ICON_PREFERENCE@' VERSION = '@VERSION@' DEBUG = False ibus-anthy-1.5.11/engine/python3/anthy.i000066400000000000000000000062051346647371500200530ustar00rootroot00000000000000/* vim:set et ts=4: */ /* * ibus-anthy - The Anthy engine for IBus * * Copyright (c) 2007-2008 Peng Huang * Copyright (c) 2010-2013 Takao Fujiwara * Copyright (c) 2007-2013 Red Hat, Inc. * * 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. */ %module anthy %{ /* Put header files here or function declarations like below */ #include %} %init %{ anthy_init (); %} /* anthy_context_t */ %include anthy/anthy.h struct anthy_context {}; %extend anthy_context { anthy_context () { return anthy_create_context (); } void reset () { anthy_reset_context (self); } int set_string (char *str) { return anthy_set_string (self, str); } void resize_segment (int a1, int a2) { anthy_resize_segment (self, a1, a2); } int get_stat (struct anthy_conv_stat *a1) { return anthy_get_stat (self, a1); } int get_segment_stat (int a1, struct anthy_segment_stat *a2) { return anthy_get_segment_stat (self, a1, a2); } char *get_segment (int a1, int a2) { int len; static char temp[512]; len = anthy_get_segment (self, a1, a2, temp, sizeof (temp)); if (len >= 0) return temp; else return NULL; } int commit_segment (int a1, int a2) { return anthy_commit_segment (self, a1, a2); } int set_prediction_string (const char *a1) { return anthy_set_prediction_string (self, a1); } int get_prediction_stat (struct anthy_prediction_stat *a1) { return anthy_get_prediction_stat (self, a1); } char *get_prediction (int a1) { int len; static char temp[512]; len = anthy_get_prediction (self, a1, temp, sizeof (temp)); if (len >= 0) return temp; else return NULL; } int commit_prediction (int a1) { return anthy_commit_prediction(self, a1); } void _print () { anthy_print_context (self); } int _set_encoding (int encoding) { return anthy_context_set_encoding (self, encoding); } int set_reconversion_mode (int mode) { return anthy_set_reconversion_mode (self, mode); } int init_personality (void) { return anthy_init_personality (); } int do_set_personality (const char *id) { return anthy_do_set_personality (id); } ~anthy_context () { anthy_release_context (self); } }; ibus-anthy-1.5.11/engine/python3/anthy.inputMethod.xml.in.in000066400000000000000000000012221346647371500237260ustar00rootroot00000000000000 org.freedesktop.IBus.Anthy Anthy Component @LIBEXECDIR@/ibus-engine-anthy --ibus @PACKAGE_VERSION@ Peng Huang <shawn.p.huang@gmail.com> GPL https://github.com/ibus/ibus/wiki ibus-anthy ~/.config/ibus-anthy/engines.xml @PKGDATADIR@/engine/default.xml ibus-anthy-1.5.11/engine/python3/default.inputMethod.xml.in.in000066400000000000000000000010711346647371500242310ustar00rootroot00000000000000 anthy ja GPL Peng Huang <shawn.p.huang@gmail.com> ibus-anthy @LAYOUT_XML@ Anthy Anthy Input Method 99 @HOTKEYS_XML@ @SYMBOL_XML@ @ICON_PROP_KEY_XML@ @PACKAGE_VERSION@ ibus-anthy ibus-anthy-1.5.11/engine/python3/engine.py000066400000000000000000003305061346647371500204010ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2019 Takao Fujiwara # Copyright (c) 2007-2018 Red Hat, Inc. # # 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. import binascii import io import os from os import environ, path import signal import sys from gettext import dgettext from main import get_userhome try: from locale import getpreferredencoding except: pass from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') gi_require_version('Anthy', '9000') from gi.repository import GLib from gi.repository import IBus from gi.repository import Anthy NTH_UNCONVERTED_CANDIDATE = Anthy.NTH_UNCONVERTED_CANDIDATE NTH_KATAKANA_CANDIDATE = Anthy.NTH_KATAKANA_CANDIDATE NTH_HIRAGANA_CANDIDATE = Anthy.NTH_HIRAGANA_CANDIDATE NTH_HALFKANA_CANDIDATE = Anthy.NTH_HALFKANA_CANDIDATE import _config as config from tables import * import jastring from segment import unichar_half_to_full sys.path.append(path.join(config.PKGDATADIR, 'setup')) from anthyprefs import AnthyPrefs _ = lambda a : dgettext('ibus-anthy', a) N_ = lambda a : a UN = lambda a : unicode(a, 'utf-8') printerr = AnthyPrefs.printerr ANTHY_CONFIG_PATH = get_userhome() + '/.anthy' if config.ANTHY_PC == 'anthy' \ else GLib.get_user_config_dir() + '/anthy'; INPUT_MODE_HIRAGANA, \ INPUT_MODE_KATAKANA, \ INPUT_MODE_HALF_WIDTH_KATAKANA, \ INPUT_MODE_LATIN, \ INPUT_MODE_WIDE_LATIN = list(range(5)) CONV_MODE_OFF, \ CONV_MODE_ANTHY, \ CONV_MODE_HIRAGANA, \ CONV_MODE_KATAKANA, \ CONV_MODE_HALF_WIDTH_KATAKANA, \ CONV_MODE_LATIN_0, \ CONV_MODE_LATIN_1, \ CONV_MODE_LATIN_2, \ CONV_MODE_LATIN_3, \ CONV_MODE_WIDE_LATIN_0, \ CONV_MODE_WIDE_LATIN_1, \ CONV_MODE_WIDE_LATIN_2, \ CONV_MODE_WIDE_LATIN_3, \ CONV_MODE_PREDICTION = list(range(14)) SEGMENT_DEFAULT = 0 SEGMENT_SINGLE = 1 << 0 SEGMENT_IMMEDIATE = 1 << 1 CLIPBOARD_RECONVERT = list(range(1)) LINK_DICT_EMBEDDED, \ LINK_DICT_SINGLE = list(range(2)) IMPORTED_EMBEDDED_DICT_DIR = 'imported_words_default.d' IMPORTED_EMBEDDED_DICT_PREFIX = 'ibus__' IMPORTED_SINGLE_DICT_PREFIX = 'imported_words_ibus__' KP_Table = {} for s in dir(IBus): if s.startswith('KEY_KP_'): v = IBus.keyval_from_name(s[7:]) if v: KP_Table[IBus.keyval_from_name(s[4:])] = v for k, v in zip(['KEY_KP_Add', 'KEY_KP_Decimal', 'KEY_KP_Divide', 'KEY_KP_Enter', 'KEY_KP_Equal', 'KEY_KP_Multiply', 'KEY_KP_Separator', 'KEY_KP_Space', 'KEY_KP_Subtract'], ['KEY_plus', 'KEY_period', 'KEY_slash', 'KEY_Return', 'KEY_equal', 'KEY_asterisk', 'KEY_comma', 'KEY_space', 'KEY_minus']): KP_Table[getattr(IBus, k)] = getattr(IBus, v) class Engine(IBus.EngineSimple): __input_mode = None __typing_mode = None __segment_mode = None __dict_mode = None __setup_pid = 0 __prefs = None __keybind = {} __thumb = None __latin_with_shift = True def __init__(self, bus, object_path): super(Engine, self).__init__(engine_name="anthy", connection=bus.get_connection(), object_path=object_path) self.add_table_by_locale(None) # create anthy context if not self.__verify_anthy_journal_file(): return Anthy.GContext.set_logger(0); self.__context = Anthy.GContext() self.__context.set_encoding(Anthy.UTF8_ENCODING) # init state self.__idle_id = 0 self.__prop_dict = {} self.__input_purpose = 0 self.__has_input_purpose = False if hasattr(IBus, 'InputPurpose'): self.__has_input_purpose = True try: self.__is_utf8 = (getpreferredencoding().lower() == 'utf-8') except: self.__is_utf8 = False self.__has_update_preedit_text_with_mode = True try: self.__ibus_check_version('1.3') except ValueError as e: printerr('Disable update_preedit_text_with_mode(): %s' % str(e)) self.__has_update_preedit_text_with_mode = False # self.__lookup_table = ibus.LookupTable.new(page_size=9, # cursor_pos=0, # cursor_visible=True, # round=True) size = self.__prefs.get_value('common', 'page-size') self.__lookup_table = IBus.LookupTable.new(page_size=size, cursor_pos=0, cursor_visible=True, round=True) self.__prop_list = self.__init_props() # Do not use self.do_process_key_event to work ISO 14755 # with Ctrl+Shift+u . # The super (parent) method of do_process_key_event is called # loop infinitely if this class overrides it. # self.process_key_event is not accessible too. self.connect('process-key-event', self.__process_key_event) self.connect('destroy', self.__destroy) self.connect('page-down', self.__page_down) self.connect('page-up', self.__page_up) self.connect('candidate-clicked', self.__candidate_clicked) self.__init_signal() # use reset to init values self.__reset() def __ibus_check_version(self, v): major = IBus.MAJOR_VERSION minor = IBus.MINOR_VERSION micro = IBus.MICRO_VERSION if (major, minor, micro) < tuple(map(int, (v.split('.')))): raise ValueError('Required ibus %s but version of ibus is ' \ '%d.%d.%d' % (v, major, minor, micro)) # http://en.sourceforge.jp/ticket/browse.php?group_id=14&tid=33075 def __verify_anthy_journal_file(self): journal = ANTHY_CONFIG_PATH + '/last-record2_default.utf8' try: f = io.open(file=journal, mode='rb') except IOError: return True f.seek(-1, io.SEEK_END) last = f.read(1) f.close() if ord(last) == 0xa: return True from gi.repository import Gtk message= N_("Could not enable Anthy.\n" \ "The end of the content of the file " \ "%s/last-record2_default.utf8 in your home " \ "directory is not '\\n'. I.e. not correct text format.\n" \ "Please fix the file or remove it by manual and " \ "restart IBus.") % ANTHY_CONFIG_PATH printerr(message) dlg = Gtk.MessageDialog(parent=None, flags=Gtk.DialogFlags.MODAL, message_type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, message_format=_(message)) dlg.run() dlg.destroy() return False # reset values of engine def __reset(self): self.__preedit_ja_string = jastring.JaString(Engine.__typing_mode, self.__latin_with_shift) self.__convert_chars = '' self.__cursor_pos = 0 self.__convert_mode = CONV_MODE_OFF self.__segments = list() self.__lookup_table.clear() self.__lookup_table_visible = False self._MM = 0 self._SS = 0 self._H = 0 self._RMM = 0 self._RSS = 0 if self.__idle_id != 0: GLib.source_remove(self.__idle_id) self.__idle_id = 0 def __init_props(self): anthy_props = IBus.PropList() self.__set_input_mode_props(anthy_props) self.__set_typing_method_props(anthy_props) self.__set_segment_mode_props(anthy_props) self.__set_dict_mode_props(anthy_props) self.__set_dict_config_props(anthy_props) if not self.__prefs.get_value('common', 'show-preferences'): return anthy_props anthy_props.append(IBus.Property(key='setup', label=IBus.Text.new_from_string(_("Preferences - Anthy")), icon=config.ICON_PREFERENCE, tooltip=IBus.Text.new_from_string(_("Configure Anthy")), sensitive=True, visible=True)) return anthy_props def __init_signal(self): signal.signal(signal.SIGHUP, self.__signal_cb) signal.signal(signal.SIGINT, self.__signal_cb) signal.signal(signal.SIGQUIT, self.__signal_cb) signal.signal(signal.SIGABRT, self.__signal_cb) signal.signal(signal.SIGTERM, self.__signal_cb) def __signal_cb(self, signum, object): self.__remove_dict_files() signal.signal(signum, signal.SIG_DFL) os.kill(os.getpid(), signum) def __set_input_mode_props(self, anthy_props): # The class method is kept even if the engine is switched. if Engine.__input_mode == None: # The config value is readonly for initial engine and # the engine keeps the class method in the memory. Engine.__input_mode = INPUT_MODE_HIRAGANA Engine.__input_mode = self.__prefs.get_value('common', 'input-mode') if not self.__prefs.get_value('common', 'show-input-mode'): return # init input mode properties symbol = 'ใ‚' ''' Need to split _() by line for intltool to detect them. ''' # Translators: Specify the order of %s with your translation. # It will be "Input Mode (A)" for example. label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Input mode"), 'symbol' : symbol } input_mode_prop = IBus.Property(key='InputMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon='', tooltip=IBus.Text.new_from_string(_("Switch input mode")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict['InputMode'] = input_mode_prop props = IBus.PropList() props.append(IBus.Property(key='InputMode.Hiragana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Hiragana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='InputMode.Katakana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Katakana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='InputMode.HalfWidthKatakana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Halfwidth Katakana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='InputMode.Latin', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Latin")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='InputMode.WideLatin', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Wide Latin")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__input_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 input_mode_prop.set_sub_props(props) anthy_props.append(input_mode_prop) mode = Engine.__input_mode mode = 'InputMode.' + ['Hiragana', 'Katakana', 'HalfWidthKatakana', 'Latin', 'WideLatin'][mode] self.__input_mode_activate(mode, IBus.PropState.CHECKED) def __set_typing_method_props(self, anthy_props): if Engine.__typing_mode == None: Engine.__typing_mode = jastring.TYPING_MODE_ROMAJI Engine.__typing_mode = self.__prefs.get_value('common', 'typing-method') if not self.__prefs.get_value('common', 'show-typing-method'): return # typing input mode properties symbol = 'R' label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } typing_mode_prop = IBus.Property(key='TypingMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon='', tooltip=IBus.Text.new_from_string(_("Switch typing method")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict['TypingMode'] = typing_mode_prop props = IBus.PropList() props.append(IBus.Property(key='TypingMode.Romaji', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Romaji")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='TypingMode.Kana', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Kana")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='TypingMode.ThumbShift', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Thumb shift")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__typing_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 typing_mode_prop.set_sub_props(props) anthy_props.append(typing_mode_prop) mode = Engine.__typing_mode mode = 'TypingMode.' + ['Romaji', 'Kana', 'ThumbShift'][mode] self.__typing_mode_activate(mode, IBus.PropState.CHECKED) def __set_segment_mode_props(self, anthy_props): if Engine.__segment_mode == None: Engine.__segment_mode = SEGMENT_DEFAULT Engine.__segment_mode = self.__prefs.get_value('common', 'conversion-segment-mode') if not self.__prefs.get_value('common', 'show-segment-mode'): return symbol = '้€ฃ' label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Segment mode"), 'symbol' : symbol } segment_mode_prop = IBus.Property(key='SegmentMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(symbol), icon=None, tooltip=IBus.Text.new_from_string(_("Switch conversion mode")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict['SegmentMode'] = segment_mode_prop props = IBus.PropList() props.append(IBus.Property(key='SegmentMode.Multi', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Multiple segment")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='SegmentMode.Single', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Single segment")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='SegmentMode.ImmediateMulti', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Immediate conversion (multiple segment)")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='SegmentMode.ImmediateSingle', prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(_("Immediate conversion (single segment)")), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__segment_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 segment_mode_prop.set_sub_props(props) anthy_props.append(segment_mode_prop) mode = Engine.__segment_mode mode = 'SegmentMode.' + ['Multi', 'Single', 'ImmediateMulti', 'ImmediateSingle'][mode] self.__segment_mode_activate(mode, IBus.PropState.CHECKED) def __set_dict_mode_props(self, anthy_props, update_prop=False): if Engine.__dict_mode == None: Engine.__dict_mode = 0 if not self.__prefs.get_value('common', 'show-dict-mode'): return dicts = self.__prefs.get_value('dict', 'list') short_label = dicts['embedded'].short_label label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Dictionary mode"), 'symbol' : short_label } dict_mode_prop = IBus.Property(key='DictMode', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), symbol=IBus.Text.new_from_string(short_label), icon=None, tooltip=IBus.Text.new_from_string(_("Switch dictionary")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict['DictMode'] = dict_mode_prop props = IBus.PropList() long_label = dicts['embedded'].long_label props.append(IBus.Property(key='DictMode.embedded', prop_type=IBus.PropType.RADIO, # if long_label is UTF-8 label=IBus.Text.new_from_string(_(long_label)), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) files = self.__prefs.get_value('dict', 'files') dicts = self.__prefs.get_value('dict', 'list') for id in order: dict_item = dicts[id] is_cont = False for file in files[id]: if not self.__link_dict_file(dict_item, file): is_cont = True break if is_cont: continue if not dict_item.single: continue key = 'DictMode.' + id long_label = dict_item.long_label # ibus-config 'value-changed' signal updated dict/files but # not dict/file/new yet. if long_label == None: continue if dict_item.is_system: uni_long_label = _(long_label) else: uni_long_label = long_label props.append(IBus.Property(key=key, prop_type=IBus.PropType.RADIO, label=IBus.Text.new_from_string(uni_long_label), icon=None, tooltip=None, sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.get(Engine.__dict_mode).set_state(IBus.PropState.CHECKED) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 dict_mode_prop.set_sub_props(props) if update_prop: # focus-in event will call register_properties(). # Need to switch another IME to update menus on GtkStatusIcon? anthy_props.update_property(dict_mode_prop) else: anthy_props.append(dict_mode_prop) prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name == None: return self.__dict_mode_activate(prop_name, IBus.PropState.CHECKED) def __set_dict_config_props(self, anthy_props): if not self.__prefs.get_value('common', 'show-dict-config'): return admin_command = self.__prefs.get_value('common', 'dict-admin-command') icon_path = self.__prefs.get_value('common', 'dict-config-icon') if not path.exists(admin_command[0]): return label = _("Dictionary - Anthy") if icon_path and path.exists(icon_path): icon = icon_path else: # Translators: "Dic" means 'dictionary', One kanji may be good. label = _("Dic") icon = '' dict_prop = IBus.Property(key='setup-dict-kasumi', prop_type=IBus.PropType.MENU, label=IBus.Text.new_from_string(label), icon=icon, tooltip=IBus.Text.new_from_string(_("Configure dictionaries")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None) self.__prop_dict['setup-dict-kasumi'] = dict_prop props = IBus.PropList() props.append(IBus.Property(key='setup-dict-kasumi-admin', prop_type=IBus.PropType.NORMAL, label=IBus.Text.new_from_string(_("Edit dictionaries")), icon=icon, tooltip=IBus.Text.new_from_string(_("Launch the dictionary tool")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) props.append(IBus.Property(key='setup-dict-kasumi-word', prop_type=IBus.PropType.NORMAL, label=IBus.Text.new_from_string(_("Add words")), icon=icon, tooltip=IBus.Text.new_from_string(_("Add words to the dictionary")), sensitive=True, visible=True, state=IBus.PropState.UNCHECKED, sub_props=None)) i = 0 while props.get(i) != None: prop = props.get(i) self.__prop_dict[prop.get_key()] = prop i += 1 dict_prop.set_sub_props(props) anthy_props.append(dict_prop) def __get_clipboard(self, clipboard, text, data): clipboard_text = clipboard.wait_for_text () if data == CLIPBOARD_RECONVERT: self.__update_reconvert(clipboard_text) return clipboard_text def __get_single_dict_files(self): order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) files = self.__prefs.get_value('dict', 'files') dicts = self.__prefs.get_value('dict', 'list') single_files = [] for id in order: for file in files[id]: if not path.exists(file): continue dict_item = dicts[id] if dict_item.single: single_files.append(file) return single_files def __remove_dict_files(self): dicts = self.__prefs.get_value('dict', 'list') files = self.__prefs.get_value('dict', 'files') for id in files.keys(): dict_item = dicts[id] for file in files[id]: self.__remove_dict_file(dict_item, file) def update_preedit(self, string, attrs, cursor_pos, visible): text = IBus.Text.new_from_string(string) i = 0 while attrs.get(i) != None: attr = attrs.get(i) text.append_attribute(attr.get_attr_type(), attr.get_value(), attr.get_start_index(), attr.get_end_index()) i += 1 mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if self.__has_update_preedit_text_with_mode and mode == 1: self.update_preedit_text_with_mode(text, cursor_pos, visible, IBus.PreeditFocusMode.COMMIT) else: self.update_preedit_text(text, cursor_pos, visible) def update_aux_string(self, string, attrs, visible): text = IBus.Text.new_from_string(string) i = 0 while attrs.get(i) != None: attr = attrs.get(i) text.append_attribute(attr.get_attr_type(), attr.get_value(), attr.get_start_index(), attr.get_end_index()) i += 1 self.update_auxiliary_text(text, visible) def __page_up(self, obj): # only process cursor down in convert mode if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table.page_up(): return False index = self.__lookup_table.get_cursor_pos() candidate = self.__lookup_table.get_candidate(index).get_text() self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def __page_down(self, obj): # only process cursor down in convert mode if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table.page_down(): return False index = self.__lookup_table.get_cursor_pos() candidate = self.__lookup_table.get_candidate(index).get_text() self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def do_cursor_up(self): # only process cursor down in convert mode # if self.__convert_mode != CONV_MODE_ANTHY: if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_up(): return False index = self.__lookup_table.get_cursor_pos() candidate = self.__lookup_table.get_candidate(index).get_text() self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def do_cursor_down(self): # only process cursor down in convert mode # if self.__convert_mode != CONV_MODE_ANTHY: if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_down(): return False index = self.__lookup_table.get_cursor_pos() candidate = self.__lookup_table.get_candidate(index).get_text() self.__segments[self.__cursor_pos] = index, candidate self.__invalidate() return True def __candidate_clicked(self, obj, index, button, state): if index == 9: keyval = IBus.KEY_0 else: keyval = IBus.KEY_1 + index self.__on_key_number(keyval) def __commit_string(self, text): self.__reset() self.commit_text(IBus.Text.new_from_string(text)) self.__invalidate() def __shrink_segment(self, relative_size): self.__context.resize_segment(self.__cursor_pos, relative_size) nr_segments = self.__context.get_nr_segments() del self.__segments[self.__cursor_pos:] for i in range(self.__cursor_pos, nr_segments): buf = self.__context.get_segment(i, 0) text = buf self.__segments.append((0, text)) self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __shrink_segment_end(self): while self.__context.get_nr_segments() > 1: self.__context.resize_segment(self.__cursor_pos, 1) nr_segments = self.__context.get_nr_segments() del self.__segments[self.__cursor_pos:] for i in range(self.__cursor_pos, nr_segments): buf = self.__context.get_segment(i, 0) text = buf self.__segments.append((0, text)) self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def do_property_activate(self, prop_name, state): if state == IBus.PropState.CHECKED: if prop_name == None: return elif prop_name.startswith('InputMode.'): self.__input_mode_activate(prop_name, state) return elif prop_name.startswith('TypingMode.'): self.__typing_mode_activate(prop_name, state) return elif prop_name.startswith('SegmentMode.'): self.__segment_mode_activate(prop_name, state) return elif prop_name.startswith('DictMode.'): self.__dict_mode_activate(prop_name, state) return else: if prop_name == 'setup': self.__start_setup() elif prop_name == 'setup-dict-kasumi-admin': self.__start_dict_admin() elif prop_name == 'setup-dict-kasumi-word': self.__start_add_word() else: if prop_name not in self.__prop_dict.keys(): return self.__prop_dict[prop_name].set_state(state) if prop_name == 'DictMode': sub_name = self.__dict_mode_get_prop_name(self.__dict_mode) if sub_name == None: return self.__dict_mode_activate(sub_name, IBus.PropState.CHECKED) def __input_mode_activate(self, prop_name, state): input_modes = { 'InputMode.Hiragana' : (INPUT_MODE_HIRAGANA, 'ใ‚'), 'InputMode.Katakana' : (INPUT_MODE_KATAKANA, 'ใ‚ข'), 'InputMode.HalfWidthKatakana' : (INPUT_MODE_HALF_WIDTH_KATAKANA, '_๏ฝฑ'), 'InputMode.Latin' : (INPUT_MODE_LATIN, '_A'), 'InputMode.WideLatin' : (INPUT_MODE_WIDE_LATIN, '๏ผก'), } if prop_name not in input_modes: printerr('Unknown prop_name = %s' % prop_name) return mode, symbol = input_modes[prop_name] if 'InputMode' not in self.__prop_dict.keys(): # Disable to show input mode with ibus-set-anthy Engine.__input_mode = mode return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Input mode"), 'symbol' : symbol } Engine.__input_mode = mode prop = self.__prop_dict['InputMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __typing_mode_activate(self, prop_name, state): if 'TypingMode' not in self.__prop_dict.keys(): # Disable to show typing mode with ibus-set-anthy return typing_modes = { 'TypingMode.Romaji' : (jastring.TYPING_MODE_ROMAJI, 'R'), 'TypingMode.Kana' : (jastring.TYPING_MODE_KANA, 'ใ‹'), 'TypingMode.ThumbShift' : (jastring.TYPING_MODE_THUMB_SHIFT, '่ฆช'), } if prop_name not in typing_modes: printerr('Unknown prop_name = %s' % prop_name) return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) if prop_name == 'TypingMode.ThumbShift': self._reset_thumb() mode, symbol = typing_modes[prop_name] label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } Engine.__typing_mode = mode prop = self.__prop_dict['TypingMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __refresh_typing_mode_property(self): if 'TypingMode' not in self.__prop_dict: # Disable to show typing mode with ibus-set-anthy return prop = self.__prop_dict['TypingMode'] modes = { jastring.TYPING_MODE_ROMAJI : ('TypingMode.Romaji', 'R'), jastring.TYPING_MODE_KANA : ('TypingMode.Kana', 'ใ‹'), jastring.TYPING_MODE_THUMB_SHIFT : ('TypingMode.ThumbShift', '่ฆช'), } prop_name, symbol = modes.get(Engine.__typing_mode, (None, None)) if prop_name == None or symbol == None: return label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Typing method"), 'symbol' : symbol } _prop = self.__prop_dict[prop_name] _prop.set_state(IBus.PropState.CHECKED) self.update_property(_prop) prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) def __segment_mode_activate(self, prop_name, state): if 'SegmentMode' not in self.__prop_dict.keys(): # Disable to show segment mode with ibus-set-anthy return segment_modes = { 'SegmentMode.Multi' : (SEGMENT_DEFAULT, '้€ฃ'), 'SegmentMode.Single' : (SEGMENT_SINGLE, 'ๅ˜'), 'SegmentMode.ImmediateMulti' : (SEGMENT_IMMEDIATE, '้€|้€ฃ'), 'SegmentMode.ImmediateSingle' : (SEGMENT_IMMEDIATE | SEGMENT_SINGLE, '้€|ๅ˜'), } if prop_name not in segment_modes: printerr('Unknown prop_name = %s' % prop_name) return self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) mode, symbol = segment_modes[prop_name] label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Segment mode"), 'symbol' : symbol } Engine.__segment_mode = mode prop = self.__prop_dict['SegmentMode'] prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__reset() self.__invalidate() def __dict_mode_get_prop_name(self, mode): if mode == 0: id = 'embedded' else: single_files = self.__get_single_dict_files() file = single_files[mode - 1] id = self.__get_dict_id_from_file(file) return 'DictMode.' + id def __dict_mode_activate(self, prop_name, state): if prop_name not in list(self.__prop_dict.keys()): # The prop_name is added. Need to restart. return i = prop_name.find('.') if i < 0: return # The id is already quoted. id = prop_name[i + 1:] file = None single_files = self.__get_single_dict_files() if id == 'embedded': pass else: found = False for file in single_files: if id == self.__get_quoted_id(file): found = True break if found == False: return if id == 'embedded': dict_name = 'default' Engine.__dict_mode = 0 else: if file not in single_files: printerr('Index error', file, single_files) return dict_name = 'ibus__' + id Engine.__dict_mode = single_files.index(file) + 1 self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) self.__context.init_personality() # dict_name is unicode but the argument is str. self.__context.do_set_personality(str(dict_name)) prop = self.__prop_dict['DictMode'] dicts = self.__prefs.get_value('dict', 'list') symbol = dicts[id].short_label label = _("%(description)s (%(symbol)s)") % \ { 'description' : _("Dictionary mode"), 'symbol' : symbol } prop.set_symbol(IBus.Text.new_from_string(symbol)) prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) def __argb(self, a, r, g, b): return ((a & 0xff)<<24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff) def __rgb(self, r, g, b): return self.__argb(255, r, g, b) def do_focus_in(self): self.register_properties(self.__prop_list) self.__refresh_typing_mode_property() mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if mode == 2: self.__update_input_chars() # self.__reset() # self.__invalidate() size = self.__prefs.get_value('common', 'page-size') if size != self.__lookup_table.get_page_size(): self.__lookup_table.set_page_size(size) def do_focus_out(self): if self.__has_input_purpose: self.__input_purpose = 0 mode = self.__prefs.get_value('common', 'behavior-on-focus-out') if mode == 0 or mode == 1: self.__reset() self.__invalidate() def do_set_content_type(self, purpose, hints): if self.__has_input_purpose: self.__input_purpose = purpose def do_disable(self): self.__reset() self.__invalidate() def do_reset(self): self.__reset() self.__invalidate() def __destroy(self, obj): if self.__idle_id != 0: GLib.source_remove(self.__idle_id) self.__idle_id = 0 # It seems do_destroy() is called when launch_engine() is called. #self.__remove_dict_files() # It seems super.destroy() does not unref the engine. def __join_all_segments(self): while True: nr_segments = self.__context.get_nr_segments() seg = nr_segments - self.__cursor_pos if seg > 1: self.__context.resize_segment(self.__cursor_pos, 1) else: break def __normalize_preedit(self, preedit): if not self.__is_utf8: return preedit for key in list(romaji_normalize_rule.keys()): if preedit.find(key) >= 0: for value in romaji_normalize_rule[key]: preedit = preedit.replace(key, value) return preedit # begine convert def __begin_anthy_convert(self): if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__end_anthy_convert() if self.__convert_mode == CONV_MODE_ANTHY: return self.__convert_mode = CONV_MODE_ANTHY # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(True) text = self.__normalize_preedit(text) self.__context.set_string(text) if Engine.__segment_mode & SEGMENT_SINGLE: self.__join_all_segments() nr_segments = self.__context.get_nr_segments() for i in range(0, nr_segments): buf = self.__context.get_segment(i, 0) text = buf self.__segments.append((0, text)) if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__cursor_pos = nr_segments - 1 else: self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False def __end_anthy_convert(self): if self.__convert_mode == CONV_MODE_OFF: return self.__convert_mode = CONV_MODE_OFF self.__convert_chars = '' self.__segments = list() self.__cursor_pos = 0 self.__lookup_table.clear() self.__lookup_table_visible = False def __end_convert(self): self.__end_anthy_convert() # test case 'verudhi' can show U+3046 + U+309B and U+3094 def __candidate_cb(self, candidate): if not self.__is_utf8: return for key in list(romaji_utf8_rule.keys()): if candidate.find(key) >= 0: for value in romaji_utf8_rule[key]: candidate = candidate.replace(key, value) self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) def __fill_lookup_table(self): if self.__convert_mode == CONV_MODE_PREDICTION: nr_predictions = self.__context.get_nr_predictions() # fill lookup_table self.__lookup_table.clear() for i in range(0, nr_predictions): buf = self.__context.get_prediction(i) candidate = buf self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) self.__candidate_cb(candidate) return # get segment stat nr_candidates = self.__context.get_nr_candidates(self.__cursor_pos) # fill lookup_table self.__lookup_table.clear() for i in range(0, nr_candidates): buf = self.__context.get_segment(self.__cursor_pos, i) candidate = buf self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate)) self.__candidate_cb(candidate) def __invalidate(self): if self.__idle_id != 0: return self.__idle_id = GLib.idle_add(self.__update, priority = GLib.PRIORITY_LOW) # def __get_preedit(self): def __get_preedit(self, commit=False): if Engine.__input_mode == INPUT_MODE_HIRAGANA: # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(commit) elif Engine.__input_mode == INPUT_MODE_KATAKANA: # text, cursor = self.__preedit_ja_string.get_katakana() text, cursor = self.__preedit_ja_string.get_katakana(commit) elif Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA: # text, cursor = self.__preedit_ja_string.get_half_width_katakana() text, cursor = self.__preedit_ja_string.get_half_width_katakana(commit) else: text, cursor = '', 0 return text, cursor def __update_input_chars(self): text, cursor = self.__get_preedit() attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(text))) self.update_preedit(text, attrs, cursor, not self.__preedit_ja_string.is_empty()) self.update_aux_string('', IBus.AttrList(), False) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update_convert_chars(self): # if self.__convert_mode == CONV_MODE_ANTHY: if self.__convert_mode == CONV_MODE_ANTHY or self.__convert_mode == CONV_MODE_PREDICTION: self.__update_anthy_convert_chars() return if self.__convert_mode == CONV_MODE_HIRAGANA: # text, cursor = self.__preedit_ja_string.get_hiragana() text, cursor = self.__preedit_ja_string.get_hiragana(True) elif self.__convert_mode == CONV_MODE_KATAKANA: # text, cursor = self.__preedit_ja_string.get_katakana() text, cursor = self.__preedit_ja_string.get_katakana(True) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: # text, cursor = self.__preedit_ja_string.get_half_width_katakana() text, cursor = self.__preedit_ja_string.get_half_width_katakana(True) elif self.__convert_mode == CONV_MODE_LATIN_0: text, cursor = self.__preedit_ja_string.get_latin() if text == text.lower(): self.__convert_mode = CONV_MODE_LATIN_1 elif self.__convert_mode == CONV_MODE_LATIN_1: text, cursor = self.__preedit_ja_string.get_latin() text = text.lower() elif self.__convert_mode == CONV_MODE_LATIN_2: text, cursor = self.__preedit_ja_string.get_latin() text = text.upper() elif self.__convert_mode == CONV_MODE_LATIN_3: text, cursor = self.__preedit_ja_string.get_latin() text = text.capitalize() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_0: text, cursor = self.__preedit_ja_string.get_wide_latin() if text == text.lower(): self.__convert_mode = CONV_MODE_WIDE_LATIN_1 elif self.__convert_mode == CONV_MODE_WIDE_LATIN_1: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.lower() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_2: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.upper() elif self.__convert_mode == CONV_MODE_WIDE_LATIN_3: text, cursor = self.__preedit_ja_string.get_wide_latin() text = text.capitalize() self.__convert_chars = text attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(text))) attrs.append(IBus.attr_background_new(self.__rgb(200, 200, 240), 0, len(text))) attrs.append(IBus.attr_foreground_new(self.__rgb(0, 0, 0), 0, len(text))) self.update_preedit(text, attrs, len(text), True) self.update_aux_string('', IBus.AttrList(), self.__lookup_table_visible) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update_anthy_convert_chars(self): self.__convert_chars = '' pos = 0 for i, (seg_index, text) in enumerate(self.__segments): self.__convert_chars += text if i < self.__cursor_pos: pos += len(text) attrs = IBus.AttrList() attrs.append(IBus.attr_underline_new( IBus.AttrUnderline.SINGLE, 0, len(self.__convert_chars))) attrs.append(IBus.attr_background_new(self.__rgb(200, 200, 240), pos, pos + len(self.__segments[self.__cursor_pos][1]))) attrs.append(IBus.attr_foreground_new(self.__rgb(0, 0, 0), pos, pos + len(self.__segments[self.__cursor_pos][1]))) self.update_preedit(self.__convert_chars, attrs, pos, True) aux_string = '( %d / %d )' % (self.__lookup_table.get_cursor_pos() + 1, self.__lookup_table.get_number_of_candidates()) self.update_aux_string(aux_string, IBus.AttrList(), self.__lookup_table_visible) self.update_lookup_table(self.__lookup_table, self.__lookup_table_visible) def __update(self): if self.__convert_mode == CONV_MODE_OFF: self.__update_input_chars() else: self.__update_convert_chars() self.__idle_id = 0 def __on_key_return(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: # text, cursor = self.__get_preedit() text, cursor = self.__get_preedit(True) self.__commit_string(text) elif self.__convert_mode == CONV_MODE_ANTHY: for i, (seg_index, text) in enumerate(self.__segments): self.__context.commit_segment(i, seg_index) self.__commit_string(self.__convert_chars) elif self.__convert_mode == CONV_MODE_PREDICTION: self.__context.commit_prediction(self.__segments[0][0]) self.__commit_string(self.__convert_chars) else: self.__commit_string(self.__convert_chars) return True def __on_key_escape(self): if self.__preedit_ja_string.is_empty(): return False self.__reset() self.__invalidate() return True def __on_key_back_space(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_OFF: if self.__lookup_table_visible: if self.__lookup_table.get_number_of_candidates() > 0: self.__lookup_table.set_cursor_pos(0) candidate = self.__lookup_table.get_candidate(0).get_text() self.__segments[self.__cursor_pos] = 0, candidate self.__lookup_table_visible = False elif self.__segments[self.__cursor_pos][0] != \ NTH_UNCONVERTED_CANDIDATE: buf = self.__context.get_segment(self.__cursor_pos, NTH_UNCONVERTED_CANDIDATE) self.__segments[self.__cursor_pos] = \ NTH_UNCONVERTED_CANDIDATE, buf #elif self._chk_mode('25'): ''' # FIXME: Delete the last char in the active segment. # # If we are able to delete a char in the active segment, # we also should be able to add a char in the active segment. # Currently plain preedit, no segment mode, i.e. # using self.__preedit_ja_string, can delete or add a char # but anthy active segoment mode, i.e. # using self.__segments, can not delete or add a char. # Deleting a char could be easy here but adding a char is # difficult because we need to update both self.__segments # and self.__preedit_ja_string but self.__preedit_ja_string # has no segment. To convert self.__segments to # self.__preedit_ja_string, we may use the reconvert mode # but no idea to convert keyvals to hiragana # in self__on_key_common() with multiple key typings. # Delete a char in the active segment all_text = '' nr_segments = self.__context.get_nr_segments() for i in xrange(0, nr_segments): buf = self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE) text = buf if i == self.__cursor_pos and len(text) > 0: text = text[:len(text) - 1] all_text += text if all_text == '': return # Set self.__preedit_ja_string by anthy context. self.__preedit_ja_string = jastring.JaString(Engine.__typing_mode, self.__latin_with_shift) self.__convert_chars = self.__normalize_preedit(all_text) for i in xrange(0, len(self.__convert_chars)): keyval = self.__convert_chars[i] self.__preedit_ja_string.insert(chr(ord(keyval))) self.__context.set_string(self.__convert_chars) # Set self.__segments by anty context # for editable self.__segments, # save NTH_UNCONVERTED_CANDIDATE nr_segments = self.__context.get_nr_segments() if self.__cursor_pos >= nr_segments and \ nr_segments > 0: self.__cursor_pos = nr_segments - 1 for i in xrange(self.__cursor_pos, nr_segments): if i == self.__cursor_pos: index = NTH_UNCONVERTED_CANDIDATE else: index = 0 buf = self.__context.get_segment(i, index) text = buf self.__segments[i] = index, text # Update self.__lookup_table self.__fill_lookup_table() ''' else: self.__end_convert() else: self.__preedit_ja_string.remove_before() self.__invalidate() return True def __on_key_delete(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_OFF: self.__end_convert() else: self.__preedit_ja_string.remove_after() self.__invalidate() return True '''def __on_key_hiragana_katakana(self): if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() if Engine.__input_mode >= INPUT_MODE_HIRAGANA and \ Engine.__input_mode < INPUT_MODE_HALF_WIDTH_KATAKANA: Engine.__input_mode += 1 else: Engine.__input_mode = INPUT_MODE_HIRAGANA modes = { INPUT_MODE_HIRAGANA: 'ใ‚', INPUT_MODE_KATAKANA: 'ใ‚ข', INPUT_MODE_HALF_WIDTH_KATAKANA: '_๏ฝฑ' } prop = self.__prop_dict[u'InputMode'] label = modes[Engine.__input_mode] prop.set_label(IBus.Text.new_from_string(label)) self.update_property(prop) self.__invalidate() return True''' '''def __on_key_muhenka(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() new_mode = CONV_MODE_HIRAGANA if self.__convert_mode < CONV_MODE_WIDE_LATIN_3 and \ self.__convert_mode >= CONV_MODE_HIRAGANA : self.__convert_mode += 1 else: self.__convert_mode = CONV_MODE_HIRAGANA self.__invalidate() return True''' '''def __on_key_henkan(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode != CONV_MODE_ANTHY: self.__begin_anthy_convert() self.__invalidate() elif self.__convert_mode == CONV_MODE_ANTHY: self.__lookup_table_visible = True self.do_cursor_down() return True''' '''def __on_key_space(self, wide=False): if Engine.__input_mode == INPUT_MODE_WIDE_LATIN or wide: # Input Wide space U+3000 wide_char = symbol_rule[chr(IBus.KEY_space)] self.__commit_string(wide_char) return True if self.__preedit_ja_string.is_empty(): if Engine.__input_mode in (INPUT_MODE_HIRAGANA, INPUT_MODE_KATAKANA): # Input Wide space U+3000 wide_char = symbol_rule[chr(IBus.KEY_space)] self.__commit_string(wide_char) return True else: # Input Half space U+0020 self.__commit_string(chr(IBus.KEY_space)) return True if self.__convert_mode != CONV_MODE_ANTHY: self.__begin_anthy_convert() self.__invalidate() elif self.__convert_mode == CONV_MODE_ANTHY: self.__lookup_table_visible = True self.do_cursor_down() return True''' def __on_key_up(self): if self.__preedit_ja_string.is_empty(): return False self.__lookup_table_visible = True self.do_cursor_up() return True def __on_key_down(self): if self.__preedit_ja_string.is_empty(): return False self.__lookup_table_visible = True self.do_cursor_down() return True def __on_key_page_up(self): if self.__preedit_ja_string.is_empty(): return False if self.__lookup_table_visible == True: self.do_page_up() return True def __on_key_page_down(self): if self.__preedit_ja_string.is_empty(): return False if self.__lookup_table_visible == True: self.do_page_down() return True '''def __on_key_left(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor(-1) self.__invalidate() return True if self.__convert_mode != CONV_MODE_ANTHY: return True if self.__cursor_pos == 0: return True self.__cursor_pos -= 1 self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True''' def __on_key_right(self): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor(1) self.__invalidate() return True if self.__convert_mode != CONV_MODE_ANTHY: return True if self.__cursor_pos + 1 >= len(self.__segments): return True self.__cursor_pos += 1 self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __on_key_number(self, keyval): if self.__convert_mode != CONV_MODE_ANTHY: return False if not self.__lookup_table_visible: return False if keyval == IBus.KEY_0: keyval = IBus.KEY_9 + 1 index = keyval - IBus.KEY_1 return self.__on_candidate_index_in_page(index) def __on_key_conv(self, mode): if self.__preedit_ja_string.is_empty(): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__end_anthy_convert() if mode == 0 or mode == 1: if self.__convert_mode == CONV_MODE_HIRAGANA + mode: return True self.__convert_mode = CONV_MODE_HIRAGANA + mode elif mode == 2: if self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return True self.__convert_mode = CONV_MODE_HALF_WIDTH_KATAKANA elif mode == 3: if CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3: self.__convert_mode += 1 if self.__convert_mode > CONV_MODE_WIDE_LATIN_3: self.__convert_mode = CONV_MODE_WIDE_LATIN_1 else: self.__convert_mode = CONV_MODE_WIDE_LATIN_0 elif mode == 4: if CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: self.__convert_mode += 1 if self.__convert_mode > CONV_MODE_LATIN_3: self.__convert_mode = CONV_MODE_LATIN_1 else: self.__convert_mode = CONV_MODE_LATIN_0 else: printerr('Unkown convert mode (%d)!' % mode) return False self.__invalidate() return True def __on_key_common(self, keyval, state=0): # If use-system-layout is FALSE in ibus 1.4.y or lower, # ibus converts the keymap and ibus-anthy needed to use # self.__commit_string # ibus 1.5.y uses XKB directly so Latin mode can return FALSE. if Engine.__input_mode == INPUT_MODE_LATIN: return False elif Engine.__input_mode == INPUT_MODE_WIDE_LATIN: # Input Wide Latin chars char = chr(keyval) wide_char = None#symbol_rule.get(char, None) if wide_char == None: wide_char = unichar_half_to_full(char) self.__commit_string(wide_char) return True # Input Japanese if Engine.__segment_mode & SEGMENT_IMMEDIATE: # Commit nothing pass elif self.__convert_mode == CONV_MODE_ANTHY: for i, (seg_index, text) in enumerate(self.__segments): self.__context.commit_segment(i, seg_index) self.__commit_string(self.__convert_chars) elif self.__convert_mode != CONV_MODE_OFF: self.__commit_string(self.__convert_chars) # 'n' + '\'' == 'nn' in romaji if (keyval >= ord('A') and keyval <= ord('Z')) or \ (keyval >= ord('a') and keyval <= ord('z')): shift = (state & IBus.ModifierType.SHIFT_MASK) != 0 else: shift = False self.__preedit_ja_string.set_shift(shift) self.__preedit_ja_string.insert(chr(keyval)) if Engine.__segment_mode & SEGMENT_IMMEDIATE: self.__begin_anthy_convert() self.__invalidate() return True #======================================================================= @classmethod def CONFIG_RELOADED(cls): if config.DEBUG: print('RELOADED') if not cls.__prefs: cls.__prefs = AnthyPrefs() cls.__prefs.connect('changed', cls.CONFIG_VALUE_CHANGED) cls._init_prefs() cls.__keybind = cls._mk_keybind() jastring.JaString.SET_PREFS(cls.__prefs) @classmethod def CONFIG_VALUE_CHANGED(cls, prefs, section, key, variant): if config.DEBUG: print('VALUE_CHAMGED =', section, key, variant) if section == 'shortcut': cls.__keybind = cls._mk_keybind() elif section == 'common': if key == 'shortcut-type': cls.__keybind = cls._mk_keybind() elif key == 'latin-with-shift': value = prefs.get_value(section, key) cls.__latin_with_shift = value jastring.JaString.RESET(cls.__prefs, section, key, value) elif section == 'kana-typing-rule': value = prefs.get_value(section, key) jastring.JaString.RESET(cls.__prefs, section, key, value) @classmethod def _init_prefs(cls): prefs = cls.__prefs value = prefs.get_value('common', 'latin-with-shift') cls.__latin_with_shift = value @classmethod def _mk_keybind(cls): keybind = {} sec = cls._get_shortcut_type() shortcuts = cls.__prefs.get_value('shortcut', sec) for k in shortcuts.keys(): cmd = '_Engine__cmd_' + k for s in shortcuts[k]: keybind.setdefault(cls._s_to_key(s), []).append(cmd) return keybind @classmethod def _get_shortcut_type(cls): try: t = cls.__prefs.get_value('common', 'shortcut-type') except: t = 'default' return t @classmethod def _s_to_key(cls, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ( 'alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return cls._mk_key(keyval, state) @classmethod def _reset_thumb(cls): if cls.__thumb == None: import thumb cls.__thumb = thumb.ThumbShiftKeyboard(cls.__prefs) else: cls.__thumb.reset() @staticmethod def _mk_key(keyval, state): if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): if keyval < 0xff and \ chr(keyval) in '!"#$%^\'()*+,-./:;<=>?@[\]^_`{|}~': state |= IBus.ModifierType.SHIFT_MASK elif IBus.KEY_a <= keyval <= IBus.KEY_z: keyval -= (IBus.KEY_a - IBus.KEY_A) return repr([int(state), int(keyval)]) def __process_key_event(self, obj, keyval, keycode, state): try: return self.__process_key_event_internal2(keyval, keycode, state) except: import traceback traceback.print_exc() return False def __process_key_event_thumb(self, keyval, keycode, state): if self.__thumb == None: self._reset_thumb() def on_timeout(keyval): if self._MM: insert(self.__thumb.get_char(self._MM)[self._SS]) else: cmd_exec([0, RS(), LS()][self._SS]) self._H = None def start(t): self._H = GLib.timeout_add(t, on_timeout, keyval) def stop(): if self._H: GLib.source_remove(self._H) self._H = None return True return False def insert(keyval): try: self._MM = self._SS = 0 ret = self.__on_key_common(ord(keyval)) if (keyval in self.__prefs.get_value('common', 'trigger-periods')): behavior = self.__prefs.get_value('common', 'behavior-on-period') if behavior == 1: return self.__cmd_convert(keyval, state) elif behavior == 2: return self.__cmd_commit(keyval, state) return ret except: pass def cmd_exec(keyval, state=0): key = self._mk_key(keyval, state) for cmd in self.__keybind.get(key, []): if config.DEBUG: print('cmd =', cmd) try: if getattr(self, cmd)(keyval, state): return True except Exception as err: printerr('Error command: %s: %s' % (cmd, str(err))) return False def RS(): return self.__thumb.get_rs() def LS(): return self.__thumb.get_ls() def T1(): return self.__thumb.get_t1() def T2(): return self.__thumb.get_t2() state = state & (IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK | IBus.ModifierType.RELEASE_MASK) if keyval in KP_Table and self.__prefs.get_value('common', 'ten-key-mode'): keyval = KP_Table[keyval] if state & IBus.ModifierType.RELEASE_MASK: if keyval == self._MM: if stop(): insert(self.__thumb.get_char(self._MM)[self._SS]) self._MM = 0 elif (1 if keyval == RS() else 2) == self._SS: if stop(): cmd_exec([0, RS(), LS()][self._SS]) self._SS = 0 if keyval in [RS(), LS()]: self._RSS = 0 elif keyval == self._RMM: self._RMM = 0 else: if keyval in [LS(), RS()] and state == 0: if self._SS: stop() cmd_exec([0, RS(), LS()][self._SS]) self._SS = 1 if keyval == RS() else 2 start(T1()) elif self._MM: stop() self._RMM = self._MM self._RSS = 1 if keyval == RS() else 2 insert(self.__thumb.get_char(self._MM)[1 if keyval == RS() else 2]) else: if self._RSS == (1 if keyval == RS() else 2): if self._RMM: insert(self.__thumb.get_char(self._RMM)[self._RSS]) else: self._SS = 1 if keyval == RS() else 2 start(T1()) elif keyval in self.__thumb.get_chars() and state == 0: if self._MM: stop() insert(self.__thumb.get_char(self._MM)[self._SS]) start(T2()) self._MM = keyval elif self._SS: stop() self._RMM = keyval self._RSS = self._SS insert(self.__thumb.get_char(keyval)[self._SS]) else: if self._RMM == keyval: if self._RSS: insert(self.__thumb.get_char(self._RMM)[self._RSS]) else: if cmd_exec(keyval, state): return True start(T2()) self._MM = keyval else: if self._MM: stop() insert(self.__thumb.get_char(self._MM)[self._SS]) elif self._SS: stop() cmd_exec([0, RS(), LS()][self._SS]) if cmd_exec(keyval, state): return True elif 0x21 <= keyval <= 0x7e and state & \ (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) == 0: if state & IBus.ModifierType.SHIFT_MASK: insert(self.__thumb.get_shift_char(keyval, chr(keyval))) elif self._SS == 0: insert(chr(keyval)) else: if not self.__preedit_ja_string.is_empty(): return True return False return True def __process_key_event_internal2(self, keyval, keycode, state): if self.__has_input_purpose and \ self.__input_purpose == IBus.InputPurpose.PASSWORD: return False if Engine.__typing_mode == jastring.TYPING_MODE_THUMB_SHIFT and \ Engine.__input_mode not in [INPUT_MODE_LATIN, INPUT_MODE_WIDE_LATIN]: return self.__process_key_event_thumb(keyval, keycode, state) is_press = (state & IBus.ModifierType.RELEASE_MASK) == 0 state = state & (IBus.ModifierType.SHIFT_MASK | IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) # ignore key release events if not is_press: return False if keyval in KP_Table and self.__prefs.get_value('common', 'ten-key-mode'): keyval = KP_Table[keyval] key = self._mk_key(keyval, state) for cmd in self.__keybind.get(key, []): if config.DEBUG: print('cmd =', cmd) try: if getattr(self, cmd)(keyval, state): return True except Exception as err: printerr('Error command: %s: %s' % (cmd, str(err))) # If input mode is not LATIN, eat Ctrl+Shift+u hex_mod_mask = IBus.ModifierType.SHIFT_MASK | \ IBus.ModifierType.CONTROL_MASK if Engine.__input_mode != INPUT_MODE_LATIN and \ keyval == IBus.KEY_U and \ state & hex_mod_mask == hex_mod_mask: return True if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK): return False if (IBus.KEY_exclam <= keyval <= IBus.KEY_asciitilde or keyval == IBus.KEY_yen): if Engine.__typing_mode == jastring.TYPING_MODE_KANA: if keyval == IBus.KEY_0 and state == IBus.ModifierType.SHIFT_MASK: keyval = IBus.KEY_asciitilde elif keyval == IBus.KEY_backslash and keycode in [132-8, 133-8]: keyval = IBus.KEY_yen ret = self.__on_key_common(keyval, state) if (Engine.__input_mode != INPUT_MODE_LATIN and chr(keyval) in self.__prefs.get_value('common', 'trigger-periods')): behavior = self.__prefs.get_value('common', 'behavior-on-period') if behavior == 1: return self.__cmd_convert(keyval, state) elif behavior == 2: return self.__cmd_commit(keyval, state) return ret else: if not self.__preedit_ja_string.is_empty(): return True return False def _chk_mode(self, mode): if '0' in mode and self.__preedit_ja_string.is_empty(): return True if self.__convert_mode == CONV_MODE_OFF: if '1' in mode and not self.__preedit_ja_string.is_empty(): return True elif self.__convert_mode == CONV_MODE_ANTHY: if '2' in mode and not self.__lookup_table_visible: return True elif self.__convert_mode == CONV_MODE_PREDICTION: if '3' in mode and not self.__lookup_table_visible: return True else: if '4' in mode: return True if '5' in mode and self.__lookup_table_visible: return True return False def __get_quoted_id(self, file): id = file has_mbcs = False for i in range(0, len(id)): if ord(id[i]) >= 0x7f: has_mbcs = True break if has_mbcs: id = str(binascii.hexlify(id.encode()), 'ascii') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] if id.startswith('0x'): id = str(binascii.hexlify(id.encode()), 'ascii') has_mbcs = True if has_mbcs: id = '0x' + id return id def __get_dict_id_from_file(self, file): return self.__get_quoted_id(file) def __link_dict_file_with_mode(self, id, file, link_mode): if id == None: return if link_mode == LINK_DICT_EMBEDDED: directory = ANTHY_CONFIG_PATH + '/' + IMPORTED_EMBEDDED_DICT_DIR name = IMPORTED_EMBEDDED_DICT_PREFIX + id elif link_mode == LINK_DICT_SINGLE: directory = ANTHY_CONFIG_PATH name = IMPORTED_SINGLE_DICT_PREFIX + id else: return if path.exists(directory): if not path.isdir(directory): printerr(directory + ' is not a directory') return else: os.makedirs(directory, 0o700) backup_dir = os.getcwd() os.chdir(directory) if path.lexists(directory + '/' + name): if path.islink(directory + '/' + name): printerr('Removing ' + name) os.unlink(directory + '/' + name) else: alternate = name + str(os.getpid()) printerr('Moving ' + name + ' to ' + alternate) os.rename(name, alternate) os.symlink(file, directory + '/' + name) if backup_dir != None: os.chdir(backup_dir) def __remove_dict_file_with_mode(self, id, file, link_mode): if id == None: return if link_mode == LINK_DICT_EMBEDDED: directory = ANTHY_CONFIG_PATH + '/' + IMPORTED_EMBEDDED_DICT_DIR name = IMPORTED_EMBEDDED_DICT_PREFIX + id elif link_mode == LINK_DICT_SINGLE: directory = ANTHY_CONFIG_PATH name = IMPORTED_SINGLE_DICT_PREFIX + id else: return if path.exists(directory): if not path.isdir(directory): printerr(directory + ' is not a directory') return backup_dir = os.getcwd() os.chdir(directory) if path.lexists(directory + '/' + name): os.unlink(directory + '/' + name) if backup_dir != None: os.chdir(backup_dir) def __link_dict_file(self, dict_item, file): if not path.exists(file): printerr(file + ' does not exist') return False id = dict_item.id if dict_item.embed: self.__link_dict_file_with_mode(id, file, LINK_DICT_EMBEDDED) if dict_item.single: self.__link_dict_file_with_mode(id, file, LINK_DICT_SINGLE) return True def __remove_dict_file(self, dict_item, file): id = dict_item.id if dict_item.embed: self.__remove_dict_file_with_mode(id, file, LINK_DICT_EMBEDDED) if dict_item.single: self.__remove_dict_file_with_mode(id, file, LINK_DICT_SINGLE) #mod_keys def __set_input_mode(self, mode): self.__input_mode_activate(mode, IBus.PropState.CHECKED) self.__reset() self.__invalidate() return True def __unset_current_input_mode(self): modes = { INPUT_MODE_HIRAGANA: 'InputMode.Hiragana', INPUT_MODE_KATAKANA: 'InputMode.Katakana', INPUT_MODE_HALF_WIDTH_KATAKANA: 'InputMode.HalfWidthKatakana', INPUT_MODE_LATIN: 'InputMode.Latin', INPUT_MODE_WIDE_LATIN: 'InputMode.WideLatin' } self.__input_mode_activate(modes[Engine.__input_mode], IBus.PropState.UNCHECKED) def __cmd_on_off(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() if Engine.__input_mode == INPUT_MODE_LATIN: return self.__set_input_mode('InputMode.Hiragana') else: return self.__set_input_mode('InputMode.Latin') def __cmd_circle_input_mode(self, keyval, state): modes = { INPUT_MODE_HIRAGANA: 'InputMode.Katakana', INPUT_MODE_KATAKANA: 'InputMode.HalfWidthKatakana', INPUT_MODE_HALF_WIDTH_KATAKANA: 'InputMode.Latin', INPUT_MODE_LATIN: 'InputMode.WideLatin', INPUT_MODE_WIDE_LATIN: 'InputMode.Hiragana' } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(modes[Engine.__input_mode]) def __cmd_circle_kana_mode(self, keyval, state): modes = { INPUT_MODE_HIRAGANA: 'InputMode.Katakana', INPUT_MODE_KATAKANA: 'InputMode.HalfWidthKatakana', INPUT_MODE_HALF_WIDTH_KATAKANA: 'InputMode.Hiragana', INPUT_MODE_LATIN: 'InputMode.Hiragana', INPUT_MODE_WIDE_LATIN: 'InputMode.Hiragana' } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode(modes[Engine.__input_mode]) def __cmd_latin_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode('InputMode.Latin') def __cmd_wide_latin_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode('InputMode.WideLatin') def __cmd_hiragana_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode('InputMode.Hiragana') def __cmd_katakana_mode(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode('InputMode.Katakana') def __cmd_half_katakana(self, keyval, state): # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_input_mode() return self.__set_input_mode('InputMode.HalfWidthKatakana') # def __cmd_cancel_pseudo_ascii_mode_key(self, keyval, state): # pass def __unset_current_typing_mode(self): modes = { jastring.TYPING_MODE_ROMAJI: 'TypingMode.Romaji', jastring.TYPING_MODE_KANA: 'TypingMode.Kana', jastring.TYPING_MODE_THUMB_SHIFT: 'TypingMode.ThumbShift', } self.__typing_mode_activate(modes[Engine.__typing_mode], IBus.PropState.UNCHECKED) def __cmd_circle_typing_method(self, keyval, state): if not self._chk_mode('0'): return False modes = { jastring.TYPING_MODE_THUMB_SHIFT: 'TypingMode.Romaji', jastring.TYPING_MODE_KANA: 'TypingMode.ThumbShift', jastring.TYPING_MODE_ROMAJI: 'TypingMode.Kana', } # ibus 1.5 or later needs to send UNCHECKED self.__unset_current_typing_mode() self.__typing_mode_activate(modes[Engine.__typing_mode], IBus.PropState.CHECKED) return True def __cmd_circle_dict_method(self, keyval, state): if not self._chk_mode('0'): return False # ibus 1.5 or later needs to send UNCHECKED prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name != None: self.__dict_mode_activate(prop_name, IBus.PropState.UNCHECKED) single_files = self.__get_single_dict_files() new_mode = Engine.__dict_mode + 1 if new_mode > len(single_files): new_mode = 0 Engine.__dict_mode = new_mode prop_name = self.__dict_mode_get_prop_name(Engine.__dict_mode) if prop_name == None: return False self.__dict_mode_activate(prop_name, IBus.PropState.CHECKED) return True #edit_keys def __cmd_insert_space(self, keyval, state): if Engine.__input_mode == INPUT_MODE_LATIN: return False if (self.__prefs.get_value('common', 'half-width-space') or Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA): return self.__cmd_insert_half_space(keyval, state) else: return self.__cmd_insert_wide_space(keyval, state) def __cmd_insert_alternate_space(self, keyval, state): if Engine.__input_mode == INPUT_MODE_LATIN: return False if (self.__prefs.get_value('common', 'half-width-space') or Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA): return self.__cmd_insert_wide_space(keyval, state) else: return self.__cmd_insert_half_space(keyval, state) def __cmd_insert_half_space(self, keyval, state): if not self._chk_mode('0'): return False if not self.__preedit_ja_string.is_empty(): return False self.__commit_string(chr(IBus.KEY_space)) return True def __cmd_insert_wide_space(self, keyval, state): if not self._chk_mode('0'): return False if not self.__preedit_ja_string.is_empty(): return False char = chr(IBus.KEY_space) wide_char = symbol_rule.get(char, None) if wide_char == None: wide_char = unichar_half_to_full(char) self.__commit_string(wide_char) return True def __cmd_backspace(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_back_space() def __cmd_delete(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_delete() def __cmd_commit(self, keyval, state): if not self._chk_mode('12345'): return False return self.__on_key_return() def __cmd_convert(self, keyval, state): if not self._chk_mode('14'): return False self.__begin_anthy_convert() self.__invalidate() return True def __cmd_predict(self, keyval, state): if not self._chk_mode('14'): return False text, cursor = self.__preedit_ja_string.get_hiragana(True) self.__context.set_prediction_string(text) nr_predictions = self.__context.get_nr_predictions() # for i in range(nr_predictions): # print self.__context.get_prediction(i) buf = self.__context.get_prediction(0) if not buf: return False text = buf self.__segments.append((0, text)) self.__convert_mode = CONV_MODE_PREDICTION self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False self.__invalidate() return True def __cmd_cancel(self, keyval, state): return self.__cmd_cancel_all(keyval, state) def __cmd_cancel_all(self, keyval, state): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_OFF: return self.__on_key_escape() else: self.__end_convert() self.__invalidate() return True def __cmd_reconvert(self, keyval, state): if not self.__preedit_ja_string.is_empty(): # if user has inputed some chars return False # Move importing Gtk into Engine from the header # because ibus-engine-anthy --xml does not requre to open X. try: from gi.repository import Gtk clipboard_get = Gtk.Clipboard.get except ImportError: clipboard_get = lambda a : None except RuntimeError: # Do we support the engine without display? printerr("Gtk couldn't be initialized") printerr('Could not open display') clipboard_get = lambda a : None # Use Gtk.Clipboard.request_text() instead of # Gtk.Clipboard.wait_for_text() because DBus is timed out. clipboard = clipboard_get ('PRIMARY') if clipboard: clipboard.request_text (self.__get_clipboard, CLIPBOARD_RECONVERT) return True def __update_reconvert(self, clipboard_text): if clipboard_text == None: return False self.__convert_chars = clipboard_text for i in range(0, len(self.__convert_chars)): keyval = self.__convert_chars[i] self.__preedit_ja_string.insert(chr(ord(keyval))) self.__context.set_string(self.__convert_chars) nr_segments = self.__context.get_nr_segments() for i in range(0, nr_segments): buf = self.__context.get_segment(i, 0) text = buf self.__segments.append((0, text)) self.__convert_mode = CONV_MODE_ANTHY self.__cursor_pos = 0 self.__fill_lookup_table() self.__lookup_table_visible = False self.__invalidate() return True # def __cmd_do_nothing(self, keyval, state): # return True #caret_keys def __move_caret(self, i): if not self._chk_mode('1'): return False if self.__convert_mode == CONV_MODE_OFF: self.__preedit_ja_string.move_cursor( -len(self.__preedit_ja_string.get_latin()[0]) if i == 0 else i if i in [-1, 1] else len(self.__preedit_ja_string.get_latin()[0])) self.__invalidate() return True return False def __cmd_move_caret_first(self, keyval, state): return self.__move_caret(0) def __cmd_move_caret_last(self, keyval, state): return self.__move_caret(2) def __cmd_move_caret_forward(self, keyval, state): return self.__move_caret(1) def __cmd_move_caret_backward(self, keyval, state): return self.__move_caret(-1) #segments_keys def __select_segment(self, i): if not self._chk_mode('25'): return False pos = 0 if i == 0 else \ self.__cursor_pos + i if i in [-1, 1] else \ len(self.__segments) - 1 if 0 <= pos < len(self.__segments) and pos != self.__cursor_pos: self.__cursor_pos = pos self.__lookup_table_visible = False self.__fill_lookup_table() self.__invalidate() return True def __cmd_select_first_segment(self, keyval, state): return self.__select_segment(0) def __cmd_select_last_segment(self, keyval, state): return self.__select_segment(2) def __cmd_select_next_segment(self, keyval, state): return self.__select_segment(1) def __cmd_select_prev_segment(self, keyval, state): return self.__select_segment(-1) def __cmd_shrink_segment(self, keyval, state): if not self._chk_mode('25'): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(-1) return True def __cmd_expand_segment(self, keyval, state): if not self._chk_mode('25'): return False if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(1) return True def __move_cursor_char_length(self, length): if Engine.__input_mode == INPUT_MODE_HIRAGANA: self.__preedit_ja_string.move_cursor_hiragana_length(length) elif Engine.__input_mode == INPUT_MODE_KATAKANA: self.__preedit_ja_string.move_cursor_katakana_length(length) elif Engine.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA: self.__preedit_ja_string.move_cursor_half_with_katakana_length(length) else: self.__preedit_ja_string.move_cursor(length) def __commit_nth_segment(self, commit_index, keyval, state): if commit_index >= len(self.__segments): return False if self.__convert_mode == CONV_MODE_ANTHY: for i in range(0, commit_index + 1): (seg_index, text) = self.__segments[i] self.commit_text(IBus.Text.new_from_string(text)) text, cursor = self.__get_preedit() commit_length = 0 for i in range(0, commit_index + 1): buf = self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE) commit_length += len(buf) self.__move_cursor_char_length(commit_length - cursor) for i in range(0, commit_length): self.__preedit_ja_string.remove_before() self.__move_cursor_char_length(cursor - commit_length) del self.__segments[0:commit_index + 1] if len(self.__segments) == 0: self.__reset() else: if self.__cursor_pos > commit_index: self.__cursor_pos -= (commit_index + 1) else: self.__cursor_pos = 0 text, cursor = self.__get_preedit() self.__convert_chars = text self.__context.set_string(text) self.__lookup_table.clear() self.__lookup_table.set_cursor_visible(False) self.__lookup_table_visible = False self.update_aux_string('', IBus.AttrList(), self.__lookup_table_visible) self.__fill_lookup_table() self.__invalidate() self.__update_input_chars() return True def __cmd_commit_first_segment(self, keyval, state): return self.__commit_nth_segment(0, keyval, state) def __cmd_commit_selected_segment(self, keyval, state): return self.__commit_nth_segment(self.__cursor_pos, keyval, state) #candidates_keys def __on_candidate_index_in_page(self, index): if not self._chk_mode('5'): return False if index >= self.__lookup_table.get_page_size(): return False cursor_pos = self.__lookup_table.get_cursor_pos() cursor_in_page = self.__lookup_table.get_cursor_in_page() real_index = cursor_pos - cursor_in_page + index if real_index >= self.__lookup_table.get_number_of_candidates(): return False self.__lookup_table.set_cursor_pos(real_index) index = self.__lookup_table.get_cursor_pos() candidate = self.__lookup_table.get_candidate(index).get_text() self.__segments[self.__cursor_pos] = index, candidate self.__lookup_table_visible = False self.__on_key_right() self.__invalidate() return True def __cmd_select_first_candidate(self, keyval, state): return self.__on_candidate_index_in_page(0) def __cmd_select_last_candidate(self, keyval, state): return self.__on_candidate_index_in_page( self.__lookup_table.get_page_size() - 1) def __cmd_select_next_candidate(self, keyval, state): if not self._chk_mode('235'): return False return self.__on_key_down() def __cmd_select_prev_candidate(self, keyval, state): if not self._chk_mode('235'): return False return self.__on_key_up() def __cmd_candidates_page_up(self, keyval, state): if not self._chk_mode('5'): return False return self.__on_key_page_up() def __cmd_candidates_page_down(self, keyval, state): if not self._chk_mode('5'): return False return self.__on_key_page_down() #direct_select_keys def __select_keyval(self, keyval): if not self._chk_mode('5'): return False return self.__on_key_number(keyval) def __cmd_select_candidates_1(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_2(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_3(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_4(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_5(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_6(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_7(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_8(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_9(self, keyval, state): return self.__select_keyval(keyval) def __cmd_select_candidates_0(self, keyval, state): return self.__select_keyval(keyval) #convert_keys def __cmd_convert_to_char_type_forward(self, keyval, state): if self.__convert_mode == CONV_MODE_ANTHY: n = self.__segments[self.__cursor_pos][0] if n == NTH_HIRAGANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) elif n == NTH_KATAKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif n == NTH_HALFKANA_CANDIDATE: return self.__convert_segment_to_latin(-100) elif n == -100: return self.__convert_segment_to_latin(-101) else: return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) if self.__convert_mode == CONV_MODE_KATAKANA: return self.__cmd_convert_to_half_katakana(keyval, state) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return self.__cmd_convert_to_latin(keyval, state) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__cmd_convert_to_wide_latin(keyval, state) elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3): return self.__cmd_convert_to_hiragana(keyval, state) else: return self.__cmd_convert_to_katakana(keyval, state) def __cmd_convert_to_char_type_backward(self, keyval, state): if self.__convert_mode == CONV_MODE_ANTHY: n = self.__segments[self.__cursor_pos][0] if n == NTH_KATAKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) elif n == NTH_HALFKANA_CANDIDATE: return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) elif n == -100: return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif n == -101: return self.__convert_segment_to_latin(-100) else: return self.__convert_segment_to_latin(-101) if self.__convert_mode == CONV_MODE_KATAKANA: return self.__cmd_convert_to_hiragana(keyval, state) elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: return self.__cmd_convert_to_katakana(keyval, state) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__cmd_convert_to_half_katakana(keyval, state) elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3): return self.__cmd_convert_to_latin(keyval, state) else: return self.__cmd_convert_to_wide_latin(keyval, state) def __convert_segment_to_kana(self, n): if self.__convert_mode == CONV_MODE_ANTHY and -4 <= n <= -2: buf = self.__context.get_segment(self.__cursor_pos, n) self.__segments[self.__cursor_pos] = n, buf self.__lookup_table_visible = False self.__invalidate() return True return False def __convert_to_hiragana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HIRAGANA_CANDIDATE) return self.__on_key_conv(0) def __convert_to_katakana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_KATAKANA_CANDIDATE) return self.__on_key_conv(1) def __convert_to_half_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: i, s = self.__segments[self.__cursor_pos] if i == -101: return self.__convert_segment_to_latin(-100) elif i == -100: return self.__convert_segment_to_latin(-100) if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) elif CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode <= CONV_MODE_WIDE_LATIN_3: return self.__on_key_conv(4) elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: return self.__on_key_conv(4) return self.__on_key_conv(2) def __convert_to_half_katakana_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_kana(NTH_HALFKANA_CANDIDATE) return self.__on_key_conv(2) def __convert_segment_to_latin(self, n): if self.__convert_mode == CONV_MODE_ANTHY and n in [-100, -101]: start = 0 for i in range(self.__cursor_pos): start += len(self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE)) end = start + len(self.__context.get_segment(self.__cursor_pos, NTH_UNCONVERTED_CANDIDATE)) i, s = self.__segments[self.__cursor_pos] s2 = self.__preedit_ja_string.get_raw(start, end) if n == -101: s2 = ''.join([unichar_half_to_full(c) for c in s2]) if i == n: if s == s2.lower(): s2 = s2.upper() elif s == s2.upper(): s2 = s2.capitalize() elif s == s2 or s == s2.capitalize(): s2 = s2.lower() self.__segments[self.__cursor_pos] = n, s2 self.__lookup_table_visible = False self.__invalidate() return True return False def __convert_to_wide_latin_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_latin(-101) return self.__on_key_conv(3) def __convert_to_latin_internal(self, keyval, state, mode): if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_ANTHY: if mode == 1: self.__cmd_move_caret_first(keyval, state) self.__shrink_segment_end() return self.__convert_segment_to_latin(-100) return self.__on_key_conv(4) def __cmd_convert_to_hiragana(self, keyval, state): return self.__convert_to_hiragana_internal(keyval, state, 0) def __cmd_convert_to_hiragana_all(self, keyval, state): return self.__convert_to_hiragana_internal(keyval, state, 1) def __cmd_convert_to_katakana(self, keyval, state): return self.__convert_to_katakana_internal(keyval, state, 0) def __cmd_convert_to_katakana_all(self, keyval, state): return self.__convert_to_katakana_internal(keyval, state, 1) def __cmd_convert_to_half(self, keyval, state): return self.__convert_to_half_internal(keyval, state, 0) def __cmd_convert_to_half_all(self, keyval, state): return self.__convert_to_half_internal(keyval, state, 1) def __cmd_convert_to_half_katakana(self, keyval, state): return self.__convert_to_half_katakana_internal(keyval, state, 0) def __cmd_convert_to_half_katakana_all(self, keyval, state): return self.__convert_to_half_katakana_internal(keyval, state, 1) def __cmd_convert_to_wide_latin(self, keyval, state): return self.__convert_to_wide_latin_internal(keyval, state, 0) def __cmd_convert_to_wide_latin_all(self, keyval, state): return self.__convert_to_wide_latin_internal(keyval, state, 1) def __cmd_convert_to_latin(self, keyval, state): return self.__convert_to_latin_internal(keyval, state, 0) def __cmd_convert_to_latin_all(self, keyval, state): return self.__convert_to_latin_internal(keyval, state, 1) #dictonary_keys def __cmd_dict_admin(self, keyval, state): if not self._chk_mode('0'): return False self.__start_dict_admin() return True def __cmd_add_word(self, keyval, state): if not self._chk_mode('0'): return False self.__start_add_word() return True def __cmd_start_setup(self, keyval, state): if not self._chk_mode('0'): return False self.__start_setup() return True def __start_dict_admin(self): command = self.__prefs.get_value('common', 'dict-admin-command') os.spawnl(os.P_NOWAIT, *command) def __start_add_word(self): command = self.__prefs.get_value('common', 'add-word-command') os.spawnl(os.P_NOWAIT, *command) def __start_setup(self): if Engine.__setup_pid != 0: pid, state = os.waitpid(Engine.__setup_pid, os.P_NOWAIT) if pid != Engine.__setup_pid: return Engine.__setup_pid = 0 setup_cmd = path.join(config.LIBEXECDIR, 'ibus-setup-anthy') Engine.__setup_pid = os.spawnl(os.P_NOWAIT, setup_cmd, 'ibus-setup-anthy') def __cmd_hiragana_for_latin_with_shift(self, keyval, state): self.__preedit_ja_string.set_hiragana_katakana(True) ibus-anthy-1.5.11/engine/python3/factory.py000066400000000000000000000053611346647371500206010ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import os import sys from gi import require_version as gi_require_version gi_require_version('IBus', '1.0') from gi.repository import IBus import _config as config import engine class EngineFactory(IBus.Factory): FACTORY_PATH = '/com/redhat/IBus/engines/Anthy/Factory' ENGINE_PATH = '/com/redhat/IBus/engines/Anthy/Engine' NAME = 'Anthy' LANG = 'ja' ICON = config.PKGDATADIR + '/icons/ibus-anthy.png' AUTHORS = 'Huang Peng ' CREDITS = 'GPLv2' def __init__(self, bus): self.__bus = bus engine.Engine.CONFIG_RELOADED() super(EngineFactory, self).__init__(object_path=IBus.PATH_FACTORY, connection=bus.get_connection()) self.__id = 0 bus.get_connection().signal_subscribe('org.freedesktop.DBus', 'org.freedesktop.DBus', 'NameOwnerChanged', '/org/freedesktop/DBus', None, 0, self.__name_owner_changed_cb, bus) def do_create_engine(self, engine_name): if engine_name == 'anthy': self.__id += 1 return engine.Engine(self.__bus, '%s/%d' % (self.ENGINE_PATH, self.__id)) return super(EngineFactory, self).do_create_engine(engine_name) def __name_owner_changed_cb(self, connection, sender_name, object_path, interface_name, signal_name, parameters, user_data): if signal_name == 'NameOwnerChanged': engine.Engine.CONFIG_RELOADED() ibus-anthy-1.5.11/engine/python3/ibus-engine-anthy.in000066400000000000000000000021671346647371500224370ustar00rootroot00000000000000#!/bin/sh # # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. export IBUS_PREFIX=@prefix@ export IBUS_ANTHY_PKGDATADIR=@datarootdir@/@PACKAGE@ export LIBEXECDIR=@libexecdir@ exec @ENV_IBUS_ENGINE@ @PYTHON@ @datarootdir@/@PACKAGE@/engine/main.py $@ ibus-anthy-1.5.11/engine/python3/jastring.py000066400000000000000000000272411346647371500207540ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import romaji import kana import thumb from segment import unichar_half_to_full HalfSymbolTable = {} for i in range(32, 127): if not chr(i).isalnum(): HalfSymbolTable[unichar_half_to_full(chr(i))] = chr(i) HalfNumberTable = {} for i in range(10): HalfNumberTable[unichar_half_to_full(str(i))] = str(i) PeriodTable = {'ใ€‚': '๏ผŽ', 'ใ€': '๏ผŒ', '๏ฝก': '.', '๏ฝค': ','} SymbolTable = {} SymbolTable[0] = {'ใ€Œ': 'ใ€Œ', 'ใ€': 'ใ€', '๏ผ': '๏ผ'} SymbolTable[1] = {'ใ€Œ': 'ใ€Œ', 'ใ€': 'ใ€', '๏ผ': 'ใƒป'} SymbolTable[2] = {'ใ€Œ': '๏ผป', 'ใ€': '๏ผฝ', '๏ผ': '๏ผ'} SymbolTable[3] = {'ใ€Œ': '๏ผป', 'ใ€': '๏ผฝ', '๏ผ': 'ใƒป'} TYPING_MODE_ROMAJI, \ TYPING_MODE_KANA, \ TYPING_MODE_THUMB_SHIFT = list(range(3)) class JaString: _prefs = None _mode = TYPING_MODE_ROMAJI _shift = False _unshift = False def __init__(self, mode=TYPING_MODE_ROMAJI, latin_with_shift=True): self._init_mode(mode) if mode == TYPING_MODE_ROMAJI: romaji.RomajiSegment.SET_LATIN_WITH_SHIFT(latin_with_shift) @classmethod def _init_mode(cls, mode): cls._mode = mode cls._shift = False cls._unshift = False cls.__cursor = 0 cls.__segments = list() if mode == TYPING_MODE_ROMAJI: romaji.RomajiSegment.INIT_ROMAJI_TYPING_RULE(cls._prefs) elif mode == TYPING_MODE_KANA: kana.KanaSegment.INIT_KANA_TYPING_RULE(cls._prefs) elif mode == TYPING_MODE_THUMB_SHIFT: thumb.ThumbShiftSegment.INIT_THUMB_TYPING_RULE(cls._prefs) @classmethod def SET_PREFS(cls, prefs): cls._prefs = prefs @classmethod def RESET(cls, prefs, section, key, value): cls._prefs = prefs if section == 'kana-typing-rule': mode = TYPING_MODE_KANA kana.KanaSegment.RESET(prefs, section, key, value) cls._init_mode(mode) if section == 'common' and key == 'latin-with-shift': romaji.RomajiSegment.SET_LATIN_WITH_SHIFT(value) def set_shift(self, shift): self._shift = shift def set_hiragana_katakana(self, mode): if mode and self._mode == TYPING_MODE_ROMAJI: self._unshift = True def insert(self, c): segment_before = None segment_after = None new_segments = None if self.__cursor >= 1: segment_before = self.__segments[self.__cursor - 1] if self.__cursor < len(self.__segments): segment_after = self.__segments[self.__cursor] if segment_before and not segment_before.is_finished(): if type(segment_before) == romaji.RomajiSegment: new_segments = segment_before.append(c, self._shift, self._unshift) self._unshift = False else: new_segments = segment_before.append(c) elif segment_after and not segment_after.is_finished(): if type(segment_after) == romaji.RomajiSegment: new_segments = segment_after.prepend(c, self._shift, self._unshift) self._unshift = False else: new_segments = segment_after.prepend(c) else: if c != '\0' and c != '': if self._mode == TYPING_MODE_ROMAJI: new_segments = [romaji.RomajiSegment(c, '', self._shift, self._unshift)] self._unshift = False elif self._mode == TYPING_MODE_KANA: # kana mode doesn't have shift latin in MS. new_segments = [kana.KanaSegment(c)] elif self._mode == TYPING_MODE_THUMB_SHIFT: new_segments = [thumb.ThumbShiftSegment(c)] if new_segments: self.__segments[self.__cursor:self.__cursor] = new_segments self.__cursor += len(new_segments) def remove_before(self): index = self.__cursor - 1 if index >= 0: segment = self.__segments[index] segment.pop() if segment.is_empty(): del self.__segments[index] self.__cursor = index return True return False def remove_after(self): index = self.__cursor if index < len(self.__segments): segment = self.__segments[index] segment.pop() if segment.is_empty(): del self.__segments[index] return True return False def get_string(self, type): pass def move_cursor(self, delta): self.__cursor += delta if self.__cursor < 0: self.__cursor = 0 elif self.__cursor > len(self.__segments): self.__cursor = len(self.__segments) # hiragana segments are not char lengths. # e.g. 'ya' is 1 segment and 1 char and 'kya' is 1 segment and 2 chars. def move_cursor_hiragana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = str(self.__segments[self.__cursor].to_hiragana()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = str(self.__segments[self.__cursor].to_hiragana()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def move_cursor_katakana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = str(self.__segments[self.__cursor].to_katanaka()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = str(self.__segments[self.__cursor].to_katanaka()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def move_cursor_half_with_katakana_length(self, length): delta = length if delta < 0: if self.__cursor >= len(self.__segments): delta = delta + (self.__cursor - len(self.__segments) + 1) self.__cursor = len(self.__segments) - 1 while delta < 0: text = str(self.__segments[self.__cursor].to_half_width_katakana()) if len(text) > -delta: break delta = delta + len(text) self.__cursor = self.__cursor - 1 else: if self.__cursor >= len(self.__segments): self.__cursor = len(self.__segments) return while delta > 0: text = str(self.__segments[self.__cursor].to_half_width_katakana()) if len(text) > delta: break delta = delta - len(text) self.__cursor = self.__cursor + 1 def _chk_text(self, s): period = self._prefs.get_value('common', 'period-style') symbol = self._prefs.get_value('common', 'symbol-style') half_symbol = self._prefs.get_value('common', 'half-width-symbol') half_number = self._prefs.get_value('common', 'half-width-number') ret = '' for c in s: c = c if not period else PeriodTable.get(c, c) # thumb_left + '2' and '/' are different if self._mode != TYPING_MODE_THUMB_SHIFT: c = c if not symbol else SymbolTable[symbol].get(c, c) c = c if not half_symbol else HalfSymbolTable.get(c, c) c = c if not half_number else HalfNumberTable.get(c, c) ret += c return ret def get_hiragana(self, commit=False): conv = lambda s: s.to_hiragana() R = lambda s: s if not (commit and s[-1:] == 'n') else s[:-1] + 'ใ‚“' text_before = R(''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_katakana(self, commit=False): conv = lambda s: s.to_katakana() R = lambda s: s if not (commit and s[-1:] == 'n') else s[:-1] + 'ใƒณ' text_before = R(''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_half_width_katakana(self, commit=False): conv = lambda s: s.to_half_width_katakana() R = lambda s: s if not (commit and s[-1:] == 'n') else s[:-1] + '๏พ' text_before = R(''.join(map(conv, self.__segments[:self.__cursor]))) text_after = R(''.join(map(conv, self.__segments[self.__cursor:]))) return self._chk_text(text_before + text_after), len(text_before) def get_latin(self): conv = lambda s: s.to_latin() text_before = ''.join(map(conv, self.__segments[:self.__cursor])) text_after = ''.join(map(conv, self.__segments[self.__cursor:])) return text_before + text_after, len(text_before) def get_wide_latin(self): conv = lambda s: s.to_wide_latin() text_before = ''.join(map(conv, self.__segments[:self.__cursor])) text_after = ''.join(map(conv, self.__segments[self.__cursor:])) return text_before + text_after, len(text_before) def is_empty(self): return all([s.is_empty() for s in self.__segments]) def get_raw(self, start, end): i = 0 r = '' for s in self.__segments: if i >= end: break elif start <= i: r += s.to_latin() i += len(s.to_hiragana()) return r ibus-anthy-1.5.11/engine/python3/kana.py000066400000000000000000000140101346647371500200330ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from tables import * import segment _UNFINISHED_HIRAGANA = set('ใ‹ใใใ‘ใ“ใ•ใ—ใ™ใ›ใใŸใกใคใฆใจใฏใฒใตใธใป') class KanaSegment(segment.Segment): _prefs = None _kana_typing_rule_method = None _kana_voiced_consonant_rule = None _kana_voiced_consonant_dict = None def __init__(self, enchars='', jachars=''): if not jachars: jachars = self.__get_kana_typing_rule(enchars, '') super(KanaSegment, self).__init__(enchars, jachars) @classmethod def INIT_KANA_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._kana_typing_rule_method = None return if cls._kana_typing_rule_method == None: cls._init_kana_typing_method() if cls._kana_voiced_consonant_rule == None and \ cls._kana_typing_rule_method != None: cls._init_kana_voiced_consonant_rule() @classmethod def _init_kana_typing_method(cls, method=None): prefs = cls._prefs if method == None: method = prefs.get_value('kana-typing-rule', 'method') if method == None: method = 'jp' cls._kana_typing_rule_method = method keymap = prefs.get_value('kana-typing-rule', 'list') if cls._kana_typing_rule_method not in keymap.keys(): cls._kana_typing_rule_method = None @classmethod def _init_kana_voiced_consonant_rule(cls): prefs = cls._prefs # Create kana_voiced_consonant_rule dynamically. # E.g. 't' + '@' on jp kbd becomes Hiragana GA # 't' + '[' on us kbd becomes Hiragana GA # If the customized table provides U+309b with other chars, # it needs to be detected dynamically. cls._kana_voiced_consonant_rule = {} method = cls._kana_typing_rule_method keymap = prefs.get_value('kana-typing-rule', 'list')[method] for gkey in keymap.keys(): value = keymap[gkey] key = prefs.typing_from_config_key(gkey) if key == '': continue if value == chr(0x309b): for no_voiced, voiced in \ list(kana_voiced_consonant_no_rule.items()): rule = no_voiced + key cls._kana_voiced_consonant_rule[rule] = voiced if value == chr(0x309c): for no_voiced, voiced in \ list(kana_semi_voiced_consonant_no_rule.items()): rule = no_voiced + key cls._kana_voiced_consonant_rule[rule] = voiced @classmethod def RESET(cls, prefs, section, key, value): cls._prefs = prefs if section == 'kana-typing-rule' and value != None: cls._kana_typing_rule_method = None cls._kana_voiced_consonant_rule = None cls.INIT_KANA_TYPING_RULE(prefs) def __get_kana_typing_rule(self, enchars, retval=None): prefs = self._prefs value = None method = self._kana_typing_rule_method if method != None: # Need to send Unicode to typing_to_config_key instead of UTF-8 # not to separate U+A5 gkey = prefs.typing_to_config_key(enchars) if gkey == '': return None enchars = gkey keymap = prefs.get_value('kana-typing-rule', 'list')[method] value = keymap.get(enchars) if value == '': value = None if value == None: value = retval else: value = kana_typing_rule_static.get(enchars, retval) return value def is_finished(self): return not (self._jachars in _UNFINISHED_HIRAGANA) def append(self, enchar): if enchar == '\0' or enchar == '': return [] if self._jachars: text = self._jachars + enchar if self._kana_voiced_consonant_rule != None: jachars = self._kana_voiced_consonant_rule.get(text, None) if jachars: self._enchars = self._enchars + enchar self._jachars = jachars return [] return [KanaSegment(enchar)] self._enchars = self._enchars + enchar self._jachars = self.__get_kana_typing_rule(self._enchars, '') return [] def prepend(self, enchar): if enchar == '\0' or enchar == '': return [] if self._enchars == '': self._enchars = enchar self._jachars = self.__get_kana_typing_rule(self._enchars, '') return [] return [KanaSegment(enchar)] def pop(self, index=-1): if index == -1: index = len(self._enchars) - 1 if index < 0 or index >= len(self._enchars): raise IndexError('Out of bound') if self.is_finished(): self._enchars = '' self._jachars = '' else: enchars = list(self._enchars) del enchars[index] self._enchars = ''.join(enchars) self._jachars = self.__get_kana_typing_rule(self._enchars, '') ibus-anthy-1.5.11/engine/python3/main.py000066400000000000000000000144731346647371500200620ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. import os from os import path import sys import getopt import locale import xml.dom.minidom from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import GLib # set_prgname before importing factory to show the name in warning # messages when import modules are failed. E.g. Gtk. GLib.set_prgname('ibus-engine-anthy') from gi.repository import IBus import _config as config import factory class IMApp: def __init__(self, exec_by_ibus): command_line = config.LIBEXECDIR + '/ibus-engine-anthy --ibus' self.__component = IBus.Component(name='org.freedesktop.IBus.Anthy', description='Anthy Component', version='0.1.0', license='GPL', author='Peng Huang ', homepage='https://github.com/ibus/ibus/wiki', command_line=command_line, textdomain='ibus-anthy') engine = IBus.EngineDesc(name='anthy', longname='Anthy', description='Anthy Input Method', language='ja', license='GPL', author='Peng Huang ', icon='ibus-anthy', layout=config.LAYOUT, symbol=config.SYMBOL_CHAR, rank=99) self.__component.add_engine(engine) self.__mainloop = GLib.MainLoop() self.__bus = IBus.Bus() self.__bus.connect('disconnected', self.__bus_disconnected_cb) self.__factory = factory.EngineFactory(self.__bus) if exec_by_ibus: self.__bus.request_name('org.freedesktop.IBus.Anthy', 0) else: self.__bus.register_component(self.__component) def run(self): self.__mainloop.run() def __bus_disconnected_cb(self, bus): self.__mainloop.quit() def launch_engine(exec_by_ibus): IMApp(exec_by_ibus).run() def get_userhome(): if 'HOME' not in os.environ: import pwd userhome = pwd.getpwuid(os.getuid()).pw_dir else: userhome = os.environ['HOME'] userhome = userhome.rstrip('/') return userhome def resync_engine_file(): user_config = path.join(get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') if not path.exists(user_config): return if not path.exists(system_config): os.unlink(user_config) return # path.getmtime depends on the build time rather than install time. def __get_engine_file_version(engine_file): version_str = '' dom = xml.dom.minidom.parse(engine_file) elements = dom.getElementsByTagName('version') nodes = [] if len(elements) > 0: nodes = elements[0].childNodes if len(nodes) > 0: version_str = nodes[0].data if version_str != '': version_str = version_str.strip() return version_str user_config_version = __get_engine_file_version(user_config) system_config_version = __get_engine_file_version(system_config) if system_config_version > user_config_version: import shutil shutil.copyfile(system_config, user_config) def print_xml(): user_config = os.path.join(get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = os.path.join(config.PKGDATADIR, 'engine', 'default.xml') xml = None for f in [user_config, system_config]: if os.path.exists(f): xml = f break if xml == None: print('Not exist: %s' % system_config, file=sys.stderr) return file = open(xml, 'r') print(file.read()) file.close() def print_help(out, v = 0): print('-i, --ibus executed by ibus.', file=out) print('-h, --help show this message.', file=out) print('-d, --daemonize daemonize ibus.', file=out) print('-x, --xml print engine xml.', file=out) sys.exit(v) def main(): try: locale.setlocale(locale.LC_ALL, '') except: pass exec_by_ibus = False daemonize = False xml = False shortopt = 'ihdx' longopt = ['ibus', 'help', 'daemonize', 'xml'] try: opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt) except getopt.GetoptError as 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 elif o in ('-x', '--xml'): xml = True else: print('Unknown argument: %s' % o, file=sys.stderr) print_help(sys.stderr, 1) if daemonize: if os.fork(): sys.exit() if xml: resync_engine_file() print_xml() return launch_engine(exec_by_ibus) if __name__ == '__main__': main() ibus-anthy-1.5.11/engine/python3/romaji.py000066400000000000000000000217741346647371500204210ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from tables import * import segment def romaji_correction_rule_get(k, d): return ('ใ‚“', k[1:2]) if k[0:1] == 'n' and not k[1:2] in "aiueony'" else d class RomajiSegment(segment.Segment): _prefs = None _romaji_typing_rule_method = None _latin_with_shift = True _shift_mode = False def __init__(self, enchars='', jachars='', shift=False, unshift=False): if self._latin_with_shift: # If Shift key is pressed, Latin mode. # If Hiragana_Katakana key is pressed, Hiragana mode. if shift: self._shift_mode = True if unshift: self._shift_mode = False enchars_orig = enchars # Even if the chars are capital with CapsLock, Hiragana # should be converted. E.g. 'SA' enchars = enchars.lower() if not jachars and not shift: jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, '') super(RomajiSegment, self).__init__(enchars_orig, jachars) @classmethod def INIT_ROMAJI_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._romaji_typing_rule_method = None return method = prefs.get_value('romaji-typing-rule', 'method') if method == None: method = 'default' cls._romaji_typing_rule_method = method keymap = prefs.get_value('romaji-typing-rule', 'list') if cls._romaji_typing_rule_method not in keymap.keys(): cls._romaji_typing_rule_method = None @classmethod def SET_LATIN_WITH_SHIFT(cls, latin_with_shift): # Do not use IBus.Config in every conversion for the performance. cls._latin_with_shift = latin_with_shift def __get_romaji_typing_rule(self, enchars, retval=None): prefs = self._prefs value = None method = self._romaji_typing_rule_method if method != None: # Need to send Unicode to typing_to_config_key instead of UTF-8 # not to separate U+A5 gkey = prefs.typing_to_config_key(enchars) if gkey == '': return None keymap = prefs.get_value('romaji-typing-rule', 'list')[method] value = keymap.get(gkey) if value == '': value = None if value == None: value = retval else: value = romaji_typing_rule_static.get(enchars, retval) return value def is_finished(self): return self._jachars != '' def append(self, enchar, shift=False, unshift=False): if self.is_finished(): if enchar == '' and enchar == '\0': return [] return [RomajiSegment(enchar)] text_orig = self._enchars + enchar text = text_orig.lower() if self._latin_with_shift: # If Shift key is pressed, Latin mode. # If Hiragana_Katakana key is pressed, Hiragana mode. if shift: self._shift_mode = True if unshift: self._shift_mode = False if self._shift_mode: self._enchars = text_orig return [] if shift: self._enchars = text_orig return [] jachars = self.__get_romaji_typing_rule(text, None) if jachars == None: jachars = symbol_rule.get(text, None) if jachars: self._enchars = text_orig self._jachars = jachars return [] jachars, c = romaji_double_consonat_typing_rule.get(text, (None, None)) if jachars: self._enchars = text_orig[0] self._jachars = jachars return [RomajiSegment(c)] # jachars, c = romaji_correction_rule.get(text, (None, None)) jachars, c = romaji_correction_rule_get(text, (None, None)) if jachars: self._enchars = text_orig[0] self._jachars = jachars return [RomajiSegment(c)] for i in range(-min(4, len(text)), 0): enchars = text[i:] jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, None) if jachars: jasegment = RomajiSegment(enchars, jachars) self._enchars = text_orig[:i] return [jasegment] jachars, c = romaji_double_consonat_typing_rule.get(enchars, (None, None)) if jachars: jasegment = RomajiSegment(enchars[:-len(c)], jachars) self._enchars = text_orig[:i] if c: return [jasegment, RomajiSegment(c)] return [jasegment] # jachars, c = romaji_correction_rule.get(enchars, (None, None)) jachars, c = romaji_correction_rule_get(enchars, (None, None)) if jachars: jasegment = RomajiSegment(enchars[:-len(c)], jachars) self._enchars = text_orig[:i] if c: return [jasegment, RomajiSegment(c)] return [jasegment] self._enchars = text_orig return [] def prepend(self, enchar, shift=False, unshift=False): if enchar == '' or enchar == '\0': return [] if self.is_finished(): return [RomajiSegment(enchar)] text_orig = enchar + self._enchars text = text_orig.lower() if self._latin_with_shift: if shift: self._shift_mode = True if unshift: self._shift_mode = False if self._shift_mode: self._enchars = text_orig return [] if shift: self._enchars = text_orig return [] jachars = self.__get_romaji_typing_rule(text, None) if jachars == None: jachars = symbol_rule.get(text, None) if jachars: self._enchars = text_orig self._jachars = jachars return [] jachars, c = romaji_double_consonat_typing_rule.get(text, (None, None)) if jachars: self._enchars = c return [RomajiSegment(text_orig[0], jachars)] # jachars, c = romaji_correction_rule.get(text, (None, None)) jachars, c = romaji_correction_rule_get(text, (None, None)) if jachars: self._enchars = c return [RomajiSegment(text_orig[0], jachars)] for i in range(min(4, len(text)), 0, -1): enchars = text[:i] jachars = self.__get_romaji_typing_rule(enchars, None) if jachars == None: jachars = symbol_rule.get(enchars, None) if jachars: jasegment = RomajiSegment(enchars, jachars) self._enchars = text_orig[i:] return [jasegment] jachars, c = romaji_double_consonat_typing_rule.get(enchars, (None, None)) if jachars: self._enchars = c + text_orig[i:] return [RomajiSegment(enchars[:-len(c)], jachars)] # jachars, c = romaji_correction_rule.get(enchars, (None, None)) jachars, c = romaji_correction_rule_get(enchars, (None, None)) if jachars: self._enchars = c + text_orig[i:] return [RomajiSegment(enchars[:-len(c)], jachars)] self._enchars = text_orig return [] def pop(self, index=-1): if index == -1: index = len(self._enchars) - 1 if index < 0 or index >= len(self._enchars): raise IndexError('Out of bound') if self.is_finished(): self._enchars = '' self._jachars = '' else: enchars = list(self._enchars) del enchars[index] self._enchars = ''.join(enchars) jachars = self.__get_romaji_typing_rule(self._enchars, None) if jachars == None: jachars = symbol_rule.get(self._enchars, '') self._jachars = jachars ibus-anthy-1.5.11/engine/python3/segment.py000066400000000000000000000055361346647371500206000ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2014 Takao Fujiwara # Copyright (c) 2007-2014 Red Hat, Inc. # # 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. from tables import * _half_full_table = [ (0x0020, 0x3000, 1), (0x0021, 0xFF01, 0x5E), ] def _h_to_f(c): code = ord (c) for half, full, size in _half_full_table: if code >= half and code < half + size: return chr(full + code - half) return c def unichar_half_to_full(c): tdl = {'"': '\u201d', "'": '\u2019', '`': '\u2018'} return tdl[c] if c in tdl else _h_to_f(c) class Segment(object): def __init__(self, enchars='', jachars=''): self._enchars = enchars self._jachars = jachars def append(self, enchar): raise NotImplementedError('append() is not implemented') def prepend(self, enchar): raise NotImplementedError('prepend() is not implemented') def pop(self, index=-1): raise NotImplementedError('pop() is not implemented') def is_finished(self): raise NotImplementedError('is_finised() is not implemented') def set_enchars(self, enchars): self.enchars = enchars def get_enchars(self): return self._enchars def set_jachars(self, jachars): self._jachars = jachars def get_jachars(self): return self._jachars def to_hiragana(self): if self._jachars: return self._jachars return self._enchars def to_katakana(self): if self._jachars: return ''.join([hiragana_katakana_table.get(c, (c, c, c))[0] for c in self._jachars]) return self._enchars def to_half_width_katakana(self): if self._jachars: return ''.join([hiragana_katakana_table.get(c, (c, c, c))[1] for c in self._jachars]) return self._enchars def to_latin(self): return self._enchars def to_wide_latin(self): return ''.join(map(unichar_half_to_full, self._enchars)) def is_empty(self): if self._enchars or self._jachars: return False return True ibus-anthy-1.5.11/engine/python3/tables.py000066400000000000000000000367441346647371500204150ustar00rootroot00000000000000# vim:set et sts=4 sw=4: # -*- coding: utf-8 -*- # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2014 Takao Fujiwara # Copyright (c) 2007-2014 Red Hat, Inc. # # 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. # string, result, cont romaji_typing_rule_static = { '-' : 'ใƒผ', 'a' : 'ใ‚', 'i' : 'ใ„', 'u' : 'ใ†', 'e' : 'ใˆ', 'o' : 'ใŠ', 'xa' : 'ใ', 'xi' : 'ใƒ', 'xu' : 'ใ…', 'xe' : 'ใ‡', 'xo' : 'ใ‰', 'la' : 'ใ', 'li' : 'ใƒ', 'lu' : 'ใ…', 'le' : 'ใ‡', 'lo' : 'ใ‰', 'wha' : 'ใ†ใ', 'whi' : 'ใ†ใƒ', 'whe' : 'ใ†ใ‡', 'who' : 'ใ†ใ‰', 'va' : 'ใƒดใ', 'vi' : 'ใƒดใƒ', 'vu' : 'ใƒด', 've' : 'ใƒดใ‡', 'vo' : 'ใƒดใ‰', 'ka' : 'ใ‹', 'ki' : 'ใ', 'ku' : 'ใ', 'ke' : 'ใ‘', 'ko' : 'ใ“', 'lka' : 'ใƒต', 'lke' : 'ใƒถ', # u'xka' : u'ใ‚•', 'xka' : 'ใƒต', # u'xke' : u'ใ‚–', 'xke' : 'ใƒถ', 'ga' : 'ใŒ', 'gi' : 'ใŽ', 'gu' : 'ใ', 'ge' : 'ใ’', 'go' : 'ใ”', 'kya' : 'ใใ‚ƒ', 'kyi' : 'ใใƒ', 'kyu' : 'ใใ‚…', 'kye' : 'ใใ‡', 'kyo' : 'ใใ‚‡', 'kwa' : 'ใใ', 'gya' : 'ใŽใ‚ƒ', 'gyi' : 'ใŽใƒ', 'gyu' : 'ใŽใ‚…', 'gye' : 'ใŽใ‡', 'gyo' : 'ใŽใ‚‡', 'gwa' : 'ใใ', 'sa' : 'ใ•', 'si' : 'ใ—', 'su' : 'ใ™', 'se' : 'ใ›', 'so' : 'ใ', 'za' : 'ใ–', 'zi' : 'ใ˜', 'zu' : 'ใš', 'ze' : 'ใœ', 'zo' : 'ใž', 'sya' : 'ใ—ใ‚ƒ', 'syi' : 'ใ—ใƒ', 'syu' : 'ใ—ใ‚…', 'sye' : 'ใ—ใ‡', 'syo' : 'ใ—ใ‚‡', 'sha' : 'ใ—ใ‚ƒ', 'shi' : 'ใ—', 'shu' : 'ใ—ใ‚…', 'she' : 'ใ—ใ‡', 'sho' : 'ใ—ใ‚‡', 'zya' : 'ใ˜ใ‚ƒ', 'zyi' : 'ใ˜ใƒ', 'zyu' : 'ใ˜ใ‚…', 'zye' : 'ใ˜ใ‡', 'zyo' : 'ใ˜ใ‚‡', 'ja' : 'ใ˜ใ‚ƒ', 'jya' : 'ใ˜ใ‚ƒ', 'ji' : 'ใ˜', 'jyi' : 'ใ˜ใƒ', 'ju' : 'ใ˜ใ‚…', 'jyu' : 'ใ˜ใ‚…', 'je' : 'ใ˜ใ‡', 'jye' : 'ใ˜ใ‡', 'jo' : 'ใ˜ใ‚‡', 'jyo' : 'ใ˜ใ‚‡', 'ta' : 'ใŸ', 'ti' : 'ใก', 'tu' : 'ใค', 'tsu' : 'ใค', 'te' : 'ใฆ', 'to' : 'ใจ', 'da' : 'ใ ', 'di' : 'ใข', 'du' : 'ใฅ', 'de' : 'ใง', 'do' : 'ใฉ', 'xtu' : 'ใฃ', 'xtsu' : 'ใฃ', 'ltu' : 'ใฃ', 'ltsu' : 'ใฃ', 'tya' : 'ใกใ‚ƒ', 'tyi' : 'ใกใƒ', 'tyu' : 'ใกใ‚…', 'tye' : 'ใกใ‡', 'tyo' : 'ใกใ‚‡', 'cya' : 'ใกใ‚ƒ', 'cyi' : 'ใกใƒ', 'cyu' : 'ใกใ‚…', 'cye' : 'ใกใ‡', 'cyo' : 'ใกใ‚‡', 'cha' : 'ใกใ‚ƒ', 'chi' : 'ใก', 'chu' : 'ใกใ‚…', 'che' : 'ใกใ‡', 'cho' : 'ใกใ‚‡', 'dya' : 'ใขใ‚ƒ', 'dyi' : 'ใขใƒ', 'dyu' : 'ใขใ‚…', 'dye' : 'ใขใ‡', 'dyo' : 'ใขใ‚‡', 'tsa' : 'ใคใ', 'tsi' : 'ใคใƒ', 'tse' : 'ใคใ‡', 'tso' : 'ใคใ‰', 'tha' : 'ใฆใ‚ƒ', 'thi' : 'ใฆใƒ', 'thu' : 'ใฆใ‚…', 'the' : 'ใฆใ‡', 'tho' : 'ใฆใ‚‡', 'twu' : 'ใจใ…', 'dha' : 'ใงใ‚ƒ', 'dhi' : 'ใงใƒ', 'dhu' : 'ใงใ‚…', 'dhe' : 'ใงใ‡', 'dho' : 'ใงใ‚‡', 'dwu' : 'ใฉใ…', 'na' : 'ใช', 'ni' : 'ใซ', 'nu' : 'ใฌ', 'ne' : 'ใญ', 'no' : 'ใฎ', 'nya' : 'ใซใ‚ƒ', 'nyi' : 'ใซใƒ', 'nyu' : 'ใซใ‚…', 'nye' : 'ใซใ‡', 'nyo' : 'ใซใ‚‡', 'ha' : 'ใฏ', 'hi' : 'ใฒ', 'hu' : 'ใต', 'he' : 'ใธ', 'ho' : 'ใป', 'ba' : 'ใฐ', 'bi' : 'ใณ', 'bu' : 'ใถ', 'be' : 'ใน', 'bo' : 'ใผ', 'pa' : 'ใฑ', 'pi' : 'ใด', 'pu' : 'ใท', 'pe' : 'ใบ', 'po' : 'ใฝ', 'hya' : 'ใฒใ‚ƒ', 'hyi' : 'ใฒใƒ', 'hyu' : 'ใฒใ‚…', 'hye' : 'ใฒใ‡', 'hyo' : 'ใฒใ‚‡', 'bya' : 'ใณใ‚ƒ', 'byi' : 'ใณใƒ', 'byu' : 'ใณใ‚…', 'bye' : 'ใณใ‡', 'byo' : 'ใณใ‚‡', 'pya' : 'ใดใ‚ƒ', 'pyi' : 'ใดใƒ', 'pyu' : 'ใดใ‚…', 'pye' : 'ใดใ‡', 'pyo' : 'ใดใ‚‡', 'fa' : 'ใตใ', 'fi' : 'ใตใƒ', 'fu' : 'ใต', 'fe' : 'ใตใ‡', 'fo' : 'ใตใ‰', 'fya' : 'ใตใ‚ƒ', 'fyi' : 'ใตใƒ', 'fyu' : 'ใตใ‚…', 'fye' : 'ใตใ‡', 'fyo' : 'ใตใ‚‡', 'ma' : 'ใพ', 'mi' : 'ใฟ', 'mu' : 'ใ‚€', 'me' : 'ใ‚', 'mo' : 'ใ‚‚', 'mya' : 'ใฟใ‚ƒ', 'myi' : 'ใฟใƒ', 'myu' : 'ใฟใ‚…', 'mye' : 'ใฟใ‡', 'myo' : 'ใฟใ‚‡', 'ya' : 'ใ‚„', 'yi' : 'ใ„', 'yu' : 'ใ‚†', 'ye' : 'ใ„ใ‡', 'yo' : 'ใ‚ˆ', 'lya' : 'ใ‚ƒ', 'lyi' : 'ใƒ', 'lyu' : 'ใ‚…', 'lye' : 'ใ‡', 'lyo' : 'ใ‚‡', 'xya' : 'ใ‚ƒ', 'xyi' : 'ใƒ', 'xyu' : 'ใ‚…', 'xye' : 'ใ‡', 'xyo' : 'ใ‚‡', 'ra' : 'ใ‚‰', 'ri' : 'ใ‚Š', 'ru' : 'ใ‚‹', 're' : 'ใ‚Œ', 'ro' : 'ใ‚', 'rya' : 'ใ‚Šใ‚ƒ', 'ryi' : 'ใ‚Šใƒ', 'ryu' : 'ใ‚Šใ‚…', 'rye' : 'ใ‚Šใ‡', 'ryo' : 'ใ‚Šใ‚‡', 'wa' : 'ใ‚', 'wi' : 'ใ†ใƒ', 'wu' : 'ใ†', 'we' : 'ใ†ใ‡', 'wo' : 'ใ‚’', 'lwa' : 'ใ‚Ž', 'xwa' : 'ใ‚Ž', 'n\'' : 'ใ‚“', 'nn' : 'ใ‚“', 'wyi' : 'ใ‚', 'wye' : 'ใ‚‘', } symbol_rule = { # symbols ' ' : 'ใ€€', ',' : 'ใ€', '.' : 'ใ€‚', '!' : '๏ผ', '"' : '\u201d', '#' : '๏ผƒ', '$' : '๏ผ„', '%' : '๏ผ…', '&' : '๏ผ†', '\'' : '\u2019', '(' : '๏ผˆ', ')' : '๏ผ‰', '~' : '\uff5e', '-' : 'ใƒผ', '=' : '๏ผ', '^' : '๏ผพ', '\\' : '๏ผผ', '|' : '๏ฝœ', '`' : '\u2018', '@' : '๏ผ ', '{' : '๏ฝ›', '[' : 'ใ€Œ', '+' : '๏ผ‹', ';' : '๏ผ›', '*' : '๏ผŠ', ':' : '๏ผš', '}' : '๏ฝ', ']' : 'ใ€', '<' : '๏ผœ', '>' : '๏ผž', '?' : '๏ผŸ', '/' : '๏ผ', '_' : '๏ผฟ', 'ยฅ' : '๏ฟฅ', # numbers '0': '๏ผ', '1': '๏ผ‘', '2': '๏ผ’', '3': '๏ผ“', '4': '๏ผ”', '5': '๏ผ•', '6': '๏ผ–', '7': '๏ผ—', '8': '๏ผ˜', '9': '๏ผ™', } # this is only used with romaji_typing_rule romaji_double_consonat_typing_rule = { # double consonant rule 'bb' : ('ใฃ', 'b'), 'cc' : ('ใฃ', 'c'), 'dd' : ('ใฃ', 'd'), 'ff' : ('ใฃ', 'f'), 'gg' : ('ใฃ', 'g'), 'hh' : ('ใฃ', 'h'), 'jj' : ('ใฃ', 'j'), 'kk' : ('ใฃ', 'k'), 'mm' : ('ใฃ', 'm'), 'pp' : ('ใฃ', 'p'), 'rr' : ('ใฃ', 'r'), 'ss' : ('ใฃ', 's'), 'tt' : ('ใฃ', 't'), 'vv' : ('ใฃ', 'v'), 'ww' : ('ใฃ', 'w'), 'xx' : ('ใฃ', 'x'), 'yy' : ('ใฃ', 'y'), 'zz' : ('ใฃ', 'z'), } # this is only used with romaji_typing_rule romaji_correction_rule = { 'nb' : ('ใ‚“', 'b'), 'nc' : ('ใ‚“', 'c'), 'nd' : ('ใ‚“', 'd'), 'nf' : ('ใ‚“', 'f'), 'ng' : ('ใ‚“', 'g'), 'nh' : ('ใ‚“', 'h'), 'nj' : ('ใ‚“', 'j'), 'nk' : ('ใ‚“', 'k'), 'nl' : ('ใ‚“', 'l'), 'nm' : ('ใ‚“', 'm'), 'np' : ('ใ‚“', 'p'), 'nr' : ('ใ‚“', 'r'), 'ns' : ('ใ‚“', 's'), 'nt' : ('ใ‚“', 't'), 'nv' : ('ใ‚“', 'v'), 'nw' : ('ใ‚“', 'w'), 'nx' : ('ใ‚“', 'x'), 'nz' : ('ใ‚“', 'z'), 'n\0' : ('ใ‚“', ''), 'n,' : ('ใ‚“', ','), 'n.' : ('ใ‚“', '.'), } # EUC-JP and SJIS do not have the chars romaji_utf8_rule = { 'ใ†ใ‚›' : ['ใ‚”'], } # Hiragana normalization is needed for the personal dict. romaji_normalize_rule = { 'ใƒด' : ['ใ†ใ‚›'], } # a port of 101kana.sty from scim-anthy kana_typing_rule_static = { # no modifiers keys '1' : 'ใฌ', '2' : 'ใต', '3' : 'ใ‚', '4' : 'ใ†', '5' : 'ใˆ', '6' : 'ใŠ', '7' : 'ใ‚„', '8' : 'ใ‚†', '9' : 'ใ‚ˆ', '0' : 'ใ‚', '-' : 'ใป', '^' : 'ใธ', 'q' : 'ใŸ', 'w' : 'ใฆ', 'e' : 'ใ„', 'r' : 'ใ™', 't' : 'ใ‹', 'y' : 'ใ‚“', 'u' : 'ใช', 'i' : 'ใซ', 'o' : 'ใ‚‰', 'p' : 'ใ›', '@' : 'ใ‚›', '[' : 'ใ‚œ', 'a' : 'ใก', 's' : 'ใจ', 'd' : 'ใ—', 'f' : 'ใฏ', 'g' : 'ใ', 'h' : 'ใ', 'j' : 'ใพ', 'k' : 'ใฎ', 'l' : 'ใ‚Š', ';' : 'ใ‚Œ', ':' : 'ใ‘', ']' : 'ใ‚€', 'z' : 'ใค', 'x' : 'ใ•', 'c' : 'ใ', 'v' : 'ใฒ', 'b' : 'ใ“', 'n' : 'ใฟ', 'm' : 'ใ‚‚', ',' : 'ใญ', '.' : 'ใ‚‹', '/' : 'ใ‚', # u'\\' : u'ใƒผ', '\\' : 'ใ‚', # shift modifiered keys '!' : 'ใฌ', '"' : 'ใต', '#' : 'ใ', '$' : 'ใ…', '%' : 'ใ‡', '&' : 'ใ‰', '\'' : 'ใ‚ƒ', '(' : 'ใ‚…', ')' : 'ใ‚‡', '~' : 'ใ‚’', '=' : 'ใป', '|' : 'ใƒผ', 'Q' : 'ใŸ', 'W' : 'ใฆ', 'E' : 'ใƒ', 'R' : 'ใ™', 'T' : 'ใƒต', 'Y' : 'ใ‚“', 'U' : 'ใช', 'I' : 'ใซ', 'O' : 'ใ‚‰', 'P' : 'ใ›', '`' : 'ใ‚›', '{' : 'ใ€Œ', 'A' : 'ใก', 'S' : 'ใจ', 'D' : 'ใ—', 'F' : 'ใ‚Ž', 'G' : 'ใ', 'H' : 'ใ', 'J' : 'ใพ', 'K' : 'ใฎ', 'L' : 'ใ‚Š', '+' : 'ใ‚Œ', '*' : 'ใƒถ', '}' : 'ใ€', 'Z' : 'ใฃ', 'X' : 'ใ•', 'C' : 'ใ', 'V' : 'ใ‚', 'B' : 'ใ“', 'M' : 'ใ‚‚', 'N' : 'ใฟ', '<' : 'ใ€', '>' : 'ใ€‚', '?' : 'ใƒป', '_' : 'ใ‚', 'ยฅ' : 'ใƒผ', } kana_voiced_consonant_no_rule = { 'ใ‹' : 'ใŒ', 'ใ' : 'ใŽ', 'ใ' : 'ใ', 'ใ‘' : 'ใ’', 'ใ“' : 'ใ”', 'ใ•' : 'ใ–', 'ใ—' : 'ใ˜', 'ใ™' : 'ใš', 'ใ›' : 'ใœ', 'ใ' : 'ใž', 'ใŸ' : 'ใ ', 'ใก' : 'ใข', 'ใค' : 'ใฅ', 'ใฆ' : 'ใง', 'ใจ' : 'ใฉ', 'ใฏ' : 'ใฐ', 'ใฒ' : 'ใณ', 'ใต' : 'ใถ', 'ใธ' : 'ใน', 'ใป' : 'ใผ', } kana_semi_voiced_consonant_no_rule = { 'ใฏ' : 'ใฑ', 'ใฒ' : 'ใด', 'ใต' : 'ใท', 'ใธ' : 'ใบ', 'ใป' : 'ใฝ', } # Create the table dynamically with kana_voiced_consonant_no_rule # #kana_voiced_consonant_rule = { # u'ใ‹@' : u'ใŒ', # u'ใ@' : u'ใŽ', # u'ใ@' : u'ใ', # u'ใ‘@' : u'ใ’', # u'ใ“@' : u'ใ”', # u'ใ•@' : u'ใ–', # u'ใ—@' : u'ใ˜', # u'ใ™@' : u'ใš', # u'ใ›@' : u'ใœ', # u'ใ@' : u'ใž', # u'ใŸ@' : u'ใ ', # u'ใก@' : u'ใข', # u'ใค@' : u'ใฅ', # u'ใฆ@' : u'ใง', # u'ใจ@' : u'ใฉ', # u'ใฏ@' : u'ใฐ', # u'ใฒ@' : u'ใณ', # u'ใต@' : u'ใถ', # u'ใธ@' : u'ใน', # u'ใป@' : u'ใผ', # u'ใ‹`' : u'ใŒ', # u'ใ`' : u'ใŽ', # u'ใ`' : u'ใ', # u'ใ‘`' : u'ใ’', # u'ใ“`' : u'ใ”', # u'ใ•`' : u'ใ–', # u'ใ—`' : u'ใ˜', # u'ใ™`' : u'ใš', # u'ใ›`' : u'ใœ', # u'ใ`' : u'ใž', # u'ใŸ`' : u'ใ ', # u'ใก`' : u'ใข', # u'ใค`' : u'ใฅ', # u'ใฆ`' : u'ใง', # u'ใจ`' : u'ใฉ', # u'ใฏ`' : u'ใฐ', # u'ใฒ`' : u'ใณ', # u'ใต`' : u'ใถ', # u'ใธ`' : u'ใน', # u'ใป`' : u'ใผ', # u'ใฏ[' : u'ใฑ', # u'ใฒ[' : u'ใด', # u'ใต[' : u'ใท', # u'ใธ[' : u'ใบ', # u'ใป[' : u'ใฝ', #} # #kana_voiced_consonant_us_rule = { # u'ใ‹[' : u'ใŒ', # u'ใ[' : u'ใŽ', # u'ใ[' : u'ใ', # u'ใ‘[' : u'ใ’', # u'ใ“[' : u'ใ”', # u'ใ•[' : u'ใ–', # u'ใ—[' : u'ใ˜', # u'ใ™[' : u'ใš', # u'ใ›[' : u'ใœ', # u'ใ[' : u'ใž', # u'ใŸ[' : u'ใ ', # u'ใก[' : u'ใข', # u'ใค[' : u'ใฅ', # u'ใฆ[' : u'ใง', # u'ใจ[' : u'ใฉ', # u'ใฏ[' : u'ใฐ', # u'ใฒ[' : u'ใณ', # u'ใต[' : u'ใถ', # u'ใธ[' : u'ใน', # u'ใป[' : u'ใผ', # u'ใฏ]' : u'ใฑ', # u'ใฒ]' : u'ใด', # u'ใต]' : u'ใท', # u'ใธ]' : u'ใบ', # u'ใป]' : u'ใฝ', #} #hiragana, katakana, half_katakana hiragana_katakana_table = { 'ใ‚' : ('ใ‚ข', '๏ฝฑ'), 'ใ„' : ('ใ‚ค', '๏ฝฒ'), 'ใ†' : ('ใ‚ฆ', '๏ฝณ'), 'ใˆ' : ('ใ‚จ', '๏ฝด'), 'ใŠ' : ('ใ‚ช', '๏ฝต'), 'ใ‹' : ('ใ‚ซ', '๏ฝถ'), 'ใ' : ('ใ‚ญ', '๏ฝท'), 'ใ' : ('ใ‚ฏ', '๏ฝธ'), 'ใ‘' : ('ใ‚ฑ', '๏ฝน'), 'ใ“' : ('ใ‚ณ', '๏ฝบ'), 'ใŒ' : ('ใ‚ฌ', '๏ฝถ๏พž'), 'ใŽ' : ('ใ‚ฎ', '๏ฝท๏พž'), 'ใ' : ('ใ‚ฐ', '๏ฝธ๏พž'), 'ใ’' : ('ใ‚ฒ', '๏ฝน๏พž'), 'ใ”' : ('ใ‚ด', '๏ฝบ๏พž'), 'ใ•' : ('ใ‚ต', '๏ฝป'), 'ใ—' : ('ใ‚ท', '๏ฝผ'), 'ใ™' : ('ใ‚น', '๏ฝฝ'), 'ใ›' : ('ใ‚ป', '๏ฝพ'), 'ใ' : ('ใ‚ฝ', '๏ฝฟ'), 'ใ–' : ('ใ‚ถ', '๏ฝป๏พž'), 'ใ˜' : ('ใ‚ธ', '๏ฝผ๏พž'), 'ใš' : ('ใ‚บ', '๏ฝฝ๏พž'), 'ใœ' : ('ใ‚ผ', '๏ฝพ๏พž'), 'ใž' : ('ใ‚พ', '๏ฝฟ๏พž'), 'ใŸ' : ('ใ‚ฟ', '๏พ€'), 'ใก' : ('ใƒ', '๏พ'), 'ใค' : ('ใƒ„', '๏พ‚'), 'ใฆ' : ('ใƒ†', '๏พƒ'), 'ใจ' : ('ใƒˆ', '๏พ„'), 'ใ ' : ('ใƒ€', '๏พ€๏พž'), 'ใข' : ('ใƒ‚', '๏พ๏พž'), 'ใฅ' : ('ใƒ…', '๏พ‚๏พž'), 'ใง' : ('ใƒ‡', '๏พƒ๏พž'), 'ใฉ' : ('ใƒ‰', '๏พ„๏พž'), 'ใช' : ('ใƒŠ', '๏พ…'), 'ใซ' : ('ใƒ‹', '๏พ†'), 'ใฌ' : ('ใƒŒ', '๏พ‡'), 'ใญ' : ('ใƒ', '๏พˆ'), 'ใฎ' : ('ใƒŽ', '๏พ‰'), 'ใฏ' : ('ใƒ', '๏พŠ'), 'ใฒ' : ('ใƒ’', '๏พ‹'), 'ใต' : ('ใƒ•', '๏พŒ'), 'ใธ' : ('ใƒ˜', '๏พ'), 'ใป' : ('ใƒ›', '๏พŽ'), 'ใฐ' : ('ใƒ', '๏พŠ๏พž'), 'ใณ' : ('ใƒ“', '๏พ‹๏พž'), 'ใถ' : ('ใƒ–', '๏พŒ๏พž'), 'ใน' : ('ใƒ™', '๏พ๏พž'), 'ใผ' : ('ใƒœ', '๏พŽ๏พž'), 'ใฑ' : ('ใƒ‘', '๏พŠ๏พŸ'), 'ใด' : ('ใƒ”', '๏พ‹๏พŸ'), 'ใท' : ('ใƒ—', '๏พŒ๏พŸ'), 'ใบ' : ('ใƒš', '๏พ๏พŸ'), 'ใฝ' : ('ใƒ', '๏พŽ๏พŸ'), 'ใพ' : ('ใƒž', '๏พ'), 'ใฟ' : ('ใƒŸ', '๏พ'), 'ใ‚€' : ('ใƒ ', '๏พ‘'), 'ใ‚' : ('ใƒก', '๏พ’'), 'ใ‚‚' : ('ใƒข', '๏พ“'), 'ใ‚„' : ('ใƒค', '๏พ”'), 'ใ‚†' : ('ใƒฆ', '๏พ•'), 'ใ‚ˆ' : ('ใƒจ', '๏พ–'), 'ใ‚‰' : ('ใƒฉ', '๏พ—'), 'ใ‚Š' : ('ใƒช', '๏พ˜'), 'ใ‚‹' : ('ใƒซ', '๏พ™'), 'ใ‚Œ' : ('ใƒฌ', '๏พš'), 'ใ‚' : ('ใƒญ', '๏พ›'), 'ใ‚' : ('ใƒฏ', '๏พœ'), 'ใ‚’' : ('ใƒฒ', '๏ฝฆ'), 'ใ‚“' : ('ใƒณ', '๏พ'), 'ใ' : ('ใ‚ก', '๏ฝง'), 'ใƒ' : ('ใ‚ฃ', '๏ฝจ'), 'ใ…' : ('ใ‚ฅ', '๏ฝฉ'), 'ใ‡' : ('ใ‚ง', '๏ฝช'), 'ใ‰' : ('ใ‚ฉ', '๏ฝซ'), 'ใฃ' : ('ใƒƒ', '๏ฝฏ'), 'ใ‚ƒ' : ('ใƒฃ', '๏ฝฌ'), 'ใ‚…' : ('ใƒฅ', '๏ฝญ'), 'ใ‚‡' : ('ใƒง', '๏ฝฎ'), 'ใƒต' : ('ใƒต', '๏ฝถ'), 'ใƒถ' : ('ใƒถ', '๏ฝน'), 'ใ‚Ž' : ('ใƒฎ', '๏พœ'), 'ใ‚' : ('ใƒฐ', '๏ฝจ'), 'ใ‚‘' : ('ใƒฑ', '๏ฝช'), 'ใƒด' : ('ใƒด', '๏ฝณ๏พž'), # symbols 'ใƒผ' : ('ใƒผ', '๏ฝฐ'), 'ใ€' : ('ใ€', '๏ฝค'), 'ใ€‚' : ('ใ€‚', '๏ฝก'), '๏ผ' : ('๏ผ', '!'), '\u201d' : ('\u201d', '"'), '๏ผƒ' : ('๏ผƒ', '#'), '๏ผ„' : ('๏ผ„', '$'), '๏ผ…' : ('๏ผ…', '%'), '๏ผ†' : ('๏ผ†', '&'), '\u2019' : ('\u2019', '\''), '๏ผˆ' : ('๏ผˆ', '('), '๏ผ‰' : ('๏ผ‰', ')'), '\uff5e' : ('\uff5e', '~'), '๏ผ' : ('๏ผ', '='), '๏ผพ' : ('๏ผพ', '^'), '๏ผผ' : ('๏ผผ', '\\'), '๏ฝœ' : ('๏ฝœ', '|'), '\u2018' : ('\u2018', '`'), '๏ผ ' : ('๏ผ ', '@'), 'ใ‚›' : ('ใ‚›', '๏พž'), '๏ฝ›' : ('๏ฝ›', '{'), 'ใ‚œ' : ('ใ‚œ', '๏พŸ'), 'ใ€Œ' : ('ใ€Œ', '๏ฝข'), '๏ผ‹' : ('๏ผ‹', '+'), '๏ผ›' : ('๏ผ›', ';'), '๏ผŠ' : ('๏ผŠ', '*'), '๏ผš' : ('๏ผš', ':'), '๏ฝ' : ('๏ฝ', '}'), 'ใ€' : ('ใ€', '๏ฝฃ'), '๏ผœ' : ('๏ผœ', '<'), '๏ผž' : ('๏ผž', '>'), '๏ผŸ' : ('๏ผŸ', '?'), 'ใƒป' : ('ใƒป', '๏ฝฅ'), '๏ผ' : ('๏ผ', '/'), '๏ผฟ' : ('๏ผฟ', '_'), '๏ฟฅ' : ('๏ฟฅ', 'ยฅ'), # numbers '๏ผ': ('๏ผ', '0'), '๏ผ‘': ('๏ผ‘', '1'), '๏ผ’': ('๏ผ’', '2'), '๏ผ“': ('๏ผ“', '3'), '๏ผ”': ('๏ผ”', '4'), '๏ผ•': ('๏ผ•', '5'), '๏ผ–': ('๏ผ–', '6'), '๏ผ—': ('๏ผ—', '7'), '๏ผ˜': ('๏ผ˜', '8'), '๏ผ™': ('๏ผ™', '9'), } ibus-anthy-1.5.11/engine/python3/test.py000066400000000000000000000010221346647371500200770ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import anthy import sys ctx = anthy.anthy_context () ctx._set_encoding (2) if len(sys.argv) >= 2: ctx.set_string (sys.argv[1]) else: ctx.set_string ("ใ‹ใพใใ") conv_stat = anthy.anthy_conv_stat () seg_stat = anthy.anthy_segment_stat () ctx.get_stat (conv_stat) for i in range (0, conv_stat.nr_segment): ctx.get_segment_stat (i, seg_stat) buf = " " i = ctx.get_segment (i, 0, buf, 10) print buf[:i] # anthy.anthy_release_context (ctx) ctx = None ibus-anthy-1.5.11/engine/python3/thumb.py000066400000000000000000000472351346647371500202570ustar00rootroot00000000000000# -*- coding: utf-8 -*- # vim:set et sts=4 sw=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. __all__ = ( 'ThumbShiftKeyboard', 'ThumbShiftSegment', ) import sys from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import GLib from gi.repository import IBus import segment _THUMB_BASIC_METHOD = 'base' _table_static = { 'q': ['ใ€‚', '', 'ใ'], 'w': ['ใ‹', 'ใŒ', 'ใˆ'], 'e': ['ใŸ', 'ใ ', 'ใ‚Š'], 'r': ['ใ“', 'ใ”', 'ใ‚ƒ'], 't': ['ใ•', 'ใ–', 'ใ‚Œ'], 'y': ['ใ‚‰', 'ใ‚ˆ', 'ใฑ'], 'u': ['ใก', 'ใซ', 'ใข'], 'i': ['ใ', 'ใ‚‹', 'ใ'], 'o': ['ใค', 'ใพ', 'ใฅ'], 'p': ['๏ผŒ', 'ใ‡', 'ใด'], '@': ['ใ€', '', ''], '[': ['ใ‚›', 'ใ‚œ', ''], 'a': ['ใ†', '', 'ใ‚’'], 's': ['ใ—', 'ใ˜', 'ใ‚'], 'd': ['ใฆ', 'ใง', 'ใช'], 'f': ['ใ‘', 'ใ’', 'ใ‚…'], 'g': ['ใ›', 'ใœ', 'ใ‚‚'], 'h': ['ใฏ', 'ใฟ', 'ใฐ'], 'j': ['ใจ', 'ใŠ', 'ใฉ'], 'k': ['ใ', 'ใฎ', 'ใŽ'], 'l': ['ใ„', 'ใ‚‡', 'ใฝ'], ';': ['ใ‚“', 'ใฃ', ''], 'z': ['๏ผŽ', '', 'ใ…'], 'x': ['ใฒ', 'ใณ', 'ใƒผ'], 'c': ['ใ™', 'ใš', 'ใ‚'], 'v': ['ใต', 'ใถ', 'ใ‚„'], 'b': ['ใธ', 'ใน', 'ใƒ'], 'n': ['ใ‚', 'ใฌ', 'ใท'], 'm': ['ใ', 'ใ‚†', 'ใž'], ',': ['ใญ', 'ใ‚€', 'ใบ'], '.': ['ใป', 'ใ‚', 'ใผ'], '/': ['ใƒป', 'ใ‰', ''], '1': ['1', '', '๏ผŸ'], '2': ['2', '', '๏ผ'], '4': ['4', '', 'ใ€Œ'], '5': ['5', '', 'ใ€'], '6': ['6', '๏ผป', ''], '7': ['7', '๏ผฝ', ''], '8': ['8', '๏ผˆ', ''], '9': ['9', '๏ผ‰', ''], '\\': ['๏ฟฅ', '', ''], } _nicola_j_table_static = { ':': ['๏ผš', '', ''], '@': ['ใ€', '', ''], '[': ['ใ‚›', 'ใ‚œ', ''], ']': ['ใ€', '', ''], '8': ['8', '๏ผˆ', ''], '9': ['9', '๏ผ‰', ''], '0': ['0', '', ''], } _nicola_a_table_static = { ':': ['๏ผš', '', ''], '@': ['๏ผ ', '', ''], '[': ['ใ€', '', ''], ']': ['ใ‚›', 'ใ‚œ', ''], '8': ['8', '', ''], '9': ['9', '๏ผˆ', ''], '0': ['0', '๏ผ‰', ''], } _nicola_f_table_static = { ':': ['ใ€', '', ''], '@': ['๏ผ ', '', ''], '[': ['ใ‚›', 'ใ‚œ', ''], ']': ['ใ€', '', ''], '8': ['8', '๏ผˆ', ''], '9': ['9', '๏ผ‰', ''], '0': ['0', '', ''], } _kb231_j_fmv_table_static = { '3': ['3', '', '๏ฝž'], '0': ['0', 'ใ€Ž', ''], '-': ['-', 'ใ€', ''], '=': ['=', '', ''], } _kb231_a_fmv_table_static = { '3': ['3', '', '๏ฝž'], '0': ['0', '๏ผ‰', ''], '-': ['-', 'ใ€Ž', ''], '=': ['=', 'ใ€', ''], } _kb231_f_fmv_table_static = { '3': ['3', '', '๏ฝž'], '0': ['0', 'ใ€Ž', ''], '-': ['-', 'ใ€', ''], '=': ['=', '', ''], } _kb611_j_fmv_table_static = { '`': ['โ€˜', '', ''], '^': ['ใ€…', 'ยฃ', ''], ':': ['๏ผš', '', ''], '@': ['ใ€', 'ยข', ''], '[': ['ใ‚›', 'ใ‚œ', ''], # keysyms are same and keycodes depend on the platforms. #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': ['๏ฟฅ', 'ยฆ', ''], } _kb611_a_fmv_table_static = { '`': ['ใ€…', '', 'ยฃ'], ':': ['๏ผš', '', ''], '@': ['๏ผ ', '', ''], '[': ['ใ€', 'ยข', ''], #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': ['๏ฟฅ', 'ยฆ', ''], } _kb611_f_fmv_table_static = { '`': ['โ€˜', '', ''], '^': ['ใ€…', 'ยฃ', ''], ':': ['ใ€', 'ยข', ''], '@': ['๏ผ ', '', ''], '[': ['ใ‚›', 'ใ‚œ', ''], #'๏ฟฅ': [u'๏ฟฅ', u'ยฌ', u''], '\\': ['๏ฟฅ', 'ยฆ', ''], } _shift_table = { 'H': 'ใฑ', 'X': 'ใด', 'V': 'ใท', 'B': 'ใบ', '>': 'ใฝ', } table_static = {} r_table_static = {} for k in list(_table_static.keys()): table_static[ord(k)] = _table_static[k] for c in _table_static[k]: r_table_static[c] = k kana_voiced_consonant_rule = { 'ใ‹ใ‚›' : 'ใŒ', 'ใใ‚›' : 'ใŽ', 'ใใ‚›' : 'ใ', 'ใ‘ใ‚›' : 'ใ’', 'ใ“ใ‚›' : 'ใ”', 'ใ•ใ‚›' : 'ใ–', 'ใ—ใ‚›' : 'ใ˜', 'ใ™ใ‚›' : 'ใš', 'ใ›ใ‚›' : 'ใœ', 'ใใ‚›' : 'ใž', 'ใŸใ‚›' : 'ใ ', 'ใกใ‚›' : 'ใข', 'ใคใ‚›' : 'ใฅ', 'ใฆใ‚›' : 'ใง', 'ใจใ‚›' : 'ใฉ', 'ใฏใ‚›' : 'ใฐ', 'ใฒใ‚›' : 'ใณ', 'ใตใ‚›' : 'ใถ', 'ใธใ‚›' : 'ใน', 'ใปใ‚›' : 'ใผ', 'ใฏใ‚œ' : 'ใฑ', 'ใฒใ‚œ' : 'ใด', 'ใตใ‚œ' : 'ใท', 'ใธใ‚œ' : 'ใบ', 'ใปใ‚œ' : 'ใฝ', } _UNFINISHED_HIRAGANA = set('ใ‹ใใใ‘ใ“ใ•ใ—ใ™ใ›ใใŸใกใคใฆใจใฏใฒใตใธใป') class ThumbShiftKeyboard: def __init__(self, prefs=None): self.__prefs = prefs self.__table = table_static self.__r_table = r_table_static self.__shift_table = {} self.__ls = 0 self.__rs = 0 self.__t1 = 0 self.__t2 = 0 self.__layout = 0 self.__fmv_extension = 2 self.__handakuten = False self.__thumb_typing_rule_method = None self.__init_thumb_typing_rule() self.__init_layout_table() if self.__prefs != None: self.reset() self.__reset_shift_table(False) def __init_thumb_typing_rule(self): prefs = self.__prefs if prefs == None: self.__thumb_typing_rule_method = None return method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = _THUMB_BASIC_METHOD self.__thumb_typing_rule_method = method keymap = prefs.get_value('thumb-typing-rule', 'list') if self.__thumb_typing_rule_method not in keymap.keys(): self.__thumb_typing_rule_method = None def __init_layout_table(self): if self.__table != {}: self.__table.clear() if self.__r_table != {}: self.__r_table.clear() method = self.__thumb_typing_rule_method if method != None: prefs = self.__prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue self.__set_bus_table(ch, value) else: for k in list(_table.keys()): self.__table[ord(k)] = _table_static[k] for c in _table_static[k]: self.__r_table[c] = k def __set_bus_table(self, key, value): prefs = self.__prefs if value == None or len(value) != 3: return if value[0] == '' and \ value[1] == '' and value[2] == '': return self.__table[ord(key)] = value for c in value: self.__r_table[c] = key def __reset_layout_table(self, init, j_table_label, j_table, a_table_label, a_table, f_table_label, f_table): if init: self.__init_layout_table() method = None sub_table = None if self.__layout == 0: method = j_table_label sub_table = j_table elif self.__layout == 1: method = a_table_label sub_table = a_table elif self.__layout == 2: method = f_table_label sub_table = f_table if method == None or sub_table == None: return method = self.__thumb_typing_rule_method if method != None: prefs = self.__prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue self.__set_bus_table(ch, value) else: for k in list(sub_table.keys()): self.__table[ord(str(k))] = sub_table[k] for c in sub_table[k]: self.__r_table[c] = k def __reset_extension_table(self, init): self.__reset_layout_table(init, 'nicola_j_table', _nicola_j_table_static, 'nicola_a_table', _nicola_a_table_static, 'nicola_f_table', _nicola_f_table_static) if self.__fmv_extension == 0: return if self.__fmv_extension >= 1: self.__reset_layout_table(False, 'kb231_j_fmv_table', _kb231_j_fmv_table_static, 'kb231_a_fmv_table', _kb231_a_fmv_table_static, 'kb231_f_fmv_table', _kb231_f_fmv_table_static) if self.__fmv_extension >= 2: self.__reset_layout_table(False, 'kb611_j_fmv_table', _kb611_j_fmv_table_static, 'kb611_a_fmv_table', _kb611_a_fmv_table_static, 'kb611_f_fmv_table', _kb611_f_fmv_table_static) def __reset_shift_table(self, init): self.__reset_extension_table(init) if self.__handakuten: for k in list(_shift_table.keys()): self.__shift_table[ord(k)] = _shift_table[k] self.__r_table[_shift_table[k]] = k elif self.__shift_table != {}: for k in list(_shift_table.keys()): if ord(k) in self.__shift_table: del self.__shift_table[ord(k)] if _shift_table[k] in self.__r_table: del self.__r_table[_shift_table[k]] def __s_to_key_raw(self, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ( 'alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return (keyval, state) def __get_xkb_layout(self): # Until Gdk.property_get is fixed ''' # Move importing Gdk into ThumbShiftKeyboard from the header # because ibus-engine-anthy --xml does not requre to open X. try: from gi.repository import Gdk get_default_root_window = Gdk.get_default_root_window property_get = Gdk.property_get intern = Gdk.Atom.intern except ImportError: get_default_root_window = lambda : None property_get = lambda : None intern = lambda : None except RuntimeError: # Do we support the engine without display? print >> sys.stderr, "Gdk couldn't be initialized" print >> sys.stderr, 'Could not open display' get_default_root_window = lambda : None property_get = lambda : None intern = lambda : None root_window = get_default_root_window() if not root_window: return 0 xkb_rules_names = intern('_XKB_RULES_NAMES', False) xa_string = intern('STRING', False) try: prop = property_get(root_window, xkb_rules_names, xa_string, 0, 1024, 0)[3] layout_list = prop.split('\0') except TypeError: print >> sys.stderr, \ 'This problem is fixed in the latest gobject-introspection' print >> sys.stderr, \ 'https://bugzilla.gnome.org/show_bug.cgi?id=670509' return 0 layout = 0 for data in layout_list: if data == 'jp': layout = 0 elif data == 'us': layout = 1 elif data.find('japan:nicola_f_bs') >= 0: layout = 2 elif data.find('japan:') >= 0: layout = 0 return layout ''' layout = 0 argv = ['setxkbmap', '-query'] (ret, std_out, std_error, exit_status) = \ GLib.spawn_sync(None, argv, None, GLib.SpawnFlags.SEARCH_PATH_FROM_ENVP, None, None) if not ret: print(std_error.decode('utf-8'), file=sys.stderr) return layout for line in std_out.decode('utf-8').split('\n'): if line.startswith('layout:'): data = line.split()[1] if data == 'jp': layout = 0 elif data == 'us': layout = 1 elif line.startswith('options:'): data = line.split()[1] if data.find('japan:nicola_f_bs') >= 0: layout = 2 elif data.find('japan:') >= 0: layout = 0 return layout def __reset_layout_and_handakuten(self): mode = self.__prefs.get_value('thumb', 'keyboard-layout-mode') layout = 0 if mode == 1: layout = self.__get_xkb_layout() else: layout = self.__prefs.get_value('thumb', 'keyboard-layout') self.set_layout(layout) fmv_extension = self.__prefs.get_value('thumb', 'fmv-extension') self.set_fmv_extension(fmv_extension) handakuten = self.__prefs.get_value('thumb', 'handakuten') self.set_handakuten(handakuten) def reset(self): s = self.__prefs.get_value('thumb', 'ls') ls, state = self.__s_to_key_raw(s) if ls == 0xffffff: ls = IBus.KEY_Muhenkan self.set_ls(ls) s = self.__prefs.get_value('thumb', 'rs') rs, state = self.__s_to_key_raw(s) if rs == 0xffffff: rs = IBus.KEY_Henkan self.set_rs(rs) t1 = self.__prefs.get_value('thumb', 't1') t2 = self.__prefs.get_value('thumb', 't2') self.set_t1(t1) self.set_t2(t2) GLib.idle_add(self.__reset_layout_and_handakuten, priority = GLib.PRIORITY_LOW) def get_ls(self): return self.__ls def set_ls(self, ls): self.__ls = ls def get_rs(self): return self.__rs def set_rs(self, rs): self.__rs = rs def get_t1(self): return self.__t1 def set_t1(self, t1): self.__t1 = t1 def get_t2(self): return self.__t2 def set_t2(self, t2): self.__t2 = t2 def get_layout(self): return self.__layout def set_layout(self, layout): if self.__layout == layout: return self.__layout = layout self.__reset_shift_table(True) def get_fmv_extension (self): return self.__fmv_extension def set_fmv_extension (self, fmv_extension): if self.__fmv_extension == fmv_extension: return self.__fmv_extension = fmv_extension self.__reset_shift_table(True) def get_handakuten(self): return self.__handakuten def set_handakuten(self, handakuten): if self.__handakuten == handakuten: return self.__handakuten = handakuten self.__reset_shift_table(True) def get_char(self, key, fallback=None): return self.__table.get(key, fallback) def get_chars(self): return list(self.__table.keys()) def get_r_char(self, key, fallback=None): return self.__r_table.get(key, fallback) def get_r_chars(self): return list(self.__r_table.keys()) def get_shift_char(self, key, fallback=None): return self.__shift_table.get(key, fallback) def get_shift_chars(self): return list(self.__shift_table.keys()) class ThumbShiftSegment(segment.Segment): _prefs = None _thumb_typing_rule_section_base = None _thumb_typing_rule_section = None _r_table = {} def __init__(self, enchars='', jachars=''): if not jachars: if '!' <= enchars <= '~': jachars = segment.unichar_half_to_full(enchars) else: jachars = enchars enchars = self._r_table.get(jachars, '') super(ThumbShiftSegment, self).__init__(enchars, jachars) @classmethod def INIT_THUMB_TYPING_RULE(cls, prefs): cls._prefs = prefs if prefs == None: cls._thumb_typing_rule_section = None return method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = _THUMB_BASIC_METHOD cls._thumb_typing_rule_method = method keymap = prefs.get_value('thumb-typing-rule', 'list') if cls._thumb_typing_rule_method not in keymap.keys(): cls._thumb_typing_rule_method = None cls._init_layout_table() @classmethod def _init_layout_table(cls): if cls._r_table != {}: cls._r_table.clear() method = cls._thumb_typing_rule_method if method != None: prefs = cls._prefs keymap = prefs.get_value('thumb-typing-rule', 'list')[method] for k in keymap.keys(): value = keymap.get(k) ch = prefs.typing_from_config_key(k) if ch == '': continue cls._set_bus_table(ch, value) else: for k in list(_table.keys()): for c in _table_static[k]: cls._r_table[c] = k @classmethod def _set_bus_table(cls, key, value): prefs = cls._prefs if value == None or len(value) != 3: return if value[0] == '' and \ value[1] == '' and value[2] == '': return for c in value: cls._r_table[c] = key def is_finished(self): return not (self._jachars in _UNFINISHED_HIRAGANA) def append(self, enchar): if enchar == '\0' or enchar == '': return [] text = self._jachars + enchar jachars = kana_voiced_consonant_rule.get(text, None) if jachars: self._enchars = self._enchars + self._r_table.get(enchar, '') self._jachars = jachars return [] return [ThumbShiftSegment(enchar)] def prepend(self, enchar): if enchar == '\0' or enchar == '': return [] if self._jachars == '': if 0x21 <= enchars <= 0x7e: self._enchars = enchar self._jachars = segment.unichar_half_to_full(enchars) else: self._enchars = self._r_table.get(enchar, '') self._jachars = enchar return [] return [ThumbShiftSegment(enchar)] def pop(self, index=-1): self._enchars = '' self._jachars = '' return ibus-anthy-1.5.11/gir/000077500000000000000000000000001346647371500144635ustar00rootroot00000000000000ibus-anthy-1.5.11/gir/Makefile.am000066400000000000000000000051271346647371500165240ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2012-2019 Takao Fujiwara # Copyright (c) 2012 Peng Huang # Copyright (c) 2012-2013 Red Hat, Inc. # # 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. INTROSPECTION_GIRS = libanthygobject = libanthygobject-1.0.la AM_CPPFLAGS = \ @GOBJECT2_CFLAGS@ \ @ANTHY_CFLAGS@ \ $(NULL) libanthygobject_LTLIBRARIES = $(libanthygobject) libanthygobjectdir = @ANTHY_GOBJECT_LIBDIR@ libanthygobject_1_0_la_SOURCES = \ anthygcontext.c \ $(NULL) libanthygobject_1_0_la_LIBADD = \ @GOBJECT2_LIBS@ \ @ANTHY_LIBS@ \ $(NULL) libanthygobject_1_0_la_LDFLAGS = \ -no-undefined \ -export-symbols-regex "anthy_.*" \ -version-info @LT_VERSION_INFO@ \ $(NULL) ANTHY_INCLUDEDIR = $(shell pkg-config --variable=includedir $(ANTHY_PC)) anthyincludedir = $(includedir)/ibus-anthy-1.0 anthyinclude_HEADERS = \ anthygcontext.h \ $(NULL) # gobject introspection -include $(INTROSPECTION_MAKEFILE) Anthy-9000.gir: $(libanthygobject) Makefile Anthy_9000_gir_SCANNERFLAGS = \ --pkg=$(ANTHY_PC) \ --external-library \ --reparse-validate \ --identifier-prefix=Anthy \ --symbol-prefix=anthy \ --accept-unprefixed \ --warn-all \ $(NULL) Anthy_9000_gir_INCLUDES = GObject-2.0 Anthy_9000_gir_LIBS = $(libanthygobject) $(ANTHY_PC) Anthy_9000_gir_CFLAGS = @ANTHY_CFLAGS@ Anthy_9000_gir_FILES = \ $(libanthygobject_1_0_la_SOURCES) \ $(anthyinclude_HEADERS) \ $(ANTHY_INCLUDEDIR)/anthy/anthy.h \ $(NULL) INTROSPECTION_GIRS += Anthy-9000.gir girdir = @ANTHY_GOBJECT_GIRDIR@ dist_gir_DATA = $(INTROSPECTION_GIRS) typelibsdir = @ANTHY_GOBJECT_TYPELIBSDIR@ typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) noinst_PROGRAMS = test test_SOURCES = test.c test_LDADD = \ $(libanthygobject) \ @GOBJECT2_LIBS@ \ @ANTHY_LIBS@ \ $(NULL) CLEANFILES = \ $(dist_gir_DATA) \ $(typelibs_DATA) \ $(NULL) DISTCLEANFILES = \ $(NULL) ibus-anthy-1.5.11/gir/anthygcontext.c000066400000000000000000000146551346647371500175410ustar00rootroot00000000000000/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ /* vim:set et sts=4: */ /* ibus-anthy - The Anthy engine for IBus * Copyright (c) 2012-2019 Takao Fujiwara * Copyright (c) 2012 Peng Huang * Copyright (c) 2012-2013 Red Hat, Inc. * * 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. */ #include #include extern void anthy_init_personality (void); extern int anthy_do_set_personality (const char *id); #include "anthygcontext.h" #define ANTHY_GCONTEXT_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), ANTHY_TYPE_GCONTEXT, AnthyGContextPrivate)) struct _AnthyGContextPrivate { anthy_context_t context; }; static GObject *anthy_gcontext_constructor (GType type, guint n, GObjectConstructParam *args); static void anthy_gcontext_dispose (GObject *gobject); static void anthy_gcontext_finalize (GObject *gobject); G_DEFINE_TYPE_WITH_PRIVATE (AnthyGContext, anthy_gcontext, G_TYPE_INITIALLY_UNOWNED) static void anthy_gcontext_class_init (AnthyGContextClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS (class); gobject_class->constructor = anthy_gcontext_constructor; gobject_class->dispose = anthy_gcontext_dispose; gobject_class->finalize = anthy_gcontext_finalize; } static void anthy_gcontext_init (AnthyGContext *obj) { obj->priv = ANTHY_GCONTEXT_GET_PRIVATE (obj); anthy_init (); obj->priv->context = anthy_create_context (); } static GObject * anthy_gcontext_constructor (GType type, guint n, GObjectConstructParam *args) { GObject *object; object = G_OBJECT_CLASS (anthy_gcontext_parent_class)->constructor (type, n ,args); return object; } static void anthy_gcontext_dispose (GObject *gobject) { G_OBJECT_CLASS (anthy_gcontext_parent_class)->dispose (gobject); } static void anthy_gcontext_finalize (GObject *gobject) { G_OBJECT_CLASS (anthy_gcontext_parent_class)->finalize (gobject); } AnthyGContext * anthy_gcontext_new (void) { GObject *gobject = g_object_new (ANTHY_TYPE_GCONTEXT, NULL); return ANTHY_GCONTEXT (gobject); } #define ANTHY_OBJECT_FUNCTION_ASSERTIONS() \ { \ g_assert (obj != NULL); \ g_assert (obj->priv != NULL); \ g_assert (obj->priv->context != NULL); \ } int anthy_gcontext_set_encoding (AnthyGContext *obj, int encoding) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_context_set_encoding (obj->priv->context, encoding); } void anthy_gcontext_init_personality (AnthyGContext *obj) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); anthy_init_personality (); } int anthy_gcontext_do_set_personality (AnthyGContext *obj, const gchar *dict_name) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_do_set_personality (dict_name); } void anthy_gcontext_resize_segment (AnthyGContext *obj, int nth, int resize) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); anthy_resize_segment (obj->priv->context, nth, resize); } int anthy_gcontext_set_string (AnthyGContext *obj, const gchar * string) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_set_string (obj->priv->context, string); } int anthy_gcontext_get_nr_segments (AnthyGContext *obj) { struct anthy_conv_stat conv_stat = { 0, }; ANTHY_OBJECT_FUNCTION_ASSERTIONS (); anthy_get_stat(obj->priv->context, &conv_stat); return conv_stat.nr_segment; } gchar * anthy_gcontext_get_segment (AnthyGContext *obj, int nth_seg, int nth_lookup) { int length; static char temp[512]; ANTHY_OBJECT_FUNCTION_ASSERTIONS (); length = anthy_get_segment (obj->priv->context, nth_seg, nth_lookup, temp, sizeof (temp)); if (length >= 0) { return g_strdup (temp); } else { return NULL; } } int anthy_gcontext_commit_segment(AnthyGContext *obj, int nth_seg, int nth_lookup) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_commit_segment (obj->priv->context, nth_seg, nth_lookup); } int anthy_gcontext_get_nr_candidates (AnthyGContext *obj, int nth_seg) { struct anthy_segment_stat seg_stat = { 0, }; ANTHY_OBJECT_FUNCTION_ASSERTIONS (); anthy_get_segment_stat (obj->priv->context, nth_seg, &seg_stat); return seg_stat.nr_candidate; } int anthy_gcontext_set_prediction_string (AnthyGContext *obj, const gchar * string) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_set_prediction_string (obj->priv->context, string); } int anthy_gcontext_get_nr_predictions (AnthyGContext *obj) { struct anthy_prediction_stat seg_stat = { 0, }; ANTHY_OBJECT_FUNCTION_ASSERTIONS (); anthy_get_prediction_stat (obj->priv->context, &seg_stat); return seg_stat.nr_prediction; } gchar * anthy_gcontext_get_prediction (AnthyGContext *obj, int nth_seg) { int length; static char temp[512]; ANTHY_OBJECT_FUNCTION_ASSERTIONS (); length = anthy_get_prediction (obj->priv->context, nth_seg, temp, sizeof (temp)); if (length >= 0) { return g_strdup (temp); } else { return NULL; } } int anthy_gcontext_commit_prediction (AnthyGContext *obj, int nth_seg) { ANTHY_OBJECT_FUNCTION_ASSERTIONS (); return anthy_commit_prediction (obj->priv->context, nth_seg); } void anthy_gcontext_set_logger (int level) { anthy_set_logger (NULL, level); } #undef ANTHY_OBJECT_FUNCTION_ASSERTIONS ibus-anthy-1.5.11/gir/anthygcontext.h000066400000000000000000000143671346647371500175460ustar00rootroot00000000000000/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ /* vim:set et sts=4: */ /* ibus-anthy - The Anthy engine for IBus * Copyright (c) 2012-2019 Takao Fujiwara * Copyright (c) 2012 Peng Huang * Copyright (c) 2012-2013 Red Hat, Inc. * * 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. */ #ifndef __ANTHY_GCONTEXT_H_ #define __ANTHY_GCONTEXT_H_ #include #include /* * Type macros. */ #define ANTHY_TYPE_GCONTEXT \ (anthy_gcontext_get_type ()) #define ANTHY_GCONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), ANTHY_TYPE_GCONTEXT, AnthyGContext)) #define ANTHY_GCONTEXT_CLASS(class) \ (G_TYPE_CHECK_CLASS_CAST ((class), ANTHY_TYPE_GCONTEXT, AnthyGContextClass)) #define ANTHY_IS_GCONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ANTHY_TYPE_GCONTEXT)) #define ANTHY_IS_GCONTEXT_CLASS(class) \ (G_TYPE_CHECK_CLASS_TYPE ((class), ANTHY_TYPE_GCONTEXT)) #define ANTHY_GCONTEXT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), ANTHY_TYPE_GCONTEXT, AnthyGContextClass)) typedef struct _AnthyGContext AnthyGContext; typedef struct _AnthyGContextPrivate AnthyGContextPrivate; typedef struct _AnthyGContextClass AnthyGContextClass; G_BEGIN_DECLS /** * AnthyGContext: * * An #AnthyGContext is an object that handles conversion strings. */ struct _AnthyGContext { GInitiallyUnowned parent; AnthyGContextPrivate *priv; /*< private >*/ gpointer pdummy[8]; }; struct _AnthyGContextClass { GInitiallyUnownedClass parent; /*< private >*/ gpointer pdummy[8]; }; GType anthy_gcontext_get_type (void); /** * anthy_gcontext_new: * @returns: A newly allocated #AnthyGContext * * New an #AnthyGobject. */ AnthyGContext *anthy_gcontext_new (void); /** * anthy_gcontext_set_encoding: * @encoding: An encoding * * Set an encoding. */ int anthy_gcontext_set_encoding (AnthyGContext *obj, int encoding); /** * anthy_gcontext_init_personality: * * Initialize the personal dictionaries. */ void anthy_gcontext_init_personality (AnthyGContext *obj); /** * anthy_gcontext_do_set_personality: * @dict_name: a Dictionary name * * Set a personal dictionary. */ int anthy_gcontext_do_set_personality (AnthyGContext *obj, const gchar *dict_name); /** * anthy_gcontext_resize_segment: * @nth: nth segment * @resize: size * * Resize the nth segment. */ void anthy_gcontext_resize_segment (AnthyGContext *obj, int nth, int resize); /** * anthy_gcontext_set_string: * @string: A conversion string * * Set a conversion string. */ int anthy_gcontext_set_string (AnthyGContext *obj, const gchar * string); /** * anthy_gcontext_get_nr_segments: * @returns: The number of the converted segments * * The number of the converted segments */ int anthy_gcontext_get_nr_segments (AnthyGContext *obj); /** * anthy_gcontext_get_segment: * @nth_seg: Nth segment * @nth_lookup: Nth lookup * @returns: A newly assigned string. * * A newly assigned string with @ntg_seg and @nth_lookup . */ gchar * anthy_gcontext_get_segment (AnthyGContext *obj, int nth_seg, int nth_lookup); /** * anthy_gcontext_commit_segment: * @nth_seg: Nth segment * @nth_lookup: Nth lookup * * Commit a string with @ntg_seg and @nth_lookup. */ int anthy_gcontext_commit_segment (AnthyGContext *obj, int nth_seg, int nth_lookup); /** * anthy_gcontext_get_nr_candidates: * @returns: The number of the candidates * * The number of the candidates */ int anthy_gcontext_get_nr_candidates (AnthyGContext *obj, int nth_seg); /** * anthy_gcontext_set_prediction_string: * @string: A prediction string * * Set a prediction string. */ int anthy_gcontext_set_prediction_string (AnthyGContext *obj, const gchar * string); /** * anthy_gcontext_get_nr_predictions: * @returns: The number of the converted segments in the current * prediction string. * * The number of the converted segments in the current prediction string. */ int anthy_gcontext_get_nr_predictions (AnthyGContext *obj); /** * anthy_gcontext_get_prediction: * @nth_seg: Nth segment * @returns: A newly assigned string. * * A newly assigned string with @ntg_seg . */ gchar * anthy_gcontext_get_prediction (AnthyGContext *obj, int nth_seg); /** * anthy_gcontext_commit_prediction: * @nth_seg: Nth segment * * Commit a prediction string with @ntg_seg . */ int anthy_gcontext_commit_prediction (AnthyGContext *obj, int nth_seg); /** * anthy_gcontext_set_logger: * @level: Log level * * Set Anthy log level. */ void anthy_gcontext_set_logger (int level); G_END_DECLS #endif ibus-anthy-1.5.11/gir/test.c000066400000000000000000000021451346647371500156100ustar00rootroot00000000000000#include #include "anthygcontext.h" int main (int argc, char *argv[]) { AnthyGContext *obj = NULL; gchar *string = NULL; #if !GLIB_CHECK_VERSION(2,35,0) g_type_init (); #endif anthy_gcontext_set_logger (0); obj = anthy_gcontext_new (); anthy_gcontext_set_encoding (obj, ANTHY_UTF8_ENCODING); anthy_gcontext_init_personality (obj); anthy_gcontext_do_set_personality(obj, "ibus__ibus_symbol"); anthy_gcontext_set_string (obj, "ใฆใ™ใจ"); anthy_gcontext_resize_segment (obj, 0, -1); printf ("%d\n", anthy_gcontext_get_nr_segments (obj)); printf ("%d\n", anthy_gcontext_get_nr_candidates (obj, 0)); string = anthy_gcontext_get_segment (obj, 0, 0); printf ("%s\n", string ? string : "(null)"); anthy_gcontext_commit_segment (obj, 0, 0); anthy_gcontext_set_prediction_string (obj, "ใฆใ™ใจ"); printf ("%d\n", anthy_gcontext_get_nr_predictions (obj)); string = anthy_gcontext_get_prediction (obj, 0); printf ("%s\n", string ? string : "(null)"); anthy_gcontext_commit_prediction (obj, 0); g_object_unref (obj); return 0; } ibus-anthy-1.5.11/gir/test.py000066400000000000000000000010441346647371500160130ustar00rootroot00000000000000# -*- coding: utf-8 -*- from gi.repository import GObject from gi.repository import Anthy anthy = Anthy.GContext() anthy.set_encoding(Anthy.UTF8_ENCODING) anthy.init_personality() anthy.do_set_personality('ibus__ibus_symbol') anthy.set_string('ใฆใ™ใจ') anthy.resize_segment(0, -1) print anthy.get_nr_segments() print anthy.get_nr_candidates(0) print anthy.get_segment(0, 0) print anthy.commit_segment(0, 0) anthy.set_prediction_string('ใฆใ™ใจ') print anthy.get_nr_predictions() print anthy.get_prediction(0) print anthy.commit_prediction(0) ibus-anthy-1.5.11/ibus-anthy.spec.in000066400000000000000000000061011346647371500172440ustar00rootroot00000000000000%{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} %{!?enable_kasumi: %define enable_kasumi 0} %define sub_version 1.0 %define require_ibus_version 1.4.2 Name: @PACKAGE_NAME@ Version: @PACKAGE_VERSION@ Release: 1%{?dist} Summary: The Anthy engine for IBus input platform License: GPLv2+ Group: System Environment/Libraries URL: https://github.com/ibus/ibus/wiki Source0: https://github.com/ibus/ibus/releases/download/%{version}/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: anthy-devel BuildRequires: glib2-devel BuildRequires: gettext-devel BuildRequires: ibus BuildRequires: libtool BuildRequires: pkgconfig BuildRequires: gobject-introspection-devel Requires: ibus >= %require_ibus_version Requires: pygobject3 Requires: anthy %if %enable_kasumi Requires: kasumi %endif %description The Anthy engine for IBus platform. It provides Japanese input method from libanthy. %package devel Summary: Development tools for ibus Group: Development/Libraries Requires: %{name} = %{version}-%{release} Requires: glib2-devel Requires: anthy-devel %description devel The ibus-anthy-devel package contains .so file and .gir files for developers. %prep %setup -q %build %configure --disable-static # make -C po update-gmo make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make DESTDIR=${RPM_BUILD_ROOT} install rm -f $RPM_BUILD_ROOT%{_libdir}/libanthygobject-%{sub_version}.la %find_lang %{name} %clean rm -rf $RPM_BUILD_ROOT %post # recreate icon cache touch --no-create %{_datadir}/icons/hicolor || : [ -x %{_bindir}/gtk-update-icon-cache ] && \ %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : [ -x %{_bindir}/glib-compile-schemas ] && \ [ -d %{_datadir}/glib-2.0/schemas ] && \ %{_bindir}/glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : %postun # recreate icon cache touch --no-create %{_datadir}/icons/hicolor || : [ -x %{_bindir}/gtk-update-icon-cache ] && \ %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : [ -x %{_bindir}/glib-compile-schemas ] && \ [ -d %{_datadir}/glib-2.0/schemas ] && \ %{_bindir}/glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : %files -f %{name}.lang %defattr(-,root,root,-) %doc AUTHORS COPYING README # %dir %{python_sitearch}/ibus %{_libdir}/girepository-1.0/Anthy*.typelib %{_libdir}/libanthygobject-%{sub_version}.so.* %{_libexecdir}/ibus-*-anthy %{_datadir}/appdata/*.appdata.xml %{_datadir}/applications/ibus-setup-anthy.desktop %{_datadir}/glib-2.0/schemas/org.freedesktop.ibus.engine.anthy.gschema.xml %{_datadir}/ibus-anthy %{_datadir}/ibus/component/* %{_datadir}/icons/hicolor/scalable/apps/ibus-anthy.svg %files devel %{_datadir}/gir-1.0/Anthy*.gir %{_includedir}/ibus-anthy-%{sub_version} %{_libdir}/libanthygobject-%{sub_version}.so %changelog * @DATE_DISPLAY@ Peng Huang - @PACKAGE_VERSION@-1 - Current version. ibus-anthy-1.5.11/icons/000077500000000000000000000000001346647371500150155ustar00rootroot00000000000000ibus-anthy-1.5.11/icons/Makefile.am000066400000000000000000000025421346647371500170540ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2007-2013 Red Hat, Inc. # # 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. if HAVE_PRIVATE_PNG pngicons_DATA = \ ibus-anthy.png \ $(NULL) else pngicons_files = \ ibus-anthy.png \ $(NULL) endif pngiconsdir = $(pkgdatadir)/icons scalable_icons_DATA = \ ibus-anthy.svg \ $(NULL) # You need to run gtk-update-icon-cache after the icons are installed. scalable_iconsdir = $(datadir)/icons/hicolor/scalable/apps/ EXTRA_DIST = \ $(pngicons_DATA) \ $(pngicons_files) \ $(scalable_icons_DATA) \ $(NULL) ibus-anthy-1.5.11/icons/ibus-anthy-old.png000066400000000000000000000032721346647371500203660ustar00rootroot00000000000000‰PNG  IHDR szz๔bKGD ฝง“ pHYs  šœtIMEี 9ŽQม๚GIDATxฺํ—}LU็ว?ฯyน๗เ๒ๆ…หˆ"ซถ Rงqถดตฦ๊ฒฎMฺ4giM–4{Mทfอfถln,ซึญูfปu[ึ6ตEื-ฺDQS‹ "™( €๒rๅๅrน๗ž฿8@นฌ/™ษ’=ษ/็ž{ž๓|ฟฟ๏๗y9?๘๛MD’Ddˆจ[ ผAFบ๗ท`๔ศKgํ๎ๆYvซภืหน?EdOžศ.Ÿ\มjูQ๖[้๘W_ฃˆ่Ÿv<ํS3๚ว์" 07Hูโœ|ใยmภ}กtbใ7•l…‰ŽวŸ‰€ˆl•๑ะ_%2Šˆ<)"ฎ„oคๆ%N฿Fข.๊šJYฝui/P›ภ6Ÿุฑ2๒Q…ุ๖‹"๒ Y๎<ดํoศ๑Ÿุฒ'O์สๅŸ•ฎแJ1 ฆItlทผ๗M้x๎๙C/ศ๙#W๚Dไพฝา{๎ขeศ๎,้Y*ป7๏’๗]‹ศฝมฃ;8E<‚ฒวY๙#ง๖ุ<4ื€J)รชfbำc8`๙=_ุฉ”ชJ ูcิผ˜p;˜พิ.ส‹*xํ‡ีžฎ ฟา๋อบ@ธุฐ*ก ััญtŸ ;gˆฑซmŒ๔‡7ฬcณŸุG`™``d,มŽูt5^+ัศ[_…•9{p8๗J€๖’บ่:๖ด1T’N๑’.Ÿ๊พWDฬ*Y๚5ม2 ษ!Qืด€Œ&"™3ภ๓oซข๕;ซะ‡8| ;.พฑ ยท(uณR๊-ฅิฌ(%๗0Yท;ฟ๋ 8๔ิO๋}[Dn‘ก๓/qๅฯ ทŽฅƒeฐๆVฎึ3%ตŸˆ<มXอi:Ÿ.A๋หค๙|๙%ูxผฎฃ3!›&ฬขปกงนk?๊dๅืทไ‹ั๚{# n\:ธ40u”กฑ๙ั ฦฺ฿๓–>Mธึร่0โ {่ &1ุ—ยบวsช็#ะH๎ฺn €ฆภิ ึปรฤญ;™ป๕I“a˜ธt.๕ŽbะๅA`dฃน!@~ฉ?ด&$ ”ฒe|่†็qิ„C`*\ฺ nQยฐ@K™ ” 0A)ˆัt&ำcPธ:็˜RJๆ?Œi•ไฎCCsFLษ> ž z&่>0| g๎# ?~lๅ็า™ด)ซgรอต฿W‘_. ึ( ๅ1ตฏSd ๔๔CK-”สœฬอฆณ)ส่uEัฺ›Ot ฌiAืpB9Wc รอ z๊$xฦ %ฒฆณวศฆน.ล๑ฟฤ฿ \๚ (ฅDโ‘*ฌดe่c“เŠi5 tหษV๓:™๋i g€–69<€ง้TรญSX–S=ฤ$šซ’ภzะ”ฃ€ฆ@›RCๅ- Tา$`*h้Ž †tgDใ hซ“ฟ๊ๆ๕?฿8Jฮ—ใ T้จ) Qi๔t๒a“Š•๎ม—๏"ฐ,ร5ฅ„”I[C'a›ขuys๚?~|e๕(Uท5ฯ,ๆ์้"š๒ฒๆ่>ˆ้Qธบ—•› )ถ‚”Lอ'๛((๕w-Ÿ˜€R ๛pํลmeoฟšK(”<,sก—‚R?9K3๐๚,Qšf‡Cฝ๏Jˆ`C/oฌŽฟQ™‹้ด‡htzพ๐…TZฬ@ล_VŒ‡ข˜ฆ`ษโrnh\หๅB๋ฯสq—=!ฅDHกตฦิZืš†hฐ๕Uฐ‘ณ` .—›L"Œื็ฃœฒสe žgllŒ††F ร@Jม๛๖0:1ล’!$ำ9ข3 ส•–ํ&๓๐ฦฑsล„[ช5ฅ๋9cำผs5Žํ…TfษZWเ๖ฒ`’๑`”แn—‹KŸะP_หขฺ-ุJOIz{๛ูบu+~9†!yปญ“๖ŽA ำฬcYไ=หY”๙ฎ2fsu†q>™ธฎZcอุ@;Kjช ^ั˜Bสbู,ธ^ฬ+_Bโ‰ ร!’ฉ,^7ไาณT•-ลใ‚TZแญจฃ๋ำn๖Eฃ๘ๅh-_B.9มษ“เ86n—ฆ๕Id*Fhไ<ูิฆ้บยhWW๒ข๛”m1vqšƒw‰บฺ:` !Jไ,?fžฆiŽpฑw—หอ์๔ Bgูฝs )๊89†แฏกo๐cFFFฉฏo@ม๎kHววVหฒBเ๒๘˜สšXน4“cgiจ ฐeหึR ^ฐZฯัHkอข๊m,YRSt@ม…WBจ4แ๚Cธ&ณSฃT๘]lด[,กwpš™X†Œํกปป—›nบ‰ฒฒ2”ฃูนs7๋ืo, 7šๅ฿ž๙8i|ษW œ—๗ฏTคศh‹๗].Ÿvu ‡QZaส‚ภ ล€”’ูXŠ๎พq2Y Ÿฮ‘KGi^ทŠ+VQQต”c๏t0Mเ_ดœ๓]8p~ฟฟ฿_[ถรว็วษf3คใAชUณu๋Vjkkq็ชยuญฑทS’YJ!‘B.X„ C29ฃซ{ทMtj ;gำๆอ,Yฒ”Khฌ`ำSE฿เ8รร#(ฅJ๏*YU)N~ƒŠLbœUซ›ธแ† B4†QLฟ๙gŠฝภ•cMA)ญ‘B „ผแ‚ก(}!.“๘LฟOฒqใ&*++‘Rฐกน‘๒r/ZiดYล…‹ษๅฒWๅX0Jo8)’ฑ0ถDC}-ฆi™Šำขท?Dh2†ŸืiW๘Kk]โ+แMrย0Žาไฒqฒฉi6ฎYอš5k0MหrุณํF๐V;3ฑๅ‹VrๆL;-๖ำะPVrนใ(Nํรฑs8™qššnฤฟh?๎M†Bคณ6Žฃ@k Cโv4ญ\ส7ฏgyc Bศy7S้หลฃXฮua<Kq๑า8.—‹๘๔8V&ส† ทS[[ €ฃ u๊–U3:>ฒŒแ0รรริีี•ฒ‹RŠท฿;ว๋ayVf๐ึษa,Gใ8สJกตiุส@^‚‘ํรy๓nปy#ๅeฅj}ž`๊y}ซ,qฅ4แz๛'๐z}ค“Qช+lฒ…สสส’ •าlผŠ =ฃฤ“9ผutttฑ}๛v<B>d€้™$.ำ 2k€VdƒL{ˆFFษๆา”๙|ธ\.„”•WณhูFlk)ฟ9ม์์$-๛๖P]]]‚าy™J]๎œไ๊‹ง8ื9ˆึ‚lz–ู้Q645ะผฏวƒฃ #๏ฺฝ;nไฃOd0ผห๘๐ฃธ๗ปฉฏo@)อ›๏u๙?ŽNt1ุ๓R8466r็พ[Yปv-๕๕๕”๙|h “ษ0<<ย…ม4‘ผ๕n>—ร;oงขฒrNbะ˜ZซนํnษEณฑg;๚1M‰) ึญฬบ๕ซ e˜M]@ซหนฺํ1 ‰คYFh2ละะ0uu๕H)๘ฮ7๗๑ิ3ฟๆwฏฑ™q6oLKK {๗๎อ ^V†QXญJil+ว…~ฺGŒOd๙ำ‰๗ุฐ~ ๋**JEMก0ฺ๚PJ3Š20ฦ_ๆ<เ]ฮงƒ†พFO|ู ฆ;ภูณํl฿พฏืKU…Ÿ๛ZvใR|>---455แvปhzR‚a์ฺถž?พำM0’ข`”K—.ัtcSžูช‚Š ฑ%$’ฮ_ฦ4ๅๅ3Hฏ(ิwฯ2ฺฯczzš†๚z\.;vlgบๆ|Š๔๙l‹ ค๘๙T* อม๐๐นlฎja๒ไํฃ๖>\ฆ‰rrคb,+K‰v,p(ๅPะ„ํ?ัูิีีๅ™คaPYภoฑ อ฿4๓ษฮXุŽBJI8&ฦQ •๗€žกbsํ8Šั๑)๚‡‚TV–ปฤฅsฟแ†ๅหฉฎฎพฆŽmฑฌjQ7Žึคl?gฯže็ฮxฝyลุฤ•~2้8 6nDuu5ถmฯ#jW๎ฤถdฯ๖ŸฤถiUI{๛Y๖์ูC฿เ$ฑDŠ๚ฺjLCbฒTw”ึ8ถC*“ฃง/ศฑwฮ34:‰฿e39๔>สšแถพฤชUซ0 ๅ(วฦถํหBA6“ใำx.”c‘NDจช,g๚๕yื]C๘ขmGฑmำ*^๛GXZQXษ'็; ‡#ํs็ํย๋1H'ฃdโl฿บŽฆฆฆk >?)6ฌป†ฺj†FƒุถรD8Fooซ—ืฐฒวศศฃร“Œ ‰R๙์คตยv4+ชณlซ‹qถ7ฬลOวxk๎บท™แๅ_งฒถ_ไ8ช๚&"—ห‘หๅEžญ”B มถ๕Tบง™๏@ู ถlูJMMM)๕}ฏใ(พrฯ.Šฤdำ“a๚๚๚ธ็ฎ›hนๅ–๘ร๘มe  ๊!;ำลL่อ๎w๙ฮ–ทธ}ฝๆะ_ฆb๕ฤk[ฉi\‡GอP~๎;ธฃงฑฌ™L†t&ฉ TBhAU…‡C๗™ํฃ'g5าีีล‰'8pเภ็zกH๗๎hf:ด—žฤi^ŠeY€ไŽ}w;vœ๛๗“หfศdณไฒYดtัT![ึมก}u๘*า1dผ ปว]๒ิแ”ฏ%“i'™L‘หe1‹œF“ทขE‹๙๚ืž7xƒถถ6 ร  อ฿๖๛ผญv๛๎ฯอท|^xD"ํฦ๋๕’Ngจซซใ๛๏ฯS้‚๗.Dผ_ว‡xวŸ…0จBm๐จch สk‚ฟศไ›ฤbณไrน๙\(NSUUE6›ฅญญ––ฺ ‡รื๛™ คจื๋ล็๓166ฦŽ; q่๋๋cีชUฅt\8@h๐,ฦชฟปขค๋๒ว”Bฺ•.มp”ž๎n"‘H>^$yวy้ฅ—จชชขฅฅ…‘‘FFFๆY?๓ร๏~๗ปœ9s†ŽŽ’ษ$ <๐ภฌYณ†'Ÿ|’ัััgซใว9w๎O<๑์ป—W^y…๖๖v’ษ$ตตต:tˆ5k›๙ฏใi"/เŸ/ณNฅ๘ฯg~Œ4 fฃ/ัูีY,จBสปฃ”ฦq}๊ิ)บบบ๘๊WฟŠฯ็#033C.—+)088ภ๓ฯ?O เแ‡ๆž{๎att”_๒—|๋[฿โ๐แร<๖ุc<๚่ฃ กตๆ่ัฃ”••๑ะCq๐เA&&&x๑ลA+WW1;3ดใ;Žt๔~z†K,oฌ็ญท$ ้p8ฬ๔๔tฮ,|บ9ญตฦฒmq๔่QVฏ^อŠ+ศd2% K” ฏ/U็มdห–-!hjjขญญd2‰mTWW3::JEEห—/เาฅKดถถฒu๋M€bๅส•ดตต‘Jฅฐr•••dณYbฑnทถy๕ืillไƒ>ภ็๓R^^.‰ฤX&“™4w๎ษ้Sง."ฤฑำงO๏วใ>|˜้ฉ)bฑXiหผปปป„ษžž Œๅฟบไrฬฬฬฐjี*FF๒[+ิืื— tแยjkk  •๖Jcฑ ๔๗๗“ษd8{๖ ^ฏžžฆงงฉฉฉ!•JQQQฉณูœ0 ใ'ซ›ืคอ|sฎณ็ฯŸ{๊ิฉSw)ฅฤฏ~๕ซซ‚3œ(qก`0ศฎ]ปH$%ฅFวFัZSWWG<'<!™Lˆลb(ญgร† ฬฮฮข…าŠP(„RŠล‹395Y ๎ัั1ผ^/]]]TUUแ8Ž–R ท-~ )ไ๓Cฃ˜งOŸfฯž=ดถถ~ำ4อ๑x ไrนถ ถy้ฅ—ˆFgะZ359…ใ8,[ถl^q Nhhhภvl†Xบt)Žใ0;;K&“!`YVพ!qก`€@ †\6‡! ‰แpญ5~ฟŸx<.„ธ\ฎ็<ฯฟœ9sf ศ7๕ญญญทmv๋าฅKOkดึk‹Iฅ”O )ฅžj?ื~+๐ตŠŠŠ๏iญำEŽแย…‡MำผqัขEkญtgWื๗+**QJY็ฯŸ฿ image/svg+xml ibus-anthy-1.5.11/m4/000077500000000000000000000000001346647371500142225ustar00rootroot00000000000000ibus-anthy-1.5.11/m4/.gitignore000066400000000000000000000000051346647371500162050ustar00rootroot00000000000000*.m4 ibus-anthy-1.5.11/m4/Makefile.am000066400000000000000000000021411346647371500162540ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2013 Takao Fujiwara # Copyright (c) 2007-2013 Red Hat, Inc. # # 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. EXTRA_DIST = \ as-version.m4 \ gettext.m4 \ iconv.m4 \ lib-ld.m4 \ lib-link.m4 \ lib-prefix.m4 \ nls.m4 \ po.m4 \ progtest.m4 \ $(NULL) ibus-anthy-1.5.11/m4/as-version.m4000066400000000000000000000037701346647371500165610ustar00rootroot00000000000000dnl as-version.m4 0.2.0 dnl autostars m4 macro for versioning dnl Thomas Vander Stichele dnl $Id: as-version.m4,v 1.4 2004/06/01 09:40:05 thomasvs Exp $ dnl AS_VERSION dnl example dnl AS_VERSION dnl this macro dnl - AC_SUBST's PACKAGE_VERSION_MAJOR, _MINOR, _MICRO dnl - AC_SUBST's PACKAGE_VERSION_RELEASE, dnl which can be used for rpm release fields dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents dnl maintainer mode from running correctly dnl dnl don't forget to put #undef PACKAGE_VERSION_RELEASE in acconfig.h dnl if you use acconfig.h AC_DEFUN([AS_VERSION], [ PACKAGE_VERSION_MAJOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f1) PACKAGE_VERSION_MINOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f2) PACKAGE_VERSION_MICRO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f3) AC_SUBST(PACKAGE_VERSION_MAJOR) AC_SUBST(PACKAGE_VERSION_MINOR) AC_SUBST(PACKAGE_VERSION_MICRO) ]) dnl AS_NANO(ACTION-IF-NO-NANO, [ACTION-IF-NANO]) dnl requires AC_INIT to be called before dnl For projects using a fourth or nano number in your versioning to indicate dnl development or prerelease snapshots, this macro allows the build to be dnl set up differently accordingly. dnl this macro: dnl - parses AC_PACKAGE_VERSION, set by AC_INIT, and extracts the nano number dnl - sets the variable PACKAGE_VERSION_NANO dnl - sets the variable PACKAGE_VERSION_RELEASE, which can be used dnl for rpm release fields dnl - executes ACTION-IF-NO-NANO or ACTION-IF-NANO dnl example: dnl AS_NANO(RELEASE="yes", RELEASE="no") AC_DEFUN([AS_NANO], [ AC_MSG_CHECKING(nano version) NANO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then AC_MSG_RESULT([0 (release)]) NANO=0 PACKAGE_VERSION_RELEASE=1 ifelse([$1], , :, [$1]) else AC_MSG_RESULT($NANO) PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` ifelse([$2], , :, [$2]) fi PACKAGE_VERSION_NANO=$NANO AC_SUBST(PACKAGE_VERSION_NANO) AC_SUBST(PACKAGE_VERSION_RELEASE) ]) ibus-anthy-1.5.11/po/000077500000000000000000000000001346647371500143205ustar00rootroot00000000000000ibus-anthy-1.5.11/po/.gitignore000066400000000000000000000002741346647371500163130ustar00rootroot00000000000000Makefile Makefile.in Makefile.in.in Makevars.template POTFILES Rules-quot boldquot.sed en@boldquot.header en@quot.header insert-header.sin quot.sed remove-potcdate.sed remove-potcdate.sin ibus-anthy-1.5.11/po/LINGUAS000066400000000000000000000001211346647371500153370ustar00rootroot00000000000000# please keep this list sorted alphabetically # ca cs el es fr ja pt_BR uk zh_CN ibus-anthy-1.5.11/po/Makevars000066400000000000000000000070321346647371500160160ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 --keyword=g_dngettext:2,3 --add-comments --keyword=Name --keyword=Comment --keyword # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Peng Huang \ Takao Fujiwara # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = no # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = https://github.com/ibus/ibus-anthy/issues # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = yes # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = no # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = no ibus-anthy-1.5.11/po/POTFILES.in000066400000000000000000000010351346647371500160740ustar00rootroot00000000000000# Files with translatable strings. # Please keep this file in alphabetical order. data/ibus-anthy.appdata.xml.in engine/python2/default.inputMethod.xml.in.in engine/python2/engine.py engine/python2/factory.py engine/python3/default.inputMethod.xml.in.in engine/python3/engine.py engine/python3/factory.py setup/python2/anthyprefs.py setup/python2/ibus-setup-anthy.desktop.in.in setup/python2/main.py setup/python2/setup.ui setup/python3/anthyprefs.py setup/python3/ibus-setup-anthy.desktop.in.in setup/python3/main.py setup/python3/setup.ui ibus-anthy-1.5.11/po/POTFILES.skip000066400000000000000000000004421346647371500164350ustar00rootroot00000000000000# Files with translatable strings to skip. # Please keep this file in alphabetical order. engine/python2/default.xml.in engine/python3/default.xml.in setup/python2/anthyprefs.py setup/python2/ibus-setup-anthy.desktop.in setup/python3/anthyprefs.py setup/python3/ibus-setup-anthy.desktop.in ibus-anthy-1.5.11/po/ca.po000066400000000000000000000732101346647371500152460ustar00rootroot00000000000000# Catalan translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Robert Antoni Buj Gelonch , 2015. #zanata # Robert Antoni Buj Gelonch , 2016. #zanata # fujiwara , 2017. #zanata # fujiwara , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-04-23 08:15+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: Catalan\n" "Language: ca\n" "X-Generator: Zanata 4.6.2\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "Mรจtode d'entrada japonรจs" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" "El mรจtode d'entrada Anthy estร  dissenyat per a l'entrada de text en japonรจs." #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" "Els mรจtodes d'entrada sรณn sistemes mecanogrร fics que permeten als usuaris " "l'entrada d'idiomes complexos. Sรณn necessaris perquรจ aquests idiomes " "contenen massa carร cters per colยทlocar-los simplement en un teclat " "tradicional." #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "Mรจtode d'entrada Anthy" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" "No es pot habilitar l'Anthy.\n" "El final del contingut del fitxer %s/last-record2_default.utf8 del vostre " "directori d'inici no รฉs '\\n'. p. ex. format de text no correcte.\n" "Si us plau, corregiu el fitxer o elimineu-lo manualment i torneu a iniciar " "l'IBus." #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "Anthy - Preferรจncies" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "Configura Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "%(description)s (%(symbol)s)" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "Mode d'entrada" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "Commuta el mode d'entrada" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "Hiragana" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "Katakana" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "Katakana d'amplada mitjana" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "Llatรญ" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "Llatรญ ampli" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "mรจtode mecanogrร fic" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "Commuta el mรจtode mecanogrร fic" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "Romaji" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "Kana" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "Alternanรงa amb el polze" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "Mode de segment" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "Commuta al mode de conversiรณ" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "Segment mรบltiple" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "Segment individual" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "Conversiรณ immediata (segment mรบltiple)" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "Conversiรณ immediata (segment individual)" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "Mode de diccionari" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "Commuta el diccionari" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "Anthy - Diccionari" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "Dic" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "Configura els diccionaris" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "Edita els diccionaris" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "Llanรงa l'eina de diccionari" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "Afegeix paraules" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "Afegeix paraules al diccionari" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "General" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "Conversiรณ del codi postal" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "Sรญmbol" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "Estil de carร cter antic" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "Era" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "Emoji" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "Ajust Anthy IBus" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "Prepara el motor Anthy d'IBus" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "Etiqueta de menรบ" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "Ordre" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "Drecera" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "Descripciรณ" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "Embd" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "Sgl" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "Carร cters d'entrada" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "Carร cters de sortida" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "Entrada" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "Individual" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "Esquerra" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "Dreta" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "Personalitza la taula de tecles romaji" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "Taula de tecles _romaji:" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "Carร cters de _sortida" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "Per defecte" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "Personalitza la taula de tecles kana" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "Taula de tecles _kana:" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "Disposiciรณ de teclat japonesa" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "Disposiciรณ de teclat dels EUA" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "Personalitza la taula de tecles d'alternanรงa amb el polze" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "_Taula de tecles d'alternanรงa amb el polze:" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "Carร cters de s_ortida individual" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "Base" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "Extensiรณ de tecles NICOLA-J" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "Extensiรณ de tecles NICOLA-A" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "Extensiรณ de tecles NICOLA-F" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "Extensiรณ de tecles FMV KB231-J" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "Extensiรณ de tecles FMV KB231-A" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "Extensiรณ de tecles FMV KB231-F" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "Extensiรณ de tecles FMV KB611-J" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "Extensiรณ de tecles FMV KB611-A" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "Extensiรณ de tecles FMV KB611-F" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "El fitxer que heu triat ja ha estat afegit:" #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "El fitxer que heu triat no existeix:" #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "El fitxer que heu triat รฉs un directori:" #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "No podeu afegir diccionaris al directori privat de l'anthy: " #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "El camรญ al vostre fitxer no รฉs bo:" #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "El fitxer xml del motor no existeix:" #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" "La disposiciรณ del teclat anthy ha canviat. Si us plau, reinicieu l'ibus per " "tornar a carregar la distribuciรณ." #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "Si us plau, especifiqueu els carร cters d'entrada" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "Si us plau, especifiqueu els carร cters de sortida" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "" "Si us plau, especifiqueu els carร cters de taula de tecles d'alternanรงa amb " "el polze esquerre" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "" "Si us plau, especifiqueu els carร cters de taula de tecles d'alternanรงa amb " "el polze dret" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" "La vostra tecla personalitzada no estร  assignada en cap secciรณ. Potser รฉs un " "error de programari." #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "El vostre fitxer no existeix:" #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "Obre el fitxer de diccionari" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "_Cancelยทla" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "_Obre" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "Edita el fitxer de diccionari" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "D'ac_ord" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "El fitxer que heu triat no รฉs vร lid." #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "No podeu eliminar el diccionari del sistema." #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "El vostre fitxer no estร  bรฉ." #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "Visualitza el fitxer de diccionari" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "Si us plau, premeu una tecla (o una combinaciรณ de tecles)" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "El diร leg es tancarร  quan es deixi anar la tecla" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "keysym no vร lid" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "Aquest keysym no รฉs vร lid" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "NICOLA-J" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "NICOLA-A" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "NICOLA-F" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "Cap" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "Extensiรณ de tecles FMV KB231" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "Extensiรณ de tecles FMV KB611" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "Mantรฉ els codis del teclat numรจric" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "Converteix els carร cters" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "No fer res" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "Converteix automร ticament" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "Consignaciรณ automร tica" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "Neteja" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "Consigna" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "Aguanta" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "ATOK" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "Wnn" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "Ajust - IBus-Anthy" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "_Mode d'entrada:" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "Mรจtode d'_escriptura:" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "_Mode de conversiรณ:" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "Ajust inicial" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "Visibilitat del menรบ en la icona d'estat" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "Estil de _punt:" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "Esti_l de sรญmbol:" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "Tipus de tecla del teclat _numรจric:" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "_Comportament sobre el punt:" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "Comportament sobre la pรจrdua d'en_focament:" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "Comportament" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "Mida de la pร gina de la _finestra dels candidats::" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "Converteix els _sรญmbols amb l'amplada d'una columna" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "Converteix els _nรบmeros amb l'amplada d'una columna" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "Con_verteix els espais amb l'amplada d'una columna" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" "Commu_ta โ€œHiraganaโ€ i โ€œLlatรญโ€ amb la tecla Maj. La tecla hiraganaโ€“katakana " "en la pre-ediciรณ" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "Altres" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "Conversiรณ" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "Tipu_s de drecera:" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "Per de_fecte" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "_Edita" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "Vinculaciรณ de tecles" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "Romaji" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "Kana" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "Disposiciรณ de tec_lat:" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "Disposiciรณ de teclat" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "Mรจtode mecanogrร fic" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "Tecla d'alternanรงa amb el po_lze esquerre:" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "_Tecla d'alternanรงa amb el polze dret:" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "" "Ajusta la d_isposiciรณ del mรจtode d'entrada amb la disposiciรณ del teclat del " "sistema" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "Ajusta la disposiciรณ del mรจtode d'entrada amb la disposiciรณ de l'XKB" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "Disposiciรณ del _mรจtode d'entrada:" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "Torneu a iniciar l'IBus quan canvieu la disposiciรณ del teclat" #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "Torneu a iniciar l'IBus quan canvieu l'XKB" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "Concertaciรณ de tecles addicionals:" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "" "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' i aixรญ successivament es poden emetre amb la tecla " "d'alternanรงa amb el polze" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" "No heu de tornar a configurar la disposiciรณ de teclat del sistema per a la " "\"Concertaciรณ de tecles addicionals\", ja que aquesta opciรณ canvia la " "disposiciรณ del mรจtode d'entrada tan sols en el cas que el mรจtode d'entrada " "estigui engegat." #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" "No heu de tornar a configurar l'XKB, ja que aquesta opciรณ canvia la " "disposiciรณ del mรจtode d'entrada tan sols amb el mรจtode d'entrada engegat." #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "Habilita la marca del so quasi-sonor amb la t_ecla Maj." #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "Seion + Maj. pot emetre handakuon" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "Taula de tecle_s d'alternanรงa amb el polze:" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "Disposiciรณ d'alternanรงa amb el polze" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "Alternanรงa amb el polze" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "Ordre per _editar el diccionari:" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "Ordre per _afegir una paraula:" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "Configuraciรณ del diccionari per defecte" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "_Visualitza" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "_Afegeix" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "_Elimina" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "A_munt" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "Podeu canviar l'ordre en la barra de l'idioma" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "A_vall" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "Diccionaris estesos" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "Diccionari" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "Sobre" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "_Tanca" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "Edita la drecera" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "Codi de la tecla:" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "Modificador:" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "A_lterna" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "Co_ntrol" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "_Majรบscules" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "_Refresca" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "Carร cters d'_entrada" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "Carร cters de s_ortida" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "Alternanรงa amb el po_lze esquerre" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "Alternanรงa amb el polze d_ret" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "Sup_rimeix" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "Etiqueta breu:" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "_Descripciรณ:" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "_Utilitza sols el diccionari amb la commutaciรณ de diccionaris" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "Integra _el vostre diccionari al diccionari del sistema" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "Habilita la conversiรณ inve_rsa" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "El motor Anthy per a la plataforma d'entrada IBus" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "Robert Antoni Buj i Gelonch " ibus-anthy-1.5.11/po/cs.po000066400000000000000000000706431346647371500152770ustar00rootroot00000000000000# Czech translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2018 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Zdenek , 2017. #zanata # Zdenek , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy master\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2017-03-17 13:10+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-02-27 03:12-0500\n" "Last-Translator: Zdenek \n" "Language-Team: Czech\n" "Language: cs\n" "X-Generator: Zanata 3.9.6\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" #: ../data/ibus-anthy.appdata.xml.in.h:1 msgid "Japanese input method" msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:2 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:3 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" #: ../engine/python2/default.xml.in.in.h:1 #: ../engine/python3/default.xml.in.in.h:1 msgid "Anthy Input Method" msgstr "" #: ../engine/python2/engine.py:207 ../engine/python3/engine.py:208 msgid "" "Could not enable Anthy.\n" "The end of the content of the file .anthy/last-record2_default.utf8 in your " "home directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" #: ../engine/python2/engine.py:255 ../engine/python3/engine.py:256 #: ../setup/python2/main.py:416 ../setup/python3/main.py:421 msgid "Preferences - Anthy" msgstr "" #: ../engine/python2/engine.py:257 ../engine/python3/engine.py:258 msgid "Configure Anthy" msgstr "" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: ../engine/python2/engine.py:294 ../engine/python2/engine.py:382 #: ../engine/python2/engine.py:449 ../engine/python2/engine.py:525 #: ../engine/python2/engine.py:856 ../engine/python2/engine.py:884 #: ../engine/python2/engine.py:908 ../engine/python2/engine.py:934 #: ../engine/python2/engine.py:996 ../engine/python3/engine.py:295 #: ../engine/python3/engine.py:383 ../engine/python3/engine.py:450 #: ../engine/python3/engine.py:526 ../engine/python3/engine.py:851 #: ../engine/python3/engine.py:879 ../engine/python3/engine.py:903 #: ../engine/python3/engine.py:929 ../engine/python3/engine.py:991 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "" #: ../engine/python2/engine.py:295 ../engine/python2/engine.py:857 #: ../engine/python3/engine.py:296 ../engine/python3/engine.py:852 #: ../setup/python2/main.py:401 ../setup/python3/main.py:406 msgid "Input mode" msgstr "" #: ../engine/python2/engine.py:301 ../engine/python3/engine.py:302 msgid "Switch input mode" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../engine/python2/engine.py:311 ../engine/python3/engine.py:312 #: ../setup/python2/setup.ui.h:1 ../setup/python3/setup.ui.h:1 msgid "Hiragana" msgstr "Hiragana" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../engine/python2/engine.py:320 ../engine/python3/engine.py:321 #: ../setup/python2/setup.ui.h:2 ../setup/python3/setup.ui.h:2 msgid "Katakana" msgstr "Katakana" #: ../engine/python2/engine.py:329 ../engine/python3/engine.py:330 #: ../setup/python2/setup.ui.h:3 ../setup/python3/setup.ui.h:3 msgid "Halfwidth Katakana" msgstr "" #: ../engine/python2/engine.py:338 ../engine/python3/engine.py:339 #: ../setup/python2/setup.ui.h:4 ../setup/python3/setup.ui.h:4 msgid "Latin" msgstr "" #: ../engine/python2/engine.py:347 ../engine/python3/engine.py:348 #: ../setup/python2/setup.ui.h:5 ../setup/python3/setup.ui.h:5 msgid "Wide Latin" msgstr "" #: ../engine/python2/engine.py:383 ../engine/python2/engine.py:885 #: ../engine/python2/engine.py:909 ../engine/python3/engine.py:384 #: ../engine/python3/engine.py:880 ../engine/python3/engine.py:904 #: ../setup/python2/main.py:404 ../setup/python3/main.py:409 msgid "Typing method" msgstr "" #: ../engine/python2/engine.py:389 ../engine/python3/engine.py:390 msgid "Switch typing method" msgstr "" #: ../engine/python2/engine.py:399 ../engine/python3/engine.py:400 #: ../setup/python2/setup.ui.h:12 ../setup/python3/setup.ui.h:12 msgid "Romaji" msgstr "" #: ../engine/python2/engine.py:408 ../engine/python3/engine.py:409 #: ../setup/python2/setup.ui.h:13 ../setup/python3/setup.ui.h:13 msgid "Kana" msgstr "" #: ../engine/python2/engine.py:417 ../engine/python3/engine.py:418 #: ../setup/python2/setup.ui.h:14 ../setup/python3/setup.ui.h:14 msgid "Thumb shift" msgstr "" #: ../engine/python2/engine.py:450 ../engine/python2/engine.py:935 #: ../engine/python3/engine.py:451 ../engine/python3/engine.py:930 #: ../setup/python2/main.py:407 ../setup/python3/main.py:412 msgid "Segment mode" msgstr "" #: ../engine/python2/engine.py:456 ../engine/python3/engine.py:457 msgid "Switch conversion mode" msgstr "" #: ../engine/python2/engine.py:466 ../engine/python3/engine.py:467 #: ../setup/python2/setup.ui.h:15 ../setup/python3/setup.ui.h:15 msgid "Multiple segment" msgstr "" #: ../engine/python2/engine.py:475 ../engine/python3/engine.py:476 #: ../setup/python2/setup.ui.h:16 ../setup/python3/setup.ui.h:16 msgid "Single segment" msgstr "" #: ../engine/python2/engine.py:484 ../engine/python3/engine.py:485 #: ../setup/python2/setup.ui.h:17 ../setup/python3/setup.ui.h:17 msgid "Immediate conversion (multiple segment)" msgstr "" #: ../engine/python2/engine.py:493 ../engine/python3/engine.py:494 #: ../setup/python2/setup.ui.h:18 ../setup/python3/setup.ui.h:18 msgid "Immediate conversion (single segment)" msgstr "" #: ../engine/python2/engine.py:526 ../engine/python2/engine.py:997 #: ../engine/python3/engine.py:527 ../engine/python3/engine.py:992 #: ../setup/python2/main.py:410 ../setup/python3/main.py:415 msgid "Dictionary mode" msgstr "" #: ../engine/python2/engine.py:532 ../engine/python3/engine.py:533 msgid "Switch dictionary" msgstr "" #: ../engine/python2/engine.py:615 ../engine/python3/engine.py:615 #: ../setup/python2/main.py:413 ../setup/python3/main.py:418 msgid "Dictionary - Anthy" msgstr "" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: ../engine/python2/engine.py:621 ../engine/python3/engine.py:620 msgid "Dic" msgstr "" #: ../engine/python2/engine.py:628 ../engine/python3/engine.py:627 msgid "Configure dictionaries" msgstr "" #: ../engine/python2/engine.py:638 ../engine/python3/engine.py:637 msgid "Edit dictionaries" msgstr "" #: ../engine/python2/engine.py:640 ../engine/python3/engine.py:639 msgid "Launch the dictionary tool" msgstr "" #: ../engine/python2/engine.py:647 ../engine/python3/engine.py:646 msgid "Add words" msgstr "" #: ../engine/python2/engine.py:649 ../engine/python3/engine.py:648 msgid "Add words to the dictionary" msgstr "" # auto translated by TM merge from project: Cockpit, version: rhel-7.4, DocId: cockpit #: ../setup/python2/anthyprefs.py.in:1105 ../setup/python2/setup.ui.h:36 #: ../setup/python3/anthyprefs.py.in:1098 ../setup/python3/setup.ui.h:36 msgid "General" msgstr "Obecnรฉ" #: ../setup/python2/anthyprefs.py.in:1116 #: ../setup/python3/anthyprefs.py.in:1109 msgid "Zip Code Conversion" msgstr "" #: ../setup/python2/anthyprefs.py.in:1127 #: ../setup/python3/anthyprefs.py.in:1120 msgid "Symbol" msgstr "" #: ../setup/python2/anthyprefs.py.in:1138 #: ../setup/python3/anthyprefs.py.in:1131 msgid "Old Character Style" msgstr "" #: ../setup/python2/anthyprefs.py.in:1148 #: ../setup/python3/anthyprefs.py.in:1141 msgid "Era" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/anthyprefs.py.in:1158 #: ../setup/python3/anthyprefs.py.in:1151 msgid "Emoji" msgstr "Emoji" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:1 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:1 msgid "IBus Anthy Setup" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:2 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:2 msgid "Set up IBus Anthy engine" msgstr "" #. self.__run_message_dialog needs self.__builder. #: ../setup/python2/main.py:133 ../setup/python3/main.py:136 msgid "ibus is not running." msgstr "" #: ../setup/python2/main.py:188 ../setup/python3/main.py:191 msgid "Menu label" msgstr "" # auto translated by TM merge from project: Cockpit, version: rhel-7.4, DocId: cockpit #: ../setup/python2/main.py:207 ../setup/python3/main.py:210 msgid "Command" msgstr "Pล™รญkaz" # auto translated by TM merge from project: Fedora Installation Guide, version: f22, DocId: pot/Installing_Using_Anaconda #: ../setup/python2/main.py:211 ../setup/python3/main.py:214 msgid "Shortcut" msgstr "Zkratka" # auto translated by TM merge from project: Cockpit, version: rhel-7.4, DocId: cockpit #: ../setup/python2/main.py:256 ../setup/python3/main.py:259 msgid "Description" msgstr "Popis" #. Translators: "Embd" is an abbreviation of "embedded". #: ../setup/python2/main.py:264 ../setup/python3/main.py:267 msgid "Embd" msgstr "" #. Translators: "Sgl" is an abbreviation of "single". #: ../setup/python2/main.py:272 ../setup/python3/main.py:275 msgid "Sgl" msgstr "" #: ../setup/python2/main.py:447 ../setup/python2/main.py:483 #: ../setup/python3/main.py:452 ../setup/python3/main.py:488 msgid "Input Chars" msgstr "" #: ../setup/python2/main.py:449 ../setup/python2/main.py:485 #: ../setup/python3/main.py:454 ../setup/python3/main.py:490 msgid "Output Chars" msgstr "" # auto translated by TM merge from project: Pulseaudio, version: 6.0, DocId: pulseaudio.pot #: ../setup/python2/main.py:531 ../setup/python3/main.py:536 msgid "Input" msgstr "Vstup" # auto translated by TM merge from project: anaconda, version: f25, DocId: main #: ../setup/python2/main.py:533 ../setup/python3/main.py:538 msgid "Single" msgstr "Jedinรฝ disk" #: ../setup/python2/main.py:535 ../setup/python3/main.py:540 msgid "Left" msgstr "" #: ../setup/python2/main.py:537 ../setup/python3/main.py:542 msgid "Right" msgstr "" #: ../setup/python2/main.py:619 ../setup/python3/main.py:624 msgid "Customize Romaji Key Table" msgstr "" #: ../setup/python2/main.py:620 ../setup/python2/setup.ui.h:54 #: ../setup/python3/main.py:625 ../setup/python3/setup.ui.h:54 msgid "_Romaji Key Table:" msgstr "" #: ../setup/python2/main.py:621 ../setup/python2/main.py:627 #: ../setup/python3/main.py:626 ../setup/python3/main.py:632 msgid "_Output Chars" msgstr "" # auto translated by TM merge from project: Cockpit, version: rhel-7.4, DocId: cockpit #: ../setup/python2/main.py:622 ../setup/python2/main.py:1122 #: ../setup/python2/main.py:1270 ../setup/python2/setup.ui.h:27 #: ../setup/python3/main.py:627 ../setup/python3/main.py:1116 #: ../setup/python3/main.py:1264 ../setup/python3/setup.ui.h:27 msgid "Default" msgstr "Vรฝchozรญ" #: ../setup/python2/main.py:625 ../setup/python3/main.py:630 msgid "Customize Kana Key Table" msgstr "" #: ../setup/python2/main.py:626 ../setup/python2/setup.ui.h:56 #: ../setup/python3/main.py:631 ../setup/python3/setup.ui.h:56 msgid "_Kana Key Table:" msgstr "" #: ../setup/python2/main.py:628 ../setup/python3/main.py:633 msgid "Japanese Keyboard Layout" msgstr "" #: ../setup/python2/main.py:629 ../setup/python3/main.py:634 msgid "U.S. Keyboard Layout" msgstr "" #: ../setup/python2/main.py:632 ../setup/python3/main.py:637 msgid "Customize Thumb Shift Key Table" msgstr "" #: ../setup/python2/main.py:633 ../setup/python3/main.py:638 msgid "_Thumb Shift Key Table:" msgstr "" #: ../setup/python2/main.py:634 ../setup/python3/main.py:639 msgid "Single _Output Chars" msgstr "" # auto translated by TM merge from project: comps, version: master, DocId: po/comps #: ../setup/python2/main.py:635 ../setup/python3/main.py:640 msgid "Base" msgstr "Zรกklad" #: ../setup/python2/main.py:636 ../setup/python3/main.py:641 msgid "NICOLA-J key extension" msgstr "" #: ../setup/python2/main.py:637 ../setup/python3/main.py:642 msgid "NICOLA-A key extension" msgstr "" #: ../setup/python2/main.py:638 ../setup/python3/main.py:643 msgid "NICOLA-F key extension" msgstr "" #: ../setup/python2/main.py:639 ../setup/python3/main.py:644 msgid "FMV KB231-J key extension" msgstr "" #: ../setup/python2/main.py:640 ../setup/python3/main.py:645 msgid "FMV KB231-A key extension" msgstr "" #: ../setup/python2/main.py:641 ../setup/python3/main.py:646 msgid "FMV KB231-F key extension" msgstr "" #: ../setup/python2/main.py:642 ../setup/python3/main.py:647 msgid "FMV KB611-J key extension" msgstr "" #: ../setup/python2/main.py:643 ../setup/python3/main.py:648 msgid "FMV KB611-A key extension" msgstr "" #: ../setup/python2/main.py:644 ../setup/python3/main.py:649 msgid "FMV KB611-F key extension" msgstr "" #: ../setup/python2/main.py:788 ../setup/python3/main.py:793 msgid "Your choosed file has already been added: " msgstr "" #: ../setup/python2/main.py:792 ../setup/python3/main.py:797 msgid "The file you have chosen does not exist: " msgstr "" #: ../setup/python2/main.py:796 ../setup/python3/main.py:801 msgid "Your choosed file is a directory: " msgstr "" #: ../setup/python2/main.py:800 ../setup/python3/main.py:805 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" #: ../setup/python2/main.py:807 ../setup/python3/main.py:812 msgid "Your file path is not good: " msgstr "" #: ../setup/python2/main.py:986 ../setup/python3/main.py:989 msgid "The engine xml file does not exist: " msgstr "" #: ../setup/python2/main.py:1102 ../setup/python3/main.py:1096 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" #: ../setup/python2/main.py:1231 ../setup/python3/main.py:1225 msgid "Confirmation" msgstr "" #: ../setup/python2/main.py:1233 ../setup/python3/main.py:1227 msgid "You are about to close the setup dialog, is that OK?" msgstr "" #: ../setup/python2/main.py:1248 ../setup/python3/main.py:1242 msgid "Notice!" msgstr "" #: ../setup/python2/main.py:1250 ../setup/python3/main.py:1244 msgid "" "You are about to close the setup dialog without saving your changes, is that " "OK?" msgstr "" #: ../setup/python2/main.py:1371 ../setup/python3/main.py:1365 msgid "Please specify Input Chars" msgstr "" #: ../setup/python2/main.py:1374 ../setup/python3/main.py:1368 msgid "Please specify Output Chars" msgstr "" #: ../setup/python2/main.py:1377 ../setup/python3/main.py:1371 msgid "Please specify Left Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1380 ../setup/python3/main.py:1374 msgid "Please specify Right Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1393 ../setup/python2/main.py:1437 #: ../setup/python3/main.py:1387 ../setup/python3/main.py:1431 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" #: ../setup/python2/main.py:1503 ../setup/python2/main.py:1590 #: ../setup/python3/main.py:1497 ../setup/python3/main.py:1584 msgid "Your file does not exist: " msgstr "" #: ../setup/python2/main.py:1513 ../setup/python3/main.py:1507 msgid "Open Dictionary File" msgstr "" # auto translated by TM merge from project: blivet-gui, version: master, DocId: po/blivet-gui #: ../setup/python2/main.py:1516 ../setup/python2/main.py:1522 #: ../setup/python2/setup.ui.h:90 ../setup/python3/main.py:1510 #: ../setup/python3/main.py:1516 ../setup/python3/setup.ui.h:90 msgid "_Cancel" msgstr "_Ukonฤit" # auto translated by TM merge from project: virt-manager, version: master, DocId: virt-manager #: ../setup/python2/main.py:1517 ../setup/python3/main.py:1511 msgid "_Open" msgstr "_Otevล™รญt" #: ../setup/python2/main.py:1520 ../setup/python3/main.py:1514 msgid "Edit Dictionary File" msgstr "" # auto translated by TM merge from project: virt-viewer, version: master, DocId: virt-viewer #: ../setup/python2/main.py:1523 ../setup/python2/main.py:1618 #: ../setup/python2/setup.ui.h:91 ../setup/python3/main.py:1517 #: ../setup/python3/main.py:1612 ../setup/python3/setup.ui.h:91 msgid "_OK" msgstr "_OK" #: ../setup/python2/main.py:1534 ../setup/python3/main.py:1528 msgid "Your choosed file is not correct." msgstr "" #: ../setup/python2/main.py:1563 ../setup/python3/main.py:1557 msgid "You cannot delete the system dictionary." msgstr "" #: ../setup/python2/main.py:1586 ../setup/python3/main.py:1580 msgid "Your file is not good." msgstr "" #: ../setup/python2/main.py:1616 ../setup/python3/main.py:1610 msgid "View Dictionary File" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/main.py:1787 ../setup/python3/main.py:1781 msgid "Please press a key (or a key combination)" msgstr "Stisknฤ›te prosรญm klรกvesu (ฤi kombinaci klรกves)." #: ../setup/python2/main.py:1788 ../setup/python3/main.py:1782 msgid "The dialog will be closed when the key is released" msgstr "" #: ../setup/python2/main.py:1808 ../setup/python2/main.py:1829 #: ../setup/python3/main.py:1802 ../setup/python3/main.py:1823 msgid "Invalid keysym" msgstr "" #: ../setup/python2/main.py:1809 ../setup/python2/main.py:1830 #: ../setup/python3/main.py:1803 ../setup/python3/main.py:1824 msgid "This keysym is not valid" msgstr "" #: ../setup/python2/setup.ui.h:6 ../setup/python3/setup.ui.h:6 msgid "NICOLA-J" msgstr "" #: ../setup/python2/setup.ui.h:7 ../setup/python3/setup.ui.h:7 msgid "NICOLA-A" msgstr "" #: ../setup/python2/setup.ui.h:8 ../setup/python3/setup.ui.h:8 msgid "NICOLA-F" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/setup.ui.h:9 ../setup/python3/setup.ui.h:9 msgid "None" msgstr "ลฝรกdnรฝ" #: ../setup/python2/setup.ui.h:10 ../setup/python3/setup.ui.h:10 msgid "FMV KB231 key extension" msgstr "" #: ../setup/python2/setup.ui.h:11 ../setup/python3/setup.ui.h:11 msgid "FMV KB611 key extension" msgstr "" #: ../setup/python2/setup.ui.h:19 ../setup/python3/setup.ui.h:19 msgid "Keep numpad codes" msgstr "" #: ../setup/python2/setup.ui.h:20 ../setup/python3/setup.ui.h:20 msgid "Convert characters" msgstr "" #: ../setup/python2/setup.ui.h:21 ../setup/python3/setup.ui.h:21 msgid "Do nothing" msgstr "" #: ../setup/python2/setup.ui.h:22 ../setup/python3/setup.ui.h:22 msgid "Automatically convert" msgstr "" #: ../setup/python2/setup.ui.h:23 ../setup/python3/setup.ui.h:23 msgid "Automatically commit" msgstr "" # auto translated by TM merge from project: FreeIPA, version: ipa-4-5, DocId: po/ipa #: ../setup/python2/setup.ui.h:24 ../setup/python3/setup.ui.h:24 msgid "Clear" msgstr "Vymazat" #: ../setup/python2/setup.ui.h:25 ../setup/python3/setup.ui.h:25 msgid "Commit" msgstr "" #: ../setup/python2/setup.ui.h:26 ../setup/python3/setup.ui.h:26 msgid "Hold" msgstr "" #: ../setup/python2/setup.ui.h:28 ../setup/python3/setup.ui.h:28 msgid "ATOK" msgstr "" #: ../setup/python2/setup.ui.h:29 ../setup/python3/setup.ui.h:29 msgid "Wnn" msgstr "" #: ../setup/python2/setup.ui.h:30 ../setup/python3/setup.ui.h:30 msgid "Setup - IBus-Anthy" msgstr "" #: ../setup/python2/setup.ui.h:31 ../setup/python3/setup.ui.h:31 msgid "_Input Mode:" msgstr "" #: ../setup/python2/setup.ui.h:32 ../setup/python3/setup.ui.h:32 msgid "_Typing Method:" msgstr "" #: ../setup/python2/setup.ui.h:33 ../setup/python3/setup.ui.h:33 msgid "Conversion _Mode:" msgstr "" #: ../setup/python2/setup.ui.h:34 ../setup/python3/setup.ui.h:34 msgid "Initial Setting" msgstr "" #: ../setup/python2/setup.ui.h:35 ../setup/python3/setup.ui.h:35 msgid "Menu Visibility on Status Icon" msgstr "" #: ../setup/python2/setup.ui.h:37 ../setup/python3/setup.ui.h:37 msgid "_Period Style:" msgstr "" #: ../setup/python2/setup.ui.h:38 ../setup/python3/setup.ui.h:38 msgid "Symbo_l Style:" msgstr "" #: ../setup/python2/setup.ui.h:39 ../setup/python3/setup.ui.h:39 msgid "Numpad _Key Type:" msgstr "" #: ../setup/python2/setup.ui.h:40 ../setup/python3/setup.ui.h:40 msgid "_Behavior on Period:" msgstr "" #: ../setup/python2/setup.ui.h:41 ../setup/python3/setup.ui.h:41 msgid "Behavior on _Focus Out:" msgstr "" #: ../setup/python2/setup.ui.h:42 ../setup/python3/setup.ui.h:42 msgid "Behavior" msgstr "" #: ../setup/python2/setup.ui.h:43 ../setup/python3/setup.ui.h:43 msgid "Candidate _Window Page Size:" msgstr "" #: ../setup/python2/setup.ui.h:44 ../setup/python3/setup.ui.h:44 msgid "Convert _symbols with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:45 ../setup/python3/setup.ui.h:45 msgid "Convert _numbers with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:46 ../setup/python3/setup.ui.h:46 msgid "Con_vert spaces with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:47 ../setup/python3/setup.ui.h:47 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" # auto translated by TM merge from project: ibus-libpinyin, version: master, DocId: ibus-libpinyin #: ../setup/python2/setup.ui.h:48 ../setup/python3/setup.ui.h:48 msgid "Other" msgstr "Jinรฉ" #: ../setup/python2/setup.ui.h:49 ../setup/python3/setup.ui.h:49 msgid "Conversion" msgstr "" #: ../setup/python2/setup.ui.h:50 ../setup/python3/setup.ui.h:50 msgid "_Shortcut Type:" msgstr "" #: ../setup/python2/setup.ui.h:51 ../setup/python3/setup.ui.h:51 msgid "De_fault" msgstr "" # auto translated by TM merge from project: ibus-libpinyin, version: master, DocId: ibus-libpinyin #: ../setup/python2/setup.ui.h:52 ../setup/python3/setup.ui.h:52 msgid "_Edit" msgstr "_Upravit" #: ../setup/python2/setup.ui.h:53 ../setup/python3/setup.ui.h:53 msgid "Key Binding" msgstr "" #: ../setup/python2/setup.ui.h:55 ../setup/python3/setup.ui.h:55 msgid "Romaji" msgstr "" #: ../setup/python2/setup.ui.h:57 ../setup/python3/setup.ui.h:57 msgid "Kana" msgstr "" #: ../setup/python2/setup.ui.h:58 ../setup/python3/setup.ui.h:58 msgid "Keyboad _layout:" msgstr "" #: ../setup/python2/setup.ui.h:59 ../setup/python3/setup.ui.h:59 msgid "Keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:60 ../setup/python3/setup.ui.h:60 msgid "Typing Method" msgstr "" #: ../setup/python2/setup.ui.h:61 ../setup/python3/setup.ui.h:61 msgid "_Left Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:62 ../setup/python3/setup.ui.h:62 msgid "Right _Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:63 ../setup/python3/setup.ui.h:63 msgid "Adjust _input method layout to system keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:64 ../setup/python3/setup.ui.h:64 msgid "Adjust IM layout to XKB layout" msgstr "" #: ../setup/python2/setup.ui.h:65 ../setup/python3/setup.ui.h:65 msgid "Input _Method Layout:" msgstr "" #: ../setup/python2/setup.ui.h:66 ../setup/python3/setup.ui.h:66 msgid "Restart IBus when you change the keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:67 ../setup/python3/setup.ui.h:67 msgid "Restart IBus when you change XKB" msgstr "" #: ../setup/python2/setup.ui.h:68 ../setup/python3/setup.ui.h:68 msgid "_Additional Key Arrangement:" msgstr "" #: ../setup/python2/setup.ui.h:69 ../setup/python3/setup.ui.h:69 msgid "" "'~', '『', '¢', '£' and so on can be output with " "Thumb Shift key" msgstr "" #: ../setup/python2/setup.ui.h:70 ../setup/python3/setup.ui.h:70 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" #: ../setup/python2/setup.ui.h:71 ../setup/python3/setup.ui.h:71 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" #: ../setup/python2/setup.ui.h:72 ../setup/python3/setup.ui.h:72 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" #: ../setup/python2/setup.ui.h:73 ../setup/python3/setup.ui.h:73 msgid "Seion + Shift can output Handakuon" msgstr "" #: ../setup/python2/setup.ui.h:74 ../setup/python3/setup.ui.h:74 msgid "Thumb _Shift Key Table:" msgstr "" #: ../setup/python2/setup.ui.h:75 ../setup/python3/setup.ui.h:75 msgid "Thumb Shift Layout" msgstr "" #: ../setup/python2/setup.ui.h:76 ../setup/python3/setup.ui.h:76 msgid "Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:77 ../setup/python3/setup.ui.h:77 msgid "_Edit Dictionary Command:" msgstr "" #: ../setup/python2/setup.ui.h:78 ../setup/python3/setup.ui.h:78 msgid "_Add Word Command:" msgstr "" #: ../setup/python2/setup.ui.h:79 ../setup/python3/setup.ui.h:79 msgid "Default Dictionary Configuration" msgstr "" # auto translated by TM merge from project: virt-viewer, version: master, DocId: virt-viewer #: ../setup/python2/setup.ui.h:80 ../setup/python3/setup.ui.h:80 msgid "_View" msgstr "_Zobrazit" # auto translated by TM merge from project: system-config-printer, version: master, DocId: system-config-printer #: ../setup/python2/setup.ui.h:81 ../setup/python3/setup.ui.h:81 msgid "_Add" msgstr "Pล™_idat" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/setup.ui.h:82 ../setup/python3/setup.ui.h:82 msgid "_Delete" msgstr "O_dstranit" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/setup.ui.h:83 ../setup/python3/setup.ui.h:83 msgid "_Up" msgstr "_Vรฝลกe" #: ../setup/python2/setup.ui.h:84 ../setup/python3/setup.ui.h:84 msgid "You can change the order on language bar" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/setup.ui.h:85 ../setup/python3/setup.ui.h:85 msgid "_Down" msgstr "_Nรญลพe" #: ../setup/python2/setup.ui.h:86 ../setup/python3/setup.ui.h:86 msgid "Extended Dictionaries" msgstr "" # auto translated by TM merge from project: ibus-libpinyin, version: master, DocId: ibus-libpinyin #: ../setup/python2/setup.ui.h:87 ../setup/python3/setup.ui.h:87 msgid "Dictionary" msgstr "Slovnรญk" #: ../setup/python2/setup.ui.h:88 ../setup/python3/setup.ui.h:88 msgid "About" msgstr "" # auto translated by TM merge from project: system-config-printer, version: master, DocId: system-config-printer #: ../setup/python2/setup.ui.h:89 ../setup/python3/setup.ui.h:89 msgid "_Apply" msgstr "_Pouลพรญt" #: ../setup/python2/setup.ui.h:92 ../setup/python3/setup.ui.h:92 msgid "Edit Shortcut" msgstr "" #: ../setup/python2/setup.ui.h:93 ../setup/python3/setup.ui.h:93 msgid "Key Code:" msgstr "" #: ../setup/python2/setup.ui.h:94 ../setup/python3/setup.ui.h:94 msgid "Modifier:" msgstr "" #: ../setup/python2/setup.ui.h:95 ../setup/python3/setup.ui.h:95 msgid "A_lternate" msgstr "" #: ../setup/python2/setup.ui.h:96 ../setup/python3/setup.ui.h:96 msgid "Co_ntrol" msgstr "" #: ../setup/python2/setup.ui.h:97 ../setup/python3/setup.ui.h:97 msgid "_Shift" msgstr "" # auto translated by TM merge from project: system-config-printer, version: master, DocId: system-config-printer #: ../setup/python2/setup.ui.h:98 ../setup/python3/setup.ui.h:98 msgid "_Refresh" msgstr "_Obnovit" #: ../setup/python2/setup.ui.h:99 ../setup/python3/setup.ui.h:99 msgid "_Input Characters" msgstr "" #: ../setup/python2/setup.ui.h:100 ../setup/python3/setup.ui.h:100 msgid "_Output Characters" msgstr "" #: ../setup/python2/setup.ui.h:101 ../setup/python3/setup.ui.h:101 msgid "_Left Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:102 ../setup/python3/setup.ui.h:102 msgid "_Right Thumb Shift" msgstr "" # auto translated by TM merge from project: ibus, version: head, DocId: ibus10 #: ../setup/python2/setup.ui.h:103 ../setup/python3/setup.ui.h:103 msgid "_Remove" msgstr "_Odebrat" # auto translated by TM merge from project: virt-viewer, version: master, DocId: virt-viewer #: ../setup/python2/setup.ui.h:104 ../setup/python3/setup.ui.h:104 msgid "_Close" msgstr "Z_avล™รญt" #: ../setup/python2/setup.ui.h:105 ../setup/python3/setup.ui.h:105 msgid "_Short Label:" msgstr "" #: ../setup/python2/setup.ui.h:106 ../setup/python3/setup.ui.h:106 msgid "_Description:" msgstr "" #: ../setup/python2/setup.ui.h:107 ../setup/python3/setup.ui.h:107 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:108 ../setup/python3/setup.ui.h:108 msgid "_Embed your dictionary in the system dictionary" msgstr "" #: ../setup/python2/setup.ui.h:109 ../setup/python3/setup.ui.h:109 msgid "Enable the _reverse conversion" msgstr "" #: ../setup/python2/setup.ui.h:110 ../setup/python3/setup.ui.h:110 msgid "The Anthy engine for the IBus input platform" msgstr "" # auto translated by TM merge from project: ibus-input-pad, version: head, DocId: ibus-input-pad #: ../setup/python2/setup.ui.h:111 ../setup/python3/setup.ui.h:111 msgid "translator_credits" msgstr "zรกsluha pล™ekladatelลฏ" ibus-anthy-1.5.11/po/el.po000066400000000000000000000665271346647371500153000ustar00rootroot00000000000000# Greek translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2014 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # dm3k , 2012 # dm3k , 2012 msgid "" msgstr "" "Project-Id-Version: IBus-Anthy\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2017-03-17 13:26+0900\n" "PO-Revision-Date: 2014-02-18 08:42+0000\n" "Last-Translator: dm3k \n" "Language-Team: Greek\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ibus-anthy.appdata.xml.in.h:1 msgid "Japanese input method" msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:2 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:3 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" #: ../engine/python2/default.xml.in.in.h:1 #: ../engine/python3/default.xml.in.in.h:1 msgid "Anthy Input Method" msgstr "" #: ../engine/python2/engine.py:207 ../engine/python3/engine.py:208 msgid "" "Could not enable Anthy.\n" "The end of the content of the file .anthy/last-record2_default.utf8 in your " "home directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" #: ../engine/python2/engine.py:255 ../engine/python3/engine.py:256 #: ../setup/python2/main.py:416 ../setup/python3/main.py:421 msgid "Preferences - Anthy" msgstr "ฮ ฯฮฟฯ„ฮนฮผฮฎฯƒฮตฮนฯ‚ - Anthy " #: ../engine/python2/engine.py:257 ../engine/python3/engine.py:258 msgid "Configure Anthy" msgstr "ฮกฯ…ฮธฮผฮฏฯƒฮตฮนฯ‚ Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: ../engine/python2/engine.py:294 ../engine/python2/engine.py:382 #: ../engine/python2/engine.py:449 ../engine/python2/engine.py:525 #: ../engine/python2/engine.py:856 ../engine/python2/engine.py:884 #: ../engine/python2/engine.py:908 ../engine/python2/engine.py:934 #: ../engine/python2/engine.py:996 ../engine/python3/engine.py:295 #: ../engine/python3/engine.py:383 ../engine/python3/engine.py:450 #: ../engine/python3/engine.py:526 ../engine/python3/engine.py:851 #: ../engine/python3/engine.py:879 ../engine/python3/engine.py:903 #: ../engine/python3/engine.py:929 ../engine/python3/engine.py:991 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "" #: ../engine/python2/engine.py:295 ../engine/python2/engine.py:857 #: ../engine/python3/engine.py:296 ../engine/python3/engine.py:852 #: ../setup/python2/main.py:401 ../setup/python3/main.py:406 msgid "Input mode" msgstr "" #: ../engine/python2/engine.py:301 ../engine/python3/engine.py:302 msgid "Switch input mode" msgstr "ฮ‘ฮปฮปฮฑฮณฮฎ ฮผฮตฮธฯŒฮดฮฟฯ… ฮตฮนฯƒฮฑฮณฯ‰ฮณฮฎฯ‚" #: ../engine/python2/engine.py:311 ../engine/python3/engine.py:312 #: ../setup/python2/setup.ui.h:1 ../setup/python3/setup.ui.h:1 msgid "Hiragana" msgstr "ฮงฮนฯฮฑฮณฮบฮฌฮฝฮฑ" #: ../engine/python2/engine.py:320 ../engine/python3/engine.py:321 #: ../setup/python2/setup.ui.h:2 ../setup/python3/setup.ui.h:2 msgid "Katakana" msgstr "ฮšฮฑฯ„ฮฑฮบฮฌฮฝฮฑ" #: ../engine/python2/engine.py:329 ../engine/python3/engine.py:330 #: ../setup/python2/setup.ui.h:3 ../setup/python3/setup.ui.h:3 msgid "Halfwidth Katakana" msgstr "" #: ../engine/python2/engine.py:338 ../engine/python3/engine.py:339 #: ../setup/python2/setup.ui.h:4 ../setup/python3/setup.ui.h:4 msgid "Latin" msgstr "ฮ›ฮฑฯ„ฮนฮฝฮนฮบฮฟฮฏ ฯ‡ฮฑฯฮฑฮบฯ„ฮฎฯฮตฯ‚" #: ../engine/python2/engine.py:347 ../engine/python3/engine.py:348 #: ../setup/python2/setup.ui.h:5 ../setup/python3/setup.ui.h:5 msgid "Wide Latin" msgstr "ฮ›ฮฑฯ„ฮนฮฝฮนฮบฮฟฮฏ ฯ€ฮปฮฎฯฮฟฯ…ฯ‚ ฯ€ฮปฮฌฯ„ฮฟฯ…ฯ‚" #: ../engine/python2/engine.py:383 ../engine/python2/engine.py:885 #: ../engine/python2/engine.py:909 ../engine/python3/engine.py:384 #: ../engine/python3/engine.py:880 ../engine/python3/engine.py:904 #: ../setup/python2/main.py:404 ../setup/python3/main.py:409 msgid "Typing method" msgstr "" #: ../engine/python2/engine.py:389 ../engine/python3/engine.py:390 msgid "Switch typing method" msgstr "" #: ../engine/python2/engine.py:399 ../engine/python3/engine.py:400 #: ../setup/python2/setup.ui.h:12 ../setup/python3/setup.ui.h:12 msgid "Romaji" msgstr "ฮกฮฟฮผฮฌฯ„ฮถฮน" #: ../engine/python2/engine.py:408 ../engine/python3/engine.py:409 #: ../setup/python2/setup.ui.h:13 ../setup/python3/setup.ui.h:13 msgid "Kana" msgstr "ฮšฮฌฮฝฮฑ" #: ../engine/python2/engine.py:417 ../engine/python3/engine.py:418 #: ../setup/python2/setup.ui.h:14 ../setup/python3/setup.ui.h:14 msgid "Thumb shift" msgstr "ฮœฮญฮธฮฟฮดฮฟฯ‚ thumb shift" #: ../engine/python2/engine.py:450 ../engine/python2/engine.py:935 #: ../engine/python3/engine.py:451 ../engine/python3/engine.py:930 #: ../setup/python2/main.py:407 ../setup/python3/main.py:412 msgid "Segment mode" msgstr "" #: ../engine/python2/engine.py:456 ../engine/python3/engine.py:457 msgid "Switch conversion mode" msgstr "ฮ‘ฮปฮปฮฑฮณฮฎ ฮผฮตฮธฯŒฮดฮฟฯ… ฮผฮตฯ„ฮฑฯ„ฯฮฟฯ€ฮฎฯ‚" #: ../engine/python2/engine.py:466 ../engine/python3/engine.py:467 #: ../setup/python2/setup.ui.h:15 ../setup/python3/setup.ui.h:15 msgid "Multiple segment" msgstr "ฮ ฮฟฮปฮปฮฑฯ€ฮปฮฌ ฯ„ฮผฮฎฮผฮฑฯ„ฮฑ" #: ../engine/python2/engine.py:475 ../engine/python3/engine.py:476 #: ../setup/python2/setup.ui.h:16 ../setup/python3/setup.ui.h:16 msgid "Single segment" msgstr "ฮœฮฟฮฝฮฑฮดฮนฮบฯŒ ฯ„ฮผฮฎฮผฮฑ" #: ../engine/python2/engine.py:484 ../engine/python3/engine.py:485 #: ../setup/python2/setup.ui.h:17 ../setup/python3/setup.ui.h:17 msgid "Immediate conversion (multiple segment)" msgstr "" #: ../engine/python2/engine.py:493 ../engine/python3/engine.py:494 #: ../setup/python2/setup.ui.h:18 ../setup/python3/setup.ui.h:18 msgid "Immediate conversion (single segment)" msgstr "" #: ../engine/python2/engine.py:526 ../engine/python2/engine.py:997 #: ../engine/python3/engine.py:527 ../engine/python3/engine.py:992 #: ../setup/python2/main.py:410 ../setup/python3/main.py:415 msgid "Dictionary mode" msgstr "" #: ../engine/python2/engine.py:532 ../engine/python3/engine.py:533 msgid "Switch dictionary" msgstr "" #: ../engine/python2/engine.py:615 ../engine/python3/engine.py:615 #: ../setup/python2/main.py:413 ../setup/python3/main.py:418 msgid "Dictionary - Anthy" msgstr "ฮ›ฮตฮพฮนฮบฯŒ - Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: ../engine/python2/engine.py:621 ../engine/python3/engine.py:620 msgid "Dic" msgstr "ฮ›ฮพฮบ" #: ../engine/python2/engine.py:628 ../engine/python3/engine.py:627 msgid "Configure dictionaries" msgstr "ฮกฯ…ฮธฮผฮฏฯƒฮตฮนฯ‚ ฮปฮตฮพฮนฮบฯŽฮฝ" #: ../engine/python2/engine.py:638 ../engine/python3/engine.py:637 msgid "Edit dictionaries" msgstr "ฮ•ฯ€ฮตฮพฮตฯฮณฮฑฯƒฮฏฮฑ ฮปฮตฮพฮนฮบฯŽฮฝ" #: ../engine/python2/engine.py:640 ../engine/python3/engine.py:639 msgid "Launch the dictionary tool" msgstr "ฮ•ฮบฮบฮฏฮฝฮทฯƒฮท ฮตฯฮณฮฑฮปฮตฮฏฮฟฯ… ฮปฮตฮพฮนฮบฮฟฯ" #: ../engine/python2/engine.py:647 ../engine/python3/engine.py:646 msgid "Add words" msgstr "ฮ ฯฮฟฯƒฮธฮฎฮบฮท ฮปฮญฮพฮตฯ‰ฮฝ" #: ../engine/python2/engine.py:649 ../engine/python3/engine.py:648 msgid "Add words to the dictionary" msgstr "" #: ../setup/python2/anthyprefs.py.in:1105 ../setup/python2/setup.ui.h:36 #: ../setup/python3/anthyprefs.py.in:1098 ../setup/python3/setup.ui.h:36 msgid "General" msgstr "ฮ“ฮตฮฝฮนฮบฯŒ" #: ../setup/python2/anthyprefs.py.in:1116 #: ../setup/python3/anthyprefs.py.in:1109 msgid "Zip Code Conversion" msgstr "ฮœฮตฯ„ฮฑฯ„ฯฮฟฯ€ฮฎ ฯ„ฮฑฯ‡ฯ…ฮดฯฮฟฮผฮนฮบฯŽฮฝ ฮบฯ‰ฮดฮนฮบฯŽฮฝ" #: ../setup/python2/anthyprefs.py.in:1127 #: ../setup/python3/anthyprefs.py.in:1120 msgid "Symbol" msgstr "ฮฃฯฮผฮฒฮฟฮปฮฑ" #: ../setup/python2/anthyprefs.py.in:1138 #: ../setup/python3/anthyprefs.py.in:1131 msgid "Old Character Style" msgstr "ฮ ฮฑฮปฮนฮญฯ‚ ฮผฮฟฯฯ†ฮญฯ‚ ฯ‡ฮฑฯฮฑฮบฯ„ฮฎฯฯ‰ฮฝ" #: ../setup/python2/anthyprefs.py.in:1148 #: ../setup/python3/anthyprefs.py.in:1141 msgid "Era" msgstr "" #: ../setup/python2/anthyprefs.py.in:1158 #: ../setup/python3/anthyprefs.py.in:1151 msgid "Emoji" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:1 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:1 msgid "IBus Anthy Setup" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:2 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:2 msgid "Set up IBus Anthy engine" msgstr "" #. self.__run_message_dialog needs self.__builder. #: ../setup/python2/main.py:133 ../setup/python3/main.py:136 msgid "ibus is not running." msgstr "" #: ../setup/python2/main.py:188 ../setup/python3/main.py:191 msgid "Menu label" msgstr "" #: ../setup/python2/main.py:207 ../setup/python3/main.py:210 msgid "Command" msgstr "ฮ•ฮฝฯ„ฮฟฮปฮฎ" #: ../setup/python2/main.py:211 ../setup/python3/main.py:214 msgid "Shortcut" msgstr "ฮฃฯ…ฮฝฯ„ฯŒฮผฮตฯ…ฯƒฮท" #: ../setup/python2/main.py:256 ../setup/python3/main.py:259 msgid "Description" msgstr "ฮ ฮตฯฮนฮณฯฮฑฯ†ฮฎ " #. Translators: "Embd" is an abbreviation of "embedded". #: ../setup/python2/main.py:264 ../setup/python3/main.py:267 msgid "Embd" msgstr "ฮ•ฮฝฯƒฮผ." #. Translators: "Sgl" is an abbreviation of "single". #: ../setup/python2/main.py:272 ../setup/python3/main.py:275 msgid "Sgl" msgstr "ฮœฮฝ." #: ../setup/python2/main.py:447 ../setup/python2/main.py:483 #: ../setup/python3/main.py:452 ../setup/python3/main.py:488 msgid "Input Chars" msgstr "ฮ•ฮนฯƒ. ฮงฮฑฯฮฑฮบฯ„ฮฎฯฮตฯ‚" #: ../setup/python2/main.py:449 ../setup/python2/main.py:485 #: ../setup/python3/main.py:454 ../setup/python3/main.py:490 msgid "Output Chars" msgstr "ฮ•ฮพ. ฮงฮฑฯฮฑฮบฯ„ฮฎฯฮตฯ‚" #: ../setup/python2/main.py:531 ../setup/python3/main.py:536 msgid "Input" msgstr "ฮ•ฮนฯƒฮฑฮณฯ‰ฮณฮฎ" #: ../setup/python2/main.py:533 ../setup/python3/main.py:538 msgid "Single" msgstr "ฮœฮฟฮฝฯŒ" #: ../setup/python2/main.py:535 ../setup/python3/main.py:540 msgid "Left" msgstr "ฮ‘ฯฮนฯƒฯ„ฮตฯฮฌ" #: ../setup/python2/main.py:537 ../setup/python3/main.py:542 msgid "Right" msgstr "ฮ”ฮตฮพฮนฮฌ" #: ../setup/python2/main.py:619 ../setup/python3/main.py:624 msgid "Customize Romaji Key Table" msgstr "ฮ ฯฮฟฯƒฮฑฯฮผฮฟฮณฮฎ ฯ€ฮปฮทฮบฯ„ฯฮฟฮปฮฟฮณฮฏฮฟฯ… ฮกฮฟฮผฮฌฯ„ฮถฮน" #: ../setup/python2/main.py:620 ../setup/python2/setup.ui.h:54 #: ../setup/python3/main.py:625 ../setup/python3/setup.ui.h:54 msgid "_Romaji Key Table:" msgstr "ฮ ฮฏฮฝฮฑฮบฮฑฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ _ฮกฮฟฮผฮฌฯ„ฮถฮน" #: ../setup/python2/main.py:621 ../setup/python2/main.py:627 #: ../setup/python3/main.py:626 ../setup/python3/main.py:632 msgid "_Output Chars" msgstr "ฮ‘ฯ€ฮฟฯ„ฮญฮปฮตฯƒฮผฮฑ _ฮตฮพฯŒฮดฮฟฯ…" #: ../setup/python2/main.py:622 ../setup/python2/main.py:1122 #: ../setup/python2/main.py:1270 ../setup/python2/setup.ui.h:27 #: ../setup/python3/main.py:627 ../setup/python3/main.py:1116 #: ../setup/python3/main.py:1264 ../setup/python3/setup.ui.h:27 msgid "Default" msgstr "ฮ ฯฮฟฮตฯ€ฮนฮปฮฟฮณฮฎ" #: ../setup/python2/main.py:625 ../setup/python3/main.py:630 msgid "Customize Kana Key Table" msgstr "ฮ ฯฮฟฯƒฮฑฯฮผฮฟฮณฮฎ ฯ€ฮปฮทฮบฯ„ฯฮฟฮปฮฟฮณฮฏฮฟฯ… ฮšฮฌฮฝฮฑ" #: ../setup/python2/main.py:626 ../setup/python2/setup.ui.h:56 #: ../setup/python3/main.py:631 ../setup/python3/setup.ui.h:56 msgid "_Kana Key Table:" msgstr "ฮ ฮฏฮฝฮฑฮบฮฑฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ _ฮšฮฌฮฝฮฑ" #: ../setup/python2/main.py:628 ../setup/python3/main.py:633 msgid "Japanese Keyboard Layout" msgstr "" #: ../setup/python2/main.py:629 ../setup/python3/main.py:634 msgid "U.S. Keyboard Layout" msgstr "" #: ../setup/python2/main.py:632 ../setup/python3/main.py:637 msgid "Customize Thumb Shift Key Table" msgstr "ฮ ฯฮฟฯƒฮฑฯฮผฮฟฮณฮฎ ฯ€ฮปฮทฮบฯ„ฯฮฟฮปฮฟฮณฮฏฮฟฯ… Thumb Shift" #: ../setup/python2/main.py:633 ../setup/python3/main.py:638 msgid "_Thumb Shift Key Table:" msgstr "ฮ ฮฏฮฝฮฑฮบฮฑฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ _Thumb Shift" #: ../setup/python2/main.py:634 ../setup/python3/main.py:639 msgid "Single _Output Chars" msgstr "ฮœฮฟฮฝฮฟฮฏ ฯ‡ฮฑฯฮฑฮบฯ„ฮฎฯฮตฯ‚ _ฮ•ฮพฯŒฮดฮฟฯ…" #: ../setup/python2/main.py:635 ../setup/python3/main.py:640 msgid "Base" msgstr "ฮ’ฮฌฯƒฮท" #: ../setup/python2/main.py:636 ../setup/python3/main.py:641 msgid "NICOLA-J key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ NICOLA-J" #: ../setup/python2/main.py:637 ../setup/python3/main.py:642 msgid "NICOLA-A key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ NICOLA-A" #: ../setup/python2/main.py:638 ../setup/python3/main.py:643 msgid "NICOLA-F key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ NICOLA-F" #: ../setup/python2/main.py:639 ../setup/python3/main.py:644 msgid "FMV KB231-J key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ FMV KB231-J" #: ../setup/python2/main.py:640 ../setup/python3/main.py:645 msgid "FMV KB231-A key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ FMV KB231-A" #: ../setup/python2/main.py:641 ../setup/python3/main.py:646 msgid "FMV KB231-F key extension" msgstr "ฮ•ฯ€ฮตฮบฯ„ฮฌฯƒฮตฮนฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ FMV KB231-F" #: ../setup/python2/main.py:642 ../setup/python3/main.py:647 msgid "FMV KB611-J key extension" msgstr "" #: ../setup/python2/main.py:643 ../setup/python3/main.py:648 msgid "FMV KB611-A key extension" msgstr "" #: ../setup/python2/main.py:644 ../setup/python3/main.py:649 msgid "FMV KB611-F key extension" msgstr "" #: ../setup/python2/main.py:788 ../setup/python3/main.py:793 msgid "Your choosed file has already been added: " msgstr "" #: ../setup/python2/main.py:792 ../setup/python3/main.py:797 msgid "The file you have chosen does not exist: " msgstr "" #: ../setup/python2/main.py:796 ../setup/python3/main.py:801 msgid "Your choosed file is a directory: " msgstr "" #: ../setup/python2/main.py:800 ../setup/python3/main.py:805 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" #: ../setup/python2/main.py:807 ../setup/python3/main.py:812 msgid "Your file path is not good: " msgstr "" #: ../setup/python2/main.py:986 ../setup/python3/main.py:989 msgid "The engine xml file does not exist: " msgstr "" #: ../setup/python2/main.py:1102 ../setup/python3/main.py:1096 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" #: ../setup/python2/main.py:1231 ../setup/python3/main.py:1225 msgid "Confirmation" msgstr "" #: ../setup/python2/main.py:1233 ../setup/python3/main.py:1227 msgid "You are about to close the setup dialog, is that OK?" msgstr "" #: ../setup/python2/main.py:1248 ../setup/python3/main.py:1242 msgid "Notice!" msgstr "" #: ../setup/python2/main.py:1250 ../setup/python3/main.py:1244 msgid "" "You are about to close the setup dialog without saving your changes, is that " "OK?" msgstr "" #: ../setup/python2/main.py:1371 ../setup/python3/main.py:1365 msgid "Please specify Input Chars" msgstr "" #: ../setup/python2/main.py:1374 ../setup/python3/main.py:1368 msgid "Please specify Output Chars" msgstr "" #: ../setup/python2/main.py:1377 ../setup/python3/main.py:1371 msgid "Please specify Left Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1380 ../setup/python3/main.py:1374 msgid "Please specify Right Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1393 ../setup/python2/main.py:1437 #: ../setup/python3/main.py:1387 ../setup/python3/main.py:1431 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" #: ../setup/python2/main.py:1503 ../setup/python2/main.py:1590 #: ../setup/python3/main.py:1497 ../setup/python3/main.py:1584 msgid "Your file does not exist: " msgstr "" #: ../setup/python2/main.py:1513 ../setup/python3/main.py:1507 msgid "Open Dictionary File" msgstr "" #: ../setup/python2/main.py:1516 ../setup/python2/main.py:1522 #: ../setup/python2/setup.ui.h:90 ../setup/python3/main.py:1510 #: ../setup/python3/main.py:1516 ../setup/python3/setup.ui.h:90 msgid "_Cancel" msgstr "_ฮ‘ฮบฯฯฯ‰ฯƒฮท" #: ../setup/python2/main.py:1517 ../setup/python3/main.py:1511 msgid "_Open" msgstr "ฮ†ฮฝ_ฮฟฮนฮณฮผฮฑ" #: ../setup/python2/main.py:1520 ../setup/python3/main.py:1514 msgid "Edit Dictionary File" msgstr "" #: ../setup/python2/main.py:1523 ../setup/python2/main.py:1618 #: ../setup/python2/setup.ui.h:91 ../setup/python3/main.py:1517 #: ../setup/python3/main.py:1612 ../setup/python3/setup.ui.h:91 msgid "_OK" msgstr "_ฮ•ฮฝฯ„ฮฌฮพฮตฮน" #: ../setup/python2/main.py:1534 ../setup/python3/main.py:1528 msgid "Your choosed file is not correct." msgstr "" #: ../setup/python2/main.py:1563 ../setup/python3/main.py:1557 msgid "You cannot delete the system dictionary." msgstr "" #: ../setup/python2/main.py:1586 ../setup/python3/main.py:1580 msgid "Your file is not good." msgstr "" #: ../setup/python2/main.py:1616 ../setup/python3/main.py:1610 msgid "View Dictionary File" msgstr "" #: ../setup/python2/main.py:1787 ../setup/python3/main.py:1781 msgid "Please press a key (or a key combination)" msgstr "" #: ../setup/python2/main.py:1788 ../setup/python3/main.py:1782 msgid "The dialog will be closed when the key is released" msgstr "" #: ../setup/python2/main.py:1808 ../setup/python2/main.py:1829 #: ../setup/python3/main.py:1802 ../setup/python3/main.py:1823 msgid "Invalid keysym" msgstr "" #: ../setup/python2/main.py:1809 ../setup/python2/main.py:1830 #: ../setup/python3/main.py:1803 ../setup/python3/main.py:1824 msgid "This keysym is not valid" msgstr "" #: ../setup/python2/setup.ui.h:6 ../setup/python3/setup.ui.h:6 msgid "NICOLA-J" msgstr "" #: ../setup/python2/setup.ui.h:7 ../setup/python3/setup.ui.h:7 msgid "NICOLA-A" msgstr "" #: ../setup/python2/setup.ui.h:8 ../setup/python3/setup.ui.h:8 msgid "NICOLA-F" msgstr "" #: ../setup/python2/setup.ui.h:9 ../setup/python3/setup.ui.h:9 msgid "None" msgstr "" #: ../setup/python2/setup.ui.h:10 ../setup/python3/setup.ui.h:10 msgid "FMV KB231 key extension" msgstr "" #: ../setup/python2/setup.ui.h:11 ../setup/python3/setup.ui.h:11 msgid "FMV KB611 key extension" msgstr "" #: ../setup/python2/setup.ui.h:19 ../setup/python3/setup.ui.h:19 msgid "Keep numpad codes" msgstr "" #: ../setup/python2/setup.ui.h:20 ../setup/python3/setup.ui.h:20 msgid "Convert characters" msgstr "" #: ../setup/python2/setup.ui.h:21 ../setup/python3/setup.ui.h:21 msgid "Do nothing" msgstr "" #: ../setup/python2/setup.ui.h:22 ../setup/python3/setup.ui.h:22 msgid "Automatically convert" msgstr "" #: ../setup/python2/setup.ui.h:23 ../setup/python3/setup.ui.h:23 msgid "Automatically commit" msgstr "" #: ../setup/python2/setup.ui.h:24 ../setup/python3/setup.ui.h:24 msgid "Clear" msgstr "" #: ../setup/python2/setup.ui.h:25 ../setup/python3/setup.ui.h:25 msgid "Commit" msgstr "" #: ../setup/python2/setup.ui.h:26 ../setup/python3/setup.ui.h:26 msgid "Hold" msgstr "" #: ../setup/python2/setup.ui.h:28 ../setup/python3/setup.ui.h:28 msgid "ATOK" msgstr "" #: ../setup/python2/setup.ui.h:29 ../setup/python3/setup.ui.h:29 msgid "Wnn" msgstr "" #: ../setup/python2/setup.ui.h:30 ../setup/python3/setup.ui.h:30 msgid "Setup - IBus-Anthy" msgstr "ฮกฯฮธฮผฮนฯƒฮท - IBus-Anthy" #: ../setup/python2/setup.ui.h:31 ../setup/python3/setup.ui.h:31 msgid "_Input Mode:" msgstr "" #: ../setup/python2/setup.ui.h:32 ../setup/python3/setup.ui.h:32 msgid "_Typing Method:" msgstr "" #: ../setup/python2/setup.ui.h:33 ../setup/python3/setup.ui.h:33 msgid "Conversion _Mode:" msgstr "" #: ../setup/python2/setup.ui.h:34 ../setup/python3/setup.ui.h:34 msgid "Initial Setting" msgstr "" #: ../setup/python2/setup.ui.h:35 ../setup/python3/setup.ui.h:35 msgid "Menu Visibility on Status Icon" msgstr "" #: ../setup/python2/setup.ui.h:37 ../setup/python3/setup.ui.h:37 msgid "_Period Style:" msgstr "" #: ../setup/python2/setup.ui.h:38 ../setup/python3/setup.ui.h:38 msgid "Symbo_l Style:" msgstr "ฮฃฯ„ฮนฮป ฮฃฯ…ฮผฮฒฯŒ_ฮปฮฟฯ…:" #: ../setup/python2/setup.ui.h:39 ../setup/python3/setup.ui.h:39 msgid "Numpad _Key Type:" msgstr "ฮฃฯ…ฮผฯ€ฮตฯฮนฯ†ฮฟฯฮฌ _ฮฑฯฮนฮธฮผฮทฯ„ฮนฮบฮฟฯ ฯ€ฮปฮทฮบฯ„ฯฮฟฮปฮฟฮณฮฏฮฟฯ…:" #: ../setup/python2/setup.ui.h:40 ../setup/python3/setup.ui.h:40 msgid "_Behavior on Period:" msgstr "" #: ../setup/python2/setup.ui.h:41 ../setup/python3/setup.ui.h:41 msgid "Behavior on _Focus Out:" msgstr "" #: ../setup/python2/setup.ui.h:42 ../setup/python3/setup.ui.h:42 msgid "Behavior" msgstr "" #: ../setup/python2/setup.ui.h:43 ../setup/python3/setup.ui.h:43 msgid "Candidate _Window Page Size:" msgstr "" #: ../setup/python2/setup.ui.h:44 ../setup/python3/setup.ui.h:44 msgid "Convert _symbols with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:45 ../setup/python3/setup.ui.h:45 msgid "Convert _numbers with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:46 ../setup/python3/setup.ui.h:46 msgid "Con_vert spaces with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:47 ../setup/python3/setup.ui.h:47 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" #: ../setup/python2/setup.ui.h:48 ../setup/python3/setup.ui.h:48 msgid "Other" msgstr "" #: ../setup/python2/setup.ui.h:49 ../setup/python3/setup.ui.h:49 msgid "Conversion" msgstr "" #: ../setup/python2/setup.ui.h:50 ../setup/python3/setup.ui.h:50 msgid "_Shortcut Type:" msgstr "" #: ../setup/python2/setup.ui.h:51 ../setup/python3/setup.ui.h:51 msgid "De_fault" msgstr "" #: ../setup/python2/setup.ui.h:52 ../setup/python3/setup.ui.h:52 msgid "_Edit" msgstr "_ฮ•ฯ€ฮตฮพฮตฯฮณฮฑฯƒฮฏฮฑ" #: ../setup/python2/setup.ui.h:53 ../setup/python3/setup.ui.h:53 msgid "Key Binding" msgstr "" #: ../setup/python2/setup.ui.h:55 ../setup/python3/setup.ui.h:55 msgid "Romaji" msgstr "" #: ../setup/python2/setup.ui.h:57 ../setup/python3/setup.ui.h:57 msgid "Kana" msgstr "" #: ../setup/python2/setup.ui.h:58 ../setup/python3/setup.ui.h:58 msgid "Keyboad _layout:" msgstr "" #: ../setup/python2/setup.ui.h:59 ../setup/python3/setup.ui.h:59 msgid "Keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:60 ../setup/python3/setup.ui.h:60 msgid "Typing Method" msgstr "" #: ../setup/python2/setup.ui.h:61 ../setup/python3/setup.ui.h:61 msgid "_Left Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:62 ../setup/python3/setup.ui.h:62 msgid "Right _Thumb Shift Key:" msgstr "ฮ”ฮตฮพฮฏ _Thumb Shift:" #: ../setup/python2/setup.ui.h:63 ../setup/python3/setup.ui.h:63 msgid "Adjust _input method layout to system keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:64 ../setup/python3/setup.ui.h:64 msgid "Adjust IM layout to XKB layout" msgstr "" #: ../setup/python2/setup.ui.h:65 ../setup/python3/setup.ui.h:65 msgid "Input _Method Layout:" msgstr "" #: ../setup/python2/setup.ui.h:66 ../setup/python3/setup.ui.h:66 msgid "Restart IBus when you change the keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:67 ../setup/python3/setup.ui.h:67 msgid "Restart IBus when you change XKB" msgstr "" #: ../setup/python2/setup.ui.h:68 ../setup/python3/setup.ui.h:68 msgid "_Additional Key Arrangement:" msgstr "" #: ../setup/python2/setup.ui.h:69 ../setup/python3/setup.ui.h:69 msgid "" "'~', '『', '¢', '£' and so on can be output with " "Thumb Shift key" msgstr "" #: ../setup/python2/setup.ui.h:70 ../setup/python3/setup.ui.h:70 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" #: ../setup/python2/setup.ui.h:71 ../setup/python3/setup.ui.h:71 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" #: ../setup/python2/setup.ui.h:72 ../setup/python3/setup.ui.h:72 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" #: ../setup/python2/setup.ui.h:73 ../setup/python3/setup.ui.h:73 msgid "Seion + Shift can output Handakuon" msgstr "ฮคฮฟ Seion + Shift ฮตฮนฯƒฮฌฮณฮฟฯ…ฮฝ handakuon" #: ../setup/python2/setup.ui.h:74 ../setup/python3/setup.ui.h:74 msgid "Thumb _Shift Key Table:" msgstr "ฮ ฮฏฮฝฮฑฮบฮฑฯ‚ ฯ€ฮปฮฎฮบฯ„ฯฯ‰ฮฝ Thumb _Shift:" #: ../setup/python2/setup.ui.h:75 ../setup/python3/setup.ui.h:75 msgid "Thumb Shift Layout" msgstr "" #: ../setup/python2/setup.ui.h:76 ../setup/python3/setup.ui.h:76 msgid "Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:77 ../setup/python3/setup.ui.h:77 msgid "_Edit Dictionary Command:" msgstr "" #: ../setup/python2/setup.ui.h:78 ../setup/python3/setup.ui.h:78 msgid "_Add Word Command:" msgstr "" #: ../setup/python2/setup.ui.h:79 ../setup/python3/setup.ui.h:79 msgid "Default Dictionary Configuration" msgstr "" #: ../setup/python2/setup.ui.h:80 ../setup/python3/setup.ui.h:80 msgid "_View" msgstr "" #: ../setup/python2/setup.ui.h:81 ../setup/python3/setup.ui.h:81 msgid "_Add" msgstr "_ฮ ฯฮฟฯƒฮธฮฎฮบฮท" #: ../setup/python2/setup.ui.h:82 ../setup/python3/setup.ui.h:82 msgid "_Delete" msgstr "_ฮ”ฮนฮฑฮณฯฮฑฯ†ฮฎ" #: ../setup/python2/setup.ui.h:83 ../setup/python3/setup.ui.h:83 msgid "_Up" msgstr "ฮ ฮฌ_ฮฝฯ‰" #: ../setup/python2/setup.ui.h:84 ../setup/python3/setup.ui.h:84 msgid "You can change the order on language bar" msgstr "" #: ../setup/python2/setup.ui.h:85 ../setup/python3/setup.ui.h:85 msgid "_Down" msgstr "_ฮšฮฌฯ„ฯ‰" #: ../setup/python2/setup.ui.h:86 ../setup/python3/setup.ui.h:86 msgid "Extended Dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:87 ../setup/python3/setup.ui.h:87 msgid "Dictionary" msgstr "" #: ../setup/python2/setup.ui.h:88 ../setup/python3/setup.ui.h:88 msgid "About" msgstr "" #: ../setup/python2/setup.ui.h:89 ../setup/python3/setup.ui.h:89 msgid "_Apply" msgstr "_ฮ•ฯ†ฮฑฯฮผฮฟฮณฮฎ" #: ../setup/python2/setup.ui.h:92 ../setup/python3/setup.ui.h:92 msgid "Edit Shortcut" msgstr "" #: ../setup/python2/setup.ui.h:93 ../setup/python3/setup.ui.h:93 msgid "Key Code:" msgstr "" #: ../setup/python2/setup.ui.h:94 ../setup/python3/setup.ui.h:94 msgid "Modifier:" msgstr "" #: ../setup/python2/setup.ui.h:95 ../setup/python3/setup.ui.h:95 msgid "A_lternate" msgstr "" #: ../setup/python2/setup.ui.h:96 ../setup/python3/setup.ui.h:96 msgid "Co_ntrol" msgstr "" #: ../setup/python2/setup.ui.h:97 ../setup/python3/setup.ui.h:97 msgid "_Shift" msgstr "" #: ../setup/python2/setup.ui.h:98 ../setup/python3/setup.ui.h:98 msgid "_Refresh" msgstr "_ฮ‘ฮฝฮฑฮฝฮญฯ‰ฯƒฮท" #: ../setup/python2/setup.ui.h:99 ../setup/python3/setup.ui.h:99 msgid "_Input Characters" msgstr "" #: ../setup/python2/setup.ui.h:100 ../setup/python3/setup.ui.h:100 msgid "_Output Characters" msgstr "" #: ../setup/python2/setup.ui.h:101 ../setup/python3/setup.ui.h:101 msgid "_Left Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:102 ../setup/python3/setup.ui.h:102 msgid "_Right Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:103 ../setup/python3/setup.ui.h:103 msgid "_Remove" msgstr "_ฮ‘ฯ†ฮฑฮฏฯฮตฯƒฮท" #: ../setup/python2/setup.ui.h:104 ../setup/python3/setup.ui.h:104 msgid "_Close" msgstr "_ฮšฮปฮตฮฏฯƒฮนฮผฮฟ" #: ../setup/python2/setup.ui.h:105 ../setup/python3/setup.ui.h:105 msgid "_Short Label:" msgstr "" #: ../setup/python2/setup.ui.h:106 ../setup/python3/setup.ui.h:106 msgid "_Description:" msgstr "" #: ../setup/python2/setup.ui.h:107 ../setup/python3/setup.ui.h:107 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:108 ../setup/python3/setup.ui.h:108 msgid "_Embed your dictionary in the system dictionary" msgstr "" #: ../setup/python2/setup.ui.h:109 ../setup/python3/setup.ui.h:109 msgid "Enable the _reverse conversion" msgstr "" #: ../setup/python2/setup.ui.h:110 ../setup/python3/setup.ui.h:110 msgid "The Anthy engine for the IBus input platform" msgstr "" #: ../setup/python2/setup.ui.h:111 ../setup/python3/setup.ui.h:111 msgid "translator_credits" msgstr "" ibus-anthy-1.5.11/po/es.po000066400000000000000000000721611346647371500152760ustar00rootroot00000000000000# Spanish translation of ibus-anthy. # Copyright (C) 2009-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Mรกximo Castaรฑeda Riloba , 2017. #zanata # fujiwara , 2017. #zanata # fujiwara , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-04-23 08:15+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: Spanish\n" "Language: es\n" "X-Generator: Zanata 4.6.2\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "Mรฉtodo de entrada japonรฉs" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" "El mรฉtodo de entrada Anthy estรก diseรฑado para usarlo con texto japonรฉs." #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" "Los mรฉtodos de entrada son sistemas que facilitan el uso de idiomas " "complejos. Son necesarios porque estos idiomas tienen demasiados caracteres " "como para ponerlos de forma sencilla en un teclado tradicional." #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "Mรฉtodo de entrada Anthy" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" "No se pudo activar Anthy.\n" "El archivo %s/last-record2_default.utf8 del directorio de usuario no termina " "con una lรญnea nueva; es decir, no tiene el formato correcto.\n" "Corrija el fichero o bรณrrelo y reinicie IBus." #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "Ajustes - Anthy" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "Configura Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "%(description)s (%(symbol)s)" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "Modo de entrada" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "Cambia el modo de entrada" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "Hiragana" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "Katakana" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "Katakana de medio ancho" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "Latino" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "Latino ancho" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "Mรฉtodo mecanogrรกfico" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "Cambia el mรฉtodo de mecanografiado" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "Romaji" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "Kana" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "Selecciรณn con pulgares" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "Modo de segmento" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "Cambia el modo de conversiรณn" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "Segmento mรบltiple" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "Segmento individual" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "Conversiรณn inmediata (segmento mรบltiple)" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "Conversiรณn inmediata (segmento individual)" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "Modo de diccionario" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "Cambia el diccionario" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "Diccionario - Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "Diccionario" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "Configura diccionarios" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "Editar diccionarios" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "Ejecuta la herramienta de diccionarios" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "Aรฑadir palabras" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "Aรฑade palabras al diccionario" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "General" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "Conversiรณn de cรณdigo postal" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "Sรญmbolo" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "Estilo antiguo" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "Era" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "Emoji" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "Ajustes de IBus Anthy" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "Configura el motor Anthy de IBus" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "Etiqueta de menรบ" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "Comando" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "Atajo" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "Descripciรณn" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "Incl" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "Indv" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "Caracteres de entrada" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "Caracteres de salida" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "Entrada" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "Individual" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "Izquierdo" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "Derecho" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "Personalizaciรณn de la tabla de teclas romaji" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "Tabla de teclas _romaji:" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "Caracteres de _salida" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "Predeterminado" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "Personalizaciรณn de la tabla de teclas kana" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "Tabla de teclas _kana:" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "Teclado japonรฉs" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "Teclado de EEUU" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "Personalizaciรณn de la tabla de selecciรณn con pulgares" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "_Tabla de teclas de selecciรณn con pulgares:" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "Caracteres de _salida individuales" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "Base" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "Extensiรณn de teclas NICOLA-J" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "Extensiรณn de teclas NICOLA-A" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "Extensiรณn de teclas NICOLA-F" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "Extensiรณn de teclas FMV KB231-J" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "Extensiรณn de teclas FMV KB231-A" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "Extensiรณn de teclas FMV KB231-F" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "Extensiรณn de teclas FMV KB611-J" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "Extensiรณn de teclas FMV KB611-A" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "Extensiรณn de teclas FMV KB611-F" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "El archivo ya estaba en la lista: " #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "El archivo no existe: " #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "Ha seleccionado un directorio: " #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "No puede aรฑadir diccionario del directorio privado de anthy: " #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "Ruta incorrecta: " #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "No existe el archivo xml del motor: " #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" "La disposiciรณn del teclado ha cambiado. Reinicie ibus para recargarla." #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "Indique los caracteres de entrada" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "Indique los caracteres de salida" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "Indique los caracteres con pulgar izquierdo" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "Indique los caracteres con pulgar derecho" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" "Su tecla no aparece asignada en ninguna secciรณn. Podrรญa ser un error del " "programa." #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "El archivo no existe: " #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "Abrir archivo de diccionario" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "_Cancelar" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "_Abrir" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "Editar archivo de diccionario" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "_Hecho" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "El archivo seleccionado no es vรกlido." #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "No puede eliminar el diccionario del sistema." #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "El archivo no es correcto." #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "Ver archivos de diccionario" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "Pulse una tecla (o una combinaciรณn de teclas)" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "El cuadro de diรกlogo se cerrarรก cuando la suelte" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "Keysym incorrecto" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "Este keysym no es vรกlido" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "NICOLA-J" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "NICOLA-A" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "NICOLA-F" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "Ninguno" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "Extensiรณn de teclas FMV KB231" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "Extensiรณn de teclas FMV KB611" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "Mantener los cรณdigos del teclado numรฉrico" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "Convertir caracteres" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "No hacer nada" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "Convertir automรกticamente" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "Asentar automรกticamente" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "Limpiar" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "Asentar" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "Mantener" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "ATOK" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "Wnn" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "Ajustes - IBus-Anthy" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "Modo de _entrada:" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "Mรฉtodo _mecanogrรกfico:" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "Modo de _conversiรณn:" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "Ajustes iniciales" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "Visibilidad del menรบ en el icono de estado" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "Estilo de _punto:" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "Estilo de sรญmbo_lo:" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "_Tipo de tecla del teclado numรฉrico:" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "_Acciรณn del punto:" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "Acciรณn al perder el _foco:" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "Comportamiento" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "Tamaรฑo de pรกgina de la ventana de _candidatos:" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "Convertir _sรญmbolos al ancho de columna" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "Convertir _nรบmeros al ancho de columna" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "Convertir _espacios al ancho de columna" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" "Cambiar entre โ€œhiraganaโ€ y โ€œlatinoโ€ pulsando mayรบsculas y la tecla de " "Hiraganaโ€“Katakana en la preediciรณn" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "Otros" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "Conversiรณn" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "_Tipo de atajo:" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "_Predeterminado" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "_Editar" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "Vinculaciรณn de teclas" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "Romaji" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "Kana" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "_Disposiciรณn del teclado" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "Disposiciรณn del teclado" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "Mรฉtodo mecanogrรกfico" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "Tecla de cambio de pulgar _izquierdo:" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "Tecla de cambio de pulgar _derecho:" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "" "Ajustar la disposiciรณn del mรฉtodo de _entrada a la del teclado del sistema" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "Ajusta la disposiciรณn del mรฉtodo de entrada a la de XKB" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "Disposiciรณn del _mรฉtodo de entrada:" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "Reinicie IBus cuando cambie la disposiciรณn del teclado" #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "Reinicie IBus cuando cambie XKB" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "Disposiciรณn de teclas _adicionales:" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "" "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' y demรกs se pueden escribir con la tecla de cambio de " "pulgar" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" "No es necesario cambiar la disposiciรณn del teclado del sistema para usar la " "\"Disposiciรณn de teclas adicionales\", pues esta opciรณn sรณlo afecta al " "mรฉtodo de entrada cuando รฉste estรก activo." #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" "No necesita volver a configurar XKB, ya que esta opciรณn sรณlo cambia la " "disposiciรณn del mรฉtodo de entrada cuando รฉste estรก activo." #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" "Activar el uso de la tecla de mayรบsculas para la marca de _semisonoridad." #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "Mayรบsculas + Seion produce Handakuon" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "_Tabla de teclas de selecciรณn con pulgares:" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "Disposiciรณn de la selecciรณn con pulgares" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "Selecciรณn con pulgares" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "Comando de ediciรณn de _diccionario:" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "Comando de adiciรณn de _palabra:" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "Configuraciรณn del diccionario predeterminado" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "_Ver" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "_Aรฑadir" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "_Borrar" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "_Subir" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "Puede cambiar el orden en la barra de idiomas" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "Ba_jar" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "Diccionarios extras" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "Diccionario" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "Acerca de" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "_Cerrar" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "Ediciรณn de atajo" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "Cรณdigo de tecla:" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "Modificador:" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "A_lternativa" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "Co_ntrol" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "_Mayรบsculas" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "_Refrescar" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "Caracteres de _entrada" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "Caracteres de _salida" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "Cambio de pulgar _izquierdo" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "Cambio de pulgar _derecho" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "_Quitar" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "_Etiqueta corta:" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "_Descripciรณn:" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "_Usar sรณlo su diccionario con los conmutados" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "_Incluir su diccionario en el del sistema" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "_Activar la conversiรณn inversa" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "El motor Anthy para la plataforma de entrada IBus" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "" "Mรกximo Castaรฑeda \n" "Equipo de espaรฑol de Fedora " ibus-anthy-1.5.11/po/fr.po000066400000000000000000000741361346647371500153020ustar00rootroot00000000000000# French translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Julien Humbert , 2009-2014. # fujiwara , 2015. #zanata # Jean-Baptiste Holcroft , 2016. #zanata # Josรฉ Fournier , 2016. #zanata # Josรฉ Fournier , 2018. #zanata # fujiwara , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-04-23 08:15+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: French \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Zanata 4.6.2\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "Mรฉthode de saisie du japonais" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" "La mรฉthode de saisie Anthy est conรงue pour saisir des textes en japonais." #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" "Les mรฉthodes de saisie sont des systรจmes permettant aux utilisateurs de " "saisir des langues complexes. Elles sont nรฉcessaires parce que les trop " "nombreux caractรจres de ces langues ne peuvent รชtre disposรฉs sur des " "claviers classiques." #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "Mรฉthode de saisie Anthy" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" "Anthy n'a pas pu รชtre activรฉe.\n" "Le contenu ร  la fin du fichier %s/last-record2_default.utf8 de votre dossier " "personnel n'est pas\n" "dans un format texte correct.\n" "Veuillez corriger le fichier ou le supprimer manuellement, puis redรฉmarrer " "IBus." #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "Prรฉfรฉrences โ€“ Anthy" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "Configurer Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "%(description)s (%(symbol)s)" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "Mode de saisie" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "Changer de mode de saisie" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "Hiragana" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "Katakana" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "Katakana demi-chasse" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "Latin" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "Latin pleine largeur" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "Mรฉthode de saisie" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "Changer de mรฉthode de saisie" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "Romaji" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "Kana" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "Thumb shift" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "Mode segments" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "Changer de mรฉthode de conversion" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "Segments multiples" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "Segments simples" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "Conversion immรฉdiate (segments multiples)" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "Conversion immรฉdiate (segments simples)" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "Mode dictionnaire" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "Changer de dictionnaire" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "Dictionnaire โ€“ Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "Dico" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "Configurer les dictionnaires" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "Modifier les dictionnaires" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "Lancer lโ€™utilitaire de modification de dictionnaires" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "Ajouter de nouveaux mots" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "Ajouter de nouveaux mots au dictionnaire" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "Paramรจtres gรฉnรฉraux" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "Conversion des codes postaux" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "Symboles" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "Anciens caractรจres" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "รˆre" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "Pictogramme" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "Configuration dโ€™IBus Anthy" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "Configuration du moteur IBus Anthy" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "ร‰tiquette du menu" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "Commande" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "Raccourci" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "Description" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "Incorporรฉ" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "Unique" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "Caractรจre(s) dโ€™entrรฉe" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "Caractรจre(s) de sortie" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "Entrรฉe" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "Unique" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "Gauche" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "Droite" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "Modifier la table des touches Romaji" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "Table des touches _Romajiย :" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "Caractรจre(s) de _sortie" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "Par dรฉfaut" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "Modifier la table des touches Kana" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "Table des touches _Kanaย :" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "Disposition clavier japonais" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "Disposition clavier amรฉricain" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "Modifier la table des touches de la mรฉthode Thumb Shift" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "Table des touches de la mรฉthode Thumb _Shiftย :" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "Caractรจre(s) de s_ortie unique(s)" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "Basique" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "Extension de touches NICOLA-J" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "Extension de touches NICOLA-A" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "Extension de touches NICOLA-F" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "Extension de touches FMV KB231-J" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "Extension de touches FMV KB231-A" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "Extension de touches FMV KB231-F" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "Extension de touches FMV KB611-J" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "Extension de touches FMV KB611-A" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "Extension de touches FMV KB611-F" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "Le fichier que vous avez sรฉlectionnรฉ a dรฉjร  รฉtรฉ ajoutรฉย : " #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "Le fichier que vous avez sรฉlectionnรฉ nโ€™existe pasย : " #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "Le fichier que vous avez sรฉlectionnรฉ est un dossierย : " #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" "Vous ne pouvez pas ajouter de dictionnaire dans le dossier privรฉ dโ€™Anthyย : " #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "Le chemin du fichier sรฉlectionnรฉ est incorrectย : " #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "Le fichier xml du moteur nโ€™existe pasย : " #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" "La disposition clavier Anthy a changรฉ. Veuillez redรฉmarrer ibus pour charger " "la nouvelle disposition." #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "Veuillez spรฉcifier les caractรจres dโ€™entrรฉe" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "Veuillez spรฉcifier les caractรจres de sortie" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "Veuillez spรฉcifier les caractรจres Thumb Shift Gauche" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "Veuillez spรฉcifier les caractรจres Thumb Shift Droit" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" "Votre touche personnalisรฉe nโ€™est assignรฉe ร  aucune section. Cela est sans " "doute un bogue." #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "Le fichier que vous avez sรฉlectionnรฉ nโ€™existe pasย : " #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "Ouvrir un fichier de dictionnaire" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "A_nnuler" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "_Ouvrir" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "Modifier le fichier de dictionnaire" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "_Valider" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "Le fichier que vous avez sรฉlectionnรฉ est incorrect." #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "Vous ne pouvez pas supprimer le dictionnaire systรจme." #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "Le fichier que vous avez sรฉlectionnรฉ nโ€™est pas bon." #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "Voir le fichier de dictionnaire" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "Veuillez appuyer sur une touche (ou une combinaison de touches)" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "La fenรชtre se fermera lorsque la touche sera relรขchรฉe" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "ยซย keysymย ยป invalide" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "Ce ยซย keysymย ยป nโ€™est pas valide" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "NICOLA-J" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "NICOLA-A" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "NICOLA-F" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "Aucun" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "Extension de touches FMV KB231" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "Extension de touches FMV KB611" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "Conserver les codes du pavรฉ numรฉrique" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "Convertir les caractรจres" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "Ne rien faire" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "Convertir automatiquement" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "Validation automatique" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "Effacer" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "Valider" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "Garder" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "ATOK" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "Wnn" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "Configuration โ€“ IBus-Anthy" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "Mode dโ€™E_ntrรฉeย :" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "Mรฉthode de Sa_isieย :" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "Mode de _Conversionย :" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "Configuration initiale" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "Visibilitรฉ du menu sur lโ€™icรดne d'รฉtat" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "Style de _Ponctuationย :" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "Style de _Symbolesย :" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "Touches du pa_vรฉ numรฉriqueย :" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "Comportement _lors de la ponctuationย :" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "Comportement ร  la perte du _focusย :" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "Comportement" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "_Taille de la fenรชtre de la liste des candidatsย :" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "Convertir les s_ymboles en symboles dโ€™une seule colonne de largeur" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "Convertir les ch_iffres en chiffres dโ€™une seule colonne de largeur" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "Convertir les _espaces en espaces dโ€™une seule colonne de largeur" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" "Permuter entre les modes ยซย Hiraganaย ยป et ยซย Latinย ยป avec la touche Maj et la " "touche Hiragana-Katakana en prรฉ-รฉdition" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "Autres options" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "Mode de conversion" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "Raccourcis _claviersย :" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "Par dรฉ_faut" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "_Modifier" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "Raccourcis claviers" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "Romaji" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "Kana" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "Disposition c_lavierย :" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "Disposition clavier" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "Mรฉthode de saisie" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "Touche Thumb Shift _Gaucheย :" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "Touche Thumb Shift _Droiteย :" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "Utiliser la disposition clavier systรจme pour la mรฉthode dโ€™entrรฉe" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "Utilise la disposition clavier utilisรฉe par XKB pour lโ€™IME" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "Disposition de la _Mรฉthode de saisieย :" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "Redรฉmarrez IBus lorsque vous changer la disposition clavier systรจme." #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "Redรฉmarrez IBus lorsque vous changer la configuration XKB" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "_Arrangements des Touches Additionnellesย :" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "" "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ', etc. peuvent รชtre tapรฉs avec la mรฉthode Thumb Shift" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" "Vous nโ€™avez pas besoin de reconfigurer la disposition clavier systรจme pour " "profiter des ยซ Arrangements des Touches Additionnelles ยป, puisque cette " "option ne change la disposition de la mรฉthode de saisie que lorsque la " "mรฉthode de saisie est activรฉe." #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" "Vous nโ€™avez pas besoin de reconfigurer XKB, puisque cette option ne change " "que la disposition de lโ€™IME lorsque lโ€™IME est activรฉ." #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "Activer les ยซ semi-_voiced sound mark ยป avec la touche Majuscule" #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "Seion + Majuscule peut imprimer Handakuon" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "Table des touches Thumb _Shiftย :" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "Disposition Thumb Shift" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "Thumb Shift" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "Commande permettant lโ€™รฉd_ition du dictionnaireย :" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "Commande permettant lโ€™a_jout dโ€™un motย :" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "Configuration du dictionnaire par dรฉfaut" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "_Voir" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "A_jouter" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "_Supprimer" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "_Monter" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "Vous pouvez changer lโ€™ordre dans la barre de langue" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "_Descendre" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "Dictionnaires supplรฉmentaires" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "Dictionnaire" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "ร€ propos" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "_Fermer" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "ร‰diter le raccourci" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "Code de toucheย :" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "Modificateurย :" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "A_lternatif" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "Co_ntrol" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "_Majuscule" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "A_ctualiser" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "Caractรจre(s) dโ€™_entrรฉe" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "Caractรจres de s_ortie" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "Thumb Shift _Gauche" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "Thumb Shift D_roit" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "_Enlever" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "_Label courtย :" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "_Descriptionย :" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" "_Utiliser votre dictionnaire tout seul lors du changement de dictionnaire" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "Inclur_e votre dictionnaire dans le dictionnaire systรจme" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "Activer la conversion inversรฉe" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "Le moteur Anthy pour la plateforme de saisie IBus" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "Julien Humbert " ibus-anthy-1.5.11/po/ibus-anthy.pot000066400000000000000000000564661346647371500171500ustar00rootroot00000000000000# Source translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2008-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "PO-Revision-Date: 2019-04-22 23:08+0900\n" "Last-Translator: Takao Fujiwara \n" "Language-Team: Source\n" "Language: none\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "" #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "" #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "" #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "" #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "" #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "" #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "" #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "" #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "" #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "" #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "" ibus-anthy-1.5.11/po/ja.po000066400000000000000000000733461346647371500152670ustar00rootroot00000000000000# Japanese translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # UTUMI Hirosi , 2008 # fujiwara , 2016. #zanata # fujiwara , 2017. #zanata # fujiwara , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-04-23 08:16+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: Japanese \n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Zanata 4.6.2\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "ๆ—ฅๆœฌ่ชžๅ…ฅๅŠ›ๆ–นๅผ" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "Anthy ๅ…ฅๅŠ›ๆ–นๅผใฏๆ—ฅๆœฌ่ชžใฎใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ใŸใ‚ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใพใ™ใ€‚" #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" "ๅ…ฅๅŠ›ๆ–นๅผใฏใƒฆใƒผใ‚ถใƒผใซ่ค‡้›‘ใช่จ€่ชžๅ…ฅๅŠ›ใ‚’ๅฏ่ƒฝใซใ•ใ›ใ‚‹ๆ–‡ๅญ—ๅ…ฅๅŠ›ใ‚ทใ‚นใƒ†ใƒ ใงใ™ใ€‚ " "ๅ…ฅๅŠ›ๆ–นๅผใฏๅพ“ๆฅใฎใ‚ญใƒผใƒœใƒผใƒ‰ไธŠใง็ฐกๅ˜ใซๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚ŒใŸๅคšใใฎๆ–‡ๅญ—ใ‚’ๅซใ‚“ใงใ„ใ‚‹ใŸใ‚ใซๅฟ…่ฆใจใ•ใ‚Œใฆใ„ใพใ™ใ€‚" #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "Anthy ๅ…ฅๅŠ›ๆ–นๅผ" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" "Anthy ใ‚’ๆœ‰ๅŠนใซใงใใพใ›ใ‚“ใงใ—ใŸใ€‚\n" "ใƒ›ใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ใ‚‹ %s/last-record2_default.utf8 ใฎไธญ่บซใฎๆœ€ๅพŒใŒ '\\n' " "ใงใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใคใพใ‚Šๆญฃใ—ใใชใ„ใƒ†ใ‚ญใ‚นใƒˆใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใงใ™ใ€‚\n" "ๆ‰‹ๅ‹•ใงใƒ•ใ‚กใ‚คใƒซใ‚’ไฟฎๆญฃใ™ใ‚‹ใ‹ๅ‰Š้™คใ—ใฆ IBus ใ‚’ใƒชใ‚นใ‚ฟใƒผใƒˆใ—ใฆใใ ใ•ใ„ใ€‚" #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "่จญๅฎš - Anthy" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "Anthy ใ‚’ๆง‹ๆˆใ—ใพใ™" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "%(description)s (%(symbol)s)" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "ๅ…ฅๅŠ›ใƒขใƒผใƒ‰" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "ๅ…ฅๅŠ›ใƒขใƒผใƒ‰ใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใพใ™" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "ใฒใ‚‰ใŒใช" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "ใ‚ซใ‚ฟใ‚ซใƒŠ" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "ๅŠ่ง’ใ‚ซใ‚ฟใ‚ซใƒŠ" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "่‹ฑๆ•ฐ" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "ๅ…จ่ง’่‹ฑๆ•ฐ" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "ๅ…ฅๅŠ›ใ‚ฟใ‚คใƒ—" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "ๅ…ฅๅŠ›ใ‚ฟใ‚คใƒ—ใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใพใ™" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "ใƒญใƒผใƒžๅญ—" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "ใ‹ใช" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆ" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "ๆ–‡็ฏ€ใƒขใƒผใƒ‰" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "ๅค‰ๆ›ใƒขใƒผใƒ‰ใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใพใ™" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "้€ฃๆ–‡็ฏ€" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "ๅ˜ๆ–‡็ฏ€" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "้€ๆฌกๅค‰ๆ› (้€ฃๆ–‡็ฏ€)" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "้€ๆฌกๅค‰ๆ› (ๅ˜ๆ–‡็ฏ€)" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "่พžๆ›ธใƒขใƒผใƒ‰" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "่พžๆ›ธใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใพใ™" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "่พžๆ›ธ - Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "่พž" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "่พžๆ›ธใ‚’ๆง‹ๆˆใ—ใพใ™" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "่พžๆ›ธใ‚’็ทจ้›†ใ™ใ‚‹" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "่พžๆ›ธใƒ„ใƒผใƒซใ‚’่ตทๅ‹•ใ™ใ‚‹" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "ๅ˜่ชžใ‚’่ฟฝๅŠ ใ™ใ‚‹" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "่พžๆ›ธใซๅ˜่ชžใ‚’่ฟฝๅŠ ใ™ใ‚‹" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "ไธ€่ˆฌ" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "้ƒตไพฟ็•ชๅทๅค‰ๆ›" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "่จ˜ๅท" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "ๆ—งๅญ—ไฝ“" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "ๅนดๅท" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "็ตตๆ–‡ๅญ—" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "IBus Anthy ใฎ่จญๅฎš" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "IBus Anthy ใ‚จใƒณใ‚ธใƒณใฎ่จญๅฎš" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "ใƒกใƒ‹ใƒฅใƒผใƒฉใƒ™ใƒซ" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "ใ‚ณใƒžใƒณใƒ‰" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆ" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "่ชฌๆ˜Ž" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "็ต„" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "ๅ˜" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "ๅ…ฅๅŠ›ๆ–‡ๅญ—" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "ๅ‡บๅŠ›ๆ–‡ๅญ—" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "ๅ…ฅๅŠ›" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "ๅ˜" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "ๅทฆ" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "ๅณ" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "ใƒญใƒผใƒžๅญ—ใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซใฎใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บ" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "ใƒญใƒผใƒžๅญ—ใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซ(_R):" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "ๅ‡บๅŠ›ๆ–‡ๅญ—(_O)" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "ใ‹ใชใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซใฎใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บ" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "ใ‹ใชใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซ(_K):" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "ๆ—ฅๆœฌ่ชžใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "U.S. ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซใฎใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บ" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซ(_T):" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "ๅ˜ๅ‡บๅŠ›ๆ–‡ๅญ—(_O)" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "ๅŸบๆœฌ" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "NICOLA-J ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "NICOLA-A ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "NICOLA-F ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "FMV KB231-J ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "FMV KB231-A ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "FMV KB231-F ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "FMV KB611-J ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "FMV KB611-A ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "FMV KB611-F ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "้ธๆŠžใ—ใŸใƒ•ใ‚กใ‚คใƒซใฏใ™ใงใซ่ฟฝๅŠ ใ•ใ‚Œใฆใ„ใพใ™: " #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "้ธๆŠžใ—ใŸใƒ•ใ‚กใ‚คใƒซใฏๅญ˜ๅœจใ—ใพใ›ใ‚“: " #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "้ธๆŠžใ—ใŸใƒ•ใ‚กใ‚คใƒซใฏใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใงใ™: " #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "Anthy ็ง็”จใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ใ‚‹ใƒ•ใ‚กใ‚คใƒซใ‚’่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“: " #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "ใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚นใฏใ‚ˆใใชใ„ใงใ™: " #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "ใ‚จใƒณใ‚ธใƒณ xml ใƒ•ใ‚กใ‚คใƒซใฏๅญ˜ๅœจใ—ใพใ›ใ‚“: " #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "Anthy ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒๅค‰ๆ›ดใ•ใ‚Œใพใ—ใŸใ€‚ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅ†่ชญใฟ่พผใฟใ™ใ‚‹ใŸใ‚ใซ ibus ใ‚’ๅ†่ตทๅ‹•ใ—ใฆใใ ใ•ใ„ใ€‚" #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "ๅ…ฅๅŠ›ๆ–‡ๅญ—ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "ๅ‡บๅŠ›ๆ–‡ๅญ—ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "ๅทฆ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆๆ–‡ๅญ—ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "ๅณ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆๆ–‡ๅญ—ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "ใ‚ซใ‚นใ‚ฟใƒ ใ‚ญใƒผใŒใฉใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใซใ‚‚ๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚ใŸใถใ‚“ใƒใ‚ฐใงใ™ใ€‚" #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "ใƒ•ใ‚กใ‚คใƒซใฏๅญ˜ๅœจใ—ใพใ›ใ‚“: " #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "่พžๆ›ธใƒ•ใ‚กใ‚คใƒซใ‚’้–‹ใ" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "ใ‚ญใƒฃใƒณใ‚ปใƒซ(_C)" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "้–‹ใ(_O)" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "่พžๆ›ธใƒ•ใ‚กใ‚คใƒซใฎ็ทจ้›†" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "OK(_O)" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "้ธๆŠžใ—ใŸใƒ•ใ‚กใ‚คใƒซใฏๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“ใ€‚" #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "ใ‚ทใ‚นใƒ†ใƒ ่พžๆ›ธใ‚’ๅ‰Š้™คใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚" #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "ใƒ•ใ‚กใ‚คใƒซใฏ่‰ฏใใชใ„ใงใ™ใ€‚" #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "่พžๆ›ธใƒ•ใ‚กใ‚คใƒซใฎ่กจ็คบ" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "ใ‚ญใƒผใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "ใ“ใฎใƒ€ใ‚คใ‚ขใƒญใ‚ฐใฏใ‚ญใƒผใƒชใƒชใƒผใ‚นๆ™‚ใซ้–‰ใ˜ใ‚‰ใ‚Œใพใ™" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "็„กๅŠนใชใ‚ญใƒผใ‚ทใƒณใƒœใƒซ" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "ใ“ใฎใ‚ญใƒผใ‚ทใƒณใƒœใƒซใฏๆœ‰ๅŠนใงใฏใ‚ใ‚Šใพใ›ใ‚“" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "NICOLA-J" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "NICOLA-A" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "NICOLA-F" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "ใชใ—" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "FMV KB231 ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "FMV KB611 ใ‚ญใƒผๆ‹กๅผต" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "ใƒ†ใƒณใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎใพใพ" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "ๆ–‡ๅญ—ใ‚’ๅค‰ๆ›" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "ไฝ•ใ‚‚ใ—ใชใ„" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "่‡ชๅ‹•ๅค‰ๆ›" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "่‡ชๅ‹•็ขบๅฎš" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "ๆถˆๅŽป" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "็ขบๅฎš" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "ไฟๆŒ" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "ATOK" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "Wnn" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "IBus-Anthy ใฎ่จญๅฎš" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "ๅ…ฅๅŠ›ใƒขใƒผใƒ‰(_I):" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "ๅ…ฅๅŠ›ใ‚ฟใ‚คใƒ—(_T):" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "ๅค‰ๆ›ใƒขใƒผใƒ‰(_M):" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "ๅˆๆœŸๅ€คใฎ่จญๅฎš" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "ใ‚นใƒ†ใƒผใ‚ฟใ‚นใ‚ขใ‚คใ‚ณใƒณไธŠใฎใƒกใƒ‹ใƒฅใƒผใฎ่กจ็คบ" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "ๅฅ่ชญ็‚นใ‚นใ‚ฟใ‚คใƒซ(_P):" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "่จ˜ๅทใ‚นใ‚ฟใ‚คใƒซ(_L):" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "ใƒ†ใƒณใ‚ญใƒผใ‚ฟใ‚คใƒ—(_K):" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "ๅฅ่ชญ็‚นๅ…ฅๅŠ›ๆ™‚ใฎๅ‹•ไฝœ(_B):" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "ใƒ•ใ‚ฉใƒผใ‚ซใ‚นใ‚ขใ‚ฆใƒˆๆ™‚ใฎๅ‹•ไฝœ(_F):" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "ๅ‹•ไฝœ" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "ๅ€™่ฃœใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆใฎ้ …็›ฎๆ•ฐ(_W):" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "่จ˜ๅทใ‚’ๅŠ่ง’ใงๅค‰ๆ›ใ™ใ‚‹(_S)" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "ๆ•ฐๅญ—ใ‚’ๅŠ่ง’ใงๅค‰ๆ›ใ™ใ‚‹(_N)" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "็ฉบ็™ฝใ‚’ๅŠ่ง’ใงๅค‰ๆ›ใ™ใ‚‹(_V)" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "ๅ‰ๅค‰ๆ›ๅ€™่ฃœใซใŠใ„ใฆใ€Œใฒใ‚‰ใŒใชใ€ใจใ€Œ่‹ฑๆ•ฐใ€ใ‚’ใ‚ทใƒ•ใƒˆใ‚ญใƒผใจใฒใ‚‰ใŒใชใƒปใ‚ซใ‚ฟใ‚ซใƒŠใ‚ญใƒผใงๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹(_T)" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "ใใฎไป–" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "ๅค‰ๆ›" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚ฟใ‚คใƒ—(_S):" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ(_F)" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "็ทจ้›†(_E)" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "ใ‚ญใƒผๅ‰ฒใ‚Šๅฝ“ใฆ" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "ใƒญใƒผใƒžๅญ—" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "ใ‹ใช" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ(_L):" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "ๅ…ฅๅŠ›ใ‚ฟใ‚คใƒ—" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "ๅทฆ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผ(_L):" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "ๅณ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผ(_T):" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "ใ‚คใƒณใƒ—ใƒƒใƒˆใƒกใ‚ฝใƒƒใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ใ‚ทใ‚นใƒ†ใƒ ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซๅˆใ‚ใ›ใ‚‹(_I)" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "IM ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ XKB ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซๅˆใ‚ใ›ใ‚‹" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "ใ‚คใƒณใƒ—ใƒƒใƒˆใƒกใ‚ฝใƒƒใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆ(_M):" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใจใใฏ IBus ใ‚’ใƒชใ‚นใ‚ฟใƒผใƒˆใ—ใฆใใ ใ•ใ„" #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "XKB ใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใจใใฏ IBus ใ‚’ๅ†่ตทๅ‹•ใ—ใฆใใ ใ•ใ„" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "่ฟฝๅŠ ใฎใ‚ญใƒผๅ‰ฒใ‚Šๅฝ“ใฆ(_A):" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผใง '๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' ็ญ‰ใ‚’ๅ‡บๅŠ›ใ™ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" "ใ“ใฎใ‚ชใƒ—ใ‚ทใƒงใƒณใฏใ‚คใƒณใƒ—ใƒƒใƒˆใƒกใ‚ฝใƒƒใƒ‰ใŒใ‚ชใƒณใฎๅ ดๅˆใซใ‚คใƒณใƒ—ใƒƒใƒˆใƒกใ‚ฝใƒƒใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใฟใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใฎใงใ€Œ่ฟฝๅŠ ใฎใ‚ญใƒผๅ‰ฒใ‚Šๅฝ“ใฆใ€ใฎใŸใ‚ใซใ‚ทใ‚นใƒ†ใƒ ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ๅ†ๆง‹ๆˆใ™ใ‚‹ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚" #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "ใ“ใฎใ‚ชใƒ—ใ‚ทใƒงใƒณใฏ IM ใ‚ชใƒณใง IM ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใฟใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใฎใง XKB ใ‚’ๅ†ๆง‹ๆˆใ™ใ‚‹ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚" #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "ใ‚ทใƒ•ใƒˆใ‚ญใƒผใงๅŠๆฟ็‚นใ‚’ๅฏ่ƒฝใซใ™ใ‚‹(_E)" #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "ๆธ…้Ÿณ + ใ‚ทใƒ•ใƒˆใงๅŠๆฟ้Ÿณใ‚’ๅ‡บๅŠ›ใ™ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใ‚ญใƒผใƒ†ใƒผใƒ–ใƒซ(_S):" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆใƒฌใ‚คใ‚ขใ‚ฆใƒˆ" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆ" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "่พžๆ›ธใฎ็ทจ้›†ใ‚ณใƒžใƒณใƒ‰(_E):" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "ๅ˜่ชžใฎ่ฟฝๅŠ ใ‚ณใƒžใƒณใƒ‰(_A):" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่พžๆ›ธใฎๆง‹ๆˆ" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "่กจ็คบ(_V)" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "่ฟฝๅŠ (_A)" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "ๅ‰Š้™ค(_D)" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "ไธŠใธ(_U)" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "่จ€่ชžใƒใƒผไธŠใง้ †ๅบใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "ไธ‹ใธ(_D)" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "ๆ‹กๅผต่พžๆ›ธ" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "่พžๆ›ธ" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "ๆƒ…ๅ ฑ" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "้–‰ใ˜ใ‚‹(_C)" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใฎ็ทจ้›†" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "ใ‚ญใƒผใ‚ณใƒผใƒ‰:" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "ใ‚ญใƒผไฟฎ้ฃพ:" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "A_lt" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "Co_ntrol" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "_Shift" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "ๆ›ดๆ–ฐ(_R)" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "ๅ…ฅๅŠ›ๆ–‡ๅญ—(_I)" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "ๅ‡บๅŠ›ๆ–‡ๅญ—(_O)" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "ๅทฆ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆ(_L)" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "ๅณ่ฆชๆŒ‡ใ‚ทใƒ•ใƒˆ(_R)" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "ๅ‰Š้™ค(_R)" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "็Ÿญใƒฉใƒ™ใƒซ(_S):" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "่ชฌๆ˜Ž(_D):" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "่พžๆ›ธใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใ“ใจใง้ธๆŠžใ—ใŸ่พžๆ›ธใ‚’ๅ˜็‹ฌใงไฝฟ็”จใ™ใ‚‹(_U)" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "ใ‚ทใ‚นใƒ†ใƒ ่พžๆ›ธใซใƒฆใƒผใ‚ถใƒผ่พžๆ›ธใ‚’็ต„ใฟ่พผใ‚€(_E)" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "้€†ๅค‰ๆ›ใ‚’ๅฏ่ƒฝใซใ™ใ‚‹(_R)" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "IBus ๅ…ฅๅŠ›ใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ็”จ Anthy ใ‚จใƒณใ‚ธใƒณ" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "UTUMI Hirosi " ibus-anthy-1.5.11/po/pt_BR.po000066400000000000000000000642401346647371500156740ustar00rootroot00000000000000# Portuguese (Brazil) translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2016 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Marco Aurรฉlio Krause , 2015. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy master\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2017-03-17 13:26+0900\n" "PO-Revision-Date: 2015-10-15 10:41-0400\n" "Last-Translator: Marco Aurรฉlio Krause \n" "Language-Team: Portuguese (Brazil)\n" "Language: pt-BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Zanata 3.9.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: ../data/ibus-anthy.appdata.xml.in.h:1 msgid "Japanese input method" msgstr "Mรฉtodo de entrada japonรชs" #: ../data/ibus-anthy.appdata.xml.in.h:2 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:3 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" #: ../engine/python2/default.xml.in.in.h:1 #: ../engine/python3/default.xml.in.in.h:1 msgid "Anthy Input Method" msgstr "Mรฉtodo de entrada Anthy" #: ../engine/python2/engine.py:207 ../engine/python3/engine.py:208 msgid "" "Could not enable Anthy.\n" "The end of the content of the file .anthy/last-record2_default.utf8 in your " "home directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" #: ../engine/python2/engine.py:255 ../engine/python3/engine.py:256 #: ../setup/python2/main.py:416 ../setup/python3/main.py:421 msgid "Preferences - Anthy" msgstr "Preferรชncias - Anthy" #: ../engine/python2/engine.py:257 ../engine/python3/engine.py:258 msgid "Configure Anthy" msgstr "Configurar o Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: ../engine/python2/engine.py:294 ../engine/python2/engine.py:382 #: ../engine/python2/engine.py:449 ../engine/python2/engine.py:525 #: ../engine/python2/engine.py:856 ../engine/python2/engine.py:884 #: ../engine/python2/engine.py:908 ../engine/python2/engine.py:934 #: ../engine/python2/engine.py:996 ../engine/python3/engine.py:295 #: ../engine/python3/engine.py:383 ../engine/python3/engine.py:450 #: ../engine/python3/engine.py:526 ../engine/python3/engine.py:851 #: ../engine/python3/engine.py:879 ../engine/python3/engine.py:903 #: ../engine/python3/engine.py:929 ../engine/python3/engine.py:991 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "" #: ../engine/python2/engine.py:295 ../engine/python2/engine.py:857 #: ../engine/python3/engine.py:296 ../engine/python3/engine.py:852 #: ../setup/python2/main.py:401 ../setup/python3/main.py:406 msgid "Input mode" msgstr "Modo de entrada" #: ../engine/python2/engine.py:301 ../engine/python3/engine.py:302 msgid "Switch input mode" msgstr "Alternar o modo de entrada" #: ../engine/python2/engine.py:311 ../engine/python3/engine.py:312 #: ../setup/python2/setup.ui.h:1 ../setup/python3/setup.ui.h:1 msgid "Hiragana" msgstr "Hiragana" #: ../engine/python2/engine.py:320 ../engine/python3/engine.py:321 #: ../setup/python2/setup.ui.h:2 ../setup/python3/setup.ui.h:2 msgid "Katakana" msgstr "Katakana" #: ../engine/python2/engine.py:329 ../engine/python3/engine.py:330 #: ../setup/python2/setup.ui.h:3 ../setup/python3/setup.ui.h:3 msgid "Halfwidth Katakana" msgstr "Halfwidth Katakana" #: ../engine/python2/engine.py:338 ../engine/python3/engine.py:339 #: ../setup/python2/setup.ui.h:4 ../setup/python3/setup.ui.h:4 msgid "Latin" msgstr "Latin" #: ../engine/python2/engine.py:347 ../engine/python3/engine.py:348 #: ../setup/python2/setup.ui.h:5 ../setup/python3/setup.ui.h:5 msgid "Wide Latin" msgstr "Wide Latin" #: ../engine/python2/engine.py:383 ../engine/python2/engine.py:885 #: ../engine/python2/engine.py:909 ../engine/python3/engine.py:384 #: ../engine/python3/engine.py:880 ../engine/python3/engine.py:904 #: ../setup/python2/main.py:404 ../setup/python3/main.py:409 msgid "Typing method" msgstr "" #: ../engine/python2/engine.py:389 ../engine/python3/engine.py:390 msgid "Switch typing method" msgstr "" #: ../engine/python2/engine.py:399 ../engine/python3/engine.py:400 #: ../setup/python2/setup.ui.h:12 ../setup/python3/setup.ui.h:12 msgid "Romaji" msgstr "Romaji" #: ../engine/python2/engine.py:408 ../engine/python3/engine.py:409 #: ../setup/python2/setup.ui.h:13 ../setup/python3/setup.ui.h:13 msgid "Kana" msgstr "Kana" #: ../engine/python2/engine.py:417 ../engine/python3/engine.py:418 #: ../setup/python2/setup.ui.h:14 ../setup/python3/setup.ui.h:14 msgid "Thumb shift" msgstr "" #: ../engine/python2/engine.py:450 ../engine/python2/engine.py:935 #: ../engine/python3/engine.py:451 ../engine/python3/engine.py:930 #: ../setup/python2/main.py:407 ../setup/python3/main.py:412 msgid "Segment mode" msgstr "" #: ../engine/python2/engine.py:456 ../engine/python3/engine.py:457 msgid "Switch conversion mode" msgstr "" #: ../engine/python2/engine.py:466 ../engine/python3/engine.py:467 #: ../setup/python2/setup.ui.h:15 ../setup/python3/setup.ui.h:15 msgid "Multiple segment" msgstr "Segmento mรบltiplo" #: ../engine/python2/engine.py:475 ../engine/python3/engine.py:476 #: ../setup/python2/setup.ui.h:16 ../setup/python3/setup.ui.h:16 msgid "Single segment" msgstr "Segmento รบnico" #: ../engine/python2/engine.py:484 ../engine/python3/engine.py:485 #: ../setup/python2/setup.ui.h:17 ../setup/python3/setup.ui.h:17 msgid "Immediate conversion (multiple segment)" msgstr "" #: ../engine/python2/engine.py:493 ../engine/python3/engine.py:494 #: ../setup/python2/setup.ui.h:18 ../setup/python3/setup.ui.h:18 msgid "Immediate conversion (single segment)" msgstr "" #: ../engine/python2/engine.py:526 ../engine/python2/engine.py:997 #: ../engine/python3/engine.py:527 ../engine/python3/engine.py:992 #: ../setup/python2/main.py:410 ../setup/python3/main.py:415 msgid "Dictionary mode" msgstr "Modo dicionรกrio" #: ../engine/python2/engine.py:532 ../engine/python3/engine.py:533 msgid "Switch dictionary" msgstr "" #: ../engine/python2/engine.py:615 ../engine/python3/engine.py:615 #: ../setup/python2/main.py:413 ../setup/python3/main.py:418 msgid "Dictionary - Anthy" msgstr "" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: ../engine/python2/engine.py:621 ../engine/python3/engine.py:620 msgid "Dic" msgstr "Dic" #: ../engine/python2/engine.py:628 ../engine/python3/engine.py:627 msgid "Configure dictionaries" msgstr "Configurar dicionรกrios" #: ../engine/python2/engine.py:638 ../engine/python3/engine.py:637 msgid "Edit dictionaries" msgstr "Editar dicionรกrios" #: ../engine/python2/engine.py:640 ../engine/python3/engine.py:639 msgid "Launch the dictionary tool" msgstr "" #: ../engine/python2/engine.py:647 ../engine/python3/engine.py:646 msgid "Add words" msgstr "Adicionar palavras" #: ../engine/python2/engine.py:649 ../engine/python3/engine.py:648 msgid "Add words to the dictionary" msgstr "Adicionar palavras no dicionรกrio" #: ../setup/python2/anthyprefs.py.in:1105 ../setup/python2/setup.ui.h:36 #: ../setup/python3/anthyprefs.py.in:1098 ../setup/python3/setup.ui.h:36 msgid "General" msgstr "Geral" #: ../setup/python2/anthyprefs.py.in:1116 #: ../setup/python3/anthyprefs.py.in:1109 msgid "Zip Code Conversion" msgstr "" #: ../setup/python2/anthyprefs.py.in:1127 #: ../setup/python3/anthyprefs.py.in:1120 msgid "Symbol" msgstr "Sรญmbolo" #: ../setup/python2/anthyprefs.py.in:1138 #: ../setup/python3/anthyprefs.py.in:1131 msgid "Old Character Style" msgstr "" #: ../setup/python2/anthyprefs.py.in:1148 #: ../setup/python3/anthyprefs.py.in:1141 msgid "Era" msgstr "" #: ../setup/python2/anthyprefs.py.in:1158 #: ../setup/python3/anthyprefs.py.in:1151 msgid "Emoji" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:1 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:1 msgid "IBus Anthy Setup" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:2 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:2 msgid "Set up IBus Anthy engine" msgstr "" #. self.__run_message_dialog needs self.__builder. #: ../setup/python2/main.py:133 ../setup/python3/main.py:136 msgid "ibus is not running." msgstr "" #: ../setup/python2/main.py:188 ../setup/python3/main.py:191 msgid "Menu label" msgstr "" #: ../setup/python2/main.py:207 ../setup/python3/main.py:210 msgid "Command" msgstr "Comando" #: ../setup/python2/main.py:211 ../setup/python3/main.py:214 msgid "Shortcut" msgstr "Atalho" #: ../setup/python2/main.py:256 ../setup/python3/main.py:259 msgid "Description" msgstr "Descriรงรฃo" #. Translators: "Embd" is an abbreviation of "embedded". #: ../setup/python2/main.py:264 ../setup/python3/main.py:267 msgid "Embd" msgstr "" #. Translators: "Sgl" is an abbreviation of "single". #: ../setup/python2/main.py:272 ../setup/python3/main.py:275 msgid "Sgl" msgstr "" #: ../setup/python2/main.py:447 ../setup/python2/main.py:483 #: ../setup/python3/main.py:452 ../setup/python3/main.py:488 msgid "Input Chars" msgstr "" #: ../setup/python2/main.py:449 ../setup/python2/main.py:485 #: ../setup/python3/main.py:454 ../setup/python3/main.py:490 msgid "Output Chars" msgstr "" #: ../setup/python2/main.py:531 ../setup/python3/main.py:536 msgid "Input" msgstr "Entrada" #: ../setup/python2/main.py:533 ../setup/python3/main.py:538 msgid "Single" msgstr "รšnico" #: ../setup/python2/main.py:535 ../setup/python3/main.py:540 msgid "Left" msgstr "Esquerda" #: ../setup/python2/main.py:537 ../setup/python3/main.py:542 msgid "Right" msgstr "Direita" #: ../setup/python2/main.py:619 ../setup/python3/main.py:624 msgid "Customize Romaji Key Table" msgstr "" #: ../setup/python2/main.py:620 ../setup/python2/setup.ui.h:54 #: ../setup/python3/main.py:625 ../setup/python3/setup.ui.h:54 msgid "_Romaji Key Table:" msgstr "" #: ../setup/python2/main.py:621 ../setup/python2/main.py:627 #: ../setup/python3/main.py:626 ../setup/python3/main.py:632 msgid "_Output Chars" msgstr "" #: ../setup/python2/main.py:622 ../setup/python2/main.py:1122 #: ../setup/python2/main.py:1270 ../setup/python2/setup.ui.h:27 #: ../setup/python3/main.py:627 ../setup/python3/main.py:1116 #: ../setup/python3/main.py:1264 ../setup/python3/setup.ui.h:27 msgid "Default" msgstr "Padrรฃo" #: ../setup/python2/main.py:625 ../setup/python3/main.py:630 msgid "Customize Kana Key Table" msgstr "" #: ../setup/python2/main.py:626 ../setup/python2/setup.ui.h:56 #: ../setup/python3/main.py:631 ../setup/python3/setup.ui.h:56 msgid "_Kana Key Table:" msgstr "" #: ../setup/python2/main.py:628 ../setup/python3/main.py:633 msgid "Japanese Keyboard Layout" msgstr "" #: ../setup/python2/main.py:629 ../setup/python3/main.py:634 msgid "U.S. Keyboard Layout" msgstr "" #: ../setup/python2/main.py:632 ../setup/python3/main.py:637 msgid "Customize Thumb Shift Key Table" msgstr "" #: ../setup/python2/main.py:633 ../setup/python3/main.py:638 msgid "_Thumb Shift Key Table:" msgstr "" #: ../setup/python2/main.py:634 ../setup/python3/main.py:639 msgid "Single _Output Chars" msgstr "" #: ../setup/python2/main.py:635 ../setup/python3/main.py:640 msgid "Base" msgstr "Base" #: ../setup/python2/main.py:636 ../setup/python3/main.py:641 msgid "NICOLA-J key extension" msgstr "" #: ../setup/python2/main.py:637 ../setup/python3/main.py:642 msgid "NICOLA-A key extension" msgstr "" #: ../setup/python2/main.py:638 ../setup/python3/main.py:643 msgid "NICOLA-F key extension" msgstr "" #: ../setup/python2/main.py:639 ../setup/python3/main.py:644 msgid "FMV KB231-J key extension" msgstr "" #: ../setup/python2/main.py:640 ../setup/python3/main.py:645 msgid "FMV KB231-A key extension" msgstr "" #: ../setup/python2/main.py:641 ../setup/python3/main.py:646 msgid "FMV KB231-F key extension" msgstr "" #: ../setup/python2/main.py:642 ../setup/python3/main.py:647 msgid "FMV KB611-J key extension" msgstr "" #: ../setup/python2/main.py:643 ../setup/python3/main.py:648 msgid "FMV KB611-A key extension" msgstr "" #: ../setup/python2/main.py:644 ../setup/python3/main.py:649 msgid "FMV KB611-F key extension" msgstr "" #: ../setup/python2/main.py:788 ../setup/python3/main.py:793 msgid "Your choosed file has already been added: " msgstr "" #: ../setup/python2/main.py:792 ../setup/python3/main.py:797 msgid "The file you have chosen does not exist: " msgstr "" #: ../setup/python2/main.py:796 ../setup/python3/main.py:801 msgid "Your choosed file is a directory: " msgstr "" #: ../setup/python2/main.py:800 ../setup/python3/main.py:805 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" #: ../setup/python2/main.py:807 ../setup/python3/main.py:812 msgid "Your file path is not good: " msgstr "" #: ../setup/python2/main.py:986 ../setup/python3/main.py:989 msgid "The engine xml file does not exist: " msgstr "" #: ../setup/python2/main.py:1102 ../setup/python3/main.py:1096 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" #: ../setup/python2/main.py:1231 ../setup/python3/main.py:1225 msgid "Confirmation" msgstr "Confirmaรงรฃo" #: ../setup/python2/main.py:1233 ../setup/python3/main.py:1227 msgid "You are about to close the setup dialog, is that OK?" msgstr "" #: ../setup/python2/main.py:1248 ../setup/python3/main.py:1242 msgid "Notice!" msgstr "Notificaรงรฃo !" #: ../setup/python2/main.py:1250 ../setup/python3/main.py:1244 msgid "" "You are about to close the setup dialog without saving your changes, is that " "OK?" msgstr "" #: ../setup/python2/main.py:1371 ../setup/python3/main.py:1365 msgid "Please specify Input Chars" msgstr "" #: ../setup/python2/main.py:1374 ../setup/python3/main.py:1368 msgid "Please specify Output Chars" msgstr "" #: ../setup/python2/main.py:1377 ../setup/python3/main.py:1371 msgid "Please specify Left Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1380 ../setup/python3/main.py:1374 msgid "Please specify Right Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1393 ../setup/python2/main.py:1437 #: ../setup/python3/main.py:1387 ../setup/python3/main.py:1431 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" #: ../setup/python2/main.py:1503 ../setup/python2/main.py:1590 #: ../setup/python3/main.py:1497 ../setup/python3/main.py:1584 msgid "Your file does not exist: " msgstr "Seu arquivo nรฃo existe:" #: ../setup/python2/main.py:1513 ../setup/python3/main.py:1507 msgid "Open Dictionary File" msgstr "" #: ../setup/python2/main.py:1516 ../setup/python2/main.py:1522 #: ../setup/python2/setup.ui.h:90 ../setup/python3/main.py:1510 #: ../setup/python3/main.py:1516 ../setup/python3/setup.ui.h:90 msgid "_Cancel" msgstr "_Cancelar" #: ../setup/python2/main.py:1517 ../setup/python3/main.py:1511 msgid "_Open" msgstr "_Abrir" #: ../setup/python2/main.py:1520 ../setup/python3/main.py:1514 msgid "Edit Dictionary File" msgstr "" #: ../setup/python2/main.py:1523 ../setup/python2/main.py:1618 #: ../setup/python2/setup.ui.h:91 ../setup/python3/main.py:1517 #: ../setup/python3/main.py:1612 ../setup/python3/setup.ui.h:91 msgid "_OK" msgstr "_OK" #: ../setup/python2/main.py:1534 ../setup/python3/main.py:1528 msgid "Your choosed file is not correct." msgstr "" #: ../setup/python2/main.py:1563 ../setup/python3/main.py:1557 msgid "You cannot delete the system dictionary." msgstr "" #: ../setup/python2/main.py:1586 ../setup/python3/main.py:1580 msgid "Your file is not good." msgstr "" #: ../setup/python2/main.py:1616 ../setup/python3/main.py:1610 msgid "View Dictionary File" msgstr "" #: ../setup/python2/main.py:1787 ../setup/python3/main.py:1781 msgid "Please press a key (or a key combination)" msgstr "" #: ../setup/python2/main.py:1788 ../setup/python3/main.py:1782 msgid "The dialog will be closed when the key is released" msgstr "" #: ../setup/python2/main.py:1808 ../setup/python2/main.py:1829 #: ../setup/python3/main.py:1802 ../setup/python3/main.py:1823 msgid "Invalid keysym" msgstr "" #: ../setup/python2/main.py:1809 ../setup/python2/main.py:1830 #: ../setup/python3/main.py:1803 ../setup/python3/main.py:1824 msgid "This keysym is not valid" msgstr "" #: ../setup/python2/setup.ui.h:6 ../setup/python3/setup.ui.h:6 msgid "NICOLA-J" msgstr "NICOLA-J" #: ../setup/python2/setup.ui.h:7 ../setup/python3/setup.ui.h:7 msgid "NICOLA-A" msgstr "NICOLA-A" #: ../setup/python2/setup.ui.h:8 ../setup/python3/setup.ui.h:8 msgid "NICOLA-F" msgstr "NICOLA-F" #: ../setup/python2/setup.ui.h:9 ../setup/python3/setup.ui.h:9 msgid "None" msgstr "Nenhum" #: ../setup/python2/setup.ui.h:10 ../setup/python3/setup.ui.h:10 msgid "FMV KB231 key extension" msgstr "" #: ../setup/python2/setup.ui.h:11 ../setup/python3/setup.ui.h:11 msgid "FMV KB611 key extension" msgstr "" #: ../setup/python2/setup.ui.h:19 ../setup/python3/setup.ui.h:19 msgid "Keep numpad codes" msgstr "" #: ../setup/python2/setup.ui.h:20 ../setup/python3/setup.ui.h:20 msgid "Convert characters" msgstr "" #: ../setup/python2/setup.ui.h:21 ../setup/python3/setup.ui.h:21 msgid "Do nothing" msgstr "" #: ../setup/python2/setup.ui.h:22 ../setup/python3/setup.ui.h:22 msgid "Automatically convert" msgstr "" #: ../setup/python2/setup.ui.h:23 ../setup/python3/setup.ui.h:23 msgid "Automatically commit" msgstr "" #: ../setup/python2/setup.ui.h:24 ../setup/python3/setup.ui.h:24 msgid "Clear" msgstr "Limpar" #: ../setup/python2/setup.ui.h:25 ../setup/python3/setup.ui.h:25 msgid "Commit" msgstr "" #: ../setup/python2/setup.ui.h:26 ../setup/python3/setup.ui.h:26 msgid "Hold" msgstr "" #: ../setup/python2/setup.ui.h:28 ../setup/python3/setup.ui.h:28 msgid "ATOK" msgstr "ATOK" #: ../setup/python2/setup.ui.h:29 ../setup/python3/setup.ui.h:29 msgid "Wnn" msgstr "Wnn" #: ../setup/python2/setup.ui.h:30 ../setup/python3/setup.ui.h:30 msgid "Setup - IBus-Anthy" msgstr "" #: ../setup/python2/setup.ui.h:31 ../setup/python3/setup.ui.h:31 msgid "_Input Mode:" msgstr "" #: ../setup/python2/setup.ui.h:32 ../setup/python3/setup.ui.h:32 msgid "_Typing Method:" msgstr "" #: ../setup/python2/setup.ui.h:33 ../setup/python3/setup.ui.h:33 msgid "Conversion _Mode:" msgstr "" #: ../setup/python2/setup.ui.h:34 ../setup/python3/setup.ui.h:34 msgid "Initial Setting" msgstr "Configuraรงรฃo inicial" #: ../setup/python2/setup.ui.h:35 ../setup/python3/setup.ui.h:35 msgid "Menu Visibility on Status Icon" msgstr "" #: ../setup/python2/setup.ui.h:37 ../setup/python3/setup.ui.h:37 msgid "_Period Style:" msgstr "" #: ../setup/python2/setup.ui.h:38 ../setup/python3/setup.ui.h:38 msgid "Symbo_l Style:" msgstr "" #: ../setup/python2/setup.ui.h:39 ../setup/python3/setup.ui.h:39 msgid "Numpad _Key Type:" msgstr "" #: ../setup/python2/setup.ui.h:40 ../setup/python3/setup.ui.h:40 msgid "_Behavior on Period:" msgstr "" #: ../setup/python2/setup.ui.h:41 ../setup/python3/setup.ui.h:41 msgid "Behavior on _Focus Out:" msgstr "" #: ../setup/python2/setup.ui.h:42 ../setup/python3/setup.ui.h:42 msgid "Behavior" msgstr "" #: ../setup/python2/setup.ui.h:43 ../setup/python3/setup.ui.h:43 msgid "Candidate _Window Page Size:" msgstr "" #: ../setup/python2/setup.ui.h:44 ../setup/python3/setup.ui.h:44 msgid "Convert _symbols with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:45 ../setup/python3/setup.ui.h:45 msgid "Convert _numbers with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:46 ../setup/python3/setup.ui.h:46 msgid "Con_vert spaces with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:47 ../setup/python3/setup.ui.h:47 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" #: ../setup/python2/setup.ui.h:48 ../setup/python3/setup.ui.h:48 msgid "Other" msgstr "Outro" #: ../setup/python2/setup.ui.h:49 ../setup/python3/setup.ui.h:49 msgid "Conversion" msgstr "Conversรฃo" #: ../setup/python2/setup.ui.h:50 ../setup/python3/setup.ui.h:50 msgid "_Shortcut Type:" msgstr "" #: ../setup/python2/setup.ui.h:51 ../setup/python3/setup.ui.h:51 msgid "De_fault" msgstr "" #: ../setup/python2/setup.ui.h:52 ../setup/python3/setup.ui.h:52 msgid "_Edit" msgstr "_Editar" #: ../setup/python2/setup.ui.h:53 ../setup/python3/setup.ui.h:53 msgid "Key Binding" msgstr "" #: ../setup/python2/setup.ui.h:55 ../setup/python3/setup.ui.h:55 msgid "Romaji" msgstr "Romaji" #: ../setup/python2/setup.ui.h:57 ../setup/python3/setup.ui.h:57 msgid "Kana" msgstr "Kana" #: ../setup/python2/setup.ui.h:58 ../setup/python3/setup.ui.h:58 msgid "Keyboad _layout:" msgstr "" #: ../setup/python2/setup.ui.h:59 ../setup/python3/setup.ui.h:59 msgid "Keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:60 ../setup/python3/setup.ui.h:60 msgid "Typing Method" msgstr "" #: ../setup/python2/setup.ui.h:61 ../setup/python3/setup.ui.h:61 msgid "_Left Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:62 ../setup/python3/setup.ui.h:62 msgid "Right _Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:63 ../setup/python3/setup.ui.h:63 msgid "Adjust _input method layout to system keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:64 ../setup/python3/setup.ui.h:64 msgid "Adjust IM layout to XKB layout" msgstr "" #: ../setup/python2/setup.ui.h:65 ../setup/python3/setup.ui.h:65 msgid "Input _Method Layout:" msgstr "" #: ../setup/python2/setup.ui.h:66 ../setup/python3/setup.ui.h:66 msgid "Restart IBus when you change the keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:67 ../setup/python3/setup.ui.h:67 msgid "Restart IBus when you change XKB" msgstr "" #: ../setup/python2/setup.ui.h:68 ../setup/python3/setup.ui.h:68 msgid "_Additional Key Arrangement:" msgstr "" #: ../setup/python2/setup.ui.h:69 ../setup/python3/setup.ui.h:69 msgid "" "'~', '『', '¢', '£' and so on can be output with " "Thumb Shift key" msgstr "" #: ../setup/python2/setup.ui.h:70 ../setup/python3/setup.ui.h:70 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" #: ../setup/python2/setup.ui.h:71 ../setup/python3/setup.ui.h:71 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" #: ../setup/python2/setup.ui.h:72 ../setup/python3/setup.ui.h:72 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" #: ../setup/python2/setup.ui.h:73 ../setup/python3/setup.ui.h:73 msgid "Seion + Shift can output Handakuon" msgstr "" #: ../setup/python2/setup.ui.h:74 ../setup/python3/setup.ui.h:74 msgid "Thumb _Shift Key Table:" msgstr "" #: ../setup/python2/setup.ui.h:75 ../setup/python3/setup.ui.h:75 msgid "Thumb Shift Layout" msgstr "" #: ../setup/python2/setup.ui.h:76 ../setup/python3/setup.ui.h:76 msgid "Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:77 ../setup/python3/setup.ui.h:77 msgid "_Edit Dictionary Command:" msgstr "" #: ../setup/python2/setup.ui.h:78 ../setup/python3/setup.ui.h:78 msgid "_Add Word Command:" msgstr "" #: ../setup/python2/setup.ui.h:79 ../setup/python3/setup.ui.h:79 msgid "Default Dictionary Configuration" msgstr "" #: ../setup/python2/setup.ui.h:80 ../setup/python3/setup.ui.h:80 msgid "_View" msgstr "_Ver" #: ../setup/python2/setup.ui.h:81 ../setup/python3/setup.ui.h:81 msgid "_Add" msgstr "_Adicionar" #: ../setup/python2/setup.ui.h:82 ../setup/python3/setup.ui.h:82 msgid "_Delete" msgstr "_Excluir" #: ../setup/python2/setup.ui.h:83 ../setup/python3/setup.ui.h:83 msgid "_Up" msgstr "A_cima" #: ../setup/python2/setup.ui.h:84 ../setup/python3/setup.ui.h:84 msgid "You can change the order on language bar" msgstr "" #: ../setup/python2/setup.ui.h:85 ../setup/python3/setup.ui.h:85 msgid "_Down" msgstr "A_baixo" #: ../setup/python2/setup.ui.h:86 ../setup/python3/setup.ui.h:86 msgid "Extended Dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:87 ../setup/python3/setup.ui.h:87 msgid "Dictionary" msgstr "Dicionรกrio" #: ../setup/python2/setup.ui.h:88 ../setup/python3/setup.ui.h:88 msgid "About" msgstr "Sobre" #: ../setup/python2/setup.ui.h:89 ../setup/python3/setup.ui.h:89 msgid "_Apply" msgstr "_Aplicar" #: ../setup/python2/setup.ui.h:92 ../setup/python3/setup.ui.h:92 msgid "Edit Shortcut" msgstr "Editar atalho" #: ../setup/python2/setup.ui.h:93 ../setup/python3/setup.ui.h:93 msgid "Key Code:" msgstr "" #: ../setup/python2/setup.ui.h:94 ../setup/python3/setup.ui.h:94 msgid "Modifier:" msgstr "" #: ../setup/python2/setup.ui.h:95 ../setup/python3/setup.ui.h:95 msgid "A_lternate" msgstr "" #: ../setup/python2/setup.ui.h:96 ../setup/python3/setup.ui.h:96 msgid "Co_ntrol" msgstr "" #: ../setup/python2/setup.ui.h:97 ../setup/python3/setup.ui.h:97 msgid "_Shift" msgstr "" #: ../setup/python2/setup.ui.h:98 ../setup/python3/setup.ui.h:98 msgid "_Refresh" msgstr "Atualiza_r" #: ../setup/python2/setup.ui.h:99 ../setup/python3/setup.ui.h:99 msgid "_Input Characters" msgstr "" #: ../setup/python2/setup.ui.h:100 ../setup/python3/setup.ui.h:100 msgid "_Output Characters" msgstr "" #: ../setup/python2/setup.ui.h:101 ../setup/python3/setup.ui.h:101 msgid "_Left Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:102 ../setup/python3/setup.ui.h:102 msgid "_Right Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:103 ../setup/python3/setup.ui.h:103 msgid "_Remove" msgstr "_Remover" #: ../setup/python2/setup.ui.h:104 ../setup/python3/setup.ui.h:104 msgid "_Close" msgstr "_Fechar" #: ../setup/python2/setup.ui.h:105 ../setup/python3/setup.ui.h:105 msgid "_Short Label:" msgstr "" #: ../setup/python2/setup.ui.h:106 ../setup/python3/setup.ui.h:106 msgid "_Description:" msgstr "_Descriรงรฃo:" #: ../setup/python2/setup.ui.h:107 ../setup/python3/setup.ui.h:107 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:108 ../setup/python3/setup.ui.h:108 msgid "_Embed your dictionary in the system dictionary" msgstr "" #: ../setup/python2/setup.ui.h:109 ../setup/python3/setup.ui.h:109 msgid "Enable the _reverse conversion" msgstr "" #: ../setup/python2/setup.ui.h:110 ../setup/python3/setup.ui.h:110 msgid "The Anthy engine for the IBus input platform" msgstr "" #: ../setup/python2/setup.ui.h:111 ../setup/python3/setup.ui.h:111 msgid "translator_credits" msgstr "" ibus-anthy-1.5.11/po/uk.po000066400000000000000000001026461346647371500153100ustar00rootroot00000000000000# Ukrainian translation of ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2019 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Yuri Chornoivan , 2015. #zanata # Yuri Chornoivan , 2016. #zanata # fujiwara , 2017. #zanata # fujiwara , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ibus-anthy 1.5.10\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2019-04-22 23:08+0900\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-04-23 08:16+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: Ukrainian \n" "Language: uk\n" "X-Generator: Zanata 4.6.2\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: data/ibus-anthy.appdata.xml.in:7 msgid "Japanese input method" msgstr "ะกะฟะพัั–ะฑ ะฒะฒะตะดะตะฝะฝั ัะฟะพะฝััŒะบะพั—" #: data/ibus-anthy.appdata.xml.in:9 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" "ะกะฟะพัั–ะฑ ะฒะฒะตะดะตะฝะฝั Anthy ั€ะพะทั€ะพะฑะปะตะฝะพ ะดะปั ะฒะฒะตะดะตะฝะฝั ั‚ะตะบัั‚ั–ะฒ ัะฟะพะฝััŒะบะธะผะธ ั–ั”ั€ะพะณะปั–ั„ะฐะผะธ." "" #: data/ibus-anthy.appdata.xml.in:12 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" "ะกะฟะพัะพะฑะธ ะฒะฒะตะดะตะฝะฝั โ€” ั†ะต ัะธัั‚ะตะผะธ ะฝะฐะฑะธั€ะฐะฝะฝั ั‚ะตะบัั‚ัƒ, ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ัะบะธั… " "ะบะพั€ะธัั‚ัƒะฒะฐั‡ั– ะผะพะถัƒั‚ัŒ ะฒะฒะพะดะธั‚ะธ ั‚ะตะบัั‚ะธ ัะบะปะฐะดะฝะธะผะธ ัะธัั‚ะตะผะฐะผะธ ะฟะธัะตะผะฝะพัั‚ั–. ะ’ะพะฝะธ " "ะฟะพั‚ั€ั–ะฑะฝั– ะดะปั ะผะพะฒ, ะดะต ะทะฐะฟะธั ะทะดั–ะนัะฝัŽั”ั‚ัŒัั ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ะฒะตะปะธะบะพั— ะบั–ะปัŒะบะพัั‚ั– " "ัะธะผะฒะพะปั–ะฒ, ัะบั– ะฟั€ะพัั‚ะพ ะฝะต ะผะพะณะปะธ ะฑ ัƒะผั–ัั‚ะธั‚ะธัั ะฝะฐ ะบะปะฐะฒั–ะฐั‚ัƒั€ั–." #: engine/python2/default.inputMethod.xml.in.in:13 #: engine/python3/default.inputMethod.xml.in.in:13 msgid "Anthy Input Method" msgstr "ะกะฟะพัั–ะฑ ะฒะฒะตะดะตะฝะฝั Anthy" #: engine/python2/engine.py:208 engine/python3/engine.py:209 #, python-format msgid "" "Could not enable Anthy.\n" "The end of the content of the file %s/last-record2_default.utf8 in your home " "directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" "ะะต ะฒะดะฐะปะพัั ัƒะฒั–ะผะบะฝัƒั‚ะธ Anthy.\n" "ะ”ะฐะฝั– ัƒ ั„ะฐะนะปั– %s/last-record2_default.utf8 ะฒะฐัˆะพะณะพ ะดะพะผะฐัˆะฝัŒะพะณะพ ะบะฐั‚ะฐะปะพะณัƒ ะฝะต " "ะทะฐะฒะตั€ัˆัƒัŽั‚ัŒัั ะฝะฐ ยซ\\nยป. ะขะพะฑั‚ะพ ั‚ะตะบัั‚ ั„ะฐะนะปะฐ ั” ะฝะตะบะพั€ะตะบั‚ะฝะธะผ.\n" "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฒะธะฟั€ะฐะฒั‚ะต ั„ะฐะนะป ะฐะฑะพ ะฒะธะปัƒั‡ั–ั‚ัŒ ะนะพะณะพ ะฒั€ัƒั‡ะฝัƒ ั– ะฟะตั€ะตะทะฐะฟัƒัั‚ั–ั‚ัŒ IBus." #: engine/python2/engine.py:256 engine/python3/engine.py:257 #: setup/python2/main.py:420 setup/python3/main.py:425 msgid "Preferences - Anthy" msgstr "ะŸะฐั€ะฐะผะตั‚ั€ะธ โ€“ Anthy" #: engine/python2/engine.py:258 engine/python3/engine.py:259 msgid "Configure Anthy" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐั‚ะธ Anthy" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: engine/python2/engine.py:295 engine/python2/engine.py:383 #: engine/python2/engine.py:450 engine/python2/engine.py:526 #: engine/python2/engine.py:892 engine/python2/engine.py:923 #: engine/python2/engine.py:947 engine/python2/engine.py:976 #: engine/python2/engine.py:1038 engine/python3/engine.py:296 #: engine/python3/engine.py:384 engine/python3/engine.py:451 #: engine/python3/engine.py:527 engine/python3/engine.py:887 #: engine/python3/engine.py:918 engine/python3/engine.py:942 #: engine/python3/engine.py:971 engine/python3/engine.py:1033 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "%(description)s (%(symbol)s)" #: engine/python2/engine.py:296 engine/python2/engine.py:893 #: engine/python3/engine.py:297 engine/python3/engine.py:888 #: setup/python2/main.py:405 setup/python3/main.py:410 msgid "Input mode" msgstr "ะ ะตะถะธะผ ะฒะฒะตะดะตะฝะฝั" #: engine/python2/engine.py:302 engine/python3/engine.py:303 msgid "Switch input mode" msgstr "ะŸะตั€ะตะผะบะฝัƒั‚ะธ ั€ะตะถะธะผ ะฒะฒะตะดะตะฝะฝั" #: engine/python2/engine.py:312 engine/python3/engine.py:313 #: setup/python2/setup.ui:17 setup/python3/setup.ui:17 msgid "Hiragana" msgstr "ะฅั–ั€ะฐะณะฐะฝะฐ" #: engine/python2/engine.py:321 engine/python3/engine.py:322 #: setup/python2/setup.ui:20 setup/python3/setup.ui:20 msgid "Katakana" msgstr "ะšะฐั‚ะฐะบะฐะฝะฐ" #: engine/python2/engine.py:330 engine/python3/engine.py:331 #: setup/python2/setup.ui:23 setup/python3/setup.ui:23 msgid "Halfwidth Katakana" msgstr "ะšะฐั‚ะฐะบะฐะฝะฐ, ัะธะผะฒะพะปะธ ะฟะพะปะพะฒะธะฝะฝะพั— ัˆะธั€ะธะฝะธ" #: engine/python2/engine.py:339 engine/python3/engine.py:340 #: setup/python2/setup.ui:26 setup/python3/setup.ui:26 msgid "Latin" msgstr "ะ›ะฐั‚ะธะฝััŒะบะฐ" #: engine/python2/engine.py:348 engine/python3/engine.py:349 #: setup/python2/setup.ui:29 setup/python3/setup.ui:29 msgid "Wide Latin" msgstr "ะจะธั€ะพะบะฐ ะปะฐั‚ะธะฝััŒะบะฐ" #: engine/python2/engine.py:384 engine/python2/engine.py:924 #: engine/python2/engine.py:948 engine/python3/engine.py:385 #: engine/python3/engine.py:919 engine/python3/engine.py:943 #: setup/python2/main.py:408 setup/python3/main.py:413 msgid "Typing method" msgstr "ะœะตั‚ะพะด ะฒะฒะตะดะตะฝะฝั" #: engine/python2/engine.py:390 engine/python3/engine.py:391 msgid "Switch typing method" msgstr "ะŸะตั€ะตะผะบะฝัƒั‚ะธ ะผะตั‚ะพะด ะฒะฒะตะดะตะฝะฝั" #: engine/python2/engine.py:400 engine/python3/engine.py:401 #: setup/python2/setup.ui:71 setup/python3/setup.ui:71 msgid "Romaji" msgstr "ะ ะพะผะฐะดะทั–" #: engine/python2/engine.py:409 engine/python3/engine.py:410 #: setup/python2/setup.ui:74 setup/python3/setup.ui:74 msgid "Kana" msgstr "ะšะฐะฝะฐ" #: engine/python2/engine.py:418 engine/python3/engine.py:419 #: setup/python2/setup.ui:77 setup/python3/setup.ui:77 msgid "Thumb shift" msgstr "ะ”ะพะดะฐั‚ะบะพะฒั– Shift" #: engine/python2/engine.py:451 engine/python2/engine.py:977 #: engine/python3/engine.py:452 engine/python3/engine.py:972 #: setup/python2/main.py:411 setup/python3/main.py:416 msgid "Segment mode" msgstr "ะ ะตะถะธะผ ัะตะณะผะตะฝั‚ั–ะฒ" #: engine/python2/engine.py:457 engine/python3/engine.py:458 msgid "Switch conversion mode" msgstr "ะŸะตั€ะตะผะบะฝัƒั‚ะธ ั€ะตะถะธะผ ะฟะตั€ะตั‚ะฒะพั€ะตะฝะฝั" #: engine/python2/engine.py:467 engine/python3/engine.py:468 #: setup/python2/setup.ui:87 setup/python3/setup.ui:87 msgid "Multiple segment" msgstr "ะšั€ะฐั‚ะฝะธะน ัะตะณะผะตะฝั‚" #: engine/python2/engine.py:476 engine/python3/engine.py:477 #: setup/python2/setup.ui:90 setup/python3/setup.ui:90 msgid "Single segment" msgstr "ะžะดะธะฝะฐั€ะฝะธะน ัะตะณะผะตะฝั‚" #: engine/python2/engine.py:485 engine/python3/engine.py:486 #: setup/python2/setup.ui:93 setup/python3/setup.ui:93 msgid "Immediate conversion (multiple segment)" msgstr "ะะตะณะฐะนะฝะต ะฟะตั€ะตั‚ะฒะพั€ะตะฝะฝั (ะบั€ะฐั‚ะฝะธะน ัะตะณะผะตะฝั‚)" #: engine/python2/engine.py:494 engine/python3/engine.py:495 #: setup/python2/setup.ui:96 setup/python3/setup.ui:96 msgid "Immediate conversion (single segment)" msgstr "ะะตะณะฐะนะฝะต ะฟะตั€ะตั‚ะฒะพั€ะตะฝะฝั (ะพะดะธะฝะฐั€ะฝะธะน ัะตะณะผะตะฝั‚)" #: engine/python2/engine.py:527 engine/python2/engine.py:1039 #: engine/python3/engine.py:528 engine/python3/engine.py:1034 #: setup/python2/main.py:414 setup/python3/main.py:419 msgid "Dictionary mode" msgstr "ะ ะตะถะธะผ ัะปะพะฒะฝะธะบะฐ" #: engine/python2/engine.py:533 engine/python3/engine.py:534 msgid "Switch dictionary" msgstr "ะŸะตั€ะตะผะบะฝัƒั‚ะธ ัะปะพะฒะฝะธะบ" #: engine/python2/engine.py:623 engine/python3/engine.py:623 #: setup/python2/main.py:417 setup/python3/main.py:422 msgid "Dictionary - Anthy" msgstr "ะกะปะพะฒะฝะธะบ โ€“ Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: engine/python2/engine.py:629 engine/python3/engine.py:628 msgid "Dic" msgstr "ะกะ›ะžะ’" #: engine/python2/engine.py:636 engine/python3/engine.py:635 msgid "Configure dictionaries" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐั‚ะธ ัะปะพะฒะฝะธะบะธ" #: engine/python2/engine.py:646 engine/python3/engine.py:645 msgid "Edit dictionaries" msgstr "ะ ะตะดะฐะณัƒะฒะฐั‚ะธ ัะปะพะฒะฝะธะบะธ" #: engine/python2/engine.py:648 engine/python3/engine.py:647 msgid "Launch the dictionary tool" msgstr "ะ—ะฐะฟัƒัั‚ะธั‚ะธ ะทะฐัั–ะฑ ั€ะพะฑะพั‚ะธ ะทั– ัะปะพะฒะฝะธะบะฐะผะธ" #: engine/python2/engine.py:655 engine/python3/engine.py:654 msgid "Add words" msgstr "ะ”ะพะดะฐั‚ะธ ัะปะพะฒะฐ" #: engine/python2/engine.py:657 engine/python3/engine.py:656 msgid "Add words to the dictionary" msgstr "ะ”ะพะดะฐะฒะฐั‚ะธ ัะปะพะฒะฐ ะดะพ ัะปะพะฒะฝะธะบะฐ" #: setup/python2/anthyprefs.py:336 setup/python2/setup.ui:397 #: setup/python3/anthyprefs.py:329 setup/python3/setup.ui:397 msgid "General" msgstr "ะ—ะฐะณะฐะปัŒะฝะต" #: setup/python2/anthyprefs.py:337 setup/python3/anthyprefs.py:330 msgid "Zip Code Conversion" msgstr "ะŸะตั€ะตั‚ะฒะพั€ะตะฝะฝั ะบะพะดั–ะฒ ั–ะฝะดะตะบัั–ะฒ" #: setup/python2/anthyprefs.py:338 setup/python3/anthyprefs.py:331 msgid "Symbol" msgstr "ะกะธะผะฒะพะป" #: setup/python2/anthyprefs.py:339 setup/python3/anthyprefs.py:332 msgid "Old Character Style" msgstr "ะกั‚ะฐั€ะธะน ัั‚ะธะปัŒ ัะธะผะฒะพะปั–ะฒ" #: setup/python2/anthyprefs.py:340 setup/python3/anthyprefs.py:333 msgid "Era" msgstr "ะ•ั€ะฐ" #: setup/python2/anthyprefs.py:341 setup/python3/anthyprefs.py:334 msgid "Emoji" msgstr "ะ•ะผะพะดะทั–" #: setup/python2/ibus-setup-anthy.desktop.in.in:3 #: setup/python3/ibus-setup-anthy.desktop.in.in:3 msgid "IBus Anthy Setup" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั Anthy IBus" #: setup/python2/ibus-setup-anthy.desktop.in.in:4 #: setup/python3/ibus-setup-anthy.desktop.in.in:4 msgid "Set up IBus Anthy engine" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั ั€ัƒัˆั–ั Anthy IBus" #: setup/python2/main.py:177 setup/python3/main.py:180 msgid "Menu label" msgstr "ะœั–ั‚ะบะฐ ะผะตะฝัŽ" #: setup/python2/main.py:198 setup/python3/main.py:201 msgid "Command" msgstr "ะšะพะผะฐะฝะดะฐ" #: setup/python2/main.py:202 setup/python3/main.py:205 msgid "Shortcut" msgstr "ะกะบะพั€ะพั‡ะตะฝะฝั" #: setup/python2/main.py:247 setup/python3/main.py:250 msgid "Description" msgstr "ะžะฟะธั" #. Translators: "Embd" is an abbreviation of "embedded". #: setup/python2/main.py:255 setup/python3/main.py:258 msgid "Embd" msgstr "ะ’ะฑัƒะด" #. Translators: "Sgl" is an abbreviation of "single". #: setup/python2/main.py:263 setup/python3/main.py:266 msgid "Sgl" msgstr "ะžะดะฝ" #: setup/python2/main.py:441 setup/python2/main.py:467 #: setup/python3/main.py:446 setup/python3/main.py:472 msgid "Input Chars" msgstr "ะ’ะฒะตะดะตะฝะธั… ัะธะผะฒะพะปั–ะฒ" #: setup/python2/main.py:443 setup/python2/main.py:469 #: setup/python3/main.py:448 setup/python3/main.py:474 msgid "Output Chars" msgstr "ะ’ะธะฒะตะดะตะฝะธั… ัะธะผะฒะพะปั–ะฒ" #: setup/python2/main.py:499 setup/python3/main.py:504 msgid "Input" msgstr "ะ’ะฒะตะดะตะฝะฝั" #: setup/python2/main.py:501 setup/python3/main.py:506 msgid "Single" msgstr "ะžะดะธะฝะฐั€ะฝะธะน" #: setup/python2/main.py:503 setup/python3/main.py:508 msgid "Left" msgstr "ะ›ั–ะฒะพั€ัƒั‡" #: setup/python2/main.py:505 setup/python3/main.py:510 msgid "Right" msgstr "ะŸั€ะฐะฒะพั€ัƒั‡" #: setup/python2/main.py:587 setup/python3/main.py:592 msgid "Customize Romaji Key Table" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐั‚ะธ ั‚ะฐะฑะปะธั†ัŽ ะบะปะฐะฒั–ัˆ ั€ะพะผะฐะดะทั–" #: setup/python2/main.py:588 setup/python2/setup.ui:910 #: setup/python3/main.py:593 setup/python3/setup.ui:910 msgid "_Romaji Key Table:" msgstr "ะขะฐะฑะปะธั†ั ะบะปะฐะฒั–ัˆ _ั€ะพะผะฐะดะทั–:" #: setup/python2/main.py:589 setup/python2/main.py:595 #: setup/python3/main.py:594 setup/python3/main.py:600 msgid "_Output Chars" msgstr "ะกะธะผะฒะพะปะธ ะฒ_ะธะฒะตะดะตะฝะฝั" #: setup/python2/main.py:590 setup/python2/main.py:1071 #: setup/python2/main.py:1175 setup/python2/setup.ui:183 #: setup/python3/main.py:595 setup/python3/main.py:1065 #: setup/python3/main.py:1169 setup/python3/setup.ui:183 msgid "Default" msgstr "ะขะธะฟะพะฒะธะน" #: setup/python2/main.py:593 setup/python3/main.py:598 msgid "Customize Kana Key Table" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐั‚ะธ ั‚ะฐะฑะปะธั†ัŽ ะบะปะฐะฒั–ัˆ ะบะฐะฝะธ" #: setup/python2/main.py:594 setup/python2/setup.ui:988 #: setup/python3/main.py:599 setup/python3/setup.ui:988 msgid "_Kana Key Table:" msgstr "ะขะฐะฑะปะธั†ั ะบะปะฐะฒั–ัˆ _ะบะฐะฝะธ:" #: setup/python2/main.py:596 setup/python3/main.py:601 msgid "Japanese Keyboard Layout" msgstr "ะฏะฟะพะฝััŒะบะฐ ั€ะพะทะบะปะฐะดะบะฐ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ" #: setup/python2/main.py:597 setup/python3/main.py:602 msgid "U.S. Keyboard Layout" msgstr "ะะผะตั€ะธะบะฐะฝััŒะบะฐ ั€ะพะทะบะปะฐะดะบะฐ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ" #: setup/python2/main.py:600 setup/python3/main.py:605 msgid "Customize Thumb Shift Key Table" msgstr "ะะฐะปะฐัˆั‚ะพะฒัƒะฒะฐะฝะฝั ั€ะพะทะบะปะฐะดะบะธ ะบะปะฐะฒั–ัˆ ั–ะท ะดะพะดะฐั‚ะบะพะฒะธะผะธ Shift" #: setup/python2/main.py:601 setup/python3/main.py:606 msgid "_Thumb Shift Key Table:" msgstr "_ะ ะพะทะบะปะฐะดะบะฐ ะท ะดะพะดะฐั‚ะบะพะฒะธะผะธ Shift:" #: setup/python2/main.py:602 setup/python3/main.py:607 msgid "Single _Output Chars" msgstr "ะžะดะธะฝะฐั€ะฝั– ัะธะผะฒะพะปะธ ะฒ_ะธะฒะตะดะตะฝะฝั" #: setup/python2/main.py:603 setup/python3/main.py:608 msgid "Base" msgstr "ะžัะฝะพะฒะฐ" #: setup/python2/main.py:604 setup/python3/main.py:609 msgid "NICOLA-J key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ NICOLA-J" #: setup/python2/main.py:605 setup/python3/main.py:610 msgid "NICOLA-A key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ NICOLA-A" #: setup/python2/main.py:606 setup/python3/main.py:611 msgid "NICOLA-F key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ NICOLA-F" #: setup/python2/main.py:607 setup/python3/main.py:612 msgid "FMV KB231-J key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB231-J" #: setup/python2/main.py:608 setup/python3/main.py:613 msgid "FMV KB231-A key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB231-A" #: setup/python2/main.py:609 setup/python3/main.py:614 msgid "FMV KB231-F key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB231-F" #: setup/python2/main.py:610 setup/python3/main.py:615 msgid "FMV KB611-J key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB611-J" #: setup/python2/main.py:611 setup/python3/main.py:616 msgid "FMV KB611-A key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB611-A" #: setup/python2/main.py:612 setup/python3/main.py:617 msgid "FMV KB611-F key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB611-F" #: setup/python2/main.py:753 setup/python3/main.py:758 msgid "Your choosed file has already been added: " msgstr "ะ’ะธะฑั€ะฐะฝะธะน ะฒะฐะผะธ ั„ะฐะนะป ะฒะถะต ะดะพะดะฐะฝะพ: " #: setup/python2/main.py:757 setup/python3/main.py:762 msgid "The file you have chosen does not exist: " msgstr "ะ’ะธะฑั€ะฐะฝะพะณะพ ะฒะฐะผะธ ั„ะฐะนะปะฐ ะฝะต ั–ัะฝัƒั”: " #: setup/python2/main.py:761 setup/python3/main.py:766 msgid "Your choosed file is a directory: " msgstr "ะ’ะธะฑั€ะฐะฝะธะน ะฒะฐะผะธ ั„ะฐะนะป ั” ะบะฐั‚ะฐะปะพะณะพะผ: " #: setup/python2/main.py:765 setup/python3/main.py:770 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "ะะต ะผะพะถะฝะฐ ะดะพะดะฐะฒะฐั‚ะธ ัะปะพะฒะฝะธะบ ะดะพ ะฟั€ะธะฒะฐั‚ะฝะพะณะพ ะบะฐั‚ะฐะปะพะณัƒ anthy: " #: setup/python2/main.py:774 setup/python3/main.py:779 msgid "Your file path is not good: " msgstr "ะจะปัั… ะดะพ ั„ะฐะนะปะฐ ั” ะฟะพะผะธะปะบะพะฒะธะผ: " #: setup/python2/main.py:935 setup/python3/main.py:938 msgid "The engine xml file does not exist: " msgstr "ะคะฐะนะปะฐ xml ั€ัƒัˆั–ั ะฝะต ั–ัะฝัƒั”: " #: setup/python2/main.py:1051 setup/python3/main.py:1045 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" "ะ—ะผั–ะฝะตะฝะพ ั€ะพะทะบะปะฐะดะบัƒ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ Anthy. ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฟะตั€ะตะทะฐะฟัƒัั‚ั–ั‚ัŒ ibus, ั‰ะพะฑ " "ะฟะตั€ะตะทะฐะฒะฐะฝั‚ะฐะถะธั‚ะธ ั€ะพะทะบะปะฐะดะบัƒ." #: setup/python2/main.py:1263 setup/python3/main.py:1257 msgid "Please specify Input Chars" msgstr "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฒะบะฐะถั–ั‚ัŒ ัะธะผะฒะพะปะธ ะฒะฒะตะดะตะฝะฝั" #: setup/python2/main.py:1266 setup/python3/main.py:1260 msgid "Please specify Output Chars" msgstr "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฒะบะฐะถั–ั‚ัŒ ัะธะผะฒะพะปะธ ะฒะธะฒะตะดะตะฝะฝั" #: setup/python2/main.py:1269 setup/python3/main.py:1263 msgid "Please specify Left Thumb Shift Chars" msgstr "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฒะบะฐะถั–ั‚ัŒ ัะธะผะฒะพะปะธ ะปั–ะฒะพั— ะดะพะดะฐั‚ะบะพะฒะพั— ะบะปะฐะฒั–ัˆั– Shift" #: setup/python2/main.py:1272 setup/python3/main.py:1266 msgid "Please specify Right Thumb Shift Chars" msgstr "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฒะบะฐะถั–ั‚ัŒ ัะธะผะฒะพะปะธ ะฟั€ะฐะฒะพั— ะดะพะดะฐั‚ะบะพะฒะพั— ะบะปะฐะฒั–ัˆั– Shift" #: setup/python2/main.py:1285 setup/python2/main.py:1319 #: setup/python3/main.py:1279 setup/python3/main.py:1313 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" "ะ’ะฐัˆัƒ ะฝะตั‚ะธะฟะพะฒัƒ ะบะปะฐะฒั–ัˆัƒ ะฝะต ะฟั€ะธะทะฝะฐั‡ะตะฝะพ ะดะพ ะถะพะดะฝะพะณะพ ั€ะพะทะดั–ะปัƒ. ะœะพะถะปะธะฒะพ, ั†ะต ะฒะฐะดะฐ ัƒ " "ะฟั€ะพะณั€ะฐะผั–." #: setup/python2/main.py:1374 setup/python2/main.py:1463 #: setup/python3/main.py:1368 setup/python3/main.py:1457 msgid "Your file does not exist: " msgstr "ะ’ะฐัˆะพะณะพ ั„ะฐะนะปะฐ ะฝะต ั–ัะฝัƒั”: " #: setup/python2/main.py:1384 setup/python3/main.py:1378 msgid "Open Dictionary File" msgstr "ะ’ั–ะดะบั€ะธั‚ะธ ั„ะฐะนะป ัะปะพะฒะฝะธะบะฐ" #: setup/python2/main.py:1387 setup/python2/main.py:1393 #: setup/python2/setup.ui:2166 setup/python3/main.py:1381 #: setup/python3/main.py:1387 setup/python3/setup.ui:2166 msgid "_Cancel" msgstr "_ะกะบะฐััƒะฒะฐั‚ะธ" #: setup/python2/main.py:1388 setup/python3/main.py:1382 msgid "_Open" msgstr "_ะ’ั–ะดะบั€ะธั‚ะธ" #: setup/python2/main.py:1391 setup/python3/main.py:1385 msgid "Edit Dictionary File" msgstr "ะ—ะผั–ะฝะธั‚ะธ ั„ะฐะนะป ัะปะพะฒะฝะธะบะฐ" #: setup/python2/main.py:1394 setup/python2/main.py:1483 #: setup/python2/setup.ui:2181 setup/python3/main.py:1388 #: setup/python3/main.py:1477 setup/python3/setup.ui:2181 msgid "_OK" msgstr "_ะ“ะฐั€ะฐะทะด" #: setup/python2/main.py:1405 setup/python3/main.py:1399 msgid "Your choosed file is not correct." msgstr "ะ’ะธะฑั€ะฐะฝะธะน ะฒะฐะผะธ ั„ะฐะนะป ั” ะฝะตะบะพั€ะตะบั‚ะฝะธะผ." #: setup/python2/main.py:1435 setup/python3/main.py:1429 msgid "You cannot delete the system dictionary." msgstr "ะะต ะผะพะถะฝะฐ ะฒะธะปัƒั‡ะฐั‚ะธ ะทะฐะณะฐะปัŒะฝะพัะธัั‚ะตะผะฝะธะน ัะปะพะฒะฝะธะบ." #: setup/python2/main.py:1459 setup/python3/main.py:1453 msgid "Your file is not good." msgstr "ะฃ ะฒะฐัˆะพะผัƒ ั„ะฐะนะปั– ะฟะพะผะธะปะบะธ." #: setup/python2/main.py:1481 setup/python3/main.py:1475 msgid "View Dictionary File" msgstr "ะŸะตั€ะตะณะปัะฝัƒั‚ะธ ั„ะฐะนะป ัะปะพะฒะฝะธะบะฐ" #: setup/python2/main.py:1642 setup/python3/main.py:1636 msgid "Please press a key (or a key combination)" msgstr "ะ‘ัƒะดัŒ ะปะฐัะบะฐ, ะฝะฐั‚ะธัะฝั–ั‚ัŒ ะบะปะฐะฒั–ัˆัƒ (ะฐะฑะพ ะบะพะผะฑั–ะฝะฐั†ั–ัŽ ะบะปะฐะฒั–ัˆ)" #: setup/python2/main.py:1643 setup/python3/main.py:1637 msgid "The dialog will be closed when the key is released" msgstr "ะ”ั–ะฐะปะพะณะพะฒะต ะฒั–ะบะฝะพ ะฑัƒะดะต ะทะฐะบั€ะธั‚ะพ ะฟั–ัะปั ะฒั–ะดะฟัƒัะบะฐะฝะฝั ะบะปะฐะฒั–ัˆั–" #: setup/python2/main.py:1663 setup/python2/main.py:1684 #: setup/python3/main.py:1657 setup/python3/main.py:1678 msgid "Invalid keysym" msgstr "ะะตะบะพั€ะตะบั‚ะฝะธะน ัะธะผะฒะพะป ะบะปะฐะฒั–ัˆั–" #: setup/python2/main.py:1664 setup/python2/main.py:1685 #: setup/python3/main.py:1658 setup/python3/main.py:1679 msgid "This keysym is not valid" msgstr "ะฆะตะน ัะธะผะฒะพะป ะบะปะฐะฒั–ัˆั– ั” ะฝะตะบะพั€ะตะบั‚ะฝะธะผ" #: setup/python2/setup.ui:39 setup/python3/setup.ui:39 msgid "NICOLA-J" msgstr "NICOLA-J" #: setup/python2/setup.ui:42 setup/python3/setup.ui:42 msgid "NICOLA-A" msgstr "NICOLA-A" #: setup/python2/setup.ui:45 setup/python3/setup.ui:45 msgid "NICOLA-F" msgstr "NICOLA-F" #: setup/python2/setup.ui:55 setup/python3/setup.ui:55 msgid "None" msgstr "ะะตะผะฐั”" #: setup/python2/setup.ui:58 setup/python3/setup.ui:58 msgid "FMV KB231 key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB231" #: setup/python2/setup.ui:61 setup/python3/setup.ui:61 msgid "FMV KB611 key extension" msgstr "ะ ะพะทัˆะธั€ะตะฝะฝั ะบะปะฐะฒั–ัˆ FMV KB611" #: setup/python2/setup.ui:106 setup/python3/setup.ui:106 msgid "Keep numpad codes" msgstr "ะ—ะฑะตั€ั–ะณะฐั‚ะธ ะบะพะดะธ ั†ะธั„ั€ะพะฒะพั— ะฟะฐะฝะตะปั–" #: setup/python2/setup.ui:109 setup/python3/setup.ui:109 msgid "Convert characters" msgstr "ะŸะตั€ะตั‚ะฒะพั€ะธั‚ะธ ัะธะผะฒะพะปะธ" #: setup/python2/setup.ui:151 setup/python3/setup.ui:151 msgid "Do nothing" msgstr "ะั–ั‡ะพะณะพ ะฝะต ั€ะพะฑะธั‚ะธ" #: setup/python2/setup.ui:154 setup/python3/setup.ui:154 msgid "Automatically convert" msgstr "ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟะตั€ะตั‚ะฒะพั€ัŽะฒะฐั‚ะธ" #: setup/python2/setup.ui:157 setup/python3/setup.ui:157 msgid "Automatically commit" msgstr "ะะฐะดัะธะปะฐั‚ะธ ะฐะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ" #: setup/python2/setup.ui:167 setup/python3/setup.ui:167 msgid "Clear" msgstr "ะกะฟะพั€ะพะถะฝะธั‚ะธ" #: setup/python2/setup.ui:170 setup/python3/setup.ui:170 msgid "Commit" msgstr "ะะฐะดั–ัะปะฐั‚ะธ" #: setup/python2/setup.ui:173 setup/python3/setup.ui:173 msgid "Hold" msgstr "ะŸั€ะธะทัƒะฟะธะฝะธั‚ะธ" #: setup/python2/setup.ui:186 setup/python3/setup.ui:186 msgid "ATOK" msgstr "ATOK" #: setup/python2/setup.ui:189 setup/python3/setup.ui:189 msgid "Wnn" msgstr "Wnn" #: setup/python2/setup.ui:197 setup/python3/setup.ui:197 msgid "Setup - IBus-Anthy" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั โ€“ IBus-Anthy" #: setup/python2/setup.ui:233 setup/python3/setup.ui:233 msgid "_Input Mode:" msgstr "_ะ ะตะถะธะผ ะฒะฒะตะดะตะฝะฝั:" #: setup/python2/setup.ui:263 setup/python3/setup.ui:263 msgid "_Typing Method:" msgstr "ะœะตั‚ะพะด _ะฒะฒะตะดะตะฝะฝั:" #: setup/python2/setup.ui:297 setup/python3/setup.ui:297 msgid "Conversion _Mode:" msgstr "_ะ ะตะถะธะผ ะฟะตั€ะตั‚ะฒะพั€ะตะฝะฝั:" #: setup/python2/setup.ui:332 setup/python3/setup.ui:332 msgid "Initial Setting" msgstr "ะŸะพั‡ะฐั‚ะบะพะฒะต ะฝะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั" #: setup/python2/setup.ui:381 setup/python3/setup.ui:381 msgid "Menu Visibility on Status Icon" msgstr "ะ’ะธะดะธะผั–ัั‚ัŒ ะผะตะฝัŽ ะฟั–ะบั‚ะพะณั€ะฐะผะธ ัั‚ะฐะฝัƒ" #: setup/python2/setup.ui:428 setup/python3/setup.ui:428 msgid "_Period Style:" msgstr "ะกั‚ะธะปัŒ _ะบั€ะฐะฟะบะธ:" #: setup/python2/setup.ui:441 setup/python3/setup.ui:441 msgid "Symbo_l Style:" msgstr "ะก_ั‚ะธะปัŒ ัะธะผะฒะพะปั–ะฒ:" #: setup/python2/setup.ui:456 setup/python3/setup.ui:456 msgid "Numpad _Key Type:" msgstr "ะขะธะฟ _ะบะปะฐะฒั–ัˆ ั†ะธั„ั€ะพะฒะพั— ะฟะฐะฝะตะปั–:" #: setup/python2/setup.ui:526 setup/python3/setup.ui:526 msgid "_Behavior on Period:" msgstr "ะž_ะฑั€ะพะฑะบะฐ ะบั€ะฐะฟะบะธ:" #: setup/python2/setup.ui:541 setup/python3/setup.ui:541 msgid "Behavior on _Focus Out:" msgstr "ะŸะพะฒะตะดั–ะฝะบะฐ ะฟั€ะธ ะฒ_ั‚ั€ะฐั‚ั– ั„ะพะบัƒัะฐ:" #: setup/python2/setup.ui:595 setup/python3/setup.ui:595 msgid "Behavior" msgstr "ะŸะพะฒะตะดั–ะฝะบะฐ" #: setup/python2/setup.ui:629 setup/python3/setup.ui:629 msgid "Candidate _Window Page Size:" msgstr "ะ ะพะทะผั–ั€ ัั‚ะพั€ั–ะฝะบะธ ะฒั–ะบะฝะฐ ะฒ_ะฐั€ั–ะฐะฝั‚ั–ะฒ:" #: setup/python2/setup.ui:659 setup/python3/setup.ui:659 msgid "Convert _symbols with the one column width" msgstr "ะŸะตั€ะตั‚ะฒะพั€ัŽะฒะฐั‚ะธ ัะธ_ะผะฒะพะปะธ ะท ัˆะธั€ะธะฝะพัŽ ัƒ ะพะดะธะฝ ัั‚ะพะฒะฟั‡ะธะบ" #: setup/python2/setup.ui:675 setup/python3/setup.ui:675 msgid "Convert _numbers with the one column width" msgstr "ะŸะตั€ะตั‚ะฒะพั€ัŽะฒะฐั‚ะธ ั‡ะธั_ะปะฐ ะท ัˆะธั€ะธะฝะพัŽ ัƒ ะพะดะธะฝ ัั‚ะพะฒะฟั‡ะธะบ" #: setup/python2/setup.ui:691 setup/python3/setup.ui:691 msgid "Con_vert spaces with the one column width" msgstr "ะŸะตั€ะต_ั‚ะฒะพั€ัŽะฒะฐั‚ะธ ะฟั€ะพะฑั–ะปะธ ะท ัˆะธั€ะธะฝะพัŽ ัƒ ะพะดะธะฝ ัั‚ะพะฒะฟั‡ะธะบ" #: setup/python2/setup.ui:707 setup/python3/setup.ui:707 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" "ะŸ_ะตั€ะตะผะธะบะฐั‚ะธัั ะผั–ะถ ั…ั–ั€ะฐะณะฐะฝะพัŽ ั– ะปะฐั‚ะธะฝััŒะบะพัŽ ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ะบะปะฐะฒั–ัˆั– Shift, ะฐ " "ะบะปะฐะฒั–ัˆัƒ ั…ั–ั€ะฐะณะฐะฝะธ-ะบะฐั‚ะฐะบะฐะฝะธ ะฒะธะบะพั€ะธัั‚ะพะฒัƒะฒะฐั‚ะธ ัƒ ะฟะพะฟะตั€ะตะดะฝัŒะพะผัƒ ั€ะตะดะฐะณัƒะฒะฐะฝะฝั–" #: setup/python2/setup.ui:726 setup/python3/setup.ui:726 msgid "Other" msgstr "ะ†ะฝัˆะต" #: setup/python2/setup.ui:742 setup/python3/setup.ui:742 msgid "Conversion" msgstr "ะŸะตั€ะตั‚ะฒะพั€ะตะฝะฝั" #: setup/python2/setup.ui:764 setup/python3/setup.ui:764 msgid "_Shortcut Type:" msgstr "ะขะธะฟ ั_ะบะพั€ะพั‡ะตะฝะฝั:" #: setup/python2/setup.ui:831 setup/python3/setup.ui:831 msgid "De_fault" msgstr "ะขะธ_ะฟะพะฒะธะน" #: setup/python2/setup.ui:847 setup/python2/setup.ui:1763 #: setup/python3/setup.ui:847 setup/python3/setup.ui:1763 msgid "_Edit" msgstr "ะ—_ะผั–ะฝะธ" #: setup/python2/setup.ui:873 setup/python3/setup.ui:873 msgid "Key Binding" msgstr "ะŸั€ะธะฒโ€™ัะทะบะฐ ะบะปะฐะฒั–ัˆ" #: setup/python2/setup.ui:951 setup/python3/setup.ui:951 msgid "Romaji" msgstr "ะ ะพะผะฐะดะทั–" #: setup/python2/setup.ui:1029 setup/python3/setup.ui:1029 msgid "Kana" msgstr "ะšะฐะฝะฐ" #: setup/python2/setup.ui:1066 setup/python3/setup.ui:1066 msgid "Keyboad _layout:" msgstr "_ะ ะพะทะบะปะฐะดะบะฐ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ:" #: setup/python2/setup.ui:1108 setup/python3/setup.ui:1108 msgid "Keyboard layout" msgstr "ะ ะพะทะบะปะฐะดะบะฐ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ" #: setup/python2/setup.ui:1127 setup/python3/setup.ui:1127 msgid "Typing Method" msgstr "ะœะตั‚ะพะด ะฒะฒะตะดะตะฝะฝั" #: setup/python2/setup.ui:1168 setup/python3/setup.ui:1168 msgid "_Left Thumb Shift Key:" msgstr "_ะ›ั–ะฒะฐ ะดะพะดะฐั‚ะบะพะฒะฐ ะบะปะฐะฒั–ัˆะฐ Shift:" #: setup/python2/setup.ui:1210 setup/python3/setup.ui:1210 msgid "Right _Thumb Shift Key:" msgstr "ะŸั€ะฐะฒะฐ _ะดะพะดะฐั‚ะบะพะฒะฐ ะบะปะฐะฒั–ัˆะฐ Shift:" #: setup/python2/setup.ui:1262 setup/python3/setup.ui:1262 msgid "Adjust _input method layout to system keyboard layout" msgstr "" "ะšะพั€ะธะณัƒะฒะฐั‚ะธ ั_ะฟะพัั–ะฑ ะฒะฒะตะดะตะฝะฝั ะทะฐ ะทะฐะณะฐะปัŒะฝะพัะธัั‚ะตะผะฝะพัŽ ั€ะพะทะบะปะฐะดะบะพัŽ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ" #: setup/python2/setup.ui:1263 setup/python3/setup.ui:1263 msgid "Adjust IM layout to XKB layout" msgstr "ะšะพั€ะธะณัƒะฒะฐั‚ะธ ั€ะพะทะบะปะฐะดะบัƒ IM ะทะฐ ั€ะพะทะบะปะฐะดะบะพัŽ XKB" #: setup/python2/setup.ui:1287 setup/python3/setup.ui:1287 msgid "Input _Method Layout:" msgstr "ะ ะพ_ะทะบะปะฐะดะบะฐ ัะฟะพัะพะฑัƒ ะฒะฒะตะดะตะฝะฝั:" #: setup/python2/setup.ui:1339 setup/python3/setup.ui:1339 msgid "Restart IBus when you change the keyboard layout" msgstr "ะŸะตั€ะตะทะฐะฟัƒัะบ IBus ะฟั–ัะปั ะทะผั–ะฝะธ ั€ะพะทะบะปะฐะดะบะธ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ" #: setup/python2/setup.ui:1340 setup/python3/setup.ui:1340 msgid "Restart IBus when you change XKB" msgstr "ะŸะตั€ะตะทะฐะฟัƒัะบ IBus ะฟั–ัะปั ะทะผั–ะฝะธ XKB" #: setup/python2/setup.ui:1365 setup/python3/setup.ui:1365 msgid "_Additional Key Arrangement:" msgstr "_ะ”ะพะดะฐั‚ะบะพะฒะต ัƒะฟะพั€ัะดะบะพะฒัƒะฒะฐะฝะฝั ะบะปะฐะฒั–ัˆ:" #: setup/python2/setup.ui:1377 setup/python3/setup.ui:1377 msgid "'๏ฝž', 'ใ€Ž', 'ยข', 'ยฃ' and so on can be output with Thumb Shift key" msgstr "" "ยซ๏ฝžยป, ยซใ€Žยป, ยซยขยป, ยซยฃยป ั‚ะพั‰ะพ ะผะพะถะฝะฐ ะฒะธะฒะพะดะธั‚ะธ ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ะบะปะฐะฒั–ัˆั– ะดะพะดะฐั‚ะบะพะฒะพะณะพ " "Shift" #: setup/python2/setup.ui:1419 setup/python3/setup.ui:1419 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" "ะ’ะฐะผ ะฝะต ะฟะพั‚ั€ั–ะฑะฝะพ ะทะผั–ะฝัŽะฒะฐั‚ะธ ะฝะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั ั€ะพะทะบะปะฐะดะบะธ ะบะปะฐะฒั–ะฐั‚ัƒั€ะธ ัะธัั‚ะตะผะธ ะดะปั " "ยซะ”ะพะดะฐั‚ะบะพะฒะพะณะพ ัƒะฟะพั€ัะดะบะพะฒัƒะฒะฐะฝะฝั ะบะปะฐะฒั–ัˆยป, ะพัะบั–ะปัŒะบะธ ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ั†ัŒะพะณะพ ะฟัƒะฝะบั‚ัƒ " "ะผะพะถะฝะฐ ะทะผั–ะฝะธั‚ะธ ั€ะพะทะบะปะฐะดะบัƒ ัะฟะพัะพะฑัƒ ะฒะฒะตะดะตะฝะฝั, ะบะพะปะธ ัƒะฒั–ะผะบะฝะตะฝะพ ะฒั–ะดะฟะพะฒั–ะดะฝะธะน ัะฟะพัั–ะฑ " "ะฒะฒะตะดะตะฝะฝั." #: setup/python2/setup.ui:1420 setup/python3/setup.ui:1420 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" "ะ’ะฐะผ ะฝะต ะฟะพั‚ั€ั–ะฑะฝะพ ะทะผั–ะฝัŽะฒะฐั‚ะธ ะฝะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั XKB, ะพัะบั–ะปัŒะบะธ ะทะฐ ะดะพะฟะพะผะพะณะพัŽ ั†ัŒะพะณะพ " "ะฟัƒะฝะบั‚ัƒ ั€ะพะทะบะปะฐะดะบะฐ ัะฟะพัะพะฑัƒ ะฒะฒะตะดะตะฝะฝั ะทะผั–ะฝัŽั”ั‚ัŒัั, ะปะธัˆะต ะบะพะปะธ ัƒะฒั–ะผะบะฝะตะฝะพ ัะฟะพัั–ะฑ " "ะฒะฒะตะดะตะฝะฝั." #: setup/python2/setup.ui:1437 setup/python3/setup.ui:1437 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "_ะฃะฒั–ะผะบะฝัƒั‚ะธ ะดะพะดะฐะฒะฐะฝะฝั ะฟะพะทะฝะฐั‡ะบะธ ะฝะฐะฟั–ะฒะฝะฐะณะพะปะพััƒ ะบะปะฐะฒั–ัˆะตัŽ Shift" #: setup/python2/setup.ui:1438 setup/python3/setup.ui:1438 msgid "Seion + Shift can output Handakuon" msgstr "ะกะตะนะพะฝ + Shift ะผะพะถะต ะฒะธะฒะพะดะธั‚ะธ ั…ะฐะฝะดะฐะบะฒะพะฝ" #: setup/python2/setup.ui:1463 setup/python3/setup.ui:1463 msgid "Thumb _Shift Key Table:" msgstr "ะ ะพะทะบะปะฐะดะบะฐ ะท _ะดะพะดะฐั‚ะบะพะฒะธะผะธ Shift:" #: setup/python2/setup.ui:1507 setup/python3/setup.ui:1507 msgid "Thumb Shift Layout" msgstr "ะ ะพะทะบะปะฐะดะบะฐ ะท ะดะพะดะฐั‚ะบะพะฒะธะผะธ Shift" #: setup/python2/setup.ui:1522 setup/python3/setup.ui:1522 msgid "Thumb Shift" msgstr "ะ”ะพะดะฐั‚ะบะพะฒะธะน Shift" #: setup/python2/setup.ui:1560 setup/python3/setup.ui:1560 msgid "_Edit Dictionary Command:" msgstr "ะ—_ะผั–ะฝะธั‚ะธ ะบะพะผะฐะฝะดัƒ ัะปะพะฒะฝะธะบะฐ:" #: setup/python2/setup.ui:1611 setup/python3/setup.ui:1611 msgid "_Add Word Command:" msgstr "_ะ”ะพะดะฐั‚ะธ ะบะพะผะฐะฝะดัƒ ัะปะพะฒะฐ:" #: setup/python2/setup.ui:1680 setup/python3/setup.ui:1680 msgid "Default Dictionary Configuration" msgstr "ะะฐะปะฐัˆั‚ัƒะฒะฐะฝะฝั ั‚ะธะฟะพะฒะพะณะพ ัะปะพะฒะฝะธะบะฐ" #: setup/python2/setup.ui:1731 setup/python3/setup.ui:1731 msgid "_View" msgstr "ะŸ_ะตั€ะตะณะปัะด" #: setup/python2/setup.ui:1747 setup/python2/setup.ui:2099 #: setup/python2/setup.ui:2373 setup/python3/setup.ui:1747 #: setup/python3/setup.ui:2099 setup/python3/setup.ui:2373 msgid "_Add" msgstr "_ะ”ะพะดะฐั‚ะธ" #: setup/python2/setup.ui:1779 setup/python2/setup.ui:2132 #: setup/python3/setup.ui:1779 setup/python3/setup.ui:2132 msgid "_Delete" msgstr "ะ’_ะธะปัƒั‡ะธั‚ะธ" #: setup/python2/setup.ui:1808 setup/python3/setup.ui:1808 msgid "_Up" msgstr "ะ’_ะณะพั€ัƒ" #: setup/python2/setup.ui:1810 setup/python2/setup.ui:1827 #: setup/python3/setup.ui:1810 setup/python3/setup.ui:1827 msgid "You can change the order on language bar" msgstr "ะ’ะธ ะผะพะถะตั‚ะต ะทะผั–ะฝะธั‚ะธ ะฟะพั€ัะดะพะบ ะฝะฐ ะฟะฐะฝะตะปั– ะผะพะฒ" #: setup/python2/setup.ui:1825 setup/python3/setup.ui:1825 msgid "_Down" msgstr "ะ’_ะฝะธะท" #: setup/python2/setup.ui:1852 setup/python3/setup.ui:1852 msgid "Extended Dictionaries" msgstr "ะ ะพะทัˆะธั€ะตะฝั– ัะปะพะฒะฝะธะบะธ" #: setup/python2/setup.ui:1867 setup/python3/setup.ui:1867 msgid "Dictionary" msgstr "ะกะปะพะฒะฝะธะบ" #: setup/python2/setup.ui:1888 setup/python3/setup.ui:1888 msgid "About" msgstr "ะŸั€ะพ ะฟั€ะพะณั€ะฐะผัƒ" #: setup/python2/setup.ui:1908 setup/python2/setup.ui:2418 #: setup/python3/setup.ui:1908 setup/python3/setup.ui:2418 msgid "_Close" msgstr "_ะ—ะฐะบั€ะธั‚ะธ" #: setup/python2/setup.ui:1938 setup/python3/setup.ui:1938 msgid "Edit Shortcut" msgstr "ะ ะตะดะฐะณัƒะฒะฐั‚ะธ ัะบะพั€ะพั‡ะตะฝะฝั" #: setup/python2/setup.ui:1980 setup/python3/setup.ui:1980 msgid "Key Code:" msgstr "ะšะพะด ะบะปะฐะฒั–ัˆั–:" #: setup/python2/setup.ui:2028 setup/python3/setup.ui:2028 msgid "Modifier:" msgstr "ะœะพะดะธั„ั–ะบะฐั‚ะพั€:" #: setup/python2/setup.ui:2042 setup/python3/setup.ui:2042 msgid "A_lternate" msgstr "A_lt" #: setup/python2/setup.ui:2055 setup/python3/setup.ui:2055 msgid "Co_ntrol" msgstr "C_trl" #: setup/python2/setup.ui:2068 setup/python3/setup.ui:2068 msgid "_Shift" msgstr "_Shift" #: setup/python2/setup.ui:2116 setup/python3/setup.ui:2116 msgid "_Refresh" msgstr "_ะžะฝะพะฒะธั‚ะธ" #: setup/python2/setup.ui:2293 setup/python3/setup.ui:2293 msgid "_Input Characters" msgstr "ะกะธะผะฒะพะปะธ _ะฒะฒะตะดะตะฝะฝั" #: setup/python2/setup.ui:2313 setup/python3/setup.ui:2313 msgid "_Output Characters" msgstr "ะกะธะผะฒะพะปะธ ะฒ_ะธะฒะตะดะตะฝะฝั" #: setup/python2/setup.ui:2333 setup/python3/setup.ui:2333 msgid "_Left Thumb Shift" msgstr "_ะ›ั–ะฒะธะน ะดะพะดะฐั‚ะบะพะฒะธะน Shift" #: setup/python2/setup.ui:2353 setup/python3/setup.ui:2353 msgid "_Right Thumb Shift" msgstr "_ะŸั€ะฐะฒะธะน ะดะพะดะฐั‚ะบะพะฒะธะน Shift" #: setup/python2/setup.ui:2387 setup/python3/setup.ui:2387 msgid "_Remove" msgstr "ะ’ะธ_ะปัƒั‡ะธั‚ะธ" #: setup/python2/setup.ui:2607 setup/python3/setup.ui:2607 msgid "_Short Label:" msgstr "_ะšะพั€ะพั‚ะบะฐ ะผั–ั‚ะบะฐ:" #: setup/python2/setup.ui:2631 setup/python3/setup.ui:2631 msgid "_Description:" msgstr "_ะžะฟะธั:" #: setup/python2/setup.ui:2663 setup/python3/setup.ui:2663 msgid "_Use your dictionary alone with switching dictionaries" msgstr "ะ’_ะธะบะพั€ะธัั‚ะพะฒัƒะฒะฐั‚ะธ ะปะธัˆะต ะฒะฐัˆ ัะปะพะฒะฝะธะบ ะฟั€ะธ ะฟะตั€ะตะผะธะบะฐะฝะฝั– ัะปะพะฒะฝะธะบั–ะฒ" #: setup/python2/setup.ui:2679 setup/python3/setup.ui:2679 msgid "_Embed your dictionary in the system dictionary" msgstr "ะ’_ะฑัƒะดัƒะฒะฐั‚ะธ ะฒะฐัˆ ัะปะพะฒะฝะธะบ ะดะพ ะทะฐะณะฐะปัŒะฝะพัะธัั‚ะตะผะฝะพะณะพ ัะปะพะฒะฝะธะบะฐ" #: setup/python2/setup.ui:2695 setup/python3/setup.ui:2695 msgid "Enable the _reverse conversion" msgstr "ะฃะฒั–ะผะบะฝัƒั‚ะธ ะทะฒะพ_ั€ะพั‚ะฝะต ะฟะตั€ะตั‚ะฒะพั€ะตะฝะฝั" #: setup/python2/setup.ui:2715 setup/python3/setup.ui:2715 msgid "The Anthy engine for the IBus input platform" msgstr "ะ ัƒัˆั–ะน Anthy ะดะปั ะฟะปะฐั‚ั„ะพั€ะผะธ ะฒะฒะตะดะตะฝะฝั IBus" #: setup/python2/setup.ui:2719 setup/python3/setup.ui:2719 msgid "translator_credits" msgstr "" "ะŸะตั€ะตะบะปะฐะด ัƒะบั€ะฐั—ะฝััŒะบะพัŽ:
\n" "ะฎั€ั–ะน ะงะพั€ะฝะพั–ะฒะฐะฝ" ibus-anthy-1.5.11/po/zh_CN.po000066400000000000000000000633241346647371500156710ustar00rootroot00000000000000# Chinese translation for ibus-anthy. # Copyright (C) 2008 Peng Huang # Copyright (C) 2009-2014 Takao Fujiwara # This file is distributed under the same license as the ibus-anthy package. # # Translators: # Peng Huang , 2008. # Popolon , 2011 # Popolon , 2011 msgid "" msgstr "" "Project-Id-Version: IBus-Anthy\n" "Report-Msgid-Bugs-To: https://github.com/ibus/ibus-anthy/issues\n" "POT-Creation-Date: 2017-03-17 13:26+0900\n" "PO-Revision-Date: 2014-02-18 08:42+0000\n" "Last-Translator: Peng Huang \n" "Language-Team: Peng Huang \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../data/ibus-anthy.appdata.xml.in.h:1 msgid "Japanese input method" msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:2 msgid "The Anthy input method is designed for entering Japanese text." msgstr "" #: ../data/ibus-anthy.appdata.xml.in.h:3 msgid "" "Input methods are typing systems allowing users to input complex languages. " "They are necessary because these contain too many characters to simply be " "laid out on a traditional keyboard." msgstr "" #: ../engine/python2/default.xml.in.in.h:1 #: ../engine/python3/default.xml.in.in.h:1 msgid "Anthy Input Method" msgstr "" #: ../engine/python2/engine.py:207 ../engine/python3/engine.py:208 msgid "" "Could not enable Anthy.\n" "The end of the content of the file .anthy/last-record2_default.utf8 in your " "home directory is not '\\n'. I.e. not correct text format.\n" "Please fix the file or remove it by manual and restart IBus." msgstr "" #: ../engine/python2/engine.py:255 ../engine/python3/engine.py:256 #: ../setup/python2/main.py:416 ../setup/python3/main.py:421 msgid "Preferences - Anthy" msgstr "- Anthy" #: ../engine/python2/engine.py:257 ../engine/python3/engine.py:258 msgid "Configure Anthy" msgstr "" #. Translators: Specify the order of %s with your translation. #. It will be "Input Mode (A)" for example. #: ../engine/python2/engine.py:294 ../engine/python2/engine.py:382 #: ../engine/python2/engine.py:449 ../engine/python2/engine.py:525 #: ../engine/python2/engine.py:856 ../engine/python2/engine.py:884 #: ../engine/python2/engine.py:908 ../engine/python2/engine.py:934 #: ../engine/python2/engine.py:996 ../engine/python3/engine.py:295 #: ../engine/python3/engine.py:383 ../engine/python3/engine.py:450 #: ../engine/python3/engine.py:526 ../engine/python3/engine.py:851 #: ../engine/python3/engine.py:879 ../engine/python3/engine.py:903 #: ../engine/python3/engine.py:929 ../engine/python3/engine.py:991 #, python-format msgid "%(description)s (%(symbol)s)" msgstr "" #: ../engine/python2/engine.py:295 ../engine/python2/engine.py:857 #: ../engine/python3/engine.py:296 ../engine/python3/engine.py:852 #: ../setup/python2/main.py:401 ../setup/python3/main.py:406 msgid "Input mode" msgstr "" #: ../engine/python2/engine.py:301 ../engine/python3/engine.py:302 msgid "Switch input mode" msgstr "ๅˆ‡ๆข่พ“ๅ…ฅๆจกๅผ" #: ../engine/python2/engine.py:311 ../engine/python3/engine.py:312 #: ../setup/python2/setup.ui.h:1 ../setup/python3/setup.ui.h:1 msgid "Hiragana" msgstr "ๅนณๅ‡ๅ" #: ../engine/python2/engine.py:320 ../engine/python3/engine.py:321 #: ../setup/python2/setup.ui.h:2 ../setup/python3/setup.ui.h:2 msgid "Katakana" msgstr "็‰‡ๅ‡ๅ" #: ../engine/python2/engine.py:329 ../engine/python3/engine.py:330 #: ../setup/python2/setup.ui.h:3 ../setup/python3/setup.ui.h:3 msgid "Halfwidth Katakana" msgstr "" #: ../engine/python2/engine.py:338 ../engine/python3/engine.py:339 #: ../setup/python2/setup.ui.h:4 ../setup/python3/setup.ui.h:4 msgid "Latin" msgstr "่‹ฑๆ•ฐ" #: ../engine/python2/engine.py:347 ../engine/python3/engine.py:348 #: ../setup/python2/setup.ui.h:5 ../setup/python3/setup.ui.h:5 msgid "Wide Latin" msgstr "ๅ…จ่ง’่‹ฑๆ•ฐ" #: ../engine/python2/engine.py:383 ../engine/python2/engine.py:885 #: ../engine/python2/engine.py:909 ../engine/python3/engine.py:384 #: ../engine/python3/engine.py:880 ../engine/python3/engine.py:904 #: ../setup/python2/main.py:404 ../setup/python3/main.py:409 msgid "Typing method" msgstr "" #: ../engine/python2/engine.py:389 ../engine/python3/engine.py:390 msgid "Switch typing method" msgstr "" #: ../engine/python2/engine.py:399 ../engine/python3/engine.py:400 #: ../setup/python2/setup.ui.h:12 ../setup/python3/setup.ui.h:12 msgid "Romaji" msgstr "็ฝ—้ฉฌๅญ—" #: ../engine/python2/engine.py:408 ../engine/python3/engine.py:409 #: ../setup/python2/setup.ui.h:13 ../setup/python3/setup.ui.h:13 msgid "Kana" msgstr "ๅ‡ๅ" #: ../engine/python2/engine.py:417 ../engine/python3/engine.py:418 #: ../setup/python2/setup.ui.h:14 ../setup/python3/setup.ui.h:14 msgid "Thumb shift" msgstr "" #: ../engine/python2/engine.py:450 ../engine/python2/engine.py:935 #: ../engine/python3/engine.py:451 ../engine/python3/engine.py:930 #: ../setup/python2/main.py:407 ../setup/python3/main.py:412 msgid "Segment mode" msgstr "" #: ../engine/python2/engine.py:456 ../engine/python3/engine.py:457 msgid "Switch conversion mode" msgstr "" #: ../engine/python2/engine.py:466 ../engine/python3/engine.py:467 #: ../setup/python2/setup.ui.h:15 ../setup/python3/setup.ui.h:15 msgid "Multiple segment" msgstr "" #: ../engine/python2/engine.py:475 ../engine/python3/engine.py:476 #: ../setup/python2/setup.ui.h:16 ../setup/python3/setup.ui.h:16 msgid "Single segment" msgstr "" #: ../engine/python2/engine.py:484 ../engine/python3/engine.py:485 #: ../setup/python2/setup.ui.h:17 ../setup/python3/setup.ui.h:17 msgid "Immediate conversion (multiple segment)" msgstr "" #: ../engine/python2/engine.py:493 ../engine/python3/engine.py:494 #: ../setup/python2/setup.ui.h:18 ../setup/python3/setup.ui.h:18 msgid "Immediate conversion (single segment)" msgstr "" #: ../engine/python2/engine.py:526 ../engine/python2/engine.py:997 #: ../engine/python3/engine.py:527 ../engine/python3/engine.py:992 #: ../setup/python2/main.py:410 ../setup/python3/main.py:415 msgid "Dictionary mode" msgstr "" #: ../engine/python2/engine.py:532 ../engine/python3/engine.py:533 msgid "Switch dictionary" msgstr "" #: ../engine/python2/engine.py:615 ../engine/python3/engine.py:615 #: ../setup/python2/main.py:413 ../setup/python3/main.py:418 msgid "Dictionary - Anthy" msgstr "่ฏๅ…ธ - Anthy" #. Translators: "Dic" means 'dictionary', One kanji may be good. #: ../engine/python2/engine.py:621 ../engine/python3/engine.py:620 msgid "Dic" msgstr "" #: ../engine/python2/engine.py:628 ../engine/python3/engine.py:627 msgid "Configure dictionaries" msgstr "" #: ../engine/python2/engine.py:638 ../engine/python3/engine.py:637 msgid "Edit dictionaries" msgstr "" #: ../engine/python2/engine.py:640 ../engine/python3/engine.py:639 msgid "Launch the dictionary tool" msgstr "" #: ../engine/python2/engine.py:647 ../engine/python3/engine.py:646 msgid "Add words" msgstr "" #: ../engine/python2/engine.py:649 ../engine/python3/engine.py:648 msgid "Add words to the dictionary" msgstr "" #: ../setup/python2/anthyprefs.py.in:1105 ../setup/python2/setup.ui.h:36 #: ../setup/python3/anthyprefs.py.in:1098 ../setup/python3/setup.ui.h:36 msgid "General" msgstr "" #: ../setup/python2/anthyprefs.py.in:1116 #: ../setup/python3/anthyprefs.py.in:1109 msgid "Zip Code Conversion" msgstr "" #: ../setup/python2/anthyprefs.py.in:1127 #: ../setup/python3/anthyprefs.py.in:1120 msgid "Symbol" msgstr "" #: ../setup/python2/anthyprefs.py.in:1138 #: ../setup/python3/anthyprefs.py.in:1131 msgid "Old Character Style" msgstr "" #: ../setup/python2/anthyprefs.py.in:1148 #: ../setup/python3/anthyprefs.py.in:1141 msgid "Era" msgstr "" #: ../setup/python2/anthyprefs.py.in:1158 #: ../setup/python3/anthyprefs.py.in:1151 msgid "Emoji" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:1 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:1 msgid "IBus Anthy Setup" msgstr "" #: ../setup/python2/ibus-setup-anthy.desktop.in.in.h:2 #: ../setup/python3/ibus-setup-anthy.desktop.in.in.h:2 msgid "Set up IBus Anthy engine" msgstr "" #. self.__run_message_dialog needs self.__builder. #: ../setup/python2/main.py:133 ../setup/python3/main.py:136 msgid "ibus is not running." msgstr "" #: ../setup/python2/main.py:188 ../setup/python3/main.py:191 msgid "Menu label" msgstr "" #: ../setup/python2/main.py:207 ../setup/python3/main.py:210 msgid "Command" msgstr "" #: ../setup/python2/main.py:211 ../setup/python3/main.py:214 msgid "Shortcut" msgstr "ๆทๅพ„" #: ../setup/python2/main.py:256 ../setup/python3/main.py:259 msgid "Description" msgstr "ๆ่ฟฐ" #. Translators: "Embd" is an abbreviation of "embedded". #: ../setup/python2/main.py:264 ../setup/python3/main.py:267 msgid "Embd" msgstr "" #. Translators: "Sgl" is an abbreviation of "single". #: ../setup/python2/main.py:272 ../setup/python3/main.py:275 msgid "Sgl" msgstr "" #: ../setup/python2/main.py:447 ../setup/python2/main.py:483 #: ../setup/python3/main.py:452 ../setup/python3/main.py:488 msgid "Input Chars" msgstr "" #: ../setup/python2/main.py:449 ../setup/python2/main.py:485 #: ../setup/python3/main.py:454 ../setup/python3/main.py:490 msgid "Output Chars" msgstr "" #: ../setup/python2/main.py:531 ../setup/python3/main.py:536 msgid "Input" msgstr "่พ“ๅ…ฅ" #: ../setup/python2/main.py:533 ../setup/python3/main.py:538 msgid "Single" msgstr "" #: ../setup/python2/main.py:535 ../setup/python3/main.py:540 msgid "Left" msgstr "" #: ../setup/python2/main.py:537 ../setup/python3/main.py:542 msgid "Right" msgstr "" #: ../setup/python2/main.py:619 ../setup/python3/main.py:624 msgid "Customize Romaji Key Table" msgstr "" #: ../setup/python2/main.py:620 ../setup/python2/setup.ui.h:54 #: ../setup/python3/main.py:625 ../setup/python3/setup.ui.h:54 msgid "_Romaji Key Table:" msgstr "" #: ../setup/python2/main.py:621 ../setup/python2/main.py:627 #: ../setup/python3/main.py:626 ../setup/python3/main.py:632 msgid "_Output Chars" msgstr "" #: ../setup/python2/main.py:622 ../setup/python2/main.py:1122 #: ../setup/python2/main.py:1270 ../setup/python2/setup.ui.h:27 #: ../setup/python3/main.py:627 ../setup/python3/main.py:1116 #: ../setup/python3/main.py:1264 ../setup/python3/setup.ui.h:27 msgid "Default" msgstr "" #: ../setup/python2/main.py:625 ../setup/python3/main.py:630 msgid "Customize Kana Key Table" msgstr "" #: ../setup/python2/main.py:626 ../setup/python2/setup.ui.h:56 #: ../setup/python3/main.py:631 ../setup/python3/setup.ui.h:56 msgid "_Kana Key Table:" msgstr "" #: ../setup/python2/main.py:628 ../setup/python3/main.py:633 msgid "Japanese Keyboard Layout" msgstr "" #: ../setup/python2/main.py:629 ../setup/python3/main.py:634 msgid "U.S. Keyboard Layout" msgstr "" #: ../setup/python2/main.py:632 ../setup/python3/main.py:637 msgid "Customize Thumb Shift Key Table" msgstr "" #: ../setup/python2/main.py:633 ../setup/python3/main.py:638 msgid "_Thumb Shift Key Table:" msgstr "" #: ../setup/python2/main.py:634 ../setup/python3/main.py:639 msgid "Single _Output Chars" msgstr "" #: ../setup/python2/main.py:635 ../setup/python3/main.py:640 msgid "Base" msgstr "" #: ../setup/python2/main.py:636 ../setup/python3/main.py:641 msgid "NICOLA-J key extension" msgstr "" #: ../setup/python2/main.py:637 ../setup/python3/main.py:642 msgid "NICOLA-A key extension" msgstr "" #: ../setup/python2/main.py:638 ../setup/python3/main.py:643 msgid "NICOLA-F key extension" msgstr "" #: ../setup/python2/main.py:639 ../setup/python3/main.py:644 msgid "FMV KB231-J key extension" msgstr "" #: ../setup/python2/main.py:640 ../setup/python3/main.py:645 msgid "FMV KB231-A key extension" msgstr "" #: ../setup/python2/main.py:641 ../setup/python3/main.py:646 msgid "FMV KB231-F key extension" msgstr "" #: ../setup/python2/main.py:642 ../setup/python3/main.py:647 msgid "FMV KB611-J key extension" msgstr "" #: ../setup/python2/main.py:643 ../setup/python3/main.py:648 msgid "FMV KB611-A key extension" msgstr "" #: ../setup/python2/main.py:644 ../setup/python3/main.py:649 msgid "FMV KB611-F key extension" msgstr "" #: ../setup/python2/main.py:788 ../setup/python3/main.py:793 msgid "Your choosed file has already been added: " msgstr "" #: ../setup/python2/main.py:792 ../setup/python3/main.py:797 msgid "The file you have chosen does not exist: " msgstr "" #: ../setup/python2/main.py:796 ../setup/python3/main.py:801 msgid "Your choosed file is a directory: " msgstr "" #: ../setup/python2/main.py:800 ../setup/python3/main.py:805 msgid "You cannot add dictionaries in the anthy private directory: " msgstr "" #: ../setup/python2/main.py:807 ../setup/python3/main.py:812 msgid "Your file path is not good: " msgstr "" #: ../setup/python2/main.py:986 ../setup/python3/main.py:989 msgid "The engine xml file does not exist: " msgstr "" #: ../setup/python2/main.py:1102 ../setup/python3/main.py:1096 msgid "" "Anthy keyboard layout is changed. Please restart ibus to reload the layout." msgstr "" #: ../setup/python2/main.py:1231 ../setup/python3/main.py:1225 msgid "Confirmation" msgstr "" #: ../setup/python2/main.py:1233 ../setup/python3/main.py:1227 msgid "You are about to close the setup dialog, is that OK?" msgstr "" #: ../setup/python2/main.py:1248 ../setup/python3/main.py:1242 msgid "Notice!" msgstr "" #: ../setup/python2/main.py:1250 ../setup/python3/main.py:1244 msgid "" "You are about to close the setup dialog without saving your changes, is that " "OK?" msgstr "" #: ../setup/python2/main.py:1371 ../setup/python3/main.py:1365 msgid "Please specify Input Chars" msgstr "" #: ../setup/python2/main.py:1374 ../setup/python3/main.py:1368 msgid "Please specify Output Chars" msgstr "" #: ../setup/python2/main.py:1377 ../setup/python3/main.py:1371 msgid "Please specify Left Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1380 ../setup/python3/main.py:1374 msgid "Please specify Right Thumb Shift Chars" msgstr "" #: ../setup/python2/main.py:1393 ../setup/python2/main.py:1437 #: ../setup/python3/main.py:1387 ../setup/python3/main.py:1431 msgid "Your custom key is not assigned in any sections. Maybe a bug." msgstr "" #: ../setup/python2/main.py:1503 ../setup/python2/main.py:1590 #: ../setup/python3/main.py:1497 ../setup/python3/main.py:1584 msgid "Your file does not exist: " msgstr "" #: ../setup/python2/main.py:1513 ../setup/python3/main.py:1507 msgid "Open Dictionary File" msgstr "" #: ../setup/python2/main.py:1516 ../setup/python2/main.py:1522 #: ../setup/python2/setup.ui.h:90 ../setup/python3/main.py:1510 #: ../setup/python3/main.py:1516 ../setup/python3/setup.ui.h:90 msgid "_Cancel" msgstr "ๅ–ๆถˆ(_C)" #: ../setup/python2/main.py:1517 ../setup/python3/main.py:1511 msgid "_Open" msgstr "ๆ‰“ๅผ€(_O)" #: ../setup/python2/main.py:1520 ../setup/python3/main.py:1514 msgid "Edit Dictionary File" msgstr "" #: ../setup/python2/main.py:1523 ../setup/python2/main.py:1618 #: ../setup/python2/setup.ui.h:91 ../setup/python3/main.py:1517 #: ../setup/python3/main.py:1612 ../setup/python3/setup.ui.h:91 msgid "_OK" msgstr "็กฎๅฎš(_O)" #: ../setup/python2/main.py:1534 ../setup/python3/main.py:1528 msgid "Your choosed file is not correct." msgstr "" #: ../setup/python2/main.py:1563 ../setup/python3/main.py:1557 msgid "You cannot delete the system dictionary." msgstr "" #: ../setup/python2/main.py:1586 ../setup/python3/main.py:1580 msgid "Your file is not good." msgstr "" #: ../setup/python2/main.py:1616 ../setup/python3/main.py:1610 msgid "View Dictionary File" msgstr "" #: ../setup/python2/main.py:1787 ../setup/python3/main.py:1781 msgid "Please press a key (or a key combination)" msgstr "" #: ../setup/python2/main.py:1788 ../setup/python3/main.py:1782 msgid "The dialog will be closed when the key is released" msgstr "" #: ../setup/python2/main.py:1808 ../setup/python2/main.py:1829 #: ../setup/python3/main.py:1802 ../setup/python3/main.py:1823 msgid "Invalid keysym" msgstr "" #: ../setup/python2/main.py:1809 ../setup/python2/main.py:1830 #: ../setup/python3/main.py:1803 ../setup/python3/main.py:1824 msgid "This keysym is not valid" msgstr "" #: ../setup/python2/setup.ui.h:6 ../setup/python3/setup.ui.h:6 msgid "NICOLA-J" msgstr "" #: ../setup/python2/setup.ui.h:7 ../setup/python3/setup.ui.h:7 msgid "NICOLA-A" msgstr "" #: ../setup/python2/setup.ui.h:8 ../setup/python3/setup.ui.h:8 msgid "NICOLA-F" msgstr "" #: ../setup/python2/setup.ui.h:9 ../setup/python3/setup.ui.h:9 msgid "None" msgstr "" #: ../setup/python2/setup.ui.h:10 ../setup/python3/setup.ui.h:10 msgid "FMV KB231 key extension" msgstr "" #: ../setup/python2/setup.ui.h:11 ../setup/python3/setup.ui.h:11 msgid "FMV KB611 key extension" msgstr "" #: ../setup/python2/setup.ui.h:19 ../setup/python3/setup.ui.h:19 msgid "Keep numpad codes" msgstr "" #: ../setup/python2/setup.ui.h:20 ../setup/python3/setup.ui.h:20 msgid "Convert characters" msgstr "" #: ../setup/python2/setup.ui.h:21 ../setup/python3/setup.ui.h:21 msgid "Do nothing" msgstr "" #: ../setup/python2/setup.ui.h:22 ../setup/python3/setup.ui.h:22 msgid "Automatically convert" msgstr "" #: ../setup/python2/setup.ui.h:23 ../setup/python3/setup.ui.h:23 msgid "Automatically commit" msgstr "" #: ../setup/python2/setup.ui.h:24 ../setup/python3/setup.ui.h:24 msgid "Clear" msgstr "" #: ../setup/python2/setup.ui.h:25 ../setup/python3/setup.ui.h:25 msgid "Commit" msgstr "" #: ../setup/python2/setup.ui.h:26 ../setup/python3/setup.ui.h:26 msgid "Hold" msgstr "" #: ../setup/python2/setup.ui.h:28 ../setup/python3/setup.ui.h:28 msgid "ATOK" msgstr "" #: ../setup/python2/setup.ui.h:29 ../setup/python3/setup.ui.h:29 msgid "Wnn" msgstr "" #: ../setup/python2/setup.ui.h:30 ../setup/python3/setup.ui.h:30 msgid "Setup - IBus-Anthy" msgstr "" #: ../setup/python2/setup.ui.h:31 ../setup/python3/setup.ui.h:31 msgid "_Input Mode:" msgstr "" #: ../setup/python2/setup.ui.h:32 ../setup/python3/setup.ui.h:32 msgid "_Typing Method:" msgstr "" #: ../setup/python2/setup.ui.h:33 ../setup/python3/setup.ui.h:33 msgid "Conversion _Mode:" msgstr "" #: ../setup/python2/setup.ui.h:34 ../setup/python3/setup.ui.h:34 msgid "Initial Setting" msgstr "" #: ../setup/python2/setup.ui.h:35 ../setup/python3/setup.ui.h:35 msgid "Menu Visibility on Status Icon" msgstr "" #: ../setup/python2/setup.ui.h:37 ../setup/python3/setup.ui.h:37 msgid "_Period Style:" msgstr "" #: ../setup/python2/setup.ui.h:38 ../setup/python3/setup.ui.h:38 msgid "Symbo_l Style:" msgstr "" #: ../setup/python2/setup.ui.h:39 ../setup/python3/setup.ui.h:39 msgid "Numpad _Key Type:" msgstr "" #: ../setup/python2/setup.ui.h:40 ../setup/python3/setup.ui.h:40 msgid "_Behavior on Period:" msgstr "" #: ../setup/python2/setup.ui.h:41 ../setup/python3/setup.ui.h:41 msgid "Behavior on _Focus Out:" msgstr "" #: ../setup/python2/setup.ui.h:42 ../setup/python3/setup.ui.h:42 msgid "Behavior" msgstr "" #: ../setup/python2/setup.ui.h:43 ../setup/python3/setup.ui.h:43 msgid "Candidate _Window Page Size:" msgstr "" #: ../setup/python2/setup.ui.h:44 ../setup/python3/setup.ui.h:44 msgid "Convert _symbols with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:45 ../setup/python3/setup.ui.h:45 msgid "Convert _numbers with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:46 ../setup/python3/setup.ui.h:46 msgid "Con_vert spaces with the one column width" msgstr "" #: ../setup/python2/setup.ui.h:47 ../setup/python3/setup.ui.h:47 msgid "" "Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in " "preedit" msgstr "" #: ../setup/python2/setup.ui.h:48 ../setup/python3/setup.ui.h:48 msgid "Other" msgstr "" #: ../setup/python2/setup.ui.h:49 ../setup/python3/setup.ui.h:49 msgid "Conversion" msgstr "" #: ../setup/python2/setup.ui.h:50 ../setup/python3/setup.ui.h:50 msgid "_Shortcut Type:" msgstr "" #: ../setup/python2/setup.ui.h:51 ../setup/python3/setup.ui.h:51 msgid "De_fault" msgstr "" #: ../setup/python2/setup.ui.h:52 ../setup/python3/setup.ui.h:52 msgid "_Edit" msgstr "็ผ–่พ‘(_E)" #: ../setup/python2/setup.ui.h:53 ../setup/python3/setup.ui.h:53 msgid "Key Binding" msgstr "" #: ../setup/python2/setup.ui.h:55 ../setup/python3/setup.ui.h:55 msgid "Romaji" msgstr "" #: ../setup/python2/setup.ui.h:57 ../setup/python3/setup.ui.h:57 msgid "Kana" msgstr "" #: ../setup/python2/setup.ui.h:58 ../setup/python3/setup.ui.h:58 msgid "Keyboad _layout:" msgstr "" #: ../setup/python2/setup.ui.h:59 ../setup/python3/setup.ui.h:59 msgid "Keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:60 ../setup/python3/setup.ui.h:60 msgid "Typing Method" msgstr "" #: ../setup/python2/setup.ui.h:61 ../setup/python3/setup.ui.h:61 msgid "_Left Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:62 ../setup/python3/setup.ui.h:62 msgid "Right _Thumb Shift Key:" msgstr "" #: ../setup/python2/setup.ui.h:63 ../setup/python3/setup.ui.h:63 msgid "Adjust _input method layout to system keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:64 ../setup/python3/setup.ui.h:64 msgid "Adjust IM layout to XKB layout" msgstr "" #: ../setup/python2/setup.ui.h:65 ../setup/python3/setup.ui.h:65 msgid "Input _Method Layout:" msgstr "" #: ../setup/python2/setup.ui.h:66 ../setup/python3/setup.ui.h:66 msgid "Restart IBus when you change the keyboard layout" msgstr "" #: ../setup/python2/setup.ui.h:67 ../setup/python3/setup.ui.h:67 msgid "Restart IBus when you change XKB" msgstr "" #: ../setup/python2/setup.ui.h:68 ../setup/python3/setup.ui.h:68 msgid "_Additional Key Arrangement:" msgstr "" #: ../setup/python2/setup.ui.h:69 ../setup/python3/setup.ui.h:69 msgid "" "'~', '『', '¢', '£' and so on can be output with " "Thumb Shift key" msgstr "" #: ../setup/python2/setup.ui.h:70 ../setup/python3/setup.ui.h:70 msgid "" "You do not have to reconfigure the system keyboard layout for \"Additional " "Key Arrangement\" since this option changes input method layout only in case " "input method is turned on." msgstr "" #: ../setup/python2/setup.ui.h:71 ../setup/python3/setup.ui.h:71 msgid "" "You do not have to reconfigure XKB since this option changes IM layout only " "with IM on." msgstr "" #: ../setup/python2/setup.ui.h:72 ../setup/python3/setup.ui.h:72 msgid "_Enable semi-voiced sound mark with Shift key" msgstr "" #: ../setup/python2/setup.ui.h:73 ../setup/python3/setup.ui.h:73 msgid "Seion + Shift can output Handakuon" msgstr "" #: ../setup/python2/setup.ui.h:74 ../setup/python3/setup.ui.h:74 msgid "Thumb _Shift Key Table:" msgstr "" #: ../setup/python2/setup.ui.h:75 ../setup/python3/setup.ui.h:75 msgid "Thumb Shift Layout" msgstr "" #: ../setup/python2/setup.ui.h:76 ../setup/python3/setup.ui.h:76 msgid "Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:77 ../setup/python3/setup.ui.h:77 msgid "_Edit Dictionary Command:" msgstr "" #: ../setup/python2/setup.ui.h:78 ../setup/python3/setup.ui.h:78 msgid "_Add Word Command:" msgstr "" #: ../setup/python2/setup.ui.h:79 ../setup/python3/setup.ui.h:79 msgid "Default Dictionary Configuration" msgstr "" #: ../setup/python2/setup.ui.h:80 ../setup/python3/setup.ui.h:80 msgid "_View" msgstr "" #: ../setup/python2/setup.ui.h:81 ../setup/python3/setup.ui.h:81 msgid "_Add" msgstr "ๆทปๅŠ (_A)" #: ../setup/python2/setup.ui.h:82 ../setup/python3/setup.ui.h:82 msgid "_Delete" msgstr "ๅˆ ้™ค(_D)" #: ../setup/python2/setup.ui.h:83 ../setup/python3/setup.ui.h:83 msgid "_Up" msgstr "ๅ‘ไธŠ(_U)" #: ../setup/python2/setup.ui.h:84 ../setup/python3/setup.ui.h:84 msgid "You can change the order on language bar" msgstr "" #: ../setup/python2/setup.ui.h:85 ../setup/python3/setup.ui.h:85 msgid "_Down" msgstr "ๅ‘ไธ‹(_D)" #: ../setup/python2/setup.ui.h:86 ../setup/python3/setup.ui.h:86 msgid "Extended Dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:87 ../setup/python3/setup.ui.h:87 msgid "Dictionary" msgstr "" #: ../setup/python2/setup.ui.h:88 ../setup/python3/setup.ui.h:88 msgid "About" msgstr "" #: ../setup/python2/setup.ui.h:89 ../setup/python3/setup.ui.h:89 msgid "_Apply" msgstr "ๅบ”็”จ(_A)" #: ../setup/python2/setup.ui.h:92 ../setup/python3/setup.ui.h:92 msgid "Edit Shortcut" msgstr "" #: ../setup/python2/setup.ui.h:93 ../setup/python3/setup.ui.h:93 msgid "Key Code:" msgstr "" #: ../setup/python2/setup.ui.h:94 ../setup/python3/setup.ui.h:94 msgid "Modifier:" msgstr "" #: ../setup/python2/setup.ui.h:95 ../setup/python3/setup.ui.h:95 msgid "A_lternate" msgstr "" #: ../setup/python2/setup.ui.h:96 ../setup/python3/setup.ui.h:96 msgid "Co_ntrol" msgstr "" #: ../setup/python2/setup.ui.h:97 ../setup/python3/setup.ui.h:97 msgid "_Shift" msgstr "" #: ../setup/python2/setup.ui.h:98 ../setup/python3/setup.ui.h:98 msgid "_Refresh" msgstr "ๅˆทๆ–ฐ(_R)" #: ../setup/python2/setup.ui.h:99 ../setup/python3/setup.ui.h:99 msgid "_Input Characters" msgstr "" #: ../setup/python2/setup.ui.h:100 ../setup/python3/setup.ui.h:100 msgid "_Output Characters" msgstr "" #: ../setup/python2/setup.ui.h:101 ../setup/python3/setup.ui.h:101 msgid "_Left Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:102 ../setup/python3/setup.ui.h:102 msgid "_Right Thumb Shift" msgstr "" #: ../setup/python2/setup.ui.h:103 ../setup/python3/setup.ui.h:103 msgid "_Remove" msgstr "ๅˆ ้™ค(_R)" #: ../setup/python2/setup.ui.h:104 ../setup/python3/setup.ui.h:104 msgid "_Close" msgstr "ๅ…ณ้—ญ(_C)" #: ../setup/python2/setup.ui.h:105 ../setup/python3/setup.ui.h:105 msgid "_Short Label:" msgstr "" #: ../setup/python2/setup.ui.h:106 ../setup/python3/setup.ui.h:106 msgid "_Description:" msgstr "" #: ../setup/python2/setup.ui.h:107 ../setup/python3/setup.ui.h:107 msgid "_Use your dictionary alone with switching dictionaries" msgstr "" #: ../setup/python2/setup.ui.h:108 ../setup/python3/setup.ui.h:108 msgid "_Embed your dictionary in the system dictionary" msgstr "" #: ../setup/python2/setup.ui.h:109 ../setup/python3/setup.ui.h:109 msgid "Enable the _reverse conversion" msgstr "" #: ../setup/python2/setup.ui.h:110 ../setup/python3/setup.ui.h:110 msgid "The Anthy engine for the IBus input platform" msgstr "" #: ../setup/python2/setup.ui.h:111 ../setup/python3/setup.ui.h:111 msgid "translator_credits" msgstr "" ibus-anthy-1.5.11/python-config.py000077500000000000000000000026121346647371500170440ustar00rootroot00000000000000#!/usr/bin/python2.5 import sys import os import getopt from distutils import sysconfig valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', 'ldflags', 'help'] def exit_with_usage(code=1): print >>sys.stderr, "Usage: %s [%s]" % (sys.argv[0], '|'.join('--'+opt for opt in valid_opts)) sys.exit(code) try: opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) except getopt.error: exit_with_usage() if not opts: exit_with_usage() opt = opts[0][0] pyver = sysconfig.get_config_var('VERSION') getvar = sysconfig.get_config_var if opt == '--help': exit_with_usage(0) elif opt == '--prefix': print sysconfig.PREFIX elif opt == '--exec-prefix': print sysconfig.EXEC_PREFIX elif opt in ('--includes', '--cflags'): flags = ['-I' + sysconfig.get_python_inc(), '-I' + sysconfig.get_python_inc(plat_specific=True)] if opt == '--cflags': flags.extend(getvar('CFLAGS').split()) print ' '.join(flags) elif opt in ('--libs', '--ldflags'): libs = getvar('LIBS').split() + getvar('SYSLIBS').split() libs.append('-lpython'+pyver) # add the prefix/lib/pythonX.Y/config dir, but only if there is no # shared library in prefix/lib/. if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'): libs.insert(0, '-L' + getvar('LIBPL')) print ' '.join(libs) ibus-anthy-1.5.11/setup/000077500000000000000000000000001346647371500150425ustar00rootroot00000000000000ibus-anthy-1.5.11/setup/Makefile.am000066400000000000000000000017121346647371500170770ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2014 Takao Fujiwara # Copyright (c) 2014 Red Hat, Inc. # # 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. SUBDIRS = if ENABLE_PYTHON2 SUBDIRS += python2 endif if ENABLE_PYTHON3 SUBDIRS += python3 endif ibus-anthy-1.5.11/setup/python2/000077500000000000000000000000001346647371500164455ustar00rootroot00000000000000ibus-anthy-1.5.11/setup/python2/Makefile.am000066400000000000000000000061541346647371500205070ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. desktop_in_in_files = ibus-setup-anthy.desktop.in.in desktop_in_files = $(desktop_in_in_files:.in.in=.in) $(desktop_in_files): %.desktop.in: %.desktop.in.in Makefile $(AM_V_GEN) sed \ -e "s|\@libexecdir\@|$(libexecdir)|" \ -e "s|\@pkgdatadir\@|$(pkgdatadir)|" \ $< > $@.tmp && mv $@.tmp $@ desktopdir=$(datadir)/applications desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) $(desktop_DATA): $(desktop_in_files) Makefile $(AM_V_GEN)$(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@ BUILT_SOURCES = \ _config.py \ $(NULL) libexec_SCRIPTS = ibus-setup-anthy setup_anthy_PYTHON = \ _config.py \ anthyprefs.py \ main.py \ prefs.py \ setup.ui \ $(NULL) setup_anthy_built_files = \ $(BUILT_SOURCES) \ $(libexec_SCRIPTS) \ $(NULL) setup_anthy_built_in_files = $(addsuffix .in, $(setup_anthy_built_files)) setup_anthydir = $(datadir)/ibus-anthy/setup CONFIG_CLEAN_FILES = \ $(BUILT_SOURCES) \ $(NULL) CLEANFILES = \ $(BUILT_SOURCES) \ $(desktop_DATA) \ $(desktop_in_files) \ $(libexec_SCRIPTS) \ *.pyc \ $(NULL) EXTRA_DIST = \ $(desktop_in_in_files) \ $(setup_anthy_built_in_files) \ $(NULL) ibus-setup-anthy: ibus-setup-anthy.in sed -e "s|\@prefix\@|$(prefix)|g" \ -e "s|\@localedir\@|$(localedir)|g" \ -e "s|\@PYTHON\@|$(PYTHON)|g" \ $< > $@ _config.py: _config.py.in sed -e "s|\@pkgdatadir\@|$(pkgdatadir)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datadir\@|$(datadir)|g" \ -e "s|\@LAYOUT\@|$(LAYOUT)|g" \ -e "s|\@SYMBOL_CHAR_INT\@|$(SYMBOL_CHAR_INT)|g" \ -e "s|\@ICON_PREFERENCE\@|$(ICON_PREFERENCE)|g" \ -e "s|\@VERSION\@|$(VERSION)|g" \ $< > $@ # Need a time lag between .py and .py.in files to build .py files # because *_PYTHON valuables are installed in the tarball. dist-hook: @sleep 1; \ for in_file in $(setup_anthy_built_in_files) ; do \ if [ -f $(distdir)/$(srcdir)/$$in_file ] ; then \ touch $(distdir)/$(srcdir)/$$in_file; \ fi; \ done; test: $(ENV_IBUS_TEST) DBUS_DEBUG=true \ LANG=en_US \ PYTHONPATH=$(abs_top_srcdir):$(pyexecdir) \ IBUS_LOCALEDIR=@localedir@ \ $(PYTHON) $(srcdir)/main.py ibus-anthy-1.5.11/setup/python2/_config.py.in000077700000000000000000000000001346647371500267042../../engine/python2/_config.py.inustar00rootroot00000000000000ibus-anthy-1.5.11/setup/python2/anthyprefs.py000066400000000000000000000230711346647371500212050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys import _config as config from prefs import Prefs N_ = lambda a : a __all__ = ['AnthyPrefs'] class AnthyPrefs(Prefs): _char_to_config_key = None def __init__(self): super(AnthyPrefs, self).__init__() def get_japanese_ordered_list(self): return _japanese_ordered_list def get_version(self): return config.VERSION # Convert gsettings key to typing sequences # E.g. 'largea-bracketleft' to 'A[' def typing_from_config_key(self, gkeys): retval = '' for key in gkeys.split('-'): if key in _supported_gsettings_key_chars: retval += key continue try: ch = _config_key_to_char[key] except KeyError: print >> sys.stderr, 'Not supported key in gsettings', gkeys retval = '' break retval += ch return retval # Convert typing sequences to gsettings key. # E.g. 'A[' to 'largea-bracketleft' def typing_to_config_key(self, typing): retval = '' if self._char_to_config_key == None: self._char_to_config_key = {} for _key, _ch in _config_key_to_char.items(): self._char_to_config_key[_ch] = _key for ch in typing: try: # U+A5 needs to be UTF-8 since gconf values are # disk saved values. ch = ch.encode('utf-8') except: print >> sys.stderr, \ 'Failed to encode UTF-8:', ch if ch in _supported_gsettings_key_chars: if retval != '': retval += '-' retval += ch continue try: key = self._char_to_config_key[ch] except KeyError: print >> sys.stderr, 'Not supported key in gsettings', typing retval = '' break if retval != '': retval += '-' retval += key return retval def get_value(self, section, key): not_sorted = super(AnthyPrefs, self).get_value(section, key) if section == 'shortcut' and type(not_sorted) == dict: retval = dict.fromkeys(_cmd_keys, []) retval.update(not_sorted) return retval return not_sorted # Sad! dict.keys() doesn't return the saved order. # locale.strcoll() also just returns the Unicode code point. # Unicode order is wrong in Japanese large 'a' and small 'a'. # The workaround is to save the order here... _japanese_ordered_list = [ 'ใ‚', 'ใ„', 'ใ†', 'ใˆ', 'ใŠ', 'ใ', 'ใƒ', 'ใ…', 'ใ‡', 'ใ‰', 'ใ„ใ‡', 'ใ†ใ', 'ใ†ใƒ', 'ใ†ใ…', 'ใ†ใ‡', 'ใ†ใ‰', 'ใ†ใ‚ƒ', 'ใ†ใ‚…', 'ใ†ใ‚‡', 'ใ‹', 'ใ', 'ใ', 'ใ‘', 'ใ“', 'ใ‚•', 'ใ‚–', 'ใƒต', 'ใƒถ', 'ใŒ', 'ใŽ', 'ใ', 'ใ’', 'ใ”', 'ใใ‚ƒ', 'ใใƒ', 'ใใ‚…', 'ใใ‡', 'ใใ‚‡', 'ใใ', 'ใใƒ', 'ใใ…', 'ใใ‡', 'ใใ‰', 'ใŽใ‚ƒ', 'ใŽใƒ', 'ใŽใ‚…', 'ใŽใ‡', 'ใŽใ‚‡', 'ใใ', 'ใใƒ', 'ใใ…', 'ใใ‡', 'ใใ‰', 'ใ•', 'ใ—', 'ใ™', 'ใ›', 'ใ', 'ใ–', 'ใ˜', 'ใš', 'ใœ', 'ใž', 'ใ—ใ‚ƒ', 'ใ—ใƒ', 'ใ—ใ‚…', 'ใ—ใ‡', 'ใ—ใ‚‡', 'ใ˜ใ‚ƒ', 'ใ˜ใƒ', 'ใ˜ใ‚…', 'ใ˜ใ‡', 'ใ˜ใ‚‡', 'ใ™ใ…ใƒ', 'ใ™ใ‡', 'ใšใ‡', 'ใŸ', 'ใก', 'ใค', 'ใฆ', 'ใจ', 'ใ ', 'ใข', 'ใฅ', 'ใง', 'ใฉ', 'ใฃ', 'ใกใ‚ƒ', 'ใกใƒ', 'ใกใ‚…', 'ใกใ‡', 'ใกใ‚‡', 'ใขใƒ', 'ใขใ‡', 'ใขใ‚ƒ', 'ใขใ‚…', 'ใขใ‚‡', 'ใคใ', 'ใคใƒ', 'ใคใ‡', 'ใคใ‰', 'ใคใ‚ƒ', 'ใคใƒใ‡', 'ใคใ‚…', 'ใคใ‚‡', 'ใฅใ', 'ใฅใƒ', 'ใฅใ‡', 'ใฅใ‰', 'ใฅใ‚ƒ', 'ใฅใƒใ‡', 'ใฅใ‚…', 'ใฅใ‚‡', 'ใฆใƒ', 'ใฆใ‡', 'ใฆใ‚ƒ', 'ใฆใ‚…', 'ใฆใ‚‡', 'ใจใ…', 'ใงใƒ', 'ใงใ‡', 'ใงใ‚ƒ', 'ใงใ‚…', 'ใงใ‚‡', 'ใฉใ…', 'ใช', 'ใซ', 'ใฌ', 'ใญ', 'ใฎ', 'ใซใƒ', 'ใซใ‡', 'ใซใ‚ƒ', 'ใซใ‚…', 'ใซใ‚‡', 'ใฏ', 'ใฒ', 'ใต', 'ใธ', 'ใป', 'ใฐ', 'ใณ', 'ใถ', 'ใน', 'ใผ', 'ใฑ', 'ใด', 'ใท', 'ใบ', 'ใฝ', 'ใฒใƒ', 'ใฒใ‡', 'ใฒใ‚ƒ', 'ใฒใ‚…', 'ใฒใ‚‡', 'ใณใƒ', 'ใณใ‡', 'ใณใ‚ƒ', 'ใณใ‚…', 'ใณใ‚‡', 'ใดใƒ', 'ใดใ‡', 'ใดใ‚ƒ', 'ใดใ‚…', 'ใดใ‚‡', 'ใตใ', 'ใตใƒ', 'ใตใ‡', 'ใตใ‰', 'ใตใ‚ƒ', 'ใตใ‚…', 'ใตใ‚‡', 'ใถใ', 'ใถใ‡', 'ใถใ‰', 'ใทใ', 'ใทใ‡', 'ใทใ‰', 'ใพ', 'ใฟ', 'ใ‚€', 'ใ‚', 'ใ‚‚', 'ใฟใƒ', 'ใฟใ‡', 'ใฟใ‚ƒ', 'ใฟใ‚…', 'ใฟใ‚‡', 'ใ‚„', 'ใ‚†', 'ใ‚ˆ', 'ใ‚ƒ', 'ใ‚…', 'ใ‚‡', 'ใ‚‰', 'ใ‚Š', 'ใ‚‹', 'ใ‚Œ', 'ใ‚', 'ใ‚Šใƒ', 'ใ‚Šใ‡', 'ใ‚Šใ‚ƒ', 'ใ‚Šใ‚…', 'ใ‚Šใ‚‡', 'ใ‚', 'ใ‚’', 'ใ‚“', 'ใ‚Ž', 'ใ‚', 'ใ‚‘', 'ใƒผ', 'ใƒดใ', 'ใƒดใƒ', 'ใƒด', 'ใƒดใ‡', 'ใƒดใ‰', 'ใƒดใ‚ƒ', 'ใƒดใƒใ‡', 'ใƒดใ‚…', 'ใƒดใ‚‡', ] # http://git.gnome.org/browse/glib/tree/gio/glib-compile-schemas.c#n765 # gsettings supports keys named by "abcdefghijklmnopqrstuvwxyz0123456789-" # and ibus-anthy uses '-' as the delimiter. _supported_gsettings_key_chars = "abcdefghijklmnopqrstuvwxyz0123456789" _config_key_to_char = { # no modifiers keys 'minus' : '-', 'asciicircum' : '^', 'at' : '@', 'bracketleft' : '[', 'semicolon' : ';', 'colon' : ':', 'bracketright' : ']', 'comma' : ',', 'period' : '.', 'slash' : '/', 'backslash' : '\\', # shift modifiered keys 'exclam' : '!', 'quotedbl' : '"', 'numbersign' : '#', 'dollar' : '$', 'percent' : '%', 'ampersand' : '&', 'apostrophe' : '\'', 'parenleft' : '(', 'parenright' : ')', 'asciitilde' : '~', 'equal' : '=', 'bar' : '|', 'largeq' : 'Q', 'largew' : 'W', 'largee' : 'E', 'larger' : 'R', 'larget' : 'T', 'largey' : 'Y', 'largeu' : 'U', 'largei' : 'I', 'largeo' : 'O', 'largep' : 'P', 'grave' : '`', 'braceleft' : '{', 'largea' : 'A', 'larges' : 'S', 'larged' : 'D', 'largef' : 'F', 'largeg' : 'G', 'largeh' : 'H', 'largej' : 'J', 'largek' : 'K', 'largel' : 'L', 'plus' : '+', 'asterisk' : '*', 'braceright' : '}', 'largez' : 'Z', 'largex' : 'X', 'largec' : 'C', 'largev' : 'V', 'largeb' : 'B', 'largen' : 'N', 'largem' : 'M', 'less' : '<', 'greater' : '>', 'question' : '?', 'underscore' : '_', 'yen' : 'ยฅ', } _cmd_keys = [ 'on_off', 'circle_input_mode', 'circle_kana_mode', 'circle_typing_method', 'circle_dict_method', 'latin_mode', 'wide_latin_mode', 'hiragana_mode', 'katakana_mode', 'half_katakana_mode', # 'cancel_pseudo_ascii_mode_key', 'hiragana_for_latin_with_shift', 'insert_space', 'insert_alternate_space', 'insert_half_space', 'insert_wide_space', 'backspace', 'delete', 'commit', 'convert', 'predict', 'cancel', 'cancel_all', 'reconvert', # 'do_nothing', 'select_first_candidate', 'select_last_candidate', 'select_next_candidate', 'select_prev_candidate', 'candidates_page_up', 'candidates_page_down', 'move_caret_first', 'move_caret_last', 'move_caret_forward', 'move_caret_backward', 'select_first_segment', 'select_last_segment', 'select_next_segment', 'select_prev_segment', 'shrink_segment', 'expand_segment', 'commit_first_segment', 'commit_selected_segment', 'select_candidates_1', 'select_candidates_2', 'select_candidates_3', 'select_candidates_4', 'select_candidates_5', 'select_candidates_6', 'select_candidates_7', 'select_candidates_8', 'select_candidates_9', 'select_candidates_0', 'convert_to_char_type_forward', 'convert_to_char_type_backward', 'convert_to_hiragana', 'convert_to_katakana', 'convert_to_half', 'convert_to_half_katakana', 'convert_to_wide_latin', 'convert_to_latin', 'convert_to_hiragana_all', 'convert_to_katakana_all', 'convert_to_half_all', 'convert_to_half_katakana_all', 'convert_to_wide_latin_all', 'convert_to_latin_all', 'dict_admin', 'add_word', 'start_setup', ] _dummy_translatable_strings = [ N_('General'), N_('Zip Code Conversion'), N_('Symbol'), N_('Old Character Style'), N_('Era'), N_('Emoji'), ] ibus-anthy-1.5.11/setup/python2/ibus-setup-anthy.desktop.in.in000066400000000000000000000002551346647371500242750ustar00rootroot00000000000000[Desktop Entry] Name=IBus Anthy Setup Comment=Set up IBus Anthy engine Exec=@libexecdir@/ibus-setup-anthy Icon=ibus-anthy NoDisplay=true Type=Application StartupNotify=true ibus-anthy-1.5.11/setup/python2/ibus-setup-anthy.in000066400000000000000000000020321346647371500222130ustar00rootroot00000000000000#!/bin/sh # vim:set noet ts=4: # # ibus-tmpl - The Input Bus template project # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. export IBUS_LOCALEDIR=@localedir@ exec @PYTHON@ @prefix@/share/ibus-anthy/setup/main.py $@ ibus-anthy-1.5.11/setup/python2/main.py000066400000000000000000002102131346647371500177420ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. from os import environ, getuid, path import os, sys import locale import xml.dom.minidom import gettext from gettext import dgettext from gi import require_version as gi_require_version gi_require_version('Gio', '2.0') gi_require_version('GLib', '2.0') gi_require_version('Gtk', '3.0') gi_require_version('Gdk', '3.0') gi_require_version('GdkX11', '3.0') gi_require_version('Pango', '1.0') gi_require_version('IBus', '1.0') from gi.repository import Gio from gi.repository import GLib # set_prgname before importing other modules to show the name in warning # messages when import modules are failed. E.g. Gtk. GLib.set_prgname('ibus-setup-anthy') from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GdkX11 from gi.repository import Pango from gi.repository import IBus import _config as config from anthyprefs import AnthyPrefs DOMAINNAME = 'ibus-anthy' _ = lambda a : dgettext('ibus-anthy', a) def l_to_s(l): return str(sorted([str(s) for s in l])).replace('\'', '') def s_to_l(s): return [] if s == '[]' else s[1:-1].replace(' ', '').split(',') class AnthySetup(object): def __init__(self): # Python's locale module doesn't provide all methods on some # operating systems like FreeBSD try: locale.bindtextdomain(DOMAINNAME, config.LOCALEDIR) locale.bind_textdomain_codeset(DOMAINNAME, 'UTF-8') except AttributeError: pass gettext.bindtextdomain(DOMAINNAME, config.LOCALEDIR) gettext.bind_textdomain_codeset(DOMAINNAME, 'UTF-8') self.__prefs = AnthyPrefs() builder_file = path.join(path.dirname(__file__), 'setup.ui') self.__builder = builder = Gtk.Builder() builder.set_translation_domain(DOMAINNAME) builder.add_from_file(builder_file) toplevel = builder.get_object('main') parent_xid = 0 parent_wmname = None parent_wmclass = None try: parent_xid = int(environ['IBUS_SETUP_XID']) if parent_xid != 0: parent_wmname = 'ibus-setup' parent_wmclass = 'Ibus-setup' except: pass try: if parent_xid == 0: parent_xid = int(environ['GNOME_CONTROL_CENTER_XID']) if parent_xid != 0: parent_wmname = 'gnome-conrol-center' parent_wmclass = 'Gnome-conrol-center' except: pass if parent_xid != 0: def set_transient(obj, pspec): window = toplevel.get_window() if window == None: return parent_window = GdkX11.X11Window.foreign_new_for_display(Gdk.Display.get_default(), parent_xid) if parent_window != None: window.set_transient_for(parent_window) toplevel.set_wmclass(parent_wmname, parent_wmclass) toplevel.set_modal(True) toplevel.set_type_hint(Gdk.WindowTypeHint.DIALOG) toplevel.connect('notify::window', set_transient) toplevel.show() self.__init_bus_connected() def __init_bus_connected(self): builder = self.__builder prefs = self.__prefs self.__thumb_kb_layout_mode = None self.__thumb_kb_layout = None self.__japanese_ordered_dict = {} # glade 'icon_name' property has a custom scaling and it seems # to be difficult to show the complicated small icon in metacity. # This can add the pixbuf without scaling. anthydir = path.dirname(path.dirname(__file__)) if not anthydir: anthydir = '/usr/share/ibus-anthy' icon_path = path.join(anthydir, 'icons', 'ibus-anthy.png') if path.exists(icon_path): builder.get_object('main').set_icon_from_file(icon_path) else: icon_path = 'ibus-anthy' builder.get_object('main').set_icon_name(icon_path) for name in ['input-mode', 'typing-method', 'conversion-segment-mode', 'period-style', 'symbol-style', 'ten-key-mode', 'behavior-on-focus-out', 'behavior-on-period', 'half-width-symbol', 'half-width-number', 'half-width-space', 'latin-with-shift', 'thumb:keyboard-layout-mode', 'thumb:keyboard-layout', 'thumb:fmv-extension', 'thumb:handakuten']: section, key = self.__get_section_key(name) prefs.bind(section, key, builder.get_object(name), 'active', Gio.SettingsBindFlags.DEFAULT) prefs.bind('thumb', 'keyboard-layout-mode', builder.get_object('thumb:keyboard-layout'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN) tv = builder.get_object('menu-visible:treeview') ls = Gtk.ListStore(str, bool, str) tv.set_model(ls) column = Gtk.TreeViewColumn(' ') renderer = Gtk.CellRendererToggle() renderer.set_radio(False) renderer.connect('toggled', self.__renderer_toggled_cb, ls) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_menu_visible_cell_cb, 1) tv.append_column(column) column = Gtk.TreeViewColumn(_("Menu label")) renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_menu_visible_cell_cb, 2) tv.append_column(column) self.__append_menus_in_model() l = ['default', 'atok', 'wnn'] s_type = prefs.get_value('common', 'shortcut-type') s_type = s_type if s_type in l else 'default' builder.get_object('shortcut-type').set_active(l.index(s_type)) prefs.bind('common', 'page-size', builder.get_object('page-size').get_adjustment(), 'value', Gio.SettingsBindFlags.DEFAULT) tv = builder.get_object('shortcut') tv.append_column(Gtk.TreeViewColumn(_("Command"), Gtk.CellRendererText(), text=0)) renderer = Gtk.CellRendererText() renderer.set_property('ellipsize', Pango.EllipsizeMode.END) tv.append_column(Gtk.TreeViewColumn(_("Shortcut"), renderer, text=1)) tv.get_selection().connect_after('changed', self.on_selection_changed, 0) ls = Gtk.ListStore(str, str) shortcuts = self.__prefs.get_value('shortcut', s_type) for k in shortcuts.keys(): ls.append([k, l_to_s(shortcuts[k])]) tv.set_model(ls) self.__keymap = None GLib.idle_add(self.__update_keymap_label, priority = GLib.PRIORITY_LOW) self.__thumb_kb_layout_mode = builder.get_object('thumb:keyboard-layout-mode') self.__thumb_kb_layout = builder.get_object('thumb:keyboard-layout') self.__set_thumb_kb_label() for name in ['thumb:ls', 'thumb:rs']: section, key = self.__get_section_key(name) builder.get_object(name).set_text(prefs.get_value(section, key)) tv = builder.get_object('es:treeview') tv.append_column(Gtk.TreeViewColumn('', Gtk.CellRendererText(), text=0)) tv.get_selection().connect_after('changed', self.on_selection_changed, 1) tv.set_model(Gtk.ListStore(str)) key = 'dict-admin-command' cli = self.__get_dict_cli_from_list(prefs.get_value('common', key)) name = 'dict:entry-edit-dict-command' builder.get_object(name).set_text(cli) key = 'add-word-command' cli = self.__get_dict_cli_from_list(prefs.get_value('common', key)) name = 'dict:entry-add-word-command' builder.get_object(name).set_text(cli) tv = builder.get_object('dict:view') column = Gtk.TreeViewColumn(' ') renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_cell_data_cb, 1) tv.append_column(column) column = Gtk.TreeViewColumn(_("Description")) renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_cell_data_cb, 2) column.set_expand(True) tv.append_column(column) # Translators: "Embd" is an abbreviation of "embedded". column = Gtk.TreeViewColumn(_("Embd")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 3) tv.append_column(column) # Translators: "Sgl" is an abbreviation of "single". column = Gtk.TreeViewColumn(_("Sgl")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 4) tv.append_column(column) ''' Unfortunately reverse conversion is too slow. # Translators: "Rev" is an abbreviation of "reverse". column = Gtk.TreeViewColumn(_("Rev")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 5) tv.append_column(column) ''' ls = Gtk.ListStore(str, str, str, bool, bool, bool) tv.set_model(ls) self.__append_dicts_in_model() self.__init_japanese_sort() self.__init_about_vbox(icon_path) builder.connect_signals(self) def __init_japanese_sort(self): japanese_ordered_dict = {} japanese_ordered_list = self.__prefs.get_japanese_ordered_list() for index, c in enumerate(japanese_ordered_list): japanese_ordered_dict[c] = index self.__japanese_ordered_dict = japanese_ordered_dict; def __init_about_vbox(self, icon_path): about_dialog = self.__builder.get_object('about_dialog') about_vbox = self.__builder.get_object('about_vbox') about_dialog.set_version(self.__prefs.get_version()) if icon_path != None: if icon_path[0] == '/': image = Gtk.Image.new_from_file(icon_path) about_dialog.set_logo(image.get_pixbuf()) else: icon_theme = Gtk.IconTheme.get_default() try: pixbuf = icon_theme.load_icon(icon_path, 48, 0) about_dialog.set_logo(pixbuf) except Exception, err: print >> sys.stderr, 'Not found icon', str(err) print >> sys.stderr, 'Need to run gtk-update-icon-cache' content_area = about_dialog.get_content_area() list = content_area.get_children() vbox = list[0] for w in vbox.get_children(): old_parent = w.props.parent w.unparent() w.emit('parent-set', old_parent) about_vbox.pack_start(w, False, False, 0) def __get_userhome(self): if 'HOME' not in environ: import pwd userhome = pwd.getpwuid(getuid()).pw_dir else: userhome = environ['HOME'] userhome = userhome.rstrip('/') return userhome def __get_section_key(self, name): i = name.find(':') if i > 0: section = name[:i] key = name[i + 1:] else: section = 'common' key = name return (section, key) def __run_message_dialog(self, message, type=Gtk.MessageType.INFO): dlg = Gtk.MessageDialog( transient_for=self.__builder.get_object('main'), message_type=type, buttons=Gtk.ButtonsType.OK, text=message) dlg.run() dlg.destroy() def _get_shortcut_sec(self): l = ['default', 'atok', 'wnn'] iter = self.__builder.get_object('shortcut-type').get_active_iter() model = self.__builder.get_object('shortcut-type').get_model() s_type = model[iter][0].lower() return 'shortcut/' + (s_type if s_type in l else 'default') def __get_shortcut_group(self): l = ['default', 'atok', 'wnn'] iter = self.__builder.get_object('shortcut-type').get_active_iter() model = self.__builder.get_object('shortcut-type').get_model() s_type = model[iter][0].lower() return s_type if s_type in l else 'default' def __japanese_tuple_sort(self, a, b): if a[1] == b[1]: return cmp(a[0], b[0]) elif a[1] in self.__japanese_ordered_dict and \ b[1] in self.__japanese_ordered_dict: return self.__japanese_ordered_dict[a[1]] - \ self.__japanese_ordered_dict[b[1]] elif a[1] not in self.__japanese_ordered_dict and \ b[1] in self.__japanese_ordered_dict: return 1 elif a[1] in self.__japanese_ordered_dict and \ b[1] not in self.__japanese_ordered_dict: return -1 else: return cmp(a[1], b[1]) def __japanese_thumb_sort(self, a, b): return cmp(a[0], b[0]) def __renderer_toggled_cb(self, renderer, path, model): prefs = self.__prefs enabled = not model[path][1] model[path][1] = enabled key = model[path][0] prefs.set_value('common', key, enabled) def __toggle_menu_visible_cell_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('menu-visible:treeview').get_model() active = l.get_value(iter, id) renderer.set_property('active', active) def __text_menu_visible_cell_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('menu-visible:treeview').get_model() text = l.get_value(iter, id) renderer.set_property('text', text) def __append_menus_in_model(self): prefs = self.__prefs l = self.__builder.get_object('menu-visible:treeview').get_model() l.append(['show-input-mode', prefs.get_value('common', 'show-input-mode'), _("Input mode")]) l.append(['show-typing-method', prefs.get_value('common', 'show-typing-method'), _("Typing method")]) l.append(['show-segment-mode', prefs.get_value('common', 'show-segment-mode'), _("Segment mode")]) l.append(['show-dict-mode', prefs.get_value('common', 'show-dict-mode'), _("Dictionary mode")]) l.append(['show-dict-config', prefs.get_value('common', 'show-dict-config'), _("Dictionary - Anthy")]) l.append(['show-preferences', prefs.get_value('common', 'show-preferences'), _("Preferences - Anthy")]) def __get_romaji_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'romaji-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and value != '': rule[ch] = value for key, value in sorted(rule.items(), \ cmp = self.__japanese_tuple_sort): ls.append(['romaji', key, value]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")), Gtk.CellRendererText(), text=2)) tv.set_model(ls) return tv def __get_kana_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'kana-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and value != '': rule[ch] = value for key, value in sorted(rule.items(), \ cmp = self.__japanese_tuple_sort): ls.append(['kana', key, value]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")), Gtk.CellRendererText(), text=2)) tv.set_model(ls) return tv def __get_thumb_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'thumb-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and len(value) == 3 and \ ((value[0] != None and value[0] != '') or \ (value[1] != None and value[1] != '') or \ (value[2] != None and value[2] != '')): rule[ch] = {} rule[ch][0] = value[0] rule[ch][1] = value[1] rule[ch][2] = value[2] for key, value in sorted(rule.items(), \ cmp = self.__japanese_thumb_sort): ls.append(['thumb', key, value[0], value[2], value[1]]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Single")), Gtk.CellRendererText(), text=2)) tv.append_column(Gtk.TreeViewColumn(_(_("Left")), Gtk.CellRendererText(), text=3)) tv.append_column(Gtk.TreeViewColumn(_(_("Right")), Gtk.CellRendererText(), text=4)) tv.set_model(ls) return tv def __show_dialog_custom_key_table_extention(self, mode): hbox_combo = self.__builder.get_object('hbox_for_combobox_custom_key_table') label_left = self.__builder.get_object('label_left_thumb_shift_custom_key') entry_left = self.__builder.get_object('entry_left_thumb_shift_custom_key') label_right = self.__builder.get_object('label_right_thumb_shift_custom_key') entry_right = self.__builder.get_object('entry_right_thumb_shift_custom_key') if mode == 'thumb': hbox_combo.show() label_left.show() entry_left.show() label_right.show() entry_right.show() elif mode == 'kana': hbox_combo.show() label_left.hide() entry_left.hide() label_right.hide() entry_right.hide() else: hbox_combo.hide() label_left.hide() entry_left.hide() label_right.hide() entry_right.hide() def __connect_dialog_custom_key_table_buttons(self, mode): tv = self.__builder.get_object('treeview_custom_key_table') tv.get_selection().connect_after('changed', self.on_selection_custom_key_table_changed, 0) entry = self.__builder.get_object('entry_input_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_output_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_left_thumb_shift_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_right_thumb_shift_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) button = self.__builder.get_object('button_add_custom_key') button.set_sensitive(False) button.connect('clicked', self.on_btn_add_custom_key, mode) button = self.__builder.get_object('button_remove_custom_key') button.set_sensitive(False) button.connect('clicked', self.on_btn_remove_custom_key, tv) def __disconnect_dialog_custom_key_table_buttons(self): tv = self.__builder.get_object('treeview_custom_key_table') combobox = self.__builder.get_object('combobox_custom_key_table') if tv != None: for column in tv.get_columns(): tv.remove_column(column) for child in tv.get_children(): tv.remove(child) entry = self.__builder.get_object('entry_input_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry.set_text('') entry = self.__builder.get_object('entry_output_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry.set_text('') entry = self.__builder.get_object('entry_left_thumb_shift_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry = self.__builder.get_object('entry_right_thumb_shift_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) button = self.__builder.get_object('button_add_custom_key') button.disconnect_by_func(self.on_btn_add_custom_key) button = self.__builder.get_object('button_remove_custom_key') button.disconnect_by_func(self.on_btn_remove_custom_key) combobox.clear() combobox.disconnect_by_func(self.on_cb_custom_key_table_changed) def __run_dialog_custom_key_table(self, widget, mode): prefs = self.__prefs dlg = self.__builder.get_object('dialog_custom_key_table') dlg.set_transient_for(widget.get_toplevel()) label = self.__builder.get_object('label_custom_key_table') label_output = self.__builder.get_object('label_output_custom_key') list_labels = [] if mode == 'romaji': dlg.set_title(_("Customize Romaji Key Table")) label.set_label(_("_Romaji Key Table:")) label_output.set_label(_("_Output Chars")) list_labels = [['default', _("Default")]] self.__show_dialog_custom_key_table_extention(mode) elif mode == 'kana': dlg.set_title(_("Customize Kana Key Table")) label.set_label(_("_Kana Key Table:")) label_output.set_label(_("_Output Chars")) list_labels = [['jp', _("Japanese Keyboard Layout")], ['us', _("U.S. Keyboard Layout")]] self.__show_dialog_custom_key_table_extention(mode) elif mode == 'thumb': dlg.set_title(_("Customize Thumb Shift Key Table")) label.set_label(_("_Thumb Shift Key Table:")) label_output.set_label(_("Single _Output Chars")) list_labels = [['base', _("Base")], ['nicola-j-table', _("NICOLA-J key extension")], ['nicola-a-table', _("NICOLA-A key extension")], ['nicola-f-table', _("NICOLA-F key extension")], ['kb231-j-fmv-table', _("FMV KB231-J key extension")], ['kb231-a-fmv-table', _("FMV KB231-A key extension")], ['kb231-f-fmv-table', _("FMV KB231-F key extension")], ['kb611-j-fmv-table', _("FMV KB611-J key extension")], ['kb611-a-fmv-table', _("FMV KB611-A key extension")], ['kb611-f-fmv-table', _("FMV KB611-F key extension")], ] self.__show_dialog_custom_key_table_extention(mode) ls = Gtk.ListStore(str, str) for s in list_labels: ls.append([s[1], s[0]]) renderer = Gtk.CellRendererText() combobox = self.__builder.get_object('combobox_custom_key_table') combobox.pack_start(renderer, True) combobox.add_attribute(renderer, 'text', 0) combobox.set_model(ls) tv = None if mode == 'romaji': method = prefs.get_value('romaji-typing-rule', 'method') if method == None: method = 'default' tv = self.__get_romaji_treeview_custom_key_table(method) if mode == 'kana': method = prefs.get_value('kana-typing-rule', 'method') if method == None: method = 'jp' tv = self.__get_kana_treeview_custom_key_table(method) if mode == 'thumb': method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = 'base' tv = self.__get_thumb_treeview_custom_key_table(method) self.__connect_dialog_custom_key_table_buttons(mode) id = 0 # thumb uses all tables so the default is always 0. if mode != 'thumb': id = -1 for index, labels in enumerate(list_labels): if labels[0] == method: id = index break if id == -1: ls.append([method, method]) combobox.set_model(ls) id = len(list_labels) combobox.set_active(id) combobox.connect('changed', self.on_cb_custom_key_table_changed, mode) id = dlg.run() dlg.hide() self.__disconnect_dialog_custom_key_table_buttons() def __set_thumb_kb_label(self): if self.__thumb_kb_layout_mode == None or \ self.__thumb_kb_layout == None: return section, key = self.__get_section_key( Gtk.Buildable.get_name(self.__thumb_kb_layout_mode)) layout_mode = self.__prefs.get_value(section, key) if layout_mode: self.__thumb_kb_layout.set_sensitive(False) else: self.__thumb_kb_layout.set_sensitive(True) def __get_dict_cli_from_list(self, cli_list): cli_str = cli_list[0] if len(cli_list) <= 2: return cli_str cli_str = cli_str + ' ' + ' '.join(cli_list[2:]) return cli_str def __get_quoted_id(self, file): id = file has_mbcs = False for i in xrange(0, len(id)): if ord(id[i]) >= 0x7f: has_mbcs = True break if has_mbcs: id = id.encode('hex') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] if id.startswith('0x'): id = id.encode('hex') has_mbcs = True if has_mbcs: id = '0x' + id return id def __get_dict_file_from_id(self, selected_id): files = self.__prefs.get_value('dict', 'files') return files.get(selected_id, None) def __is_system_dict_file_from_id(self, selected_id): prefs = self.__prefs dict_item = prefs.get_value('dict', 'list')[selected_id] return dict_item.is_system def __append_dict_id_in_model(self, id): prefs = self.__prefs section = 'dict/file/' + id dicts = prefs.get_value('dict', 'list') dict_item = dicts[id] short_label = dict_item.short_label long_label = dict_item.long_label embed = dict_item.embed single = dict_item.single reverse = dict_item.reverse if dict_item.is_system: long_label = _(long_label) l = self.__builder.get_object('dict:view').get_model() l.append([id, short_label, long_label, embed, single, reverse]) def __append_dicts_in_model(self): prefs = self.__prefs order = prefs.get_value('dict', 'order') dict_files = prefs.get_value('dict', 'files') if len(order) == 0: order = list(dict_files.keys()) for id in order: if id == 'embedded': continue files = dict_files[id] for file in files: if not path.exists(file): continue self.__append_dict_id_in_model(id) def __append_user_dict_from_dialog(self, file, id, new): files_dict = self.__prefs.get_value('dict', 'files') if new: files = [] for v in files_dict.values(): for f in v: files.append(f) if file in files: self.__run_message_dialog(_("Your choosed file has already been added: ") + file, Gtk.MessageType.ERROR) return if not path.exists(file): self.__run_message_dialog(_("The file you have chosen does not exist: ") + file, Gtk.MessageType.ERROR) return if path.isdir(file): self.__run_message_dialog(_("Your choosed file is a directory: " + file), Gtk.MessageType.ERROR) return if file.startswith(self.__get_userhome() + '/.anthy'): self.__run_message_dialog(_("You cannot add dictionaries in the anthy private directory: " + file), Gtk.MessageType.ERROR) return else: file = files_dict[id][0] if new: id = self.__get_quoted_id(file) if id == None or id == '': self.__run_message_dialog(_("Your file path is not good: ") + file, Gtk.MessageType.ERROR) return single = self.__builder.get_object('dict:single').get_active() embed = self.__builder.get_object('dict:embed').get_active() reverse = self.__builder.get_object('dict:reverse').get_active() short_label = self.__builder.get_object('dict:short_entry').get_text() if len(unicode(short_label, 'utf-8')) > 1: short_label = unicode(short_label, 'utf-8')[0].encode('utf-8') long_label = self.__builder.get_object('dict:long_entry').get_text() if new: order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) order.append(id) self.__prefs.set_value('dict', 'order', order) self.__prefs.set_list_item('dict', 'files', id, [file]) filename = file if filename.find('/') >=0: filename = filename[filename.rindex('/') + 1:] if filename.find('.') >=0: filname = filename[:filename.rindex('.')] if short_label == None or short_label == '': short_label = filename[0] if long_label == None or long_label == '': long_label = filename self.__update_dict_values(new, id, short_label, long_label, embed, single, reverse) files = [] def __init_dict_chooser_dialog(self): self.__builder.get_object('dict:single').set_active(True) self.__builder.get_object('dict:embed').set_active(False) self.__builder.get_object('dict:reverse').set_active(False) short_entry = self.__builder.get_object('dict:short_entry') short_entry.set_text('') short_entry.set_editable(True) long_entry = self.__builder.get_object('dict:long_entry') long_entry.set_text('') long_entry.set_editable(True) def __get_selected_dict_id(self): l, it = self.__builder.get_object('dict:view').get_selection().get_selected() if not it: return None return l.get_value(it, 0) def __set_selected_dict_to_dialog(self): selected_id = self.__get_selected_dict_id() if selected_id == None: return None dict_item = self.__prefs.get_value('dict', 'list')[selected_id] short_label = dict_item.short_label long_label = dict_item.long_label embed = dict_item.embed single = dict_item.single reverse = dict_item.reverse is_system_dict = dict_item.is_system if len(self.__prefs.unicode(short_label)) > 1: short_label = self.__prefs.unicode(short_label)[0].encode('utf-8') self.__builder.get_object('dict:single').set_active(single) self.__builder.get_object('dict:embed').set_active(embed) self.__builder.get_object('dict:reverse').set_active(reverse) short_entry = self.__builder.get_object('dict:short_entry') short_entry.set_text(short_label) long_entry = self.__builder.get_object('dict:long_entry') if is_system_dict: short_entry.set_editable(False) long_entry.set_text(_(long_label)) long_entry.set_editable(False) else: short_entry.set_editable(True) long_entry.set_text(long_label) long_entry.set_editable(True) return selected_id def __update_dict_values(self, new, id, short_label, long_label, embed, single, reverse): prefs = self.__prefs if new: dict_item = prefs.get_value('dict', 'template') dict_item.id = id dict_item.short_label = short_label dict_item.long_label = long_label dict_item.embed = embed dict_item.single = single dict_item.reverse = reverse l = self.__builder.get_object('dict:view').get_model() l.append([id, short_label, long_label, embed, single, reverse]) else: dict_item = prefs.get_value('dict', 'list')[id] if not dict_item.is_system: dict_item.short_label = short_label dict_item.long_label = long_label dict_item.embed = embed dict_item.single = single dict_item.reverse = reverse l, i = self.__builder.get_object('dict:view').get_selection().get_selected() if i : l[i] = [id, short_label, long_label, embed, single, reverse] prefs.set_list_item('dict', 'list', id, dict_item) def __text_cell_data_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('dict:view').get_model() text = l.get_value(iter, id) renderer.set_property('text', text) def __toggle_cell_data_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('dict:view').get_model() active = l.get_value(iter, id) renderer.set_property('active', active) def __resync_engine_file(self): user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') if not path.exists(user_config): return if not path.exists(system_config): os.unlink(user_config) return # path.getmtime depends on the build time rather than install time. def __get_engine_file_version(engine_file): version_str = '' dom = xml.dom.minidom.parse(engine_file) elements = dom.getElementsByTagName('version') nodes = [] if len(elements) > 0: nodes = elements[0].childNodes if len(nodes) > 0: version_str = nodes[0].data if type(version_str) == unicode: version_str = str(version_str) if version_str != '': version_str = version_str.strip() return version_str user_config_version = __get_engine_file_version(user_config) system_config_version = __get_engine_file_version(system_config) if system_config_version > user_config_version: import shutil shutil.copyfile(system_config, user_config) def __get_engine_file(self): user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') engine_file = None for f in [user_config, system_config]: if path.exists(f): engine_file = f break if engine_file == None: self.__run_message_dialog(_("The engine xml file does not exist: ") + system_config, Gtk.MessageType.ERROR) return None return engine_file def __get_keymap(self): keymap = '' layout = '' variant = '' option = '' engine_file = self.__get_engine_file() if engine_file == None: return None dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) > 0: layout = nodes[0].data if type(layout) == unicode: layout = str(layout) if layout != '': keymap = layout.strip() nodes = dom.getElementsByTagName('layout_variant')[0].childNodes if len(nodes) > 0: variant = nodes[0].data if type(variant) == unicode: variat = str(variant) if variant != '': keymap += '(' + varaint.strip() + ')' nodes = dom.getElementsByTagName('layout_option')[0].childNodes if len(nodes) > 0: option = nodes[0].data if type(option) == unicode: option = str(option) if option != '': keymap += '[' + option.strip() + ']' return keymap def __parse_keymap(self, keymap): layout = None variant = None option = None length = keymap.find('(') if length >= 0: if layout == None: layout = keymap[0:length] keymap = keymap[length + 1:] length = keymap.find(')') if length > 0: variant = keymap[0:length] keymap = keymap[length + 1:] else: print >> sys.stderr, 'Invalid keymap', keymap return ('', '', '') length = keymap.find('[') if length >= 0: if layout == None: layout = keymap[0:length] keymap = keymap[length + 1:] length = keymap.find(']') if length > 0: option = keymap[0:length] keymap = keymap[length + 1:] else: print >> sys.stderr, 'Invalid keymap', keymap return ('', '', '') if layout == None: layout = keymap if layout == None: layout = '' if variant == None: variant = '' if option == None: option = '' return (layout, variant, option) def __save_keymap(self): engine_file = self.__get_engine_file() if engine_file == None: return None (layout, variant, option) = self.__parse_keymap(self.__keymap) dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(layout)) else: nodes[0].data = layout nodes = dom.getElementsByTagName('layout_variant')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(variant)) else: nodes[0].data = variant nodes = dom.getElementsByTagName('layout_option')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(option)) else: nodes[0].data = option nodes = dom.getElementsByTagName('symbol')[0].childNodes # unicode will causes UnicodeEncodeError in write stream. if len(nodes) > 0 and type(nodes[0].data) == unicode: nodes[0].data = nodes[0].data.encode('utf-8') user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') dir = path.dirname(user_config) if not path.exists(dir): os.makedirs(dir, 0700) f = open(user_config, 'w') dom.writexml(f, '', '', '', 'utf-8') f.close() os.chmod(user_config, 0600) self.__keymap = None self.__run_message_dialog(_("Anthy keyboard layout is changed. " "Please restart ibus to reload the layout.")) def __update_keymap_label(self): self.__resync_engine_file() prefs = self.__prefs keymap = self.__get_keymap() if keymap == None: return if keymap == '': keymap = 'default' keymap_list = prefs.get_value('common', 'keyboard-layouts') if keymap != None and not keymap in keymap_list: keymap_list.append(keymap) index = -1 if keymap != None: index = keymap_list.index(keymap) model = Gtk.ListStore(str) for k in keymap_list: if k == 'default': k = _("Default") model.append([k]) combobox = self.__builder.get_object('keymap:combobox_custom_table') combobox.set_model(model) combobox.set_active(0) if index >= 0: combobox.set_active(index) combobox.connect_after('changed', self.on_cb_keymap_changed, 0) def __search_and_mark(self, buffer, text, start, end, onetime, forward): if forward: match = start.forward_search(text, 0, end) else: match = start.backward_search(text, 0, end) if match == None: return False match_start, match_end = match if onetime: buffer.place_cursor(match_start) buffer.select_range(match_start, match_end) return True buffer.apply_tag(buffer.tag_found, match_start, match_end) self.__search_and_mark(buffer, text, match_end, end, onetime, forward) return True def __filter_search(self, entry, onetime, forward): text = entry.get_text() self.__filter_timeout_id = 0 text_view = entry.text_view buffer = text_view.get_buffer() start = buffer.get_start_iter() if onetime: bounds = buffer.get_selection_bounds() if len(bounds) != 0: start, end = bounds if forward: start = end end = buffer.get_end_iter() if not forward: end = buffer.get_start_iter() if not onetime: buffer.remove_all_tags(start, end) if text == '': return found = self.__search_and_mark(buffer, text, start, end, onetime, forward) if not found and onetime and forward: end = start start = buffer.get_start_iter() self.__search_and_mark(buffer, text, start, end, onetime, forward) def __do_filter(self, entry): self.__filter_search(entry, False, True) return False def __filter_changed(self, entry): if self.__filter_timeout_id != 0: return self.__filter_timeout_id = GLib.timeout_add(150, self.__do_filter, entry) def __filter_key_release_event(self, entry, event): pressed, keyval = event.get_keyval() if keyval == IBus.KEY_Return: forward = True if event.get_state() & Gdk.ModifierType.SHIFT_MASK: forward = False self.__filter_search(entry, True, forward) text_view = entry.text_view buffer = text_view.get_buffer() text_view.scroll_to_mark(buffer.get_insert(), 0.25, False, 0.0, 0.0) return False def on_selection_changed(self, widget, id): set_sensitive = lambda a, b: self.__builder.get_object(a).set_sensitive(b) flg = True if widget.get_selected()[1] else False for name in [['btn_default', 'btn_edit'], ['es:button_refresh', 'es:button_del']][id]: set_sensitive(name, flg) def on_selection_custom_key_table_changed(self, widget, id): l, i = widget.get_selected() # if 'combobox_custom_key_table' is changed, # 'treeview_custom_key_table' also receives this signal # but no selection. if i == None: return button = self.__builder.get_object('button_remove_custom_key') button.set_sensitive(True) def on_main_quit(self, widget, event): Gtk.main_quit() return True def on_btn_close_clicked(self, widget): Gtk.main_quit() def on_cb_keymap_changed(self, widget, id): it = widget.get_active() model = widget.get_model() keymap = model[it][0] if keymap == _("Default"): keymap = 'default' if self.__keymap == keymap: return self.__keymap = keymap self.__save_keymap() self.__keymap = None def on_cb_custom_key_table_changed(self, widget, user_data): prefs = self.__prefs tv = self.__builder.get_object('treeview_custom_key_table') mode = user_data id = widget.get_active() model = widget.get_model() method = model[id][1] if tv != None: for column in tv.get_columns(): tv.remove_column(column) for child in tv.get_children(): tv.remove(child) if mode == 'romaji': tv = self.__get_romaji_treeview_custom_key_table(method) elif mode == 'kana': prefs.set_value('kana-typing-rule', 'method', method) tv = self.__get_kana_treeview_custom_key_table(method) elif mode == 'thumb': # thumb uses all tables so do not save the method. tv = self.__get_thumb_treeview_custom_key_table(method) def on_btn_edit_clicked(self, widget): ls, it = self.__builder.get_object('shortcut').get_selection().get_selected() m = self.__builder.get_object('es:treeview').get_model() m.clear() for s in s_to_l(ls.get(it, 1)[0]): m.append([s]) self.__builder.get_object('es:entry').set_text('') for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']: self.__builder.get_object(w).set_active(False) dlg = self.__builder.get_object('edit_shortcut') dlg.set_transient_for(widget.get_toplevel()) id = dlg.run() dlg.hide() if id == Gtk.ResponseType.OK: new = l_to_s([m[i][0] for i in range(len(m))]) if new != ls.get(it, 1)[0]: group = self.__get_shortcut_group() self.__prefs.set_list_item('shortcut', group, ls.get(it, 0)[0], s_to_l(new)) ls.set(it, 1, new) def on_btn_default_clicked(self, widget): ls, it = self.__builder.get_object('shortcut').get_selection().get_selected() group = self.__get_shortcut_group() shortcuts = self.__prefs.get_default_value('shortcut', group) new = l_to_s(shortcuts[ls.get(it, 0)[0]]) if new != ls.get(it, 1)[0]: self.__prefs.set_list_item('shortcut', group, ls.get(it, 0)[0], s_to_l(new)) ls.set(it, 1, new) def on_btn_romaji_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'romaji') def on_btn_kana_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'kana') def on_btn_thumb_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'thumb') def on_btn_add_custom_key(self, widget, user_data): prefs = self.__prefs input = self.__builder.get_object('entry_input_custom_key') output = self.__builder.get_object('entry_output_custom_key') left = self.__builder.get_object('entry_left_thumb_shift_custom_key') right = self.__builder.get_object('entry_right_thumb_shift_custom_key') model = self.__builder.get_object('treeview_custom_key_table').get_model() combobox = self.__builder.get_object('combobox_custom_key_table') id = combobox.get_active() model_combobox = combobox.get_model() method = model_combobox[id][1] type = user_data section_base = None key = input.get_text() value = output.get_text() left_text = left.get_text() right_text = right.get_text() if key == None: self.__run_message_dialog(_("Please specify Input Chars")) return elif value == None: self.__run_message_dialog(_("Please specify Output Chars")) return elif type == 'thumb' and left_text == None: self.__run_message_dialog(_("Please specify Left Thumb Shift Chars")) return elif type == 'thumb' and right_text == None: self.__run_message_dialog(_("Please specify Right Thumb Shift Chars")) return if type == 'romaji': section = 'romaji-typing-rule' model.append([type, key, value]) elif type == 'kana': section = 'kana-typing-rule' model.append([type, key, value]) elif type == 'thumb': section = 'thumb-typing-rule' model.append([type, key, value, left_text, right_text]) if section == None: self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug.")) return gkey = prefs.typing_to_config_key(key) if gkey == '': return key = gkey if type != 'thumb': prefs.set_list_item(section, 'list', (method, key), value) else: prefs.set_list_item(section, 'list', (method, key), [value, right_text, left_text]) left.set_text('') right.set_text('') input.set_text('') output.set_text('') def on_btn_remove_custom_key(self, widget, user_data): prefs = self.__prefs combobox = self.__builder.get_object('combobox_custom_key_table') id = combobox.get_active() model_combobox = combobox.get_model() method = model_combobox[id][1] tv = user_data l, i = tv.get_selection().get_selected() type = l[i][0] key = l[i][1] section_base = None if type == 'romaji': section = 'romaji-typing-rule' elif type == 'kana': section = 'kana-typing-rule' elif type == 'thumb': section = 'thumb-typing-rule' if section == None: self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug.")) return gkey = prefs.typing_to_config_key(key) if gkey == '': return key = gkey prefs.delete_list_item(section, 'list', (method, key)) l.remove(i) widget.set_sensitive(False) def on_btn_thumb_key_clicked(self, widget): if Gtk.Buildable.get_name(widget) == 'thumb:button_ls': entry = 'thumb:ls' elif Gtk.Buildable.get_name(widget) == 'thumb:button_rs': entry = 'thumb:rs' else: return text = self.__builder.get_object(entry).get_text() tv = self.__builder.get_object('es:treeview') m = tv.get_model() m.clear() if text != None: m.append([text]) i = m.get_iter_first() tv.get_selection().select_iter(i) self.__builder.get_object('es:entry').set_text('') self.__builder.get_object('es:button_add').hide() self.__builder.get_object('es:button_refresh').show() self.__builder.get_object('es:button_del').hide() for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']: self.__builder.get_object(w).set_active(False) dlg = self.__builder.get_object('edit_shortcut') dlg.set_transient_for(widget.get_toplevel()) id = dlg.run() dlg.hide() self.__builder.get_object('es:button_add').show() self.__builder.get_object('es:button_refresh').hide() self.__builder.get_object('es:button_del').show() if id == Gtk.ResponseType.OK: l, i = tv.get_selection().get_selected() new = l[i][0] if new != text: section, key = self.__get_section_key(entry) self.__prefs.set_value(section, key, new) self.__builder.get_object(entry).set_text(new) def on_btn_dict_command_clicked(self, widget): if Gtk.Buildable.get_name(widget) == 'dict:btn_edit_dict_command': key = 'dict-admin-command' elif Gtk.Buildable.get_name(widget) == 'dict:btn_add_word_command': key = 'add-word-command' else: return command = self.__prefs.get_value('common', key) if not path.exists(command[0]): self.__run_message_dialog(_("Your file does not exist: ") + command[0], Gtk.MessageType.ERROR) return os.spawnl(os.P_NOWAIT, *command) def on_btn_dict_add_clicked(self, widget): file = None id = None if Gtk.Buildable.get_name(widget) == 'dict:btn_add': dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"), transient_for=widget.get_toplevel(), action=Gtk.FileChooserAction.OPEN) buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL, _("_Open"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) if Gtk.Buildable.get_name(widget) == 'dict:btn_edit': dlg = Gtk.Dialog(title=_("Edit Dictionary File"), transient_for=widget.get_toplevel()) buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL, _("_OK"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) vbox = self.__builder.get_object('dict:add_extra_vbox') if Gtk.Buildable.get_name(widget) == 'dict:btn_add': # Need to init for the second time self.__init_dict_chooser_dialog() dlg.set_extra_widget(vbox) if Gtk.Buildable.get_name(widget) == 'dict:btn_edit': id = self.__set_selected_dict_to_dialog() if id == None: self.__run_message_dialog(_("Your choosed file is not correct."), Gtk.MessageType.ERROR) return parent_vbox = dlg.vbox parent_vbox.add(vbox) vbox.show_all() if dlg.run() == Gtk.ResponseType.OK: if Gtk.Buildable.get_name(widget) == 'dict:btn_add': file = dlg.get_filename() if file[0] != '/': dir = dlg.get_current_folder() file = dir + '/' + file self.__append_user_dict_from_dialog(file, None, True) elif Gtk.Buildable.get_name(widget) == 'dict:btn_edit': self.__append_user_dict_from_dialog(None, id, False) dlg.hide() vbox.unparent() def on_btn_dict_delete_clicked(self, widget): l, i = self.__builder.get_object('dict:view').get_selection().get_selected() if not i: return selected_id = l.get_value(i, 0) if selected_id == None: return dict_item = self.__prefs.get_value('dict', 'list')[selected_id] if dict_item.is_system: self.__run_message_dialog(_("You cannot delete the system dictionary."), Gtk.MessageType.ERROR) return file = self.__get_dict_file_from_id(selected_id) if file != None: order = self.__prefs.get_value('dict', 'order') order.remove(selected_id) order = self.__prefs.set_value('dict', 'order', order) self.__prefs.delete_list_item('dict', 'files', selected_id) self.__prefs.delete_list_item('dict', 'list', selected_id) l.remove(i) return l.remove(i) def on_btn_dict_view_clicked(self, widget): dict_file = None selected_id = self.__get_selected_dict_id() if selected_id == None: return dict_file = self.__get_dict_file_from_id(selected_id) if dict_file == None: self.__run_message_dialog(_("Your file is not good."), Gtk.MessageType.ERROR) return if not path.exists(dict_file[0]): self.__run_message_dialog(_("Your file does not exist: ") + dict_file, Gtk.MessageType.ERROR) return # The selected id is already quoted. dicts = self.__prefs.get_value('dict', 'list') dict_item = dicts[selected_id] nline = dict_item.preview_lines encoding = dict_item.encoding lines = ''; for i, line in enumerate(file(dict_file[0])): if nline >= 0 and i >= nline: break; lines = lines + line if encoding != None and encoding != 'utf-8': lines = unicode(lines, encoding).encode('utf-8') dlg = Gtk.Dialog(title=_("View Dictionary File"), transient_for=widget.get_toplevel()) buttons=(_("_OK"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) buffer = Gtk.TextBuffer() buffer.set_text (lines) buffer.tag_found = buffer.create_tag('found', background = 'yellow') text_view = Gtk.TextView.new_with_buffer(buffer) text_view.set_editable(False) sw = Gtk.ScrolledWindow() sw.add(text_view) sw.set_min_content_height(400) parent_vbox = dlg.vbox parent_vbox.add(sw) sw.show_all() dlg.set_default_size(500, 500) self.__filter_timeout_id = 0 if hasattr(Gtk, 'SearchEntry') and \ hasattr(Gtk, 'SearchEntryClass') and \ hasattr(Gtk.SearchEntryClass, 'search_changed'): filter_entry = Gtk.SearchEntry(hexpand = True, margin_left = 6, margin_right = 6, margin_top = 6, margin_bottom = 6) filter_entry.text_view = text_view filter_entry.connect('search-changed', self.__filter_changed) filter_entry.connect('key-release-event', self.__filter_key_release_event) parent_vbox.add(filter_entry) filter_entry.show_all() sw.show_all() dlg.run() dlg.destroy() def on_btn_dict_order_clicked(self, widget): l, it = self.__builder.get_object('dict:view').get_selection().get_selected() if not it: return selected_path = l.get_path(it) selected_id = l.get_value(it, 0) index = selected_path.get_indices()[0] if Gtk.Buildable.get_name(widget) == 'dict:btn_up': if index <= 0: return next_path = (index - 1, ) elif Gtk.Buildable.get_name(widget) == 'dict:btn_down': if index + 1 >= len(l): return next_path = (index + 1, ) next_it = l.get_iter(next_path) if next_it: l.swap(it, next_it) order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) i = order.index(selected_id) if Gtk.Buildable.get_name(widget) == 'dict:btn_up': if i <= 0: return next_i = i - 1 elif Gtk.Buildable.get_name(widget) == 'dict:btn_down': if i + 1 >= len(order): return next_i = i + 1 f = order[i] order[i] = order[next_i] order[next_i] = f self.__prefs.set_value('dict', 'order', order) def on_shortcut_type_changed(self, widget): ls = self.__builder.get_object('shortcut').get_model() ls.clear() group = self.__get_shortcut_group() shortcuts = self.__prefs.get_value('shortcut', group) for k in shortcuts.keys(): ls.append([k, l_to_s(shortcuts[k])]) section, key = self.__get_section_key(Gtk.Buildable.get_name(widget)) self.__prefs.set_value(section, key, group) def on_shortcut_key_release_event(self, widget, event): if event.hardware_keycode in [36, 65]: self.on_btn_edit_clicked(widget) def on_shortcut_click_event(self, widget, event): if event.type == Gdk.EventType._2BUTTON_PRESS: widget.dc = True elif event.type == Gdk.EventType.BUTTON_RELEASE: if hasattr(widget, 'dc') and widget.dc: self.on_btn_edit_clicked(widget) widget.dc = False def on_key_input_dialog_key_press_event(self, widget, event): widget.e = (event.keyval, event.get_state()) return True def on_key_input_dialog_key_release_event(self, widget, event): widget.response(Gtk.ResponseType.OK) return True def on_entry_custom_key_changed(self, widget, user_data): mode = user_data input = self.__builder.get_object('entry_input_custom_key') output = self.__builder.get_object('entry_output_custom_key') left = self.__builder.get_object('entry_left_thumb_shift_custom_key') right = self.__builder.get_object('entry_right_thumb_shift_custom_key') button = self.__builder.get_object('button_add_custom_key') if mode != 'thumb': if input.get_text() != '' and output.get_text() != '': button.set_sensitive(True) else: button.set_sensitive(False) else: if input.get_text() != '' and output.get_text() != '' and \ left.get_text() != '' and right.get_text() != '': button.set_sensitive(True) else: button.set_sensitive(False) def on_entry_dict_command_changed(self, widget): if not widget.get_text(): return list = widget.get_text().split() if len(list) == 0: return elif list[0][0] == '/': if len(list) == 1: list.append(list[0][list[0].rfind('/') + 1:]) else: list.insert(1, list[0][list[0].rfind('/') + 1:]) else: if len(list) == 1: list[0] = '/usr/bin/' + list[0] else: list.insert(0, '/usr/bin/' + list[0]) list[1] = list[1][list[1].rfind('/') + 1:] if Gtk.Buildable.get_name(widget) == 'dict:entry-edit-dict-command': key = 'dict-admin-command' elif Gtk.Buildable.get_name(widget) == 'dict:entry-add-word-command': key = 'add-word-command' else: return self.__prefs.set_value('common', key, list) def on_es_entry_changed(self, widget): if not widget.get_text(): self.__builder.get_object('es:button_add').set_sensitive(False) else: self.__builder.get_object('es:button_add').set_sensitive(True) def on_es_button_run_input_clicked(self, widget): dlg = self.__builder.get_object('key_input_dialog') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Please press a key (or a key combination)")) dlg.format_secondary_text(_("The dialog will be closed when the key is released")) id = dlg.run() dlg.hide() if id == Gtk.ResponseType.OK: key, state = dlg.e if (state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) and ord('a') <= key <= ord('z')): key = ord(chr(key).upper()) self.__builder.get_object('es:entry').set_text(IBus.keyval_name(key)) for w, i in [('es:checkbutton_ctrl', IBus.ModifierType.CONTROL_MASK), ('es:checkbutton_alt', IBus.ModifierType.MOD1_MASK), ('es:checkbutton_shift', IBus.ModifierType.SHIFT_MASK)]: self.__builder.get_object(w).set_active(True if state & i else False) def on_es_button_add_clicked(self, widget): s = self.__builder.get_object('es:entry').get_text() if not s or not IBus.keyval_from_name(s): dlg = self.__builder.get_object('invalid_keysym') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Invalid keysym")) dlg.format_secondary_text(_("This keysym is not valid")) dlg.run() dlg.hide() return True for w, m in [('es:checkbutton_ctrl', 'Ctrl+'), ('es:checkbutton_alt', 'Alt+'), ('es:checkbutton_shift', 'Shift+')]: if self.__builder.get_object(w).get_active(): s = m + s l = self.__builder.get_object('es:treeview').get_model() for i in range(len(l)): if l[i][0] == s: return True l.append([s]) def on_es_button_refresh_clicked(self, widget): s = self.__builder.get_object('es:entry').get_text() if not s or not IBus.keyval_from_name(s): dlg = self.__builder.get_object('invalid_keysym') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Invalid keysym")) dlg.format_secondary_text(_("This keysym is not valid")) dlg.run() dlg.hide() return True for w, m in [('es:checkbutton_ctrl', 'Ctrl+'), ('es:checkbutton_alt', 'Alt+'), ('es:checkbutton_shift', 'Shift+')]: if self.__builder.get_object(w).get_active(): s = m + s tv = self.__builder.get_object('es:treeview') l, i = tv.get_selection().get_selected() l[i][0] = s return True def on_es_button_del_clicked(self, widget): tv = self.__builder.get_object('es:treeview') l, i = tv.get_selection().get_selected() if i: l.remove(i) def run(self): Gtk.main() if __name__ == '__main__': AnthySetup().run() ibus-anthy-1.5.11/setup/python2/prefs.py000066400000000000000000000320001346647371500201310ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from gi import require_version as gi_require_version gi_require_version('Gio', '2.0') gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import Gio from gi.repository import GLib from gi.repository import GObject from gi.repository import IBus class DictItem(): def __init__(self, id='', short_label='', long_label='', icon='', is_system=False, preview_lines=-1, embed=False, single=True, reverse=False, encoding='utf-8'): self.id = id self.short_label = short_label self.long_label = long_label self.icon = icon self.is_system = is_system self.preview_lines = preview_lines self.embed = embed self.single = single self.reverse = reverse self.encoding = encoding def __str__(self): retval = ('id:', self.id, 'short-label:', self.short_label, 'long-label:', self.long_label, 'icon:', self.icon, 'is-system:', self.is_system, 'preview-lines:', self.preview_lines, 'embed:', self.embed, 'single:', self.single, 'reverse:', self.reverse, 'encoding:', self.encoding) return str(retval) @classmethod def serialize(cls, dict_item): builder = GLib.VariantBuilder(GLib.VariantType('r')) builder.add_value(GLib.Variant.new_string(dict_item.id)) builder.add_value(GLib.Variant.new_string(dict_item.short_label)) builder.add_value(GLib.Variant.new_string(dict_item.long_label)) builder.add_value(GLib.Variant.new_string(dict_item.icon)) builder.add_value(GLib.Variant.new_boolean(dict_item.is_system)) builder.add_value(GLib.Variant.new_int32(dict_item.preview_lines)) builder.add_value(GLib.Variant.new_boolean(dict_item.embed)) builder.add_value(GLib.Variant.new_boolean(dict_item.single)) builder.add_value(GLib.Variant.new_boolean(dict_item.reverse)) builder.add_value(GLib.Variant.new_string(dict_item.encoding)) return builder.end() class Prefs(GObject.GObject): __gsignals__ = { 'changed' : ( GObject.SignalFlags.RUN_FIRST, None, (str, str, GLib.Variant)), } def __init__(self): super(Prefs, self).__init__() self.__cache = {} self.__settings = {} self.__schema_prefix = 'org.freedesktop.ibus.engine.anthy.' self.__schema_sections = ['common', 'shortcut', 'romaji-typing-rule', 'kana-typing-rule', 'thumb-typing-rule', 'thumb', 'dict'] for section in self.__schema_sections: self.__settings[section] = Gio.Settings( schema=self.__schema_prefix + section) self.__settings[section].connect('changed', self.__settings_on_changed) def __settings_on_changed(self, settings, key): section = settings.props.schema[len(self.__schema_prefix):] variant_value = self.__settings[section].get_value(key) variant_key = self.__cache.get(section) if variant_key == None: variant_key = {} variant_key[key] = variant_value self.__cache[section] = variant_key self.emit('changed', section, key, variant_value) def variant_to_value(self, variant): if type(variant) != GLib.Variant: return variant type_string = variant.get_type_string() if type_string == 's': return variant.get_string() elif type_string == 'i': return variant.get_int32() elif type_string == 'b': return variant.get_boolean() elif type_string == 'v': return variant.unpack() elif len(type_string) > 0 and type_string[0] == 'a': # Use unpack() instead of dup_strv() in python. # In the latest pygobject3 3.3.4 or later, g_variant_dup_strv # returns the allocated strv but in the previous release, # it returned the tuple of (strv, length) return variant.unpack() else: self.printerr('Unknown variant type:', type_string) sys.abrt() return variant def variant_from_value(self, value): variant = None if type(value) == str: variant = GLib.Variant.new_string(value) elif type(value) == int: variant = GLib.Variant.new_int32(value) elif type(value) == bool: variant = GLib.Variant.new_boolean(value) elif type(value) == list: variant = GLib.Variant.new_strv(value) if variant == None: self.printerr('Unknown value type: %s' % type(value)) return variant def get_variant(self, section, key): variant_key = self.__cache.get(section) if variant_key != None: variant_value = variant_key.get(key) if variant_value != None: return variant_value variant_value = self.__settings[section].get_value(key) if variant_key == None: variant_key = {} variant_key[key] = variant_value self.__cache[section] = variant_key return variant_value def get_default_variant(self, section, key): return self.__settings[section].get_default_value(key) def get_readable_value(self, section, key, variant): value = self.variant_to_value(variant) if section == 'dict' and key == 'list': dicts = {} for item in value: dict_item = DictItem(*item) dicts[dict_item.id] = dict_item value = dicts if section == 'dict' and key == 'template': value = DictItem(*value) return value def get_value(self, section, key): variant = self.get_variant(section, key) return self.get_readable_value(section, key, variant) def get_default_value(self, section, key): variant = self.get_default_variant(section, key) return self.get_readable_value(section, key, variant) def set_variant(self, section, key, variant): self.__settings[section].set_value(key, variant) self.__settings[section].apply() def set_value(self, section, key, value): variant = self.variant_from_value(value) if variant == None: return self.set_variant(section, key, variant) def set_list_item(self, section, key, item, values): variant = self.get_variant(section, key) if variant == None: printerrr('%s:%s does not exist' % (section, key)) return if section == 'shortcut': variant_dict = GLib.VariantDict(variant) array = [] for value in values: array.append(GLib.Variant.new_string(value)) varray = GLib.Variant.new_array(GLib.VariantType('s'), array) variant_dict.insert_value(item, varray) # GVariantDict uses GHashTable internally and # GVariantDict.end() does not support the order. self.set_variant(section, key, variant_dict.end()) return if section == 'romaji-typing-rule' or \ section == 'kana-typing-rule' or \ section == 'thumb-typing-rule': (method, keymap_key) = item variant_dict = GLib.VariantDict(variant) keymap = variant_dict.lookup_value(method, None) keymap_dict = GLib.VariantDict(keymap) if section == 'thumb-typing-rule': array = [] for value in values: array.append(GLib.Variant.new_string(value)) vvalue = GLib.Variant.new_array(GLib.VariantType('s'), array) else: vvalue = GLib.Variant.new_string(values) keymap_dict.insert_value(keymap_key, vvalue) keymap = keymap_dict.end() variant_dict.insert_value(method, keymap) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'files': variant_dict = GLib.VariantDict(variant) array = [] for value in values: array.append(GLib.Variant.new_string(value)) varray = GLib.Variant.new_array(GLib.VariantType('s'), array) variant_dict.insert_value(item, varray) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'list': array = [] has_item = False for v in variant: dict_item = DictItem(*v) if dict_item.id == values.id: array.append(GLib.Variant.new_variant( DictItem.serialize(values))) has_item = True else: array.append(GLib.Variant.new_variant( DictItem.serialize(dict_item))) if not has_item: array.append(GLib.Variant.new_variant(DictItem.serialize(values))) varray = GLib.Variant.new_array(GLib.VariantType('v'), array) self.set_variant(section, key, varray) return def delete_list_item(self, section, key, item): variant = self.get_variant(section, key) if variant == None: printerrr('%s:%s does not exist' % (section, key)) return if section == 'romaji-typing-rule' or \ section == 'kana-typing-rule' or \ section == 'thumb-typing-rule': (method, keymap_key) = item variant_dict = GLib.VariantDict(variant) keymap = variant_dict.lookup_value(method, None) keymap_dict = GLib.VariantDict(keymap) keymap_dict.remove(keymap_key) keymap = keymap_dict.end() variant_dict.insert_value(method, keymap) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'files': variant_dict = GLib.VariantDict(variant) variant_dict.remove(item) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'list': array = [] for v in variant: dict_item = DictItem(*v) if dict_item.id == item: continue else: array.append(GLib.Variant.new_variant( DictItem.serialize(dict_item))) varray = GLib.Variant.new_array(GLib.VariantType('v'), array) self.set_variant(section, key, varray) return def bind(self, section, key, object, property, flags): self.__settings[section].bind(key, object, property, flags) # Convert DBus.String to str # sys.getdefaultencoding() == 'utf-8' with pygtk2 but # sys.getdefaultencoding() == 'ascii' with gi gtk3 # so the simple str(unicode_string) causes an error and need to use # unicode_string.encode('utf-8') instead. def str(self, uni): if uni == None: return None if type(uni) == str: return uni if type(uni) == unicode: return uni.encode('utf-8') return str(uni) # The simple unicode(string) causes an error and need to use # unicode(string, 'utf-8') instead. def unicode(self, string): if string == None: return None if type(string) == unicode: return string return unicode(string, 'utf-8') # If the parent process exited, the std io/out/error will be lost. @staticmethod def printerr(sentence): try: print >> sys.stderr, sentence except IOError: pass ibus-anthy-1.5.11/setup/python2/setup.ui000066400000000000000000004243441346647371500201570ustar00rootroot00000000000000 10 0 0 1 0 10 Hiragana Katakana Halfwidth Katakana Latin Wide Latin NICOLA-J NICOLA-A NICOLA-F None FMV KB231 key extension FMV KB611 key extension Romaji Kana Thumb shift Multiple segment Single segment Immediate conversion (multiple segment) Immediate conversion (single segment) Keep numpad codes Convert characters 「」/ 「」・ []/ []・ 、。 ,. Do nothing Automatically convert Automatically commit Clear Commit Hold Default ATOK Wnn False Setup - IBus-Anthy dialog True vertical True True 6 True vertical 8 True 0 none True 3 2 8 4 8 8 12 True 0 _Input Mode: True input-mode GTK_FILL True model1 0 1 2 True 0 _Typing Method: True typing-method 1 2 GTK_FILL True model2 0 1 2 1 2 True 0 Conversion _Mode: True conversion-segment-mode 2 3 GTK_FILL True model3 0 1 2 2 3 True <b>Initial Setting</b> True False False 0 True 0 none True vertical 4 4 8 8 12 True True 200 automatic automatic in True True 0 True <b>Menu Visibility on Status Icon</b> True False False 1 True General vbox1 False True vertical 8 True 0 none True 5 2 8 4 8 8 12 True 0 _Period Style: True period-style GTK_FILL True 0 Symbo_l Style: True symbol-style 1 2 GTK_FILL True 0 Numpad _Key Type: True ten-key-mode 2 3 GTK_FILL True model4 0 1 2 2 3 True model5 0 1 2 1 2 True model6 0 1 2 True 0 _Behavior on Period: True behavior-on-period 3 4 GTK_FILL True 0 Behavior on _Focus Out: True behavior-on-focus-out 4 5 GTK_FILL True model7 0 1 2 3 4 True model8 0 1 2 4 5 True <b>Behavior</b> True False False 0 True 0 none True 4 8 4 8 8 12 True horizontal 8 True 0 Candidate _Window Page Size: True page-size False False 0 True True adjustment1 0.97999999999999998 False False 1 Convert _symbols with the one column width True True False True True 1 2 Convert _numbers with the one column width True True False True True 2 3 Con_vert spaces with the one column width True True False True True 3 4 Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in preedit True True False True True 4 5 True <b>Other</b> True False False 1 True Conversion vbox2 1 False True vertical 4 4 True horizontal 8 True _Shortcut Type: True word-char shortcut-type False False 1 0 True model9 0 False False 1 False False 0 True True automatic automatic in 300 True True 1 True horizontal 4 end De_fault True True True True False False False 0 _Edit True True True True False False False 1 False False 2 True Key Binding vbox3 2 False True 8 4 vertical True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True _Romaji Key Table: True romaji:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False False 0 True <b>Romaji</b> True False True 0 True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True _Kana Key Table: True kana:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False False 0 True <b>Kana</b> True False True 1 True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True Keyboad _layout: True keymap:combobox_custom_table GTK_FILL GTK_FILL True True 0 1 2 GTK_FILL GTK_FILL False False 0 True <b>Keyboard layout</b> True False True 2 True Typing Method vbox4 3 False True 8 4 vertical True 0 none True 4 4 vertical 8 8 12 True 2 3 8 4 True 0 True _Left Thumb Shift Key: thumb:ls GTK_FILL True True False GTK_FILL 1 2 ... True True False GTK_FILL GTK_FILL 2 3 True 0 True Right _Thumb Shift Key: thumb:rs GTK_FILL 1 2 True True False GTK_FILL 1 2 1 2 ... True True False GTK_FILL GTK_FILL 2 3 1 2 False True 0 Adjust _input method layout to system keyboard layout Adjust IM layout to XKB layout True True False True True False False 1 True horizontal 8 True 0 True Input _Method Layout: thumb:keyboard-layout False False 0 True model51 0 1 False False 2 True horizontal 8 True dialog-information False False 0 True 0 True Restart IBus when you change the keyboard layout Restart IBus when you change XKB False False 1 False False 3 True horizontal 8 True 0 True _Additional Key Arrangement: thumb:fmv-extension False False 0 True '~', '『', '¢', '£' and so on can be output with Thumb Shift key model11 0 1 False False 4 True horizontal 8 True dialog-information False False 0 True 0 True 74 You do not have to reconfigure the system keyboard layout for "Additional Key Arrangement" since this option changes input method layout only in case input method is turned on. You do not have to reconfigure XKB since this option changes IM layout only with IM on. False False 1 False False 5 _Enable semi-voiced sound mark with Shift key Seion + Shift can output Handakuon True True False True True False False 6 True 2 2 8 4 True Thumb _Shift Key Table: True thumb:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False True 7 True <b>Thumb Shift Layout</b> True False 0 True Thumb Shift vbox5 4 False True vertical 8 4 True 0 none True vertical 4 4 8 8 12 True 2 3 8 4 True _Edit Dictionary Command: True dict:entry-edit-dict-command GTK_FILL GTK_FILL True True True GTK_FILL 1 2 ... True True True False True GTK_FILL GTK_FILL 2 3 True _Add Word Command: True dict:entry-add-word-command GTK_FILL GTK_FILL 1 2 True True True GTK_FILL 1 2 1 2 ... True True True False True GTK_FILL GTK_FILL 2 3 1 2 False True 0 True <b>Default Dictionary Configuration</b> True False 0 True 0 none True vertical 4 4 8 8 12 True True 220 automatic automatic in True True 0 True horizontal 4 end _View True True True False True False False 0 _Add True True True True False False False 1 _Edit True True True True False False False 2 _Delete True True True True False False False 3 False False 1 True horizontal 4 end _Up True You can change the order on language bar True True True False False False 0 _Down True You can change the order on language bar True True True False False False 1 False False 2 True <b>Extended Dictionaries</b> True False 1 True Dictionary vbox6 5 False True vertical 10 6 True False True About about_vbox 6 False 2 True horizontal end _Close True True True True False False False 0 False end 0 btn_close 340 300 Edit Shortcut True dialog True vertical True vertical 5 6 True True 1 automatic automatic in 150 True True False 0 True horizontal 8 True Key Code: False False 0 True True 1 ... True True False True False False 2 False False 1 True horizontal 8 True Modifier: False False 0 True horizontal A_lternate True True False True True 0 Co_ntrol True True False True True 1 _Shift True True False True True 2 1 False False 2 True horizontal 6 end _Add True True False True True False False False 0 _Refresh True False True True False False False 1 _Delete True True False True True False False False 2 False False 3 2 True horizontal end _Cancel True True True True False False False 0 _OK True True True True False False False 1 False end 0 cancelbutton101 okbutton101 400 470 True dialog True vertical 5 6 True horizontal 5 6 True 0 True combobox_custom_key_table False False 0 True False False 1 False False 0 True horizontal 5 6 True True 1 automatic automatic in 250 300 True True 0 True vertical start 6 True _Input Characters True entry_input_custom_key 0 True 3 1 True _Output Characters True entry_output_custom_key 2 True 3 3 False _Left Thumb Shift True entry_left_thumb_shift_custom_key 4 False 3 5 False _Right Thumb Shift True entry_right_thumb_shift_custom_key 6 False 3 7 True _Add True True True True False 8 True _Remove True True True True False 9 False False 1 1 True horizontal end True _Close True True True True False False 0 False end 0 closebutton301 5 False True center-on-parent dialog True question yes-no Confirmation You are about to close the setup dialog, is that OK? True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True warning yes-no Notice! You are about to close the setup dialog without saving your changes, is that OK? True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True cancel Please press a key (or a key combination) The dialog will be closed when the key is released True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True warning ok Invalid keysym This keysym is not valid True vertical 2 True horizontal end False end 0 True vertical True 10 True 2 2 8 4 True _Short Label: True dict:short_entry GTK_FILL True True True 1 1 2 True _Description: True dict:long_entry 1 2 GTK_FILL True True True 1 2 1 2 False False _Use your dictionary alone with switching dictionaries True True False True True True False False 1 _Embed your dictionary in the system dictionary True True False True True False False 2 Enable the _reverse conversion False True False True True False False 3 IBus-Anthy Copyright ยฉ 2007โ€“2008 Peng Huang Copyright ยฉ 2009 Hideaki ABE Copyright ยฉ 2009โ€“2018 Takao Fujiwara Copyright ยฉ 2007โ€“2018 Red Hat, Inc. The Anthy engine for the IBus input platform GPL https://github.com/ibus/ibus/wiki Takao Fujiwara <takao.fujiwara1@gmail.com> translator_credits True ibus-anthy-1.5.11/setup/python3/000077500000000000000000000000001346647371500164465ustar00rootroot00000000000000ibus-anthy-1.5.11/setup/python3/Makefile.am000066400000000000000000000061341346647371500205060ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. desktop_in_in_files = ibus-setup-anthy.desktop.in.in desktop_in_files = $(desktop_in_in_files:.in.in=.in) $(desktop_in_files): %.desktop.in: %.desktop.in.in Makefile $(AM_V_GEN) sed \ -e "s|\@libexecdir\@|$(libexecdir)|" \ -e "s|\@pkgdatadir\@|$(pkgdatadir)|" \ $< > $@.tmp && mv $@.tmp $@ desktopdir=$(datadir)/applications desktop_DATA = ibus-setup-anthy.desktop $(desktop_DATA): $(desktop_in_files) Makefile $(AM_V_GEN)$(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@ BUILT_SOURCES = \ _config.py \ $(NULL) libexec_SCRIPTS = ibus-setup-anthy setup_anthy_PYTHON = \ _config.py \ anthyprefs.py \ main.py \ prefs.py \ setup.ui \ $(NULL) setup_anthy_built_files = \ $(BUILT_SOURCES) \ $(libexec_SCRIPTS) \ $(NULL) setup_anthy_built_in_files = $(addsuffix .in, $(setup_anthy_built_files)) setup_anthydir = $(datadir)/ibus-anthy/setup CONFIG_CLEAN_FILES = \ $(BUILT_SOURCES) \ $(NULL) CLEANFILES = \ $(BUILT_SOURCES) \ $(desktop_DATA) \ $(desktop_in_files) \ $(libexec_SCRIPTS) \ *.pyc \ $(NULL) EXTRA_DIST = \ $(desktop_in_in_files) \ $(setup_anthy_built_in_files) \ $(NULL) ibus-setup-anthy: ibus-setup-anthy.in sed -e "s|\@prefix\@|$(prefix)|g" \ -e "s|\@localedir\@|$(localedir)|g" \ -e "s|\@PYTHON\@|$(PYTHON)|g" \ $< > $@ _config.py: _config.py.in sed -e "s|\@pkgdatadir\@|$(pkgdatadir)|g" \ -e "s|\@libexecdir\@|$(libexecdir)|g" \ -e "s|\@datadir\@|$(datadir)|g" \ -e "s|\@LAYOUT\@|$(LAYOUT)|g" \ -e "s|\@SYMBOL_CHAR_INT\@|$(SYMBOL_CHAR_INT)|g" \ -e "s|\@ICON_PREFERENCE\@|$(ICON_PREFERENCE)|g" \ -e "s|\@VERSION\@|$(VERSION)|g" \ $< > $@ # Need a time lag between .py and .py.in files to build .py files # because *_PYTHON valuables are installed in the tarball. dist-hook: @sleep 1; \ for in_file in $(setup_anthy_built_in_files) ; do \ if [ -f $(distdir)/$(srcdir)/$$in_file ] ; then \ touch $(distdir)/$(srcdir)/$$in_file; \ fi; \ done; test: $(ENV_IBUS_TEST) DBUS_DEBUG=true \ LANG=en_US \ PYTHONPATH=$(abs_top_srcdir):$(pyexecdir) \ IBUS_LOCALEDIR=@localedir@ \ $(PYTHON) $(srcdir)/main.py ibus-anthy-1.5.11/setup/python3/_config.py.in000077700000000000000000000000001346647371500267062../../engine/python3/_config.py.inustar00rootroot00000000000000ibus-anthy-1.5.11/setup/python3/anthyprefs.py000066400000000000000000000224721346647371500212120ustar00rootroot00000000000000# -*- coding: utf-8 -*- # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys import _config as config from prefs import Prefs N_ = lambda a : a __all__ = ['AnthyPrefs'] class AnthyPrefs(Prefs): _char_to_config_key = None def __init__(self): super(AnthyPrefs, self).__init__() def get_japanese_ordered_list(self): return _japanese_ordered_list def get_version(self): return config.VERSION # Convert gsettings key to typing sequences # E.g. 'largea-bracketleft' to 'A[' def typing_from_config_key(self, gkeys): retval = '' for key in gkeys.split('-'): if key in _supported_gsettings_key_chars: retval += key continue try: ch = _config_key_to_char[key] except KeyError: print('Not supported key in gsettings', gkeys, file=sys.stderr) retval = '' break retval += ch return retval # Convert typing sequences to gsettings key. # E.g. 'A[' to 'largea-bracketleft' def typing_to_config_key(self, typing): retval = '' if self._char_to_config_key == None: self._char_to_config_key = {} for _key, _ch in list(_config_key_to_char.items()): self._char_to_config_key[_ch] = _key for ch in typing: if ch in _supported_gsettings_key_chars: if retval != '': retval += '-' retval += ch continue try: key = self._char_to_config_key[ch] except KeyError: print('Not supported key in gsettings', typing, file=sys.stderr) retval = '' break if retval != '': retval += '-' retval += key return retval def get_value(self, section, key): not_sorted = super(AnthyPrefs, self).get_value(section, key) if section == 'shortcut' and type(not_sorted) == dict: retval = dict.fromkeys(_cmd_keys, []) retval.update(not_sorted) return retval return not_sorted # Sad! dict.keys() doesn't return the saved order. # locale.strcoll() also just returns the Unicode code point. # Unicode order is wrong in Japanese large 'a' and small 'a'. # The workaround is to save the order here... _japanese_ordered_list = [ 'ใ‚', 'ใ„', 'ใ†', 'ใˆ', 'ใŠ', 'ใ', 'ใƒ', 'ใ…', 'ใ‡', 'ใ‰', 'ใ„ใ‡', 'ใ†ใ', 'ใ†ใƒ', 'ใ†ใ…', 'ใ†ใ‡', 'ใ†ใ‰', 'ใ†ใ‚ƒ', 'ใ†ใ‚…', 'ใ†ใ‚‡', 'ใ‹', 'ใ', 'ใ', 'ใ‘', 'ใ“', 'ใ‚•', 'ใ‚–', 'ใƒต', 'ใƒถ', 'ใŒ', 'ใŽ', 'ใ', 'ใ’', 'ใ”', 'ใใ‚ƒ', 'ใใƒ', 'ใใ‚…', 'ใใ‡', 'ใใ‚‡', 'ใใ', 'ใใƒ', 'ใใ…', 'ใใ‡', 'ใใ‰', 'ใŽใ‚ƒ', 'ใŽใƒ', 'ใŽใ‚…', 'ใŽใ‡', 'ใŽใ‚‡', 'ใใ', 'ใใƒ', 'ใใ…', 'ใใ‡', 'ใใ‰', 'ใ•', 'ใ—', 'ใ™', 'ใ›', 'ใ', 'ใ–', 'ใ˜', 'ใš', 'ใœ', 'ใž', 'ใ—ใ‚ƒ', 'ใ—ใƒ', 'ใ—ใ‚…', 'ใ—ใ‡', 'ใ—ใ‚‡', 'ใ˜ใ‚ƒ', 'ใ˜ใƒ', 'ใ˜ใ‚…', 'ใ˜ใ‡', 'ใ˜ใ‚‡', 'ใ™ใ…ใƒ', 'ใ™ใ‡', 'ใšใ‡', 'ใŸ', 'ใก', 'ใค', 'ใฆ', 'ใจ', 'ใ ', 'ใข', 'ใฅ', 'ใง', 'ใฉ', 'ใฃ', 'ใกใ‚ƒ', 'ใกใƒ', 'ใกใ‚…', 'ใกใ‡', 'ใกใ‚‡', 'ใขใƒ', 'ใขใ‡', 'ใขใ‚ƒ', 'ใขใ‚…', 'ใขใ‚‡', 'ใคใ', 'ใคใƒ', 'ใคใ‡', 'ใคใ‰', 'ใคใ‚ƒ', 'ใคใƒใ‡', 'ใคใ‚…', 'ใคใ‚‡', 'ใฅใ', 'ใฅใƒ', 'ใฅใ‡', 'ใฅใ‰', 'ใฅใ‚ƒ', 'ใฅใƒใ‡', 'ใฅใ‚…', 'ใฅใ‚‡', 'ใฆใƒ', 'ใฆใ‡', 'ใฆใ‚ƒ', 'ใฆใ‚…', 'ใฆใ‚‡', 'ใจใ…', 'ใงใƒ', 'ใงใ‡', 'ใงใ‚ƒ', 'ใงใ‚…', 'ใงใ‚‡', 'ใฉใ…', 'ใช', 'ใซ', 'ใฌ', 'ใญ', 'ใฎ', 'ใซใƒ', 'ใซใ‡', 'ใซใ‚ƒ', 'ใซใ‚…', 'ใซใ‚‡', 'ใฏ', 'ใฒ', 'ใต', 'ใธ', 'ใป', 'ใฐ', 'ใณ', 'ใถ', 'ใน', 'ใผ', 'ใฑ', 'ใด', 'ใท', 'ใบ', 'ใฝ', 'ใฒใƒ', 'ใฒใ‡', 'ใฒใ‚ƒ', 'ใฒใ‚…', 'ใฒใ‚‡', 'ใณใƒ', 'ใณใ‡', 'ใณใ‚ƒ', 'ใณใ‚…', 'ใณใ‚‡', 'ใดใƒ', 'ใดใ‡', 'ใดใ‚ƒ', 'ใดใ‚…', 'ใดใ‚‡', 'ใตใ', 'ใตใƒ', 'ใตใ‡', 'ใตใ‰', 'ใตใ‚ƒ', 'ใตใ‚…', 'ใตใ‚‡', 'ใถใ', 'ใถใ‡', 'ใถใ‰', 'ใทใ', 'ใทใ‡', 'ใทใ‰', 'ใพ', 'ใฟ', 'ใ‚€', 'ใ‚', 'ใ‚‚', 'ใฟใƒ', 'ใฟใ‡', 'ใฟใ‚ƒ', 'ใฟใ‚…', 'ใฟใ‚‡', 'ใ‚„', 'ใ‚†', 'ใ‚ˆ', 'ใ‚ƒ', 'ใ‚…', 'ใ‚‡', 'ใ‚‰', 'ใ‚Š', 'ใ‚‹', 'ใ‚Œ', 'ใ‚', 'ใ‚Šใƒ', 'ใ‚Šใ‡', 'ใ‚Šใ‚ƒ', 'ใ‚Šใ‚…', 'ใ‚Šใ‚‡', 'ใ‚', 'ใ‚’', 'ใ‚“', 'ใ‚Ž', 'ใ‚', 'ใ‚‘', 'ใƒผ', 'ใƒดใ', 'ใƒดใƒ', 'ใƒด', 'ใƒดใ‡', 'ใƒดใ‰', 'ใƒดใ‚ƒ', 'ใƒดใƒใ‡', 'ใƒดใ‚…', 'ใƒดใ‚‡', ] # http://git.gnome.org/browse/glib/tree/gio/glib-compile-schemas.c#n765 # gsettings supports keys named by "abcdefghijklmnopqrstuvwxyz0123456789-" # and ibus-anthy uses '-' as the delimiter. _supported_gsettings_key_chars = "abcdefghijklmnopqrstuvwxyz0123456789" _config_key_to_char = { # no modifiers keys 'minus' : '-', 'asciicircum' : '^', 'at' : '@', 'bracketleft' : '[', 'semicolon' : ';', 'colon' : ':', 'bracketright' : ']', 'comma' : ',', 'period' : '.', 'slash' : '/', 'backslash' : '\\', # shift modifiered keys 'exclam' : '!', 'quotedbl' : '"', 'numbersign' : '#', 'dollar' : '$', 'percent' : '%', 'ampersand' : '&', 'apostrophe' : '\'', 'parenleft' : '(', 'parenright' : ')', 'asciitilde' : '~', 'equal' : '=', 'bar' : '|', 'largeq' : 'Q', 'largew' : 'W', 'largee' : 'E', 'larger' : 'R', 'larget' : 'T', 'largey' : 'Y', 'largeu' : 'U', 'largei' : 'I', 'largeo' : 'O', 'largep' : 'P', 'grave' : '`', 'braceleft' : '{', 'largea' : 'A', 'larges' : 'S', 'larged' : 'D', 'largef' : 'F', 'largeg' : 'G', 'largeh' : 'H', 'largej' : 'J', 'largek' : 'K', 'largel' : 'L', 'plus' : '+', 'asterisk' : '*', 'braceright' : '}', 'largez' : 'Z', 'largex' : 'X', 'largec' : 'C', 'largev' : 'V', 'largeb' : 'B', 'largen' : 'N', 'largem' : 'M', 'less' : '<', 'greater' : '>', 'question' : '?', 'underscore' : '_', 'yen' : 'ยฅ', } _cmd_keys = [ 'on_off', 'circle_input_mode', 'circle_kana_mode', 'circle_typing_method', 'circle_dict_method', 'latin_mode', 'wide_latin_mode', 'hiragana_mode', 'katakana_mode', 'half_katakana_mode', # 'cancel_pseudo_ascii_mode_key', 'hiragana_for_latin_with_shift', 'insert_space', 'insert_alternate_space', 'insert_half_space', 'insert_wide_space', 'backspace', 'delete', 'commit', 'convert', 'predict', 'cancel', 'cancel_all', 'reconvert', # 'do_nothing', 'select_first_candidate', 'select_last_candidate', 'select_next_candidate', 'select_prev_candidate', 'candidates_page_up', 'candidates_page_down', 'move_caret_first', 'move_caret_last', 'move_caret_forward', 'move_caret_backward', 'select_first_segment', 'select_last_segment', 'select_next_segment', 'select_prev_segment', 'shrink_segment', 'expand_segment', 'commit_first_segment', 'commit_selected_segment', 'select_candidates_1', 'select_candidates_2', 'select_candidates_3', 'select_candidates_4', 'select_candidates_5', 'select_candidates_6', 'select_candidates_7', 'select_candidates_8', 'select_candidates_9', 'select_candidates_0', 'convert_to_char_type_forward', 'convert_to_char_type_backward', 'convert_to_hiragana', 'convert_to_katakana', 'convert_to_half', 'convert_to_half_katakana', 'convert_to_wide_latin', 'convert_to_latin', 'convert_to_hiragana_all', 'convert_to_katakana_all', 'convert_to_half_all', 'convert_to_half_katakana_all', 'convert_to_wide_latin_all', 'convert_to_latin_all', 'dict_admin', 'add_word', 'start_setup', ] _dummy_translatable_strings = [ N_('General'), N_('Zip Code Conversion'), N_('Symbol'), N_('Old Character Style'), N_('Era'), N_('Emoji'), ] ibus-anthy-1.5.11/setup/python3/ibus-setup-anthy.desktop.in.in000066400000000000000000000002551346647371500242760ustar00rootroot00000000000000[Desktop Entry] Name=IBus Anthy Setup Comment=Set up IBus Anthy engine Exec=@libexecdir@/ibus-setup-anthy Icon=ibus-anthy NoDisplay=true Type=Application StartupNotify=true ibus-anthy-1.5.11/setup/python3/ibus-setup-anthy.in000066400000000000000000000020321346647371500222140ustar00rootroot00000000000000#!/bin/sh # vim:set noet ts=4: # # ibus-tmpl - The Input Bus template project # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2010-2016 Takao Fujiwara # Copyright (c) 2007-2016 Red Hat, Inc. # # 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. export IBUS_LOCALEDIR=@localedir@ exec @PYTHON@ @prefix@/share/ibus-anthy/setup/main.py $@ ibus-anthy-1.5.11/setup/python3/main.py000066400000000000000000002100161346647371500177440ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. from os import environ, getuid, path import binascii import codecs import functools import locale import os, sys import xml.dom.minidom import gettext from gettext import dgettext from gi import require_version as gi_require_version gi_require_version('Gio', '2.0') gi_require_version('GLib', '2.0') gi_require_version('Gtk', '3.0') gi_require_version('Gdk', '3.0') gi_require_version('GdkX11', '3.0') gi_require_version('Pango', '1.0') gi_require_version('IBus', '1.0') from gi.repository import Gio from gi.repository import GLib # set_prgname before importing other modules to show the name in warning # messages when import modules are failed. E.g. Gtk. GLib.set_prgname('ibus-setup-anthy') from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GdkX11 from gi.repository import Pango from gi.repository import IBus import _config as config from anthyprefs import AnthyPrefs DOMAINNAME = 'ibus-anthy' _ = lambda a : dgettext('ibus-anthy', a) def l_to_s(l): return str(sorted([str(s) for s in l])).replace('\'', '') def s_to_l(s): return [] if s == '[]' else s[1:-1].replace(' ', '').split(',') class AnthySetup(object): def __init__(self): # Python's locale module doesn't provide all methods on some # operating systems like FreeBSD try: locale.bindtextdomain(DOMAINNAME, config.LOCALEDIR) locale.bind_textdomain_codeset(DOMAINNAME, 'UTF-8') except AttributeError: pass gettext.bindtextdomain(DOMAINNAME, config.LOCALEDIR) gettext.bind_textdomain_codeset(DOMAINNAME, 'UTF-8') self.__prefs = AnthyPrefs() builder_file = path.join(path.dirname(__file__), 'setup.ui') self.__builder = builder = Gtk.Builder() builder.set_translation_domain(DOMAINNAME) builder.add_from_file(builder_file) toplevel = builder.get_object('main') parent_xid = 0 parent_wmname = None parent_wmclass = None try: parent_xid = int(environ['IBUS_SETUP_XID']) if parent_xid != 0: parent_wmname = 'ibus-setup' parent_wmclass = 'Ibus-setup' except: pass try: if parent_xid == 0: parent_xid = int(environ['GNOME_CONTROL_CENTER_XID']) if parent_xid != 0: parent_wmname = 'gnome-conrol-center' parent_wmclass = 'Gnome-conrol-center' except: pass if parent_xid != 0: def set_transient(obj, pspec): window = toplevel.get_window() if window == None: return parent_window = GdkX11.X11Window.foreign_new_for_display(Gdk.Display.get_default(), parent_xid) if parent_window != None: window.set_transient_for(parent_window) toplevel.set_wmclass(parent_wmname, parent_wmclass) toplevel.set_modal(True) toplevel.set_type_hint(Gdk.WindowTypeHint.DIALOG) toplevel.connect('notify::window', set_transient) toplevel.show() self.__init_bus_connected() def __init_bus_connected(self): builder = self.__builder prefs = self.__prefs self.__thumb_kb_layout_mode = None self.__thumb_kb_layout = None self.__japanese_ordered_dict = {} # glade 'icon_name' property has a custom scaling and it seems # to be difficult to show the complicated small icon in metacity. # This can add the pixbuf without scaling. anthydir = path.dirname(path.dirname(__file__)) if not anthydir: anthydir = '/usr/share/ibus-anthy' icon_path = path.join(anthydir, 'icons', 'ibus-anthy.png') if path.exists(icon_path): builder.get_object('main').set_icon_from_file(icon_path) else: icon_path = 'ibus-anthy' builder.get_object('main').set_icon_name(icon_path) for name in ['input-mode', 'typing-method', 'conversion-segment-mode', 'period-style', 'symbol-style', 'ten-key-mode', 'behavior-on-focus-out', 'behavior-on-period', 'half-width-symbol', 'half-width-number', 'half-width-space', 'latin-with-shift', 'thumb:keyboard-layout-mode', 'thumb:keyboard-layout', 'thumb:fmv-extension', 'thumb:handakuten']: section, key = self.__get_section_key(name) prefs.bind(section, key, builder.get_object(name), 'active', Gio.SettingsBindFlags.DEFAULT) prefs.bind('thumb', 'keyboard-layout-mode', builder.get_object('thumb:keyboard-layout'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN) tv = builder.get_object('menu-visible:treeview') ls = Gtk.ListStore(str, bool, str) tv.set_model(ls) column = Gtk.TreeViewColumn(' ') renderer = Gtk.CellRendererToggle() renderer.set_radio(False) renderer.connect('toggled', self.__renderer_toggled_cb, ls) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_menu_visible_cell_cb, 1) tv.append_column(column) column = Gtk.TreeViewColumn(_("Menu label")) renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_menu_visible_cell_cb, 2) tv.append_column(column) self.__append_menus_in_model() l = ['default', 'atok', 'wnn'] s_type = prefs.get_value('common', 'shortcut-type') s_type = s_type if s_type in l else 'default' builder.get_object('shortcut-type').set_active(l.index(s_type)) prefs.bind('common', 'page-size', builder.get_object('page-size').get_adjustment(), 'value', Gio.SettingsBindFlags.DEFAULT) tv = builder.get_object('shortcut') tv.append_column(Gtk.TreeViewColumn(_("Command"), Gtk.CellRendererText(), text=0)) renderer = Gtk.CellRendererText() renderer.set_property('ellipsize', Pango.EllipsizeMode.END) tv.append_column(Gtk.TreeViewColumn(_("Shortcut"), renderer, text=1)) tv.get_selection().connect_after('changed', self.on_selection_changed, 0) ls = Gtk.ListStore(str, str) shortcuts = self.__prefs.get_value('shortcut', s_type) for k in shortcuts.keys(): ls.append([k, l_to_s(shortcuts[k])]) tv.set_model(ls) self.__keymap = None GLib.idle_add(self.__update_keymap_label, priority = GLib.PRIORITY_LOW) self.__thumb_kb_layout_mode = builder.get_object('thumb:keyboard-layout-mode') self.__thumb_kb_layout = builder.get_object('thumb:keyboard-layout') self.__set_thumb_kb_label() for name in ['thumb:ls', 'thumb:rs']: section, key = self.__get_section_key(name) builder.get_object(name).set_text(prefs.get_value(section, key)) tv = builder.get_object('es:treeview') tv.append_column(Gtk.TreeViewColumn('', Gtk.CellRendererText(), text=0)) tv.get_selection().connect_after('changed', self.on_selection_changed, 1) tv.set_model(Gtk.ListStore(str)) key = 'dict-admin-command' cli = self.__get_dict_cli_from_list(prefs.get_value('common', key)) name = 'dict:entry-edit-dict-command' builder.get_object(name).set_text(cli) key = 'add-word-command' cli = self.__get_dict_cli_from_list(prefs.get_value('common', key)) name = 'dict:entry-add-word-command' builder.get_object(name).set_text(cli) tv = builder.get_object('dict:view') column = Gtk.TreeViewColumn(' ') renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_cell_data_cb, 1) tv.append_column(column) column = Gtk.TreeViewColumn(_("Description")) renderer = Gtk.CellRendererText() column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__text_cell_data_cb, 2) column.set_expand(True) tv.append_column(column) # Translators: "Embd" is an abbreviation of "embedded". column = Gtk.TreeViewColumn(_("Embd")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 3) tv.append_column(column) # Translators: "Sgl" is an abbreviation of "single". column = Gtk.TreeViewColumn(_("Sgl")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 4) tv.append_column(column) ''' Unfortunately reverse conversion is too slow. # Translators: "Rev" is an abbreviation of "reverse". column = Gtk.TreeViewColumn(_("Rev")) renderer = Gtk.CellRendererToggle() renderer.set_radio(False) column.pack_start(renderer, False) column.set_cell_data_func(renderer, self.__toggle_cell_data_cb, 5) tv.append_column(column) ''' ls = Gtk.ListStore(str, str, str, bool, bool, bool) tv.set_model(ls) self.__append_dicts_in_model() self.__init_japanese_sort() self.__init_about_vbox(icon_path) builder.connect_signals(self) def __init_japanese_sort(self): japanese_ordered_dict = {} japanese_ordered_list = self.__prefs.get_japanese_ordered_list() for index, c in enumerate(japanese_ordered_list): japanese_ordered_dict[c] = index self.__japanese_ordered_dict = japanese_ordered_dict; def __init_about_vbox(self, icon_path): about_dialog = self.__builder.get_object('about_dialog') about_vbox = self.__builder.get_object('about_vbox') about_dialog.set_version(self.__prefs.get_version()) if icon_path != None: if icon_path[0] == '/': image = Gtk.Image.new_from_file(icon_path) about_dialog.set_logo(image.get_pixbuf()) else: icon_theme = Gtk.IconTheme.get_default() try: pixbuf = icon_theme.load_icon(icon_path, 48, 0) about_dialog.set_logo(pixbuf) except Exception as err: print('Not found icon', str(err), file=sys.stderr) print('Need to run gtk-update-icon-cache', file=sys.stderr) content_area = about_dialog.get_content_area() list = content_area.get_children() vbox = list[0] for w in vbox.get_children(): old_parent = w.props.parent w.unparent() w.emit('parent-set', old_parent) about_vbox.pack_start(w, False, False, 0) def __get_userhome(self): if 'HOME' not in environ: import pwd userhome = pwd.getpwuid(getuid()).pw_dir else: userhome = environ['HOME'] userhome = userhome.rstrip('/') return userhome def __get_section_key(self, name): i = name.find(':') if i > 0: section = name[:i] key = name[i + 1:] else: section = 'common' key = name return (section, key) def __run_message_dialog(self, message, type=Gtk.MessageType.INFO): dlg = Gtk.MessageDialog( transient_for=self.__builder.get_object('main'), message_type=type, buttons=Gtk.ButtonsType.OK, text=message) dlg.run() dlg.destroy() def _get_shortcut_sec(self): l = ['default', 'atok', 'wnn'] iter = self.__builder.get_object('shortcut-type').get_active_iter() model = self.__builder.get_object('shortcut-type').get_model() s_type = model[iter][0].lower() return 'shortcut/' + (s_type if s_type in l else 'default') def __get_shortcut_group(self): l = ['default', 'atok', 'wnn'] iter = self.__builder.get_object('shortcut-type').get_active_iter() model = self.__builder.get_object('shortcut-type').get_model() s_type = model[iter][0].lower() return s_type if s_type in l else 'default' def __japanese_tuple_sort(self, a, b): if a[1] == b[1]: # http://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons return (a[0] > b[0]) - (a[0] < b[0]) elif a[1] in self.__japanese_ordered_dict and \ b[1] in self.__japanese_ordered_dict: return self.__japanese_ordered_dict[a[1]] - \ self.__japanese_ordered_dict[b[1]] elif a[1] not in self.__japanese_ordered_dict and \ b[1] in self.__japanese_ordered_dict: return 1 elif a[1] in self.__japanese_ordered_dict and \ b[1] not in self.__japanese_ordered_dict: return -1 else: return (a[1] > b[1]) - (a[1] < b[1]) def __japanese_thumb_sort(self, a, b): # http://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons return (a[0] > b[0]) - (a[0] < b[0]) def __renderer_toggled_cb(self, renderer, path, model): prefs = self.__prefs enabled = not model[path][1] model[path][1] = enabled key = model[path][0] prefs.set_value('common', key, enabled) def __toggle_menu_visible_cell_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('menu-visible:treeview').get_model() active = l.get_value(iter, id) renderer.set_property('active', active) def __text_menu_visible_cell_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('menu-visible:treeview').get_model() text = l.get_value(iter, id) renderer.set_property('text', text) def __append_menus_in_model(self): prefs = self.__prefs l = self.__builder.get_object('menu-visible:treeview').get_model() l.append(['show-input-mode', prefs.get_value('common', 'show-input-mode'), _("Input mode")]) l.append(['show-typing-method', prefs.get_value('common', 'show-typing-method'), _("Typing method")]) l.append(['show-segment-mode', prefs.get_value('common', 'show-segment-mode'), _("Segment mode")]) l.append(['show-dict-mode', prefs.get_value('common', 'show-dict-mode'), _("Dictionary mode")]) l.append(['show-dict-config', prefs.get_value('common', 'show-dict-config'), _("Dictionary - Anthy")]) l.append(['show-preferences', prefs.get_value('common', 'show-preferences'), _("Preferences - Anthy")]) def __get_romaji_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'romaji-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and value != '': rule[ch] = value for key, value in sorted(list(rule.items()), \ key = functools.cmp_to_key(self.__japanese_tuple_sort)): ls.append(['romaji', key, value]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")), Gtk.CellRendererText(), text=2)) tv.set_model(ls) return tv def __get_kana_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'kana-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and value != '': rule[ch] = value for key, value in sorted(list(rule.items()), \ key = functools.cmp_to_key(self.__japanese_tuple_sort)): ls.append(['kana', key, value]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")), Gtk.CellRendererText(), text=2)) tv.set_model(ls) return tv def __get_thumb_treeview_custom_key_table(self, method): prefs = self.__prefs rule = {} ls = Gtk.ListStore(str, str, str, str, str) tv = self.__builder.get_object('treeview_custom_key_table') section = 'thumb-typing-rule' keymap = prefs.get_value(section, 'list')[method] for key in keymap.keys(): value = keymap[key] ch = prefs.typing_from_config_key(key) if ch == '': continue # config.set_value(key, None) is not supported. if value != None and len(value) == 3 and \ ((value[0] != None and value[0] != '') or \ (value[1] != None and value[1] != '') or \ (value[2] != None and value[2] != '')): rule[ch] = {} rule[ch][0] = value[0] rule[ch][1] = value[1] rule[ch][2] = value[2] for key, value in sorted(list(rule.items()), \ key = functools.cmp_to_key(self.__japanese_thumb_sort)): ls.append(['thumb', key, value[0], value[2], value[1]]) tv.set_model(None) tv.append_column(Gtk.TreeViewColumn(_(_("Input")), Gtk.CellRendererText(), text=1)) tv.append_column(Gtk.TreeViewColumn(_(_("Single")), Gtk.CellRendererText(), text=2)) tv.append_column(Gtk.TreeViewColumn(_(_("Left")), Gtk.CellRendererText(), text=3)) tv.append_column(Gtk.TreeViewColumn(_(_("Right")), Gtk.CellRendererText(), text=4)) tv.set_model(ls) return tv def __show_dialog_custom_key_table_extention(self, mode): hbox_combo = self.__builder.get_object('hbox_for_combobox_custom_key_table') label_left = self.__builder.get_object('label_left_thumb_shift_custom_key') entry_left = self.__builder.get_object('entry_left_thumb_shift_custom_key') label_right = self.__builder.get_object('label_right_thumb_shift_custom_key') entry_right = self.__builder.get_object('entry_right_thumb_shift_custom_key') if mode == 'thumb': hbox_combo.show() label_left.show() entry_left.show() label_right.show() entry_right.show() elif mode == 'kana': hbox_combo.show() label_left.hide() entry_left.hide() label_right.hide() entry_right.hide() else: hbox_combo.hide() label_left.hide() entry_left.hide() label_right.hide() entry_right.hide() def __connect_dialog_custom_key_table_buttons(self, mode): tv = self.__builder.get_object('treeview_custom_key_table') tv.get_selection().connect_after('changed', self.on_selection_custom_key_table_changed, 0) entry = self.__builder.get_object('entry_input_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_output_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_left_thumb_shift_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) entry = self.__builder.get_object('entry_right_thumb_shift_custom_key') entry.connect('changed', self.on_entry_custom_key_changed, mode) button = self.__builder.get_object('button_add_custom_key') button.set_sensitive(False) button.connect('clicked', self.on_btn_add_custom_key, mode) button = self.__builder.get_object('button_remove_custom_key') button.set_sensitive(False) button.connect('clicked', self.on_btn_remove_custom_key, tv) def __disconnect_dialog_custom_key_table_buttons(self): tv = self.__builder.get_object('treeview_custom_key_table') combobox = self.__builder.get_object('combobox_custom_key_table') if tv != None: for column in tv.get_columns(): tv.remove_column(column) for child in tv.get_children(): tv.remove(child) entry = self.__builder.get_object('entry_input_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry.set_text('') entry = self.__builder.get_object('entry_output_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry.set_text('') entry = self.__builder.get_object('entry_left_thumb_shift_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) entry = self.__builder.get_object('entry_right_thumb_shift_custom_key') entry.disconnect_by_func(self.on_entry_custom_key_changed) button = self.__builder.get_object('button_add_custom_key') button.disconnect_by_func(self.on_btn_add_custom_key) button = self.__builder.get_object('button_remove_custom_key') button.disconnect_by_func(self.on_btn_remove_custom_key) combobox.clear() combobox.disconnect_by_func(self.on_cb_custom_key_table_changed) def __run_dialog_custom_key_table(self, widget, mode): prefs = self.__prefs dlg = self.__builder.get_object('dialog_custom_key_table') dlg.set_transient_for(widget.get_toplevel()) label = self.__builder.get_object('label_custom_key_table') label_output = self.__builder.get_object('label_output_custom_key') list_labels = [] if mode == 'romaji': dlg.set_title(_("Customize Romaji Key Table")) label.set_label(_("_Romaji Key Table:")) label_output.set_label(_("_Output Chars")) list_labels = [['default', _("Default")]] self.__show_dialog_custom_key_table_extention(mode) elif mode == 'kana': dlg.set_title(_("Customize Kana Key Table")) label.set_label(_("_Kana Key Table:")) label_output.set_label(_("_Output Chars")) list_labels = [['jp', _("Japanese Keyboard Layout")], ['us', _("U.S. Keyboard Layout")]] self.__show_dialog_custom_key_table_extention(mode) elif mode == 'thumb': dlg.set_title(_("Customize Thumb Shift Key Table")) label.set_label(_("_Thumb Shift Key Table:")) label_output.set_label(_("Single _Output Chars")) list_labels = [['base', _("Base")], ['nicola-j-table', _("NICOLA-J key extension")], ['nicola-a-table', _("NICOLA-A key extension")], ['nicola-f-table', _("NICOLA-F key extension")], ['kb231-j-fmv-table', _("FMV KB231-J key extension")], ['kb231-a-fmv-table', _("FMV KB231-A key extension")], ['kb231-f-fmv-table', _("FMV KB231-F key extension")], ['kb611-j-fmv-table', _("FMV KB611-J key extension")], ['kb611-a-fmv-table', _("FMV KB611-A key extension")], ['kb611-f-fmv-table', _("FMV KB611-F key extension")], ] self.__show_dialog_custom_key_table_extention(mode) ls = Gtk.ListStore(str, str) for s in list_labels: ls.append([s[1], s[0]]) renderer = Gtk.CellRendererText() combobox = self.__builder.get_object('combobox_custom_key_table') combobox.pack_start(renderer, True) combobox.add_attribute(renderer, 'text', 0) combobox.set_model(ls) tv = None if mode == 'romaji': method = prefs.get_value('romaji-typing-rule', 'method') if method == None: method = 'default' tv = self.__get_romaji_treeview_custom_key_table(method) if mode == 'kana': method = prefs.get_value('kana-typing-rule', 'method') if method == None: method = 'jp' tv = self.__get_kana_treeview_custom_key_table(method) if mode == 'thumb': method = prefs.get_value('thumb-typing-rule', 'method') if method == None: method = 'base' tv = self.__get_thumb_treeview_custom_key_table(method) self.__connect_dialog_custom_key_table_buttons(mode) id = 0 # thumb uses all tables so the default is always 0. if mode != 'thumb': id = -1 for index, labels in enumerate(list_labels): if labels[0] == method: id = index break if id == -1: ls.append([method, method]) combobox.set_model(ls) id = len(list_labels) combobox.set_active(id) combobox.connect('changed', self.on_cb_custom_key_table_changed, mode) id = dlg.run() dlg.hide() self.__disconnect_dialog_custom_key_table_buttons() def __set_thumb_kb_label(self): if self.__thumb_kb_layout_mode == None or \ self.__thumb_kb_layout == None: return section, key = self.__get_section_key( Gtk.Buildable.get_name(self.__thumb_kb_layout_mode)) layout_mode = self.__prefs.get_value(section, key) if layout_mode: self.__thumb_kb_layout.set_sensitive(False) else: self.__thumb_kb_layout.set_sensitive(True) def __get_dict_cli_from_list(self, cli_list): cli_str = cli_list[0] if len(cli_list) <= 2: return cli_str cli_str = cli_str + ' ' + ' '.join(cli_list[2:]) return cli_str def __get_quoted_id(self, file): id = file has_mbcs = False for i in range(0, len(id)): if ord(id[i]) >= 0x7f: has_mbcs = True break if has_mbcs: id = str(binascii.hexlify(id.encode()), 'ascii') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] if id.startswith('0x'): id = str(binascii.hexlify(id.encode()), 'ascii') has_mbcs = True if has_mbcs: id = '0x' + id return id def __get_dict_file_from_id(self, selected_id): files = self.__prefs.get_value('dict', 'files') return files.get(selected_id, None) def __is_system_dict_file_from_id(self, selected_id): prefs = self.__prefs dict_item = prefs.get_value('dict', 'list')[selected_id] return dict_item.is_system def __append_dict_id_in_model(self, id): prefs = self.__prefs section = 'dict/file/' + id dicts = prefs.get_value('dict', 'list') dict_item = dicts[id] short_label = dict_item.short_label long_label = dict_item.long_label embed = dict_item.embed single = dict_item.single reverse = dict_item.reverse if dict_item.is_system: long_label = _(long_label) l = self.__builder.get_object('dict:view').get_model() l.append([id, short_label, long_label, embed, single, reverse]) def __append_dicts_in_model(self): prefs = self.__prefs order = prefs.get_value('dict', 'order') dict_files = prefs.get_value('dict', 'files') if len(order) == 0: order = list(dict_files.keys()) for id in order: if id == 'embedded': continue files = dict_files[id] for file in files: if not path.exists(file): continue self.__append_dict_id_in_model(id) def __append_user_dict_from_dialog(self, file, id, new): files_dict = self.__prefs.get_value('dict', 'files') if new: files = [] for v in files_dict.values(): for f in v: files.append(f) if file in files: self.__run_message_dialog(_("Your choosed file has already been added: ") + file, Gtk.MessageType.ERROR) return if not path.exists(file): self.__run_message_dialog(_("The file you have chosen does not exist: ") + file, Gtk.MessageType.ERROR) return if path.isdir(file): self.__run_message_dialog(_("Your choosed file is a directory: " + file), Gtk.MessageType.ERROR) return if file.startswith(self.__get_userhome() + '/.anthy'): self.__run_message_dialog(_("You cannot add dictionaries in the anthy private directory: " + file), Gtk.MessageType.ERROR) return else: file = files_dict[id][0] if new: id = self.__get_quoted_id(file) if id == None or id == '': self.__run_message_dialog(_("Your file path is not good: ") + file, Gtk.MessageType.ERROR) return single = self.__builder.get_object('dict:single').get_active() embed = self.__builder.get_object('dict:embed').get_active() reverse = self.__builder.get_object('dict:reverse').get_active() short_label = self.__builder.get_object('dict:short_entry').get_text() if len(short_label) > 1: short_label = short_label[0] long_label = self.__builder.get_object('dict:long_entry').get_text() if new: order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) order.append(id) self.__prefs.set_value('dict', 'order', order) self.__prefs.set_list_item('dict', 'files', id, [file]) filename = file if filename.find('/') >=0: filename = filename[filename.rindex('/') + 1:] if filename.find('.') >=0: filname = filename[:filename.rindex('.')] if short_label == None or short_label == '': short_label = filename[0] if long_label == None or long_label == '': long_label = filename self.__update_dict_values(new, id, short_label, long_label, embed, single, reverse) files = [] def __init_dict_chooser_dialog(self): self.__builder.get_object('dict:single').set_active(True) self.__builder.get_object('dict:embed').set_active(False) self.__builder.get_object('dict:reverse').set_active(False) short_entry = self.__builder.get_object('dict:short_entry') short_entry.set_text('') short_entry.set_editable(True) long_entry = self.__builder.get_object('dict:long_entry') long_entry.set_text('') long_entry.set_editable(True) def __get_selected_dict_id(self): l, it = self.__builder.get_object('dict:view').get_selection().get_selected() if not it: return None return l.get_value(it, 0) def __set_selected_dict_to_dialog(self): selected_id = self.__get_selected_dict_id() if selected_id == None: return None dict_item = self.__prefs.get_value('dict', 'list')[selected_id] short_label = dict_item.short_label long_label = dict_item.long_label embed = dict_item.embed single = dict_item.single reverse = dict_item.reverse is_system_dict = dict_item.is_system if len(short_label) > 1: short_label = short_label[0] self.__builder.get_object('dict:single').set_active(single) self.__builder.get_object('dict:embed').set_active(embed) self.__builder.get_object('dict:reverse').set_active(reverse) short_entry = self.__builder.get_object('dict:short_entry') short_entry.set_text(short_label) long_entry = self.__builder.get_object('dict:long_entry') if is_system_dict: short_entry.set_editable(False) long_entry.set_text(_(long_label)) long_entry.set_editable(False) else: short_entry.set_editable(True) long_entry.set_text(long_label) long_entry.set_editable(True) return selected_id def __update_dict_values(self, new, id, short_label, long_label, embed, single, reverse): prefs = self.__prefs if new: dict_item = prefs.get_value('dict', 'template') dict_item.id = id dict_item.short_label = short_label dict_item.long_label = long_label dict_item.embed = embed dict_item.single = single dict_item.reverse = reverse l = self.__builder.get_object('dict:view').get_model() l.append([id, short_label, long_label, embed, single, reverse]) else: dict_item = prefs.get_value('dict', 'list')[id] if not dict_item.is_system: dict_item.short_label = short_label dict_item.long_label = long_label dict_item.embed = embed dict_item.single = single dict_item.reverse = reverse l, i = self.__builder.get_object('dict:view').get_selection().get_selected() if i : l[i] = [id, short_label, long_label, embed, single, reverse] prefs.set_list_item('dict', 'list', id, dict_item) def __text_cell_data_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('dict:view').get_model() text = l.get_value(iter, id) renderer.set_property('text', text) def __toggle_cell_data_cb(self, column, renderer, model, iter, id): l = self.__builder.get_object('dict:view').get_model() active = l.get_value(iter, id) renderer.set_property('active', active) def __resync_engine_file(self): user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') if not path.exists(user_config): return if not path.exists(system_config): os.unlink(user_config) return # path.getmtime depends on the build time rather than install time. def __get_engine_file_version(engine_file): version_str = '' dom = xml.dom.minidom.parse(engine_file) elements = dom.getElementsByTagName('version') nodes = [] if len(elements) > 0: nodes = elements[0].childNodes if len(nodes) > 0: version_str = nodes[0].data if version_str != '': version_str = version_str.strip() return version_str user_config_version = __get_engine_file_version(user_config) system_config_version = __get_engine_file_version(system_config) if system_config_version > user_config_version: import shutil shutil.copyfile(system_config, user_config) def __get_engine_file(self): user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') engine_file = None for f in [user_config, system_config]: if path.exists(f): engine_file = f break if engine_file == None: self.__run_message_dialog(_("The engine xml file does not exist: ") + system_config, Gtk.MessageType.ERROR) return None return engine_file def __get_keymap(self): keymap = '' layout = '' variant = '' option = '' engine_file = self.__get_engine_file() if engine_file == None: return None dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) > 0: layout = nodes[0].data if layout != '': keymap = layout.strip() nodes = dom.getElementsByTagName('layout_variant')[0].childNodes if len(nodes) > 0: variant = nodes[0].data if variant != '': keymap += '(' + varaint.strip() + ')' nodes = dom.getElementsByTagName('layout_option')[0].childNodes if len(nodes) > 0: option = nodes[0].data if option != '': keymap += '[' + option.strip() + ']' return keymap def __parse_keymap(self, keymap): layout = None variant = None option = None length = keymap.find('(') if length >= 0: if layout == None: layout = keymap[0:length] keymap = keymap[length + 1:] length = keymap.find(')') if length > 0: variant = keymap[0:length] keymap = keymap[length + 1:] else: print('Invalid keymap', keymap, file=sys.stderr) return ('', '', '') length = keymap.find('[') if length >= 0: if layout == None: layout = keymap[0:length] keymap = keymap[length + 1:] length = keymap.find(']') if length > 0: option = keymap[0:length] keymap = keymap[length + 1:] else: print('Invalid keymap', keymap, file=sys.stderr) return ('', '', '') if layout == None: layout = keymap if layout == None: layout = '' if variant == None: variant = '' if option == None: option = '' return (layout, variant, option) def __save_keymap(self): engine_file = self.__get_engine_file() if engine_file == None: return None (layout, variant, option) = self.__parse_keymap(self.__keymap) dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(layout)) else: nodes[0].data = layout nodes = dom.getElementsByTagName('layout_variant')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(variant)) else: nodes[0].data = variant nodes = dom.getElementsByTagName('layout_option')[0].childNodes if len(nodes) == 0: nodes.append(dom.createTextNode(option)) else: nodes[0].data = option nodes = dom.getElementsByTagName('symbol')[0].childNodes user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') dir = path.dirname(user_config) if not path.exists(dir): os.makedirs(dir, 0o700) # io.open() causes TypeError for unicode. f = codecs.open(user_config, 'w', 'utf-8') dom.writexml(f, '', '', '', 'utf-8') f.close() os.chmod(user_config, 0o600) self.__keymap = None self.__run_message_dialog(_("Anthy keyboard layout is changed. " "Please restart ibus to reload the layout.")) def __update_keymap_label(self): self.__resync_engine_file() prefs = self.__prefs keymap = self.__get_keymap() if keymap == None: return if keymap == '': keymap = 'default' keymap_list = prefs.get_value('common', 'keyboard-layouts') if keymap != None and not keymap in keymap_list: keymap_list.append(keymap) index = -1 if keymap != None: index = keymap_list.index(keymap) model = Gtk.ListStore(str) for k in keymap_list: if k == 'default': k = _("Default") model.append([k]) combobox = self.__builder.get_object('keymap:combobox_custom_table') combobox.set_model(model) combobox.set_active(0) if index >= 0: combobox.set_active(index) combobox.connect_after('changed', self.on_cb_keymap_changed, 0) def __search_and_mark(self, buffer, text, start, end, onetime, forward): if forward: match = start.forward_search(text, 0, end) else: match = start.backward_search(text, 0, end) if match == None: return False match_start, match_end = match if onetime: buffer.place_cursor(match_start) buffer.select_range(match_start, match_end) return True buffer.apply_tag(buffer.tag_found, match_start, match_end) self.__search_and_mark(buffer, text, match_end, end, onetime, forward) return True def __filter_search(self, entry, onetime, forward): text = entry.get_text() self.__filter_timeout_id = 0 text_view = entry.text_view buffer = text_view.get_buffer() start = buffer.get_start_iter() if onetime: bounds = buffer.get_selection_bounds() if len(bounds) != 0: start, end = bounds if forward: start = end end = buffer.get_end_iter() if not forward: end = buffer.get_start_iter() if not onetime: buffer.remove_all_tags(start, end) if text == '': return found = self.__search_and_mark(buffer, text, start, end, onetime, forward) if not found and onetime and forward: end = start start = buffer.get_start_iter() self.__search_and_mark(buffer, text, start, end, onetime, forward) def __do_filter(self, entry): self.__filter_search(entry, False, True) return False def __filter_changed(self, entry): if self.__filter_timeout_id != 0: return self.__filter_timeout_id = GLib.timeout_add(150, self.__do_filter, entry) def __filter_key_release_event(self, entry, event): pressed, keyval = event.get_keyval() if keyval == IBus.KEY_Return: forward = True if event.get_state() & Gdk.ModifierType.SHIFT_MASK: forward = False self.__filter_search(entry, True, forward) text_view = entry.text_view buffer = text_view.get_buffer() text_view.scroll_to_mark(buffer.get_insert(), 0.25, False, 0.0, 0.0) return False def on_selection_changed(self, widget, id): set_sensitive = lambda a, b: self.__builder.get_object(a).set_sensitive(b) flg = True if widget.get_selected()[1] else False for name in [['btn_default', 'btn_edit'], ['es:button_refresh', 'es:button_del']][id]: set_sensitive(name, flg) def on_selection_custom_key_table_changed(self, widget, id): l, i = widget.get_selected() # if 'combobox_custom_key_table' is changed, # 'treeview_custom_key_table' also receives this signal # but no selection. if i == None: return button = self.__builder.get_object('button_remove_custom_key') button.set_sensitive(True) def on_main_quit(self, widget, event): Gtk.main_quit() return True def on_btn_close_clicked(self, widget): Gtk.main_quit() def on_cb_keymap_changed(self, widget, id): it = widget.get_active() model = widget.get_model() keymap = model[it][0] if keymap == _("Default"): keymap = 'default' if self.__keymap == keymap: return self.__keymap = keymap self.__save_keymap() self.__keymap = None def on_cb_custom_key_table_changed(self, widget, user_data): prefs = self.__prefs tv = self.__builder.get_object('treeview_custom_key_table') mode = user_data id = widget.get_active() model = widget.get_model() method = model[id][1] if tv != None: for column in tv.get_columns(): tv.remove_column(column) for child in tv.get_children(): tv.remove(child) if mode == 'romaji': tv = self.__get_romaji_treeview_custom_key_table(method) elif mode == 'kana': prefs.set_value('kana-typing-rule', 'method', method) tv = self.__get_kana_treeview_custom_key_table(method) elif mode == 'thumb': # thumb uses all tables so do not save the method. tv = self.__get_thumb_treeview_custom_key_table(method) def on_btn_edit_clicked(self, widget): ls, it = self.__builder.get_object('shortcut').get_selection().get_selected() m = self.__builder.get_object('es:treeview').get_model() m.clear() for s in s_to_l(ls.get(it, 1)[0]): m.append([s]) self.__builder.get_object('es:entry').set_text('') for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']: self.__builder.get_object(w).set_active(False) dlg = self.__builder.get_object('edit_shortcut') dlg.set_transient_for(widget.get_toplevel()) id = dlg.run() dlg.hide() if id == Gtk.ResponseType.OK: new = l_to_s([m[i][0] for i in range(len(m))]) if new != ls.get(it, 1)[0]: group = self.__get_shortcut_group() self.__prefs.set_list_item('shortcut', group, ls.get(it, 0)[0], s_to_l(new)) ls.set(it, 1, new) def on_btn_default_clicked(self, widget): ls, it = self.__builder.get_object('shortcut').get_selection().get_selected() group = self.__get_shortcut_group() shortcuts = self.__prefs.get_default_value('shortcut', group) new = l_to_s(shortcuts[ls.get(it, 0)[0]]) if new != ls.get(it, 1)[0]: self.__prefs.set_list_item('shortcut', group, ls.get(it, 0)[0], s_to_l(new)) ls.set(it, 1, new) def on_btn_romaji_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'romaji') def on_btn_kana_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'kana') def on_btn_thumb_custom_table_clicked(self, widget): self.__run_dialog_custom_key_table(widget, 'thumb') def on_btn_add_custom_key(self, widget, user_data): prefs = self.__prefs input = self.__builder.get_object('entry_input_custom_key') output = self.__builder.get_object('entry_output_custom_key') left = self.__builder.get_object('entry_left_thumb_shift_custom_key') right = self.__builder.get_object('entry_right_thumb_shift_custom_key') model = self.__builder.get_object('treeview_custom_key_table').get_model() combobox = self.__builder.get_object('combobox_custom_key_table') id = combobox.get_active() model_combobox = combobox.get_model() method = model_combobox[id][1] type = user_data section_base = None key = input.get_text() value = output.get_text() left_text = left.get_text() right_text = right.get_text() if key == None: self.__run_message_dialog(_("Please specify Input Chars")) return elif value == None: self.__run_message_dialog(_("Please specify Output Chars")) return elif type == 'thumb' and left_text == None: self.__run_message_dialog(_("Please specify Left Thumb Shift Chars")) return elif type == 'thumb' and right_text == None: self.__run_message_dialog(_("Please specify Right Thumb Shift Chars")) return if type == 'romaji': section = 'romaji-typing-rule' model.append([type, key, value]) elif type == 'kana': section = 'kana-typing-rule' model.append([type, key, value]) elif type == 'thumb': section = 'thumb-typing-rule' model.append([type, key, value, left_text, right_text]) if section == None: self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug.")) return gkey = prefs.typing_to_config_key(key) if gkey == '': return key = gkey if type != 'thumb': prefs.set_list_item(section, 'list', (method, key), value) else: prefs.set_list_item(section, 'list', (method, key), [value, right_text, left_text]) left.set_text('') right.set_text('') input.set_text('') output.set_text('') def on_btn_remove_custom_key(self, widget, user_data): prefs = self.__prefs combobox = self.__builder.get_object('combobox_custom_key_table') id = combobox.get_active() model_combobox = combobox.get_model() method = model_combobox[id][1] tv = user_data l, i = tv.get_selection().get_selected() type = l[i][0] key = l[i][1] section_base = None if type == 'romaji': section = 'romaji-typing-rule' elif type == 'kana': section = 'kana-typing-rule' elif type == 'thumb': section = 'thumb-typing-rule' if section == None: self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug.")) return gkey = prefs.typing_to_config_key(key) if gkey == '': return key = gkey prefs.delete_list_item(section, 'list', (method, key)) l.remove(i) widget.set_sensitive(False) def on_btn_thumb_key_clicked(self, widget): if Gtk.Buildable.get_name(widget) == 'thumb:button_ls': entry = 'thumb:ls' elif Gtk.Buildable.get_name(widget) == 'thumb:button_rs': entry = 'thumb:rs' else: return text = self.__builder.get_object(entry).get_text() tv = self.__builder.get_object('es:treeview') m = tv.get_model() m.clear() if text != None: m.append([text]) i = m.get_iter_first() tv.get_selection().select_iter(i) self.__builder.get_object('es:entry').set_text('') self.__builder.get_object('es:button_add').hide() self.__builder.get_object('es:button_refresh').show() self.__builder.get_object('es:button_del').hide() for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']: self.__builder.get_object(w).set_active(False) dlg = self.__builder.get_object('edit_shortcut') dlg.set_transient_for(widget.get_toplevel()) id = dlg.run() dlg.hide() self.__builder.get_object('es:button_add').show() self.__builder.get_object('es:button_refresh').hide() self.__builder.get_object('es:button_del').show() if id == Gtk.ResponseType.OK: l, i = tv.get_selection().get_selected() new = l[i][0] if new != text: section, key = self.__get_section_key(entry) self.__prefs.set_value(section, key, new) self.__builder.get_object(entry).set_text(new) def on_btn_dict_command_clicked(self, widget): if Gtk.Buildable.get_name(widget) == 'dict:btn_edit_dict_command': key = 'dict-admin-command' elif Gtk.Buildable.get_name(widget) == 'dict:btn_add_word_command': key = 'add-word-command' else: return command = self.__prefs.get_value('common', key) if not path.exists(command[0]): self.__run_message_dialog(_("Your file does not exist: ") + command[0], Gtk.MessageType.ERROR) return os.spawnl(os.P_NOWAIT, *command) def on_btn_dict_add_clicked(self, widget): file = None id = None if Gtk.Buildable.get_name(widget) == 'dict:btn_add': dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"), transient_for=widget.get_toplevel(), action=Gtk.FileChooserAction.OPEN) buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL, _("_Open"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) if Gtk.Buildable.get_name(widget) == 'dict:btn_edit': dlg = Gtk.Dialog(title=_("Edit Dictionary File"), transient_for=widget.get_toplevel()) buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL, _("_OK"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) vbox = self.__builder.get_object('dict:add_extra_vbox') if Gtk.Buildable.get_name(widget) == 'dict:btn_add': # Need to init for the second time self.__init_dict_chooser_dialog() dlg.set_extra_widget(vbox) if Gtk.Buildable.get_name(widget) == 'dict:btn_edit': id = self.__set_selected_dict_to_dialog() if id == None: self.__run_message_dialog(_("Your choosed file is not correct."), Gtk.MessageType.ERROR) return parent_vbox = dlg.vbox parent_vbox.add(vbox) vbox.show_all() if dlg.run() == Gtk.ResponseType.OK: if Gtk.Buildable.get_name(widget) == 'dict:btn_add': file = dlg.get_filename() if file[0] != '/': dir = dlg.get_current_folder() file = dir + '/' + file self.__append_user_dict_from_dialog(file, None, True) elif Gtk.Buildable.get_name(widget) == 'dict:btn_edit': self.__append_user_dict_from_dialog(None, id, False) dlg.hide() vbox.unparent() def on_btn_dict_delete_clicked(self, widget): l, i = self.__builder.get_object('dict:view').get_selection().get_selected() if not i: return selected_id = l.get_value(i, 0) if selected_id == None: return dict_item = self.__prefs.get_value('dict', 'list')[selected_id] if dict_item.is_system: self.__run_message_dialog(_("You cannot delete the system dictionary."), Gtk.MessageType.ERROR) return file = self.__get_dict_file_from_id(selected_id) if file != None: order = self.__prefs.get_value('dict', 'order') order.remove(selected_id) order = self.__prefs.set_value('dict', 'order', order) self.__prefs.delete_list_item('dict', 'files', selected_id) self.__prefs.delete_list_item('dict', 'list', selected_id) l.remove(i) return l.remove(i) def on_btn_dict_view_clicked(self, widget): dict_file = None selected_id = self.__get_selected_dict_id() if selected_id == None: return dict_file = self.__get_dict_file_from_id(selected_id) if dict_file == None: self.__run_message_dialog(_("Your file is not good."), Gtk.MessageType.ERROR) return if not path.exists(dict_file[0]): self.__run_message_dialog(_("Your file does not exist: ") + dict_file, Gtk.MessageType.ERROR) return # The selected id is already quoted. dicts = self.__prefs.get_value('dict', 'list') dict_item = dicts[selected_id] nline = dict_item.preview_lines encoding = dict_item.encoding lines = ''; for i, line in enumerate(list(codecs.open(dict_file[0], 'r', 'utf-8'))): if nline >= 0 and i >= nline: break; lines = lines + line if encoding != None and encoding != 'utf-8': lines = str(lines, encoding) dlg = Gtk.Dialog(title=_("View Dictionary File"), transient_for=widget.get_toplevel()) buttons=(_("_OK"), Gtk.ResponseType.OK) dlg.add_buttons(*buttons) buffer = Gtk.TextBuffer() buffer.set_text (lines) buffer.tag_found = buffer.create_tag('found', background = 'yellow') text_view = Gtk.TextView.new_with_buffer(buffer) text_view.set_editable(False) sw = Gtk.ScrolledWindow() sw.add(text_view) sw.set_min_content_height(400) parent_vbox = dlg.vbox parent_vbox.add(sw) sw.show_all() dlg.set_default_size(500, 500) self.__filter_timeout_id = 0 if hasattr(Gtk, 'SearchEntry') and \ hasattr(Gtk, 'SearchEntryClass') and \ hasattr(Gtk.SearchEntryClass, 'search_changed'): filter_entry = Gtk.SearchEntry(hexpand = True, margin_left = 6, margin_right = 6, margin_top = 6, margin_bottom = 6) filter_entry.text_view = text_view filter_entry.connect('search-changed', self.__filter_changed) filter_entry.connect('key-release-event', self.__filter_key_release_event) parent_vbox.add(filter_entry) filter_entry.show_all() sw.show_all() dlg.run() dlg.destroy() def on_btn_dict_order_clicked(self, widget): l, it = self.__builder.get_object('dict:view').get_selection().get_selected() if not it: return selected_path = l.get_path(it) selected_id = l.get_value(it, 0) index = selected_path.get_indices()[0] if Gtk.Buildable.get_name(widget) == 'dict:btn_up': if index <= 0: return next_path = (index - 1, ) elif Gtk.Buildable.get_name(widget) == 'dict:btn_down': if index + 1 >= len(l): return next_path = (index + 1, ) next_it = l.get_iter(next_path) if next_it: l.swap(it, next_it) order = self.__prefs.get_value('dict', 'order') if len(order) == 0: order = list(self.__prefs.get_value('dict', 'files').keys()) i = order.index(selected_id) if Gtk.Buildable.get_name(widget) == 'dict:btn_up': if i <= 0: return next_i = i - 1 elif Gtk.Buildable.get_name(widget) == 'dict:btn_down': if i + 1 >= len(order): return next_i = i + 1 f = order[i] order[i] = order[next_i] order[next_i] = f self.__prefs.set_value('dict', 'order', order) def on_shortcut_type_changed(self, widget): ls = self.__builder.get_object('shortcut').get_model() ls.clear() group = self.__get_shortcut_group() shortcuts = self.__prefs.get_value('shortcut', group) for k in shortcuts.keys(): ls.append([k, l_to_s(shortcuts[k])]) section, key = self.__get_section_key(Gtk.Buildable.get_name(widget)) self.__prefs.set_value(section, key, group) def on_shortcut_key_release_event(self, widget, event): if event.hardware_keycode in [36, 65]: self.on_btn_edit_clicked(widget) def on_shortcut_click_event(self, widget, event): if event.type == Gdk.EventType._2BUTTON_PRESS: widget.dc = True elif event.type == Gdk.EventType.BUTTON_RELEASE: if hasattr(widget, 'dc') and widget.dc: self.on_btn_edit_clicked(widget) widget.dc = False def on_key_input_dialog_key_press_event(self, widget, event): widget.e = (event.keyval, event.get_state()) return True def on_key_input_dialog_key_release_event(self, widget, event): widget.response(Gtk.ResponseType.OK) return True def on_entry_custom_key_changed(self, widget, user_data): mode = user_data input = self.__builder.get_object('entry_input_custom_key') output = self.__builder.get_object('entry_output_custom_key') left = self.__builder.get_object('entry_left_thumb_shift_custom_key') right = self.__builder.get_object('entry_right_thumb_shift_custom_key') button = self.__builder.get_object('button_add_custom_key') if mode != 'thumb': if input.get_text() != '' and output.get_text() != '': button.set_sensitive(True) else: button.set_sensitive(False) else: if input.get_text() != '' and output.get_text() != '' and \ left.get_text() != '' and right.get_text() != '': button.set_sensitive(True) else: button.set_sensitive(False) def on_entry_dict_command_changed(self, widget): if not widget.get_text(): return list = widget.get_text().split() if len(list) == 0: return elif list[0][0] == '/': if len(list) == 1: list.append(list[0][list[0].rfind('/') + 1:]) else: list.insert(1, list[0][list[0].rfind('/') + 1:]) else: if len(list) == 1: list[0] = '/usr/bin/' + list[0] else: list.insert(0, '/usr/bin/' + list[0]) list[1] = list[1][list[1].rfind('/') + 1:] if Gtk.Buildable.get_name(widget) == 'dict:entry-edit-dict-command': key = 'dict-admin-command' elif Gtk.Buildable.get_name(widget) == 'dict:entry-add-word-command': key = 'add-word-command' else: return self.__prefs.set_value('common', key, list) def on_es_entry_changed(self, widget): if not widget.get_text(): self.__builder.get_object('es:button_add').set_sensitive(False) else: self.__builder.get_object('es:button_add').set_sensitive(True) def on_es_button_run_input_clicked(self, widget): dlg = self.__builder.get_object('key_input_dialog') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Please press a key (or a key combination)")) dlg.format_secondary_text(_("The dialog will be closed when the key is released")) id = dlg.run() dlg.hide() if id == Gtk.ResponseType.OK: key, state = dlg.e if (state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK) and ord('a') <= key <= ord('z')): key = ord(chr(key).upper()) self.__builder.get_object('es:entry').set_text(IBus.keyval_name(key)) for w, i in [('es:checkbutton_ctrl', IBus.ModifierType.CONTROL_MASK), ('es:checkbutton_alt', IBus.ModifierType.MOD1_MASK), ('es:checkbutton_shift', IBus.ModifierType.SHIFT_MASK)]: self.__builder.get_object(w).set_active(True if state & i else False) def on_es_button_add_clicked(self, widget): s = self.__builder.get_object('es:entry').get_text() if not s or not IBus.keyval_from_name(s): dlg = self.__builder.get_object('invalid_keysym') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Invalid keysym")) dlg.format_secondary_text(_("This keysym is not valid")) dlg.run() dlg.hide() return True for w, m in [('es:checkbutton_ctrl', 'Ctrl+'), ('es:checkbutton_alt', 'Alt+'), ('es:checkbutton_shift', 'Shift+')]: if self.__builder.get_object(w).get_active(): s = m + s l = self.__builder.get_object('es:treeview').get_model() for i in range(len(l)): if l[i][0] == s: return True l.append([s]) def on_es_button_refresh_clicked(self, widget): s = self.__builder.get_object('es:entry').get_text() if not s or not IBus.keyval_from_name(s): dlg = self.__builder.get_object('invalid_keysym') dlg.set_transient_for(widget.get_toplevel()) dlg.set_markup('%s' % _("Invalid keysym")) dlg.format_secondary_text(_("This keysym is not valid")) dlg.run() dlg.hide() return True for w, m in [('es:checkbutton_ctrl', 'Ctrl+'), ('es:checkbutton_alt', 'Alt+'), ('es:checkbutton_shift', 'Shift+')]: if self.__builder.get_object(w).get_active(): s = m + s tv = self.__builder.get_object('es:treeview') l, i = tv.get_selection().get_selected() l[i][0] = s return True def on_es_button_del_clicked(self, widget): tv = self.__builder.get_object('es:treeview') l, i = tv.get_selection().get_selected() if i: l.remove(i) def run(self): Gtk.main() if __name__ == '__main__': AnthySetup().run() ibus-anthy-1.5.11/setup/python3/prefs.py000066400000000000000000000315571346647371500201520ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2007-2008 Peng Huang # Copyright (c) 2009 Hideaki ABE # Copyright (c) 2010-2017 Takao Fujiwara # Copyright (c) 2007-2017 Red Hat, Inc. # # 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. import sys from gi import require_version as gi_require_version gi_require_version('Gio', '2.0') gi_require_version('GLib', '2.0') gi_require_version('IBus', '1.0') from gi.repository import Gio from gi.repository import GLib from gi.repository import GObject from gi.repository import IBus class DictItem(): def __init__(self, id='', short_label='', long_label='', icon='', is_system=False, preview_lines=-1, embed=False, single=True, reverse=False, encoding='utf-8'): self.id = id self.short_label = short_label self.long_label = long_label self.icon = icon self.is_system = is_system self.preview_lines = preview_lines self.embed = embed self.single = single self.reverse = reverse self.encoding = encoding def __str__(self): retval = ('id:', self.id, 'short-label:', self.short_label, 'long-label:', self.long_label, 'icon:', self.icon, 'is-system:', self.is_system, 'preview-lines:', self.preview_lines, 'embed:', self.embed, 'single:', self.single, 'reverse:', self.reverse, 'encoding:', self.encoding) return str(retval) @classmethod def serialize(cls, dict_item): builder = GLib.VariantBuilder(GLib.VariantType('r')) builder.add_value(GLib.Variant.new_string(dict_item.id)) builder.add_value(GLib.Variant.new_string(dict_item.short_label)) builder.add_value(GLib.Variant.new_string(dict_item.long_label)) builder.add_value(GLib.Variant.new_string(dict_item.icon)) builder.add_value(GLib.Variant.new_boolean(dict_item.is_system)) builder.add_value(GLib.Variant.new_int32(dict_item.preview_lines)) builder.add_value(GLib.Variant.new_boolean(dict_item.embed)) builder.add_value(GLib.Variant.new_boolean(dict_item.single)) builder.add_value(GLib.Variant.new_boolean(dict_item.reverse)) builder.add_value(GLib.Variant.new_string(dict_item.encoding)) return builder.end() class Prefs(GObject.GObject): __gsignals__ = { 'changed' : ( GObject.SignalFlags.RUN_FIRST, None, (str, str, GLib.Variant)), } def __init__(self): super(Prefs, self).__init__() self.__cache = {} self.__settings = {} self.__schema_prefix = 'org.freedesktop.ibus.engine.anthy.' self.__schema_sections = ['common', 'shortcut', 'romaji-typing-rule', 'kana-typing-rule', 'thumb-typing-rule', 'thumb', 'dict'] for section in self.__schema_sections: self.__settings[section] = Gio.Settings( schema=self.__schema_prefix + section) self.__settings[section].connect('changed', self.__settings_on_changed) def __settings_on_changed(self, settings, key): section = settings.props.schema[len(self.__schema_prefix):] variant_value = self.__settings[section].get_value(key) variant_key = self.__cache.get(section) if variant_key == None: variant_key = {} variant_key[key] = variant_value self.__cache[section] = variant_key self.emit('changed', section, key, variant_value) def variant_to_value(self, variant): if type(variant) != GLib.Variant: return variant type_string = variant.get_type_string() if type_string == 's': return variant.get_string() elif type_string == 'i': return variant.get_int32() elif type_string == 'b': return variant.get_boolean() elif type_string == 'v': return variant.unpack() elif len(type_string) > 0 and type_string[0] == 'a': # Use unpack() instead of dup_strv() in python. # In the latest pygobject3 3.3.4 or later, g_variant_dup_strv # returns the allocated strv but in the previous release, # it returned the tuple of (strv, length) return variant.unpack() else: self.printerr('Unknown variant type: %s' % type_string) sys.abrt() return variant def variant_from_value(self, value): variant = None if type(value) == str: variant = GLib.Variant.new_string(value) elif type(value) == int: variant = GLib.Variant.new_int32(value) elif type(value) == bool: variant = GLib.Variant.new_boolean(value) elif type(value) == list: variant = GLib.Variant.new_strv(value) if variant == None: self.printerr('Unknown value type: %s' % type(value)) return variant def get_variant(self, section, key): variant_key = self.__cache.get(section) if variant_key != None: variant_value = variant_key.get(key) if variant_value != None: return variant_value variant_value = self.__settings[section].get_value(key) if variant_key == None: variant_key = {} variant_key[key] = variant_value self.__cache[section] = variant_key return variant_value def get_default_variant(self, section, key): return self.__settings[section].get_default_value(key) def get_readable_value(self, section, key, variant): value = self.variant_to_value(variant) if section == 'dict' and key == 'list': dicts = {} for item in value: dict_item = DictItem(*item) dicts[dict_item.id] = dict_item value = dicts if section == 'dict' and key == 'template': value = DictItem(*value) return value def get_value(self, section, key): variant = self.get_variant(section, key) return self.get_readable_value(section, key, variant) def get_default_value(self, section, key): variant = self.get_default_variant(section, key) return self.get_readable_value(section, key, variant) def set_variant(self, section, key, variant): self.__settings[section].set_value(key, variant) self.__settings[section].apply() def set_value(self, section, key, value): variant = self.variant_from_value(value) if variant == None: return self.set_variant(section, key, variant) def set_list_item(self, section, key, item, values): variant = self.get_variant(section, key) if variant == None: printerrr('%s:%s does not exist' % (section, key)) return if section == 'shortcut': variant_dict = GLib.VariantDict(variant) array = [] for value in values: array.append(GLib.Variant.new_string(value)) varray = GLib.Variant.new_array(GLib.VariantType('s'), array) variant_dict.insert_value(item, varray) # GVariantDict uses GHashTable internally and # GVariantDict.end() does not support the order. self.set_variant(section, key, variant_dict.end()) return if section == 'romaji-typing-rule' or \ section == 'kana-typing-rule' or \ section == 'thumb-typing-rule': (method, keymap_key) = item variant_dict = GLib.VariantDict(variant) keymap = variant_dict.lookup_value(method, None) keymap_dict = GLib.VariantDict(keymap) if section == 'thumb-typing-rule': array = [] for value in values: array.append(GLib.Variant.new_string(value)) vvalue = GLib.Variant.new_array(GLib.VariantType('s'), array) else: vvalue = GLib.Variant.new_string(values) keymap_dict.insert_value(keymap_key, vvalue) keymap = keymap_dict.end() variant_dict.insert_value(method, keymap) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'files': variant_dict = GLib.VariantDict(variant) array = [] for value in values: array.append(GLib.Variant.new_string(value)) varray = GLib.Variant.new_array(GLib.VariantType('s'), array) variant_dict.insert_value(item, varray) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'list': array = [] has_item = False for v in variant: dict_item = DictItem(*v) if dict_item.id == values.id: array.append(GLib.Variant.new_variant( DictItem.serialize(values))) has_item = True else: array.append(GLib.Variant.new_variant( DictItem.serialize(dict_item))) if not has_item: array.append(GLib.Variant.new_variant(DictItem.serialize(values))) varray = GLib.Variant.new_array(GLib.VariantType('v'), array) self.set_variant(section, key, varray) return def delete_list_item(self, section, key, item): variant = self.get_variant(section, key) if variant == None: printerrr('%s:%s does not exist' % (section, key)) return if section == 'romaji-typing-rule' or \ section == 'kana-typing-rule' or \ section == 'thumb-typing-rule': (method, keymap_key) = item variant_dict = GLib.VariantDict(variant) keymap = variant_dict.lookup_value(method, None) keymap_dict = GLib.VariantDict(keymap) keymap_dict.remove(keymap_key) keymap = keymap_dict.end() variant_dict.insert_value(method, keymap) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'files': variant_dict = GLib.VariantDict(variant) variant_dict.remove(item) self.set_variant(section, key, variant_dict.end()) return if section == 'dict' and key == 'list': array = [] for v in variant: dict_item = DictItem(*v) if dict_item.id == item: continue else: array.append(GLib.Variant.new_variant( DictItem.serialize(dict_item))) varray = GLib.Variant.new_array(GLib.VariantType('v'), array) self.set_variant(section, key, varray) return def bind(self, section, key, object, property, flags): self.__settings[section].bind(key, object, property, flags) # Convert DBus.String to str # sys.getdefaultencoding() == 'utf-8' with pygtk2 but # sys.getdefaultencoding() == 'ascii' with gi gtk3 # so the simple str(unicode_string) causes an error and need to use # unicode_string.encode('utf-8') instead. def str(self, uni): if uni == None: return None if type(uni) == str: return uni return str(uni) # The simple unicode(string) causes an error and need to use # unicode(string, 'utf-8') instead. def unicode(self, string): if string == None: return None return string # If the parent process exited, the std io/out/error will be lost. @staticmethod def printerr(sentence): try: print(sentence, file=sys.stderr) except IOError: pass ibus-anthy-1.5.11/setup/python3/setup.ui000066400000000000000000004243441346647371500201600ustar00rootroot00000000000000 10 0 0 1 0 10 Hiragana Katakana Halfwidth Katakana Latin Wide Latin NICOLA-J NICOLA-A NICOLA-F None FMV KB231 key extension FMV KB611 key extension Romaji Kana Thumb shift Multiple segment Single segment Immediate conversion (multiple segment) Immediate conversion (single segment) Keep numpad codes Convert characters 「」/ 「」・ []/ []・ 、。 ,. Do nothing Automatically convert Automatically commit Clear Commit Hold Default ATOK Wnn False Setup - IBus-Anthy dialog True vertical True True 6 True vertical 8 True 0 none True 3 2 8 4 8 8 12 True 0 _Input Mode: True input-mode GTK_FILL True model1 0 1 2 True 0 _Typing Method: True typing-method 1 2 GTK_FILL True model2 0 1 2 1 2 True 0 Conversion _Mode: True conversion-segment-mode 2 3 GTK_FILL True model3 0 1 2 2 3 True <b>Initial Setting</b> True False False 0 True 0 none True vertical 4 4 8 8 12 True True 200 automatic automatic in True True 0 True <b>Menu Visibility on Status Icon</b> True False False 1 True General vbox1 False True vertical 8 True 0 none True 5 2 8 4 8 8 12 True 0 _Period Style: True period-style GTK_FILL True 0 Symbo_l Style: True symbol-style 1 2 GTK_FILL True 0 Numpad _Key Type: True ten-key-mode 2 3 GTK_FILL True model4 0 1 2 2 3 True model5 0 1 2 1 2 True model6 0 1 2 True 0 _Behavior on Period: True behavior-on-period 3 4 GTK_FILL True 0 Behavior on _Focus Out: True behavior-on-focus-out 4 5 GTK_FILL True model7 0 1 2 3 4 True model8 0 1 2 4 5 True <b>Behavior</b> True False False 0 True 0 none True 4 8 4 8 8 12 True horizontal 8 True 0 Candidate _Window Page Size: True page-size False False 0 True True adjustment1 0.97999999999999998 False False 1 Convert _symbols with the one column width True True False True True 1 2 Convert _numbers with the one column width True True False True True 2 3 Con_vert spaces with the one column width True True False True True 3 4 Swi_tch โ€œHiraganaโ€ and โ€œLatinโ€ with Shift key and Hiraganaโ€“Katakana key in preedit True True False True True 4 5 True <b>Other</b> True False False 1 True Conversion vbox2 1 False True vertical 4 4 True horizontal 8 True _Shortcut Type: True word-char shortcut-type False False 1 0 True model9 0 False False 1 False False 0 True True automatic automatic in 300 True True 1 True horizontal 4 end De_fault True True True True False False False 0 _Edit True True True True False False False 1 False False 2 True Key Binding vbox3 2 False True 8 4 vertical True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True _Romaji Key Table: True romaji:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False False 0 True <b>Romaji</b> True False True 0 True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True _Kana Key Table: True kana:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False False 0 True <b>Kana</b> True False True 1 True 0 none True 4 4 vertical 8 12 True 2 2 8 4 True Keyboad _layout: True keymap:combobox_custom_table GTK_FILL GTK_FILL True True 0 1 2 GTK_FILL GTK_FILL False False 0 True <b>Keyboard layout</b> True False True 2 True Typing Method vbox4 3 False True 8 4 vertical True 0 none True 4 4 vertical 8 8 12 True 2 3 8 4 True 0 True _Left Thumb Shift Key: thumb:ls GTK_FILL True True False GTK_FILL 1 2 ... True True False GTK_FILL GTK_FILL 2 3 True 0 True Right _Thumb Shift Key: thumb:rs GTK_FILL 1 2 True True False GTK_FILL 1 2 1 2 ... True True False GTK_FILL GTK_FILL 2 3 1 2 False True 0 Adjust _input method layout to system keyboard layout Adjust IM layout to XKB layout True True False True True False False 1 True horizontal 8 True 0 True Input _Method Layout: thumb:keyboard-layout False False 0 True model51 0 1 False False 2 True horizontal 8 True dialog-information False False 0 True 0 True Restart IBus when you change the keyboard layout Restart IBus when you change XKB False False 1 False False 3 True horizontal 8 True 0 True _Additional Key Arrangement: thumb:fmv-extension False False 0 True '~', '『', '¢', '£' and so on can be output with Thumb Shift key model11 0 1 False False 4 True horizontal 8 True dialog-information False False 0 True 0 True 74 You do not have to reconfigure the system keyboard layout for "Additional Key Arrangement" since this option changes input method layout only in case input method is turned on. You do not have to reconfigure XKB since this option changes IM layout only with IM on. False False 1 False False 5 _Enable semi-voiced sound mark with Shift key Seion + Shift can output Handakuon True True False True True False False 6 True 2 2 8 4 True Thumb _Shift Key Table: True thumb:button_custom_table GTK_FILL GTK_FILL ... True True True False True 1 2 GTK_FILL GTK_FILL False True 7 True <b>Thumb Shift Layout</b> True False 0 True Thumb Shift vbox5 4 False True vertical 8 4 True 0 none True vertical 4 4 8 8 12 True 2 3 8 4 True _Edit Dictionary Command: True dict:entry-edit-dict-command GTK_FILL GTK_FILL True True True GTK_FILL 1 2 ... True True True False True GTK_FILL GTK_FILL 2 3 True _Add Word Command: True dict:entry-add-word-command GTK_FILL GTK_FILL 1 2 True True True GTK_FILL 1 2 1 2 ... True True True False True GTK_FILL GTK_FILL 2 3 1 2 False True 0 True <b>Default Dictionary Configuration</b> True False 0 True 0 none True vertical 4 4 8 8 12 True True 220 automatic automatic in True True 0 True horizontal 4 end _View True True True False True False False 0 _Add True True True True False False False 1 _Edit True True True True False False False 2 _Delete True True True True False False False 3 False False 1 True horizontal 4 end _Up True You can change the order on language bar True True True False False False 0 _Down True You can change the order on language bar True True True False False False 1 False False 2 True <b>Extended Dictionaries</b> True False 1 True Dictionary vbox6 5 False True vertical 10 6 True False True About about_vbox 6 False 2 True horizontal end _Close True True True True False False False 0 False end 0 btn_close 340 300 Edit Shortcut True dialog True vertical True vertical 5 6 True True 1 automatic automatic in 150 True True False 0 True horizontal 8 True Key Code: False False 0 True True 1 ... True True False True False False 2 False False 1 True horizontal 8 True Modifier: False False 0 True horizontal A_lternate True True False True True 0 Co_ntrol True True False True True 1 _Shift True True False True True 2 1 False False 2 True horizontal 6 end _Add True True False True True False False False 0 _Refresh True False True True False False False 1 _Delete True True False True True False False False 2 False False 3 2 True horizontal end _Cancel True True True True False False False 0 _OK True True True True False False False 1 False end 0 cancelbutton101 okbutton101 400 470 True dialog True vertical 5 6 True horizontal 5 6 True 0 True combobox_custom_key_table False False 0 True False False 1 False False 0 True horizontal 5 6 True True 1 automatic automatic in 250 300 True True 0 True vertical start 6 True _Input Characters True entry_input_custom_key 0 True 3 1 True _Output Characters True entry_output_custom_key 2 True 3 3 False _Left Thumb Shift True entry_left_thumb_shift_custom_key 4 False 3 5 False _Right Thumb Shift True entry_right_thumb_shift_custom_key 6 False 3 7 True _Add True True True True False 8 True _Remove True True True True False 9 False False 1 1 True horizontal end True _Close True True True True False False 0 False end 0 closebutton301 5 False True center-on-parent dialog True question yes-no Confirmation You are about to close the setup dialog, is that OK? True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True warning yes-no Notice! You are about to close the setup dialog without saving your changes, is that OK? True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True cancel Please press a key (or a key combination) The dialog will be closed when the key is released True vertical 2 True horizontal end False end 0 5 False True center-on-parent dialog True warning ok Invalid keysym This keysym is not valid True vertical 2 True horizontal end False end 0 True vertical True 10 True 2 2 8 4 True _Short Label: True dict:short_entry GTK_FILL True True True 1 1 2 True _Description: True dict:long_entry 1 2 GTK_FILL True True True 1 2 1 2 False False _Use your dictionary alone with switching dictionaries True True False True True True False False 1 _Embed your dictionary in the system dictionary True True False True True False False 2 Enable the _reverse conversion False True False True True False False 3 IBus-Anthy Copyright ยฉ 2007โ€“2008 Peng Huang Copyright ยฉ 2009 Hideaki ABE Copyright ยฉ 2009โ€“2018 Takao Fujiwara Copyright ยฉ 2007โ€“2018 Red Hat, Inc. The Anthy engine for the IBus input platform GPL https://github.com/ibus/ibus/wiki Takao Fujiwara <takao.fujiwara1@gmail.com> translator_credits True ibus-anthy-1.5.11/tests/000077500000000000000000000000001346647371500150445ustar00rootroot00000000000000ibus-anthy-1.5.11/tests/Makefile.am000066400000000000000000000021051346647371500170760ustar00rootroot00000000000000# vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2017-2019 Takao Fujiwara # Copyright (c) 2017-2019 Red Hat, Inc. # # 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. check: bash -x $(srcdir)/test-build.sh --builddir=$(builddir) --srcdir=$(srcdir) EXTRA_DIST = \ anthycases.py \ anthytest.py \ test-build.sh \ test-console.sh \ $(NULL) ibus-anthy-1.5.11/tests/anthycases.py000066400000000000000000000052241346647371500175630ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # 'init' has one array which is [keysym, keycode, modifier] and to be run # before the main tests. E.g. # Ctrl-space to enable Hiragana mode # # 'tests' cases are the main test cases. # 'preedit' case runs to create a preedit text. # 'commit' case runs to commit the preedit text. # 'result' case is the expected output. # 'preedit' and 'commit' can choose the type of either 'string' or 'keys' # 'string' type is a string sequence which does not need modifiers from gi import require_version as gi_require_version gi_require_version('IBus', '1.0') from gi.repository import IBus TestCases = { #'init': [ord(' '), 0, IBus.ModifierType.CONTROL_MASK] 'init': [IBus.KEY_j, 0, IBus.ModifierType.CONTROL_MASK], 'tests': [ { 'preedit': { 'string': 'watashinonamaeha,pendesu.' }, 'conversion': { 'string': ' ' }, 'commit': { 'keys': [[IBus.KEY_Return, 0, 0]] }, 'result': { 'string': '็งใฎๅๅ‰ใฏใ€ใƒšใƒณใงใ™ใ€‚' } }, { 'preedit': { 'string': 'toukyou' }, 'conversion': { 'string': ' ' }, 'commit': { 'keys': [[IBus.KEY_Return, 0, 0]] }, 'result': { 'string': 'ๆฑไบฌ' } }, { 'preedit': { 'string': 'toukyo' }, 'conversion': { 'keys': [[IBus.KEY_Tab, 0, 0], [IBus.KEY_Tab, 0, 0], ] }, 'commit': { 'keys': [[IBus.KEY_Return, 0, 0]] }, 'result': { 'string': 'ๆฑไบฌ' } }, { 'preedit': { 'string': 'myuutu-' }, 'conversion': { 'keys': [[IBus.KEY_F7, 0, IBus.ModifierType.SHIFT_MASK]] }, 'commit': { 'keys': [[IBus.KEY_Return, 0, 0]] }, 'result': { 'string': 'ใƒŸใƒฅใ‚ฆใƒ„ใƒผ' } }, { 'preedit': { 'string': 'myuutu-' }, 'conversion': { 'keys': [[IBus.KEY_space, 0, 0], [IBus.KEY_Right, 0, IBus.ModifierType.SHIFT_MASK], [IBus.KEY_Right, 0, IBus.ModifierType.SHIFT_MASK], [IBus.KEY_Right, 0, IBus.ModifierType.SHIFT_MASK], [IBus.KEY_F7, 0, 0] ] }, 'commit': { 'keys': [[IBus.KEY_Return, 0, 0]] }, 'result': { 'string': 'ใƒŸใƒฅใ‚ฆใƒ„ใƒผ' } }, ] } ibus-anthy-1.5.11/tests/anthytest.py000066400000000000000000000300211346647371500174350ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- from __future__ import print_function from gi import require_version as gi_require_version gi_require_version('GLib', '2.0') gi_require_version('Gtk', '3.0') gi_require_version('IBus', '1.0') from gi.repository import GLib from gi.repository import Gtk from gi.repository import IBus import getopt import os import sys import subprocess PY3K = sys.version_info >= (3, 0) DONE_EXIT = False if 'IBUS_ANTHY_ENGINE_PATH' in os.environ: engine_path = os.environ['IBUS_ANTHY_ENGINE_PATH'] if engine_path != None and engine_path != '': sys.path.append(engine_path) if 'IBUS_ANTHY_SETUP_PATH' in os.environ: setup_path = os.environ['IBUS_ANTHY_SETUP_PATH'] if setup_path != None and setup_path != '': sys.path.append(setup_path) sys.path.append('/usr/share/ibus-anthy/engine') from anthycases import TestCases class AnthyTest: global DONE_EXIT ENGINE_PATH = '/com/redhat/IBus/engines/Anthy/Test/Engine' def __init__(self): IBus.init() self.__id = 0 self.__rerun = False self.__test_index = 0 self.__conversion_index = 0 self.__commit_done = False def register_ibus_engine(self): self.__bus = IBus.Bus() if not self.__bus.is_connected(): error('ibus-daemon is not running') return False; self.__bus.get_connection().signal_subscribe('org.freedesktop.DBus', 'org.freedesktop.DBus', 'NameOwnerChanged', '/org/freedesktop/DBus', None, 0, self.__name_owner_changed_cb, self.__bus) #self.__factory = factory.EngineFactory(self.__bus) self.__factory = IBus.Factory( object_path=IBus.PATH_FACTORY, connection=self.__bus.get_connection()) self.__factory.connect('create-engine', self.__create_engine_cb) #command_line = '/usr/libexec/ibus-engine-anthy' self.__component = IBus.Component(name='org.freedesktop.IBus.Anthy.Test', description='Test Anthy Component', version='0.0.1', license='GPL', author='Takao Fujiwara ', homepage='https://github.com/ibus/ibus/wiki', command_line='', textdomain='ibus-anthy') if PY3K: symbol = chr(0x3042) else: symbol = unichr(0x3042) desc = IBus.EngineDesc(name='testanthy', longname='TestAnthy', description='Test Anthy Input Method', language='ja', license='GPL', author='Takao Fujiwara ', icon='ibus-anthy', symbol=symbol, ) self.__component.add_engine(desc) self.__bus.register_component(self.__component) self.__bus.request_name('org.freedesktop.IBus.Anthy.Test', 0) return True def __name_owner_changed_cb(self, connection, sender_name, object_path, interface_name, signal_name, parameters, user_data): if signal_name == 'NameOwnerChanged': import engine engine.Engine.CONFIG_RELOADED() def __create_engine_cb(self, factory, engine_name): if engine_name == 'testanthy': import engine self.__id += 1 self.__engine = engine.Engine(self.__bus, '%s/%d' % (self.ENGINE_PATH, self.__id)) self.__engine.connect('focus-in', self.__engine_focus_in) self.__engine.connect('focus-out', self.__engine_focus_out) return self.__engine def __engine_focus_in(self, engine): if self.__test_index == len(TestCases['tests']): if DONE_EXIT: Gtk.main_quit() return # Workaround because focus-out resets the preedit text # ibus_bus_set_global_engine() calls bus_input_context_set_engine() # twice and it causes bus_engine_proxy_focus_out() if self.__rerun: self.__main_test() pass def __engine_focus_out(self, engine): self.__rerun = True def create_window(self): window = Gtk.Window(type = Gtk.WindowType.TOPLEVEL) self.__entry = entry = Gtk.Entry() window.connect('destroy', Gtk.main_quit) entry.connect('focus-in-event', self.__entry_focus_in_event_cb) entry.connect('preedit-changed', self.__entry_preedit_changed_cb) buffer = entry.get_buffer() buffer.connect('inserted-text', self.__buffer_inserted_text_cb) window.add(entry) window.show_all() def __entry_focus_in_event_cb(self, entry, event): if self.__test_index == len(TestCases['tests']): if DONE_EXIT: Gtk.main_quit() return False self.__bus.set_global_engine_async('testanthy', -1, None, self.__set_engine_cb) return False def __set_engine_cb(self, object, res): if not self.__bus.set_global_engine_async_finish(res): warning('set engine failed: ' + error.message) return print('enabled engine') self.__enable_hiragana() self.__main_test() def __get_test_condition_length(self, tag): tests = TestCases['tests'][self.__test_index] cases = tests[tag] type = list(cases.keys())[0] return len(cases[type]) def __entry_preedit_changed_cb(self, entry, preedit_str): if len(preedit_str) == 0: return if self.__test_index == len(TestCases['tests']): if DONE_EXIT: Gtk.main_quit() return conversion_length = self.__get_test_condition_length('conversion') # Need to return again even if all the conversion is finished # until the final Engine.update_preedit() is called. if self.__conversion_index > conversion_length: return self.__run_cases('conversion', self.__conversion_index, self.__conversion_index + 1) if self.__conversion_index < conversion_length: self.__conversion_index += 1 return self.__conversion_index += 1 self.__run_cases('commit') def __enable_hiragana(self): commands = ['gsettings', 'get', 'org.freedesktop.ibus.engine.anthy.common', 'input-mode' ] if PY3K: py3result = subprocess.run(commands, stdout=subprocess.PIPE) try: result = int(py3result.stdout) except ValueError: # No user data result = 0 else: py2result = subprocess.check_output(commands) result = py2result if result == '': result = 0 if result != 0: print('Enable hiragana', result) key = TestCases['init'] self.__typing(key[0], key[1], key[2]) else: print('Already hiragana') def __main_test(self): self.__conversion_index = 0 self.__commit_done = False self.__run_cases('preedit') self.__run_cases('conversion', self.__conversion_index, self.__conversion_index + 1) self.__conversion_index += 1 def __run_cases(self, tag, start=-1, end=-1): tests = TestCases['tests'][self.__test_index] if tests == None: return cases = tests[tag] type = list(cases.keys())[0] i = 0 if type == 'string': if start == -1 and end == -1: print('test step:', tag, 'sequences: "' + cases['string'] + '"') for a in cases['string']: if start >= 0 and i < start: i += 1 continue if end >= 0 and i >= end: break; if start != -1 or end != -1: print('test step:', tag, 'sequences: "' + cases['string'][i] + '"') self.__typing(ord(a), 0, 0) i += 1 if type == 'keys': if start == -1 and end == -1: print('test step:', tag, 'sequences:', cases['keys']) for key in cases['keys']: if start >= 0 and i < start: i += 1 continue if end >= 0 and i >= end: break; if start != -1 or end != -1: print('test step: %s sequences: [0x%X, 0x%X, 0x%X]' % (tag, key[0], key[1], key[2])) self.__typing(key[0], key[1], key[2]) i += 1 def __typing(self, keyval, keycode, modifiers): self.__engine.emit('process-key-event', keyval, keycode, modifiers) modifiers |= IBus.ModifierType.RELEASE_MASK; self.__engine.emit('process-key-event', keyval, keycode, modifiers) def __buffer_inserted_text_cb(self, buffer, position, chars, nchars): tests = TestCases['tests'][self.__test_index] cases = tests['result'] if cases['string'] == chars: print("OK: ", chars) else: print("NG: ", cases['string'], chars) self.__test_index += 1 if self.__test_index == len(TestCases['tests']): if DONE_EXIT: Gtk.main_quit() return self.__entry.set_text('') self.__main_test() def run(self): Gtk.main() def print_help(out, v = 0): print('-e, --exit Exit this program after test is done.', file=out) print('-f, --force Run this program forcibly with .anthy.', file=out) print('-h, --help show this message.', file=out) print('\nenvironment variables:', file=out) print('IBUS_ANTHY_ENGINE_PATH Indicates the path which includes ' \ 'engine.py. the default is /usr/share/ibus-anthy/engine', file=out) print('IBUS_ANTHY_SETUP_PATH Indicates the path which includes ' \ 'prefs.py. the default is /usr/share/ibus-anthy/setup', file=out) sys.exit(v) def get_userhome(): if 'HOME' not in os.environ: import pwd userhome = pwd.getpwuid(os.getuid()).pw_dir else: userhome = os.environ['HOME'] userhome = userhome.rstrip('/') return userhome def main(): shortopt = 'efh' longopt = ['exit', 'force', 'help'] force_run = False try: opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt) except getopt.GetoptError as err: print_help(sys.stderr, 1) for o, a in opts: if o in ('-e', '--exit'): global DONE_EXIT DONE_EXIT = True elif o in ('-f', '--force'): force_run = True elif o in ('-h', '--help'): print_help(sys.stderr) else: print('Unknown argument: %s' % o, file=sys.stderr) print_help(sys.stderr, 1) for anthy_config in ['/.config/anthy', '/.anthy']: anthy_user_dir = get_userhome() + anthy_config anthy_last_file = anthy_user_dir + '/last-record2_default.utf8' if os.path.exists(anthy_last_file) and not force_run: print('Please remove %s before the test' % anthy_last_file, file=sys.stderr) sys.exit(-1) EngineTest = AnthyTest() if not EngineTest.register_ibus_engine(): sys.exit(-1) EngineTest.create_window() EngineTest.run() if __name__ == '__main__': main() ibus-anthy-1.5.11/tests/test-build.sh000077500000000000000000000105051346647371500174600ustar00rootroot00000000000000#!/bin/sh # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2018 Takao Fujiwara # Copyright (c) 2018 Red Hat, Inc. # # 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. # This test runs $(top_builddir)/engine/python*/engine.py before install anthy BUILDDIR="."; SRCDIR="."; ANTHY_SCHEMA_FILE=org.freedesktop.ibus.engine.anthy.gschema.xml; SCHEMA_TMPDIR=""; FORCE_TEST=""; RUN_ARGS="--exit"; usage() { echo -e \ "This test runs top_builddir/engine/python*/engine.py before install anthy\n" \ "$PROGNAME [OPTIONSโ€ฆ]\n" \ "\n" \ "OPTIONS:\n" \ "-h, --help This help\n" \ "-v, --version Show version\n" \ "-b, --builddir=BUILDDIR Set the BUILDDIR\n" \ "-s, --srcdir=SOURCEDIR Set the SOURCEDIR\n" \ "-f, --force Run test suite forcibly\n" \ "" } parse_args() { # This is GNU getopt. "sudo port getopt" in BSD? ARGS=`getopt -o hvb:s: --long help,version,builddir:,srcdir: \ -- "$@"`; eval set -- "$ARGS" while [ 1 ] ; do case "$1" in -h | --help ) usage; exit 0;; -v | --version ) echo -e "$VERSION"; exit 0;; -b | --builddir ) BUILDDIR="$2"; shift 2;; -s | --srcdir ) SRCDIR="$2"; shift 2;; -f | --force ) FORCE_TEST="1"; shift;; -- ) shift; break;; * ) usage; exit 1;; esac; done; } init_environment() { if test x$FORCE_TEST != x ; then RUN_ARGS="$RUN_ARGS --force"; fi; if test ! -f $BUILDDIR/../data/$ANTHY_SCHEMA_FILE ; then echo "Not found $BUILDDIR/../data/$ANTHY_SCHEMA_FILE"; exit -1; fi; SCHEMA_TMPDIR=`mktemp -d`; if test $? -ne 0 ; then echo "FAILED mktemp"; exit -1; fi; cp $BUILDDIR/../data/$ANTHY_SCHEMA_FILE $SCHEMA_TMPDIR; glib-compile-schemas $SCHEMA_TMPDIR; if test $? -ne 0 ; then echo "FAILED glib-compile-schemas $SCHEMA_TMPDIR"; exit -1; fi; if test ! -f $SCHEMA_TMPDIR/gschemas.compiled ; then echo "Not found $SCHEMA_TMPDIR/gschemas.compiled"; exit -1; fi; ls $BUILDDIR/../gir/Anthy*.typelib > /dev/null; if test $? -ne 0 ; then echo "Not found $BUILDDIR/../gir/Anthy*.typelib"; exit -1; fi; } run_ibus_daemon() { ibus-daemon --daemonize --verbose; sleep 1; SUSER=`echo "$USER" | cut -c 1-7`; ps -ef | grep "$SUSER" | grep ibus | grep -v grep; } run_test_suite() { export GSETTINGS_SCHEMA_DIR=$SCHEMA_TMPDIR; export GI_TYPELIB_PATH=$BUILDDIR/../gir; LD_LIBRARY_PATH=$BUILDDIR/../gir/.libs; export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$BUILDDIR/../gir; export GTK_IM_MODULE=ibus; for i in 3 2 ; do echo "#### Starting Python$i API test $RUN_ARGS"; env IBUS_ANTHY_ENGINE_PATH=$SRCDIR/../engine/python$i \ IBUS_ANTHY_SETUP_PATH=$SRCDIR/../setup/python$i \ python$i -u $SRCDIR/anthytest.py $RUN_ARGS; if test $? -ne 0 ; then exit -1; fi; if test x$FORCE_TEST = x ; then rm -r $HOME/.anthy; rm -r $HOME/.config/anthy; fi; done; } finit() { rm -rf $SCHEMA_TMPDIR; ibus exit; } main() { parse_args $@; init_environment; run_ibus_daemon; run_test_suite; finit; } main $@; ibus-anthy-1.5.11/tests/test-console.sh000077500000000000000000000135041346647371500200250ustar00rootroot00000000000000#!/bin/sh # vim:set noet ts=4: # # ibus-anthy - The Anthy engine for IBus # # Copyright (c) 2018 Takao Fujiwara # Copyright (c) 2018 Red Hat, Inc. # # 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. # This test runs /usr/share/ibus-anthy/engine/engine.py after install anthy PROGNAME=`basename $0`; VERSION=0.1; DISPLAY=:99.0; BUILDDIR="."; SRCDIR="."; HAVE_GRAPHICS=1; DESKTOP_COMMAND="gnome-session"; PYTHON="python3"; PID_XORG=0; PID_GNOME_SESSION=0; FORCE_TEST=""; RUN_ARGS="--exit"; usage() { echo -e \ "This test runs /usr/share/ibus-anthy/engine/engine.py after install anthy\n" \ "$PROGNAME [OPTIONSโ€ฆ]\n" \ "\n" \ "OPTIONS:\n" \ "-h, --help This help\n" \ "-v, --version Show version\n" \ "-b, --builddir=BUILDDIR Set the BUILDDIR\n" \ "-s, --srcdir=SOURCEDIR Set the SOURCEDIR\n" \ "-c, --no-graphics Use Xvfb instead of Xorg\n" \ "-p, --python=PATH Use the PATH of python2 or python3\n" \ "-d, --desktop=DESKTOP Run DESTKTOP. The default is gnome-session\n"\ "-f, --force Run test suite forcibly\n" \ "" } parse_args() { # This is GNU getopt. "sudo port getopt" in BSD? ARGS=`getopt -o hvb:s:cp:d:f --long help,version,builddir:,srcdir:,no-graphics,python:,desktop:,force \ -- "$@"`; eval set -- "$ARGS" while [ 1 ] ; do case "$1" in -h | --help ) usage; exit 0;; -v | --version ) echo -e "$VERSION"; exit 0;; -b | --builddir ) BUILDDIR="$2"; shift 2;; -s | --srcdir ) SRCDIR="$2"; shift 2;; -c | --no-graphics ) HAVE_GRAPHICS=0; shift;; -p | --python ) PYTHON="$2"; shift 2;; -d | --desktop ) DESKTOP_COMMAND="$2"; shift 2;; -f | --force ) FORCE_TEST="1"; shift;; -- ) shift; break;; * ) usage; exit 1;; esac; done; } init_desktop() { if test x$FORCE_TEST != x ; then RUN_ARGS="$RUN_ARGS --force"; fi; if test ! -f $HOME/.config/gnome-initial-setup-done ; then if test ! -f /var/lib/AccountsService/users/$USER ; then mkdir -p /var/lib/AccountsService/users cat >> /var/lib/AccountsService/users/$USER << _EOF [User] Language=ja_JP.UTF-8 XSession=gnome SystemAccount=false _EOF fi mkdir -p $HOME/.config touch $HOME/.config/gnome-initial-setup-done fi # Prevent from launching a XDG dialog XDG_LOCALE_FILE="$HOME/.config/user-dirs.locale" if test -f $XDG_LOCALE_FILE ; then XDG_LANG_ORIG=`cat $XDG_LOCALE_FILE` XDG_LANG_NEW=`echo $LANG | sed -e 's/\(.*\)\..*/\1/'` if [ "$XDG_LANG_ORIG" != "$XDG_LANG_NEW" ] ; then echo "Overriding XDG locale $XDG_LANG_ORIG with $XDG_LANG_NEW" echo "$XDG_LANG_NEW" > $XDG_LOCALE_FILE fi fi } run_dbus_daemon() { a=`ps -ef | grep dbus-daemon | grep "\-\-system" | grep -v session | grep -v grep` if test x"$a" = x ; then eval `dbus-launch --sh-syntax` fi SUSER=`echo "$USER" | cut -c 1-7`; a=`ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | grep session | grep -v grep` if test x"$a" = x ; then systemctl --user start dbus export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus fi systemctl --user status dbus | col -b ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | egrep 'session|system' | grep -v grep systemctl --user show-environment | col -b } run_desktop() { if test $HAVE_GRAPHICS -eq 1 ; then /usr/libexec/Xorg.wrap -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xorg.log -config ./xorg.conf -configdir . $DISPLAY & else /usr/bin/Xvfb $DISPLAY -noreset +extension GLX +extension RANDR +extension RENDER -screen 0 1280x1024x24 & fi; PID_XORG=$!; sleep 1; export DISPLAY=$DISPLAY; $DESKTOP_COMMAND & PID_GNOME_SESSION=$!; sleep 30; if test "$DESKTOP_COMMAND" != "gnome-session" ; then ibus-daemon --daemonize --verbose; sleep 1; fi } run_test_suite() { rm -rf $HOME/.anthy; rm -rf $HOME/.config/anthy; cd `dirname $0`; echo "#### Starting $PYTHON API test $RUN_ARGS"; export GTK_IM_MODULE=ibus $PYTHON -u $SRCDIR/anthytest.py $RUN_ARGS; if test $? -ne 0 ; then exit -1; fi; if test x$FORCE_TEST = x ; then for ANTHY_CONFIG in ".anthy" ".config/anthy" ; do if test -d $HOME/$ANTHY_CONFIG ; then rm -r $HOME/$ANTHY_CONFIG; fi; done; fi; } finit() { if "test $DESKTOP_COMMAND" != "gnome-session" ; then ibus exit; fi; kill $PID_GNOME_SESSION $PID_XORG; } main() { parse_args $@; init_desktop; run_dbus_daemon; run_desktop; run_test_suite; finit; } main $@;