+++ /dev/null
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 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 Library 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.
-\f
- 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.)
-\f
-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.
-\f
- 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.
-\f
- 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
-\f
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
locale_set = sk_SK
LOCALES_DIR = posix-locales
-UKEYBOARD_DIR = ukeyboard
all:
mkdir -p $(LOCALES_DIR)/build
done
$(MAKE) -C po
- CFLAGS="$(CFLAGS) -DHAVE_MAEMO5" $(MAKE) -C $(UKEYBOARD_DIR)
install: all
install -d $(DESTDIR)/usr/lib/locale/
mv $(LOCALES_DIR)/build/* $(DESTDIR)/usr/lib/locale/
$(MAKE) -C po DESTDIR=$(DESTDIR) install
- CFLAGS="$(CFLAGS) -DHAVE_MAEMO5" $(MAKE) -C $(UKEYBOARD_DIR) DESTDIR=$(DESTDIR) install
clean:
rm -rf $(LOCALES_DIR)/build
$(MAKE) -C po clean
- $(MAKE) -C $(UKEYBOARD_DIR) clean
distclean:
$(MAKE) clean
Source: slovak-l10n
-Section: user/other
+Section: user/system
Priority: optional
Maintainer: Roman Moravcik <roman.moravcik@gmail.com>
Build-Depends: debhelper (>= 4.0.0), libosso-dev, libosso-gnomevfs2-dev, libhildonfm2-dev, hildon-control-panel-dev, libc6 (>> 2.5.0), locales (>= 2.5.0)
Standards-Version: 3.6.1
Package: slovak-l10n
-Architecture: any
-Depends: ${shlibs:Depends}
-Replaces: ukeyboard
+Architecture: all
+Depends: ${shlibs:Depends}, ukeyboard (>= 2.0), posix-locales-sksk
Description: Unofficial slovak support for Maemo5
- Unofficial slovak support for Maemo5 including on-screen,
- HW keyboard layouts, Slovak locale and transation of UI.
+ Unofficial slovak support for Maemo5 including Slovak locale
+ and transation of UI.
XB-Maemo-Display-Name: Slovak localization
XB-Maemo-Icon-26:
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c
VzfPYeXmNvrCwoKHvLw7pZPipYvhXEfGldgNA+AyEFMnE31lFS2xIqbu2wEf
f5rzhl8XAAy79MRpQTSe6SE3OoDhEPJl568rgHyW/nNUA9AANAANQAPQ0tLS
0tLS0tLSGnH6B9nT06h6DhFlAAAAAElFTkSuQmCC
+
+Package: posix-locales-sksk
+Architecture: all
+Depends: libc6 (>> 2.5.0)
+Description: Slovak POSIX locales for Fremantle
+ Package provides Slovak locales for Fremantle.
-This package was debianized by Roman Moravcik <roman.moravcik@gmail.com> on Thu,
-3 Sep 2009 17:38:11 +0200.
-
-po:
# Copyright (C) 2006-2007 Nokia Corporation. All rights reserved.
#
# Contact: Mohammed Hassan <mohammed.2.hassan@nokia.com>
# POSSIBILITY OF SUCH DAMAGE.
#
#
-
-posix-locales:
----------------------------------------------------------------------
-Copyright (c) 2005 Nokia Corporation.
-
-posix-locales data is licensed under the terms of the GNU LGPL.
----------------------------------------------------------------------
-
-ukeyboard:
-Copyright:
-
-2007-2008, Jiri Benc <jbenc@upir.cz>
-
-License:
-
-GPLv2
01_posix-locales_sk.dpatch
-02_ukeyboard_installonly_sk.dpatch
-
+++ /dev/null
-#! /bin/sh /usr/share/dpatch/dpatch-run
-## 02_ukeyboard_installonly_sk.dpatch
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: No description.
-
-@DPATCH@
-diff -Naur slovak-l10n/ukeyboard/keyboards/Makefile slovak-l10n/ukeyboard/keyboards/Makefile
---- slovak-l10n/ukeyboard/keyboards/Makefile 2008-12-30 13:49:12.000000000 +0100
-+++ slovak-l10n/ukeyboard/keyboards/Makefile 2009-10-09 14:03:31.000000000 +0200
-@@ -1,16 +1,5 @@
- layouts = \
-- ar-lebanon.vkb \
-- be-by.vkb \
-- bg-bds.vkb \
-- bg-phonetic.vkb \
-- en-dvorak.vkb \
-- eo-qwerty.vkb \
-- he-qwerty.vkb \
-- hr-qwerty.vkb hr-qwertz.vkb \
-- hu-qwertz.vkb \
-- sk-qwerty.vkb sk-qwertz.vkb \
-- th-kedmanee.vkb \
-- tr-qwerty.vkb
-+ sk-qwerty.vkb sk-qwertz.vkb
-
- all: $(layouts)
-
-diff -Naur slovak-l10n/ukeyboard/Makefile slovak-l10n/ukeyboard/Makefile
---- slovak-l10n/ukeyboard/Makefile 2009-10-09 11:14:35.000000000 +0200
-+++ slovak-l10n/ukeyboard/Makefile 2009-10-09 14:03:15.000000000 +0200
-@@ -25,8 +25,6 @@
- $(MAKE) -C cpanel DESTDIR=$(DESTDIR) install
- $(MAKE) -C keyboards DESTDIR=$(DESTDIR) install
- $(MAKE) -C keyboards-scv DESTDIR=$(DESTDIR) install
-- install -d $(DESTDIR)/usr/share/icons/hicolor/26x26/apps
-- install -m 0644 ukeyboard.png $(DESTDIR)/usr/share/icons/hicolor/26x26/apps/
- install -d $(DESTDIR)/usr/share/X11/xkb/symbols/nokia_vndr
- install -m 0644 xkb/ukeyboard $(DESTDIR)/usr/share/X11/xkb/symbols/nokia_vndr/
-
--- /dev/null
+usr/lib/locale/sk_SK/*
\ No newline at end of file
--- /dev/null
+#!/bin/sh
+
+add_remove_language add sk_SK
+
+exit 0
--- /dev/null
+#!/bin/sh
+
+add_remove_language remove sk_SK
+
+exit 0
include /usr/share/dpatch/dpatch.make
-DESTDIR=$(CURDIR)/debian/slovak-l10n
+DESTDIR=$(CURDIR)/debian/tmp
configure: configure-stamp
configure-stamp:
dh_testroot
dh_installchangelogs
dh_installdocs
+ dh_install --sourcedir=debian/tmp
+ cp ./posix-locales/debian/copyright ./debian/posix-locales-sksk/usr/share/doc/posix-locales-sksk/copyright
+ dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
--- /dev/null
+usr/share/locale/sk_SK/LC_MESSAGES/*.mo
\ No newline at end of file
+++ /dev/null
-#!/bin/sh
-
-if ! grep -q ukeyboard /usr/share/X11/xkb/rules/base; then
- sed -i 's/^.*nokiarx44.*$/\0\n ukeyboard * = nokia_vndr\/ukeyboard(%l)/' /usr/share/X11/xkb/rules/base
-fi
-
-if [ -f /usr/share/applications/hildon-control-panel/cptextinput.desktop ]; then
- mv -f /usr/share/applications/hildon-control-panel/cptextinput.desktop /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed
-fi
-
-add_remove_language add sk_SK
-update-sudoers
-
-exit 0
+++ /dev/null
-#!/bin/sh
-
-sed -ni '/ukeyboard/!p' /usr/share/X11/xkb/rules/base
-
-if [ -f /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed ]; then
- mv -f /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed /usr/share/applications/hildon-control-panel/cptextinput.desktop
-fi
-
-add_remove_language remove sk_SK
-update-sudoers
-
-exit 0
+++ /dev/null
-Hámorszky Balázs <balihb@freepop.hu>
-Nickola Trupcheff <n.trupcheff@gmail.com>
-Paul Sweeney <paul@8-bitdesign.com>
-Michal Příhoda <michal@prihoda.net>
-Marcin Juszkiewicz <openembedded@haerwu.biz>
-Roman Moravčík <roman.moravcik@gmail.com>
-Ali Khadra <tyros99@yahoo.com>
-Ognian Samokovliyski <ogi@bg-id.com>
-Panu Tangchalermkul <panuta@gmail.com>
-Lovro Orešković <oreskovic@gmail.com>
-Jan Yenya Kasprzak <kas@fi.muni.cz>
-Matan Ziv-Av <matan@svgalib.org>
-Paweł Dyś <padys.pl@gmail.com>
-Darafei Praliaskouski <komzpa@gmail.com>
-Ethan S. <dragon788@gmail.com>
-Burak Ilgicioglu <ilgicioglu@gmail.com>
-Porfyras <porfyras@gmail.com>
+++ /dev/null
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 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 Library 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.
-\f
- 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.)
-\f
-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.
-\f
- 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.
-\f
- 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
-\f
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+++ /dev/null
-all: vkb_compiler ukeyboard-prefs keyboards keyboards-scv ukbdcreator
-
-ukeyboard-prefs:
- $(MAKE) -C cpanel
-
-vkb_compiler: vkb_compiler.o vkb_compiler_lib.o
- $(CC) -o $@ $+
-
-vkb_compiler.o: vkb_compiler.c vkb_compiler.h
- $(CC) -W -Wall -c -o $@ $<
-
-vkb_compiler_lib.o: vkb_compiler_lib.c vkb_compiler.h
- $(CC) -W -Wall -c -o $@ $<
-
-keyboards: vkb_compiler
- $(MAKE) -C keyboards
-
-keyboards-scv: vkb_compiler
- $(MAKE) -C keyboards-scv
-
-ukbdcreator: vkb_compiler_lib.o
- $(MAKE) -C ukbdcreator
-
-install: ukeyboard-prefs keyboards-scv
- $(MAKE) -C cpanel DESTDIR=$(DESTDIR) install
- $(MAKE) -C keyboards DESTDIR=$(DESTDIR) install
- $(MAKE) -C keyboards-scv DESTDIR=$(DESTDIR) install
- install -d $(DESTDIR)/usr/share/icons/hicolor/26x26/apps
- install -m 0644 ukeyboard.png $(DESTDIR)/usr/share/icons/hicolor/26x26/apps/
- install -d $(DESTDIR)/usr/share/X11/xkb/symbols/nokia_vndr
- install -m 0644 xkb/ukeyboard $(DESTDIR)/usr/share/X11/xkb/symbols/nokia_vndr/
-
-clean:
- $(MAKE) -C cpanel clean
- $(MAKE) -C keyboards clean
- $(MAKE) -C keyboards-scv clean
- $(MAKE) -C ukbdcreator clean
- rm -f vkb_compiler *.o core
- rm -rf build
-
-distclean:
- $(MAKE) clean
- rm -f *-stamp
- rm -rf debian/ukeyboard debian/ukbdcreator debian/files
+++ /dev/null
-** Keyboard layout compiler for Nokia N800 and N810 (OS2008) **
-
-Distributed under GPLv2.
-(Except doc/vkb-format-v3, which is placed into public domain; see the file
-for more info.)
-
-Based on the following sources:
-- source code of gen_vkb tool for Nokia 770
-- reverse engineering of .vkb data files from Nokia N800 and N810
-
-Note that the input format is different than the one used by the gen_vkb
-tool. This tool uses a plain text file which is (contrary to XML) much more
-easier to write when creating the layout by hand.
-
-See doc/howto for instructions how to create a custom on-screen keyboard layout.
-Look at xkb/ukeyboard if you want to create a custom sliding keyboard layout.
+++ /dev/null
-libukeyboard-prefs.so: prefs.o hw.o onscreen.o lang.o langset.o about.o
- $(CC) -shared -o $@ $+
-
-add_cflags = `pkg-config --cflags gtk+-2.0 hildon-1 gconf-2.0 libosso`
-
-prefs.o: prefs.c
- $(CC) -c -W -Wall `pkg-config --cflags gtk+-2.0 gconf-2.0 hildon-control-panel libosso` -o $@ $<
-
-hw.o: hw.c
- $(CC) -c -W -Wall $(add_cflags) -o $@ $<
-
-onscreen.o: onscreen.c
- $(CC) -c -W -Wall $(add_cflags) -o $@ $<
-
-lang.o: lang.c
- $(CC) -c -W -Wall $(add_cflags) -o $@ $<
-
-langset.o: langset.c
- $(CC) -c -W -Wall $(add_cflags) -o $@ $<
-
-about.o: about.c about.inc
- $(CC) -c -W -Wall $(add_cflags) -o $@ $<
-
-about.inc: about.inc.in
-# for f in ../keyboards/*; do \
-# grep '^[ \t]*#[ \t]*\(title:\|author:\)' $$f | \
-# sed -e 's/</\</g' -e 's/>/\>/g' -e 's/^.*title:[ \t]*\(.*\)/<i>\1:<\/i>\\n\\/' -e 's/^.*author:[ \t]*\(.*\)/\t\1\\n\\/' ; \
-# done > about.data
- sed -e 's/</\</g' -e 's/>/\>/g' -e 's/$$/\\n\\/' < ../CREDITS > about.data
- sed -e s/@@VERSION@@/`cat ../VERSION`/g -e '/@@CONTRIB@@/r about.data' -e '/@@CONTRIB@@/d' < about.inc.in > about.inc
-
-cppluginlibdir = $(DESTDIR)`pkg-config hildon-control-panel --variable=pluginlibdir`
-cpplugindeskdir = $(DESTDIR)`pkg-config hildon-control-panel --variable=plugindesktopentrydir`
-
-install: libukeyboard-prefs.so
- install -d $(cppluginlibdir) $(cpplugindeskdir)
- install libukeyboard-prefs.so $(cppluginlibdir)
- install -m 644 ukeyboard-prefs.desktop $(cpplugindeskdir)
- install -d $(DESTDIR)/usr/libexec $(DESTDIR)/etc/sudoers.d
- install ukeyboard-set $(DESTDIR)/usr/libexec
- install -m 644 ukeyboard.sudoers $(DESTDIR)/etc/sudoers.d
-
-clean:
- rm -f *.o libukeyboard-prefs.so about.inc about.data core
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon.h>
-#include <libosso.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "hw.h"
-
-static GtkWidget *start(GConfClient *client, GtkWidget *win, void **data)
-{
- GtkWidget *scroll;
- GtkWidget *label;
-
- (void)client; (void)win;
-
- scroll = hildon_pannable_area_new();
-
- label = gtk_label_new(NULL);
- gtk_label_set_markup(GTK_LABEL(label),
-#include "about.inc"
- );
- hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA(scroll), label);
- *data = NULL;
- return GTK_WIDGET(scroll);
-}
-
-void prefs_about_init(struct prefs *prefs)
-{
- prefs->start = start;
- prefs->action = NULL;
- prefs->stop = NULL;
- prefs->name = "About";
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _ABOUT_H
-#define _ABOUT_H
-
-void prefs_about_init(struct prefs *prefs);
-
-#endif
+++ /dev/null
-"\
-<span weight=\"bold\" foreground=\"blue\">ukeyboard @@VERSION@@</span>\n\
-<span foreground=\"blue\">http://upir.cz/maemo/keyboards</span>\n\
-Distributed under GPLv2.\n\
-Author: Jiří Benc <jbenc@upir.cz>\n\
- Roman Moravčík <roman.moravcik@gmail.com>\n\
-\n\
-<b>Contributors:</b>\n\
-@@CONTRIB@@
-"
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon-caption.h>
-#include <hildon/hildon.h>
-#include <libosso.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "hw.h"
-
-#define GETTEXT_PACKAGE "osso-applet-textinput"
-#include <glib/gi18n-lib.h>
-
-struct layout {
- gchar *model;
- gchar *layout;
- gchar *name;
-};
-
-struct data {
- GList *layouts;
- HildonTouchSelector *combo;
-};
-
-static char *strip(char *s)
-{
- while (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')
- s++;
- return s;
-}
-
-static GList *get_layouts(gchar *path, gchar *model, GList *list)
-{
- FILE *f;
- char *buf, *s, *s2;
- gchar *layout = NULL;
- struct layout *lay;
-
- f = fopen(path, "r");
- if (!f)
- return list;
- buf = g_malloc(512);
- if (!buf) {
- fclose(f);
- return list;
- }
- while (fgets(buf, 512, f)) {
- s = strip(buf);
- if (!strncmp(s, "xkb_symbols", 11)) {
- if (layout) {
- g_free(layout);
- layout = NULL;
- }
- s = strip(s + 11);
- if (*s != '"')
- continue;
- s++;
- s2 = strchr(s, '"');
- if (!s2)
- continue;
- *s2 = '\0';
- layout = g_strdup(s);
- } else if (!strncmp(s, "name", 4) && layout) {
- s = strip(s + 4);
- if (*s != '[')
- continue;
- s2 = strchr(s, ']');
- if (!s2)
- continue;
- s = strip(s2 + 1);
- if (*s != '=')
- continue;
- s = strip(s + 1);
- if (*s != '"')
- continue;
- s++;
- s2 = strchr(s, '"');
- if (!s2)
- continue;
- *s2 = '\0';
- lay = g_malloc(sizeof(struct layout));
- lay->model = g_strdup(model);
- lay->layout = layout;
- lay->name = g_strdup(s);
- layout = NULL;
- list = g_list_append(list, lay);
- }
- }
- fclose(f);
- return list;
-}
-
-static void free_layouts(GList *list)
-{
- GList *item;
- struct layout *lay;
-
- for (item = list; item; item = g_list_next(item)) {
- lay = item->data;
- g_free(lay->model);
- g_free(lay->layout);
- g_free(lay->name);
- g_free(lay);
- }
- g_list_free(list);
-}
-
-static GtkWidget *start(GConfClient *client, GtkWidget *win, void **data)
-{
- struct data *d;
- GList *item;
- gchar *omodel, *olayout;
- struct layout *lay;
- unsigned i;
-
- GtkWidget *button;
-
- (void)win;
-
- if (!internal_kbd) {
- *data = NULL;
- return NULL;
- }
-
- d = g_malloc(sizeof(struct data));
-
- omodel = get_str(client, "int_kb_model");
- olayout = get_str(client, "int_kb_layout");
- d->layouts = get_layouts("/usr/share/X11/xkb/symbols/nokia_vndr/rx-51", "nokiarx51", NULL);
- d->layouts = get_layouts("/usr/share/X11/xkb/symbols/nokia_vndr/ukeyboard", "ukeyboard", d->layouts);
-
- d->combo = HILDON_TOUCH_SELECTOR(hildon_touch_selector_new_text());
-
- button = hildon_picker_button_new(HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
- hildon_button_set_title(HILDON_BUTTON(button), _("tein_fi_keyboard_layout"));
- hildon_picker_button_set_selector(HILDON_PICKER_BUTTON (button), d->combo);
- hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
- hildon_button_set_title_alignment(HILDON_BUTTON(button), 0.0, 0.5);
- hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
-
- for (item = d->layouts, i = 0; item; item = g_list_next(item), i++) {
- lay = item->data;
- hildon_touch_selector_append_text(d->combo, lay->name);
- if (omodel && olayout && !strcmp(lay->model, omodel) && !strcmp(lay->layout, olayout))
- hildon_touch_selector_set_active(d->combo, 0, i);
- }
-
- g_free(olayout);
- g_free(omodel);
-
- *data = d;
-
- gtk_widget_show(button);
-
- return button;
-}
-
-static void action(GConfClient *client, void *data)
-{
- struct data *d = data;
- struct layout *lay;
- int res;
-
- if (!d)
- return;
- res = hildon_touch_selector_get_active(d->combo, 0);
- if (res >= 0) {
- lay = g_list_nth_data(d->layouts, res);
- if (lay) {
- set_str(client, "int_kb_model", lay->model);
- set_str(client, "int_kb_layout", lay->layout);
- }
- }
-}
-
-static void stop(GConfClient *client, void *data)
-{
- struct data *d = data;
-
- (void)client;
- if (d) {
- free_layouts(d->layouts);
- g_free(d);
- }
-}
-
-void prefs_hw_init(struct prefs *prefs)
-{
- prefs->start = start;
- prefs->action = action;
- prefs->stop = stop;
- prefs->name = "Hardware";
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _HW_H
-#define _HW_H
-
-void prefs_hw_init(struct prefs *prefs);
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon-caption.h>
-#include <hildon/hildon-banner.h>
-#include <hildon/hildon.h>
-#include <libosso.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "lang.h"
-#include "langset.h"
-
-#define GETTEXT_PACKAGE "osso-applet-textinput"
-#include <glib/gi18n-lib.h>
-
-struct langlink {
- gchar *src;
- gchar *dest;
-};
-
-struct data {
- GConfClient *client;
- GtkWidget *win;
- GList *langs;
- GList *langlinks;
- HildonCheckButton *word_compl;
- HildonCheckButton *auto_cap;
- HildonCheckButton *sp_after;
- HildonPickerButton *sec_dictsel;
- HildonTouchSelector *langsel[2];
- HildonTouchSelector *dictsel[2];
- HildonCheckButton *dual;
- int num_langs;
-};
-
-static gchar *get_lang(GConfClient *client, int n)
-{
- char *tmp = g_strdup_printf("/apps/osso/inputmethod/hildon-im-languages/language-%d", n);
- gchar *res;
-
- res = gconf_client_get_string(client, tmp, NULL);
- g_free(tmp);
- return res;
-}
-
-static void set_lang(GConfClient *client, int n, gchar *val)
-{
- char *tmp = g_strdup_printf("/apps/osso/inputmethod/hildon-im-languages/language-%d", n);
-
- gconf_client_set_string(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-static gchar *read_vkb_str(FILE *f)
-{
- gchar *res;
- uint8_t len;
-
- if (!fread(&len, 1, 1, f) || !len)
- return NULL;
- res = g_malloc(len + 1);
- if (fread(res, 1, len, f) != len) {
- g_free(res);
- return NULL;
- }
- res[len] = '\0';
- return res;
-}
-
-static struct lang *read_vkb(gchar *path)
-{
- FILE *f;
- struct lang *res = NULL;
- uint8_t ver;
- gchar *desc, *code;
-
- f = fopen(path, "r");
- if (!f)
- return NULL;
- /* version */
- if (!fread(&ver, 1, 1, f) || ver != 1)
- goto no;
- /* number of sections */
- if (!fread(&ver, 1, 1, f))
- goto no;
- /* descriptive name */
- desc = read_vkb_str(f);
- if (!desc)
- goto no;
- /* locale name */
- code = read_vkb_str(f);
- if (!code) {
- g_free(desc);
- goto no;
- }
-
- res = g_malloc(sizeof(struct lang));
- res->desc = desc;
- res->code = code;
-no:
- fclose(f);
- return res;
-}
-
-static GList *add_lang_link(gchar *path, gchar *dest, GList *list)
-/* 'dest' has to be allocated; it's eaten by this function! */
-{
- struct langlink *langlink;
- gchar *link, *tmp;
-
- link = g_file_read_link(path, NULL);
- if (link) {
- langlink = g_malloc(sizeof(struct langlink));
- langlink->dest = dest;
- tmp = strrchr(link, '/');
- langlink->src = tmp ? tmp + 1 : link;
- tmp = strrchr(link, '.');
- if (tmp)
- *tmp = '\0';
- langlink->src = g_strdup(langlink->src);
- g_free(link);
- list = g_list_append(list, langlink);
- }
- return list;
-}
-
-static GList *get_langs(gchar *path, GList **langlinks, GList *list)
-{
- GDir *d;
- const gchar *fname;
- gchar *fullpath, *shortpath, *tmp;
- struct lang *lang;
-
- d = g_dir_open(path, 0, NULL);
- if (!d)
- return list;
- while ((fname = g_dir_read_name(d))) {
- if (!g_str_has_suffix(fname, ".vkb"))
- continue;
- fullpath = g_strjoin("/", path, fname, NULL);
- shortpath = g_strdup(fname);
- tmp = strrchr(shortpath, '.');
- if (tmp)
- *tmp = '\0';
- if (langlinks && g_file_test(fullpath, G_FILE_TEST_IS_SYMLINK)) {
- *langlinks = add_lang_link(fullpath, shortpath, *langlinks);
- g_free(fullpath);
- continue;
- }
- lang = read_vkb(fullpath);
- if (lang) {
- lang->fname = shortpath;
- lang->ext = !langlinks;
- list = g_list_append(list, lang);
- } else
- g_free(shortpath);
- g_free(fullpath);
- }
- g_dir_close(d);
- return list;
-}
-
-static struct lang *get_def_lang(gchar *code, GList *langs, GList *langlinks)
-{
- GList *item;
- struct lang *lang;
- struct langlink *langlink;
-
- if (!code || !*code)
- return NULL;
- for (item = langs; item; item = g_list_next(item)) {
- lang = item->data;
- if (!strcmp(lang->fname, code))
- return lang;
- }
- if (langlinks)
- for (item = langlinks; item; item = g_list_next(item)) {
- langlink = item->data;
- if (!strcmp(langlink->dest, code))
- return get_def_lang(langlink->src, langs, NULL);
- }
- return NULL;
-}
-
-static void free_langs(GList *list)
-{
- GList *item;
- struct lang *lang;
-
- for (item = list; item; item = g_list_next(item)) {
- lang = item->data;
- g_free(lang->fname);
- g_free(lang->desc);
- g_free(lang->code);
- g_free(lang);
- }
- g_list_free(list);
-}
-
-static void free_langlinks(GList *list)
-{
- GList *item;
- struct langlink *langlink;
-
- for (item = list; item; item = g_list_next(item)) {
- langlink = item->data;
- g_free(langlink->src);
- g_free(langlink->dest);
- g_free(langlink);
- }
- g_list_free(list);
-}
-
-static void fill_langsel(HildonTouchSelector *combo, GList *langs, struct lang *deflang, gboolean empty)
-{
- GList *item;
- struct lang *lang;
- unsigned i;
-
- for (item = langs, i = 0; item; item = g_list_next(item), i++) {
- lang = item->data;
- hildon_touch_selector_append_text(combo, lang->desc);
- if (lang == deflang)
- hildon_touch_selector_set_active(combo, 0, i);
- }
- if (empty) {
- hildon_touch_selector_append_text(combo, _("tein_fi_not_in_use"));
- if (!deflang)
- hildon_touch_selector_set_active(combo, 0, i);
- }
-}
-
-static void sensitivity_langsel(struct data *d)
-{
- gboolean sens;
-
- sens = (hildon_touch_selector_get_active(d->langsel[1], 0) < d->num_langs);
- gtk_widget_set_sensitive(GTK_WIDGET(d->dual), sens);
-
- if (sens)
- gtk_widget_show(GTK_WIDGET(d->sec_dictsel));
- else
- gtk_widget_hide(GTK_WIDGET(d->sec_dictsel));
-}
-
-static void verify_langsel(HildonTouchSelector *combo, gint column, struct data *d)
-{
- struct lang *lang[2];
- int res;
- unsigned i;
-
- (void)combo;
- for (i = 0; i < 2; i++) {
- res = hildon_touch_selector_get_active(d->langsel[i], column);
- lang[i] = (res >= 0) ? g_list_nth_data(d->langs, res) : NULL;
- }
- if (lang[0] && lang[1] && !strcmp(lang[0]->code, lang[1]->code)) {
- hildon_banner_show_information(d->win, "gtk-dialog-error",
- "Impossible combination of languages");
- hildon_touch_selector_set_active(d->langsel[1], column, d->num_langs);
- }
- sensitivity_langsel(d);
-}
-
-static GtkWidget *start(GConfClient *client, GtkWidget *win, void **data)
-{
- struct data *d;
- gchar *tmp;
- GtkWidget *vbox, *table;
- struct lang *lang;
- unsigned i;
-
- d = g_new0(struct data, 1);
- d->client = client;
- d->win = win;
-
- d->langs = get_langs("/usr/share/keyboards", &d->langlinks, NULL);
- d->langs = get_langs("/usr/share/ukeyboard", NULL, d->langs);
- d->num_langs = g_list_length(d->langs);
-
- vbox = gtk_vbox_new(FALSE, 0);
-
- d->word_compl = HILDON_CHECK_BUTTON(hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT));
- gtk_button_set_label (GTK_BUTTON (d->word_compl), _("tein_fi_settings_word_completion"));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(d->word_compl), TRUE, TRUE, 0);
-
- d->auto_cap = HILDON_CHECK_BUTTON(hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT));
- gtk_button_set_label (GTK_BUTTON (d->auto_cap), _("tein_fi_settings_auto_capitalization"));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(d->auto_cap), TRUE, TRUE, 0);
-
- d->sp_after = HILDON_CHECK_BUTTON(hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT));
- gtk_button_set_label (GTK_BUTTON (d->sp_after), _("tein_fi_settings_space_after_word"));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(d->sp_after), TRUE, TRUE, 0);
-
- table = gtk_table_new(2, 2, TRUE);
- gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
-
- for (i = 0; i < 2; i++) {
- GtkWidget *button;
- gchar *code;
-
- d->langsel[i] = HILDON_TOUCH_SELECTOR(hildon_touch_selector_new_text());
- code = get_lang(client, i);
- fill_langsel(d->langsel[i], d->langs, get_def_lang(code, d->langs, d->langlinks), i == 1);
- g_signal_connect(G_OBJECT(d->langsel[i]), "changed", G_CALLBACK(verify_langsel), d);
-
- button = hildon_picker_button_new(HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
- hildon_button_set_title(HILDON_BUTTON(button), i == 0 ? _("tein_fi_primary_language") : _("tein_fi_secondary_language"));
- hildon_picker_button_set_selector(HILDON_PICKER_BUTTON (button), d->langsel[i]);
- hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
- hildon_button_set_title_alignment(HILDON_BUTTON(button), 0.0, 0.5);
- hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
- gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, i, i + 1);
-
- d->dictsel[i] = HILDON_TOUCH_SELECTOR(hildon_touch_selector_new_text());
- tmp = get_l_str(client, code, "dictionary");
- lang = get_def_lang(code, d->langs, d->langlinks);
-
- /* If tmp is NULL (i.e. the gconf key is unset), try to use the same
- * dictionary as the keyboard. But don't do this if the keyboard is
- * from our package. */
- fill_dict(d->dictsel[i], d->langs, (tmp || (lang && lang->ext)) ? tmp : code);
- if (tmp)
- g_free(tmp);
-
- button = hildon_picker_button_new(HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
- hildon_button_set_title(HILDON_BUTTON(button), _("tein_fi_settings_dictionary"));
- hildon_picker_button_set_selector(HILDON_PICKER_BUTTON (button), d->dictsel[i]);
- hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
- hildon_button_set_title_alignment(HILDON_BUTTON(button), 0.0, 0.5);
- hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
- gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, i, i + 1);
-
- if (i == 1)
- d->sec_dictsel = HILDON_PICKER_BUTTON(button);
- else {
- hildon_check_button_set_active(d->word_compl, get_l_bool(client, code, "word-completion"));
- hildon_check_button_set_active(d->auto_cap, get_l_bool(client, code, "auto-capitalisation"));
- hildon_check_button_set_active(d->sp_after, get_l_bool(client, code, "insert-space-after-word"));
- }
-
- if (code)
- g_free(code);
- }
-
- d->dual = HILDON_CHECK_BUTTON(hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT));
- hildon_check_button_set_active(d->dual, get_bool(client, "dual-dictionary"));
- gtk_button_set_label (GTK_BUTTON (d->dual), _("tein_fi_dual_dictionary_use"));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(d->dual), TRUE, TRUE, 0);
-
- gtk_widget_show_all(vbox);
-
- sensitivity_langsel(d);
-
- *data = d;
-
- return vbox;
-}
-
-static void action(GConfClient *client, void *data)
-{
- struct data *d = data;
- struct lang *lang;
- gchar *tmp;
- int res;
- unsigned i;
-
- for (i = 0; i < 2; i++) {
- struct lang *dict;
-
- res = hildon_touch_selector_get_active(d->langsel[i], 0);
- if (res < 0)
- continue;
- lang = g_list_nth_data(d->langs, res);
- if (lang) {
- if (lang->ext) {
- tmp = g_strdup_printf("sudo /usr/libexec/ukeyboard-set %s %s", lang->fname, lang->code);
- if (system(tmp))
- hildon_banner_show_information(d->win, "gtk-dialog-warning",
- "Setting failed");
- g_free(tmp);
- }
- /* When the newly set layout has the same lang code as the
- * previous one (but the underlaying file changed), setting
- * the same value won't trigger layout reload. Workaround
- * that by setting "en_GB" lang code first. */
- set_lang(client, i, "en_GB");
- set_lang(client, i, lang->code);
-
- set_l_bool(client, lang->code, "auto-capitalisation", hildon_check_button_get_active(d->auto_cap));
- set_l_bool(client, lang->code, "word-completion", hildon_check_button_get_active(d->word_compl));
- set_l_bool(client, lang->code, "insert-space-after-word", hildon_check_button_get_active(d->sp_after));
-
- res = hildon_touch_selector_get_active(d->dictsel[i], 0);
- if (res >= 0)
- dict = g_list_nth_data(d->langs, res);
-
- if (dict && !dict->ext)
- set_l_str(client, lang->code, "dictionary", dict->code);
- else
- set_l_str(client, lang->code, "dictionary", "");
- } else
- set_lang(client, i, "");
- }
- set_bool(client, "dual-dictionary", hildon_check_button_get_active(d->dual));
-}
-
-static void stop(GConfClient *client, void *data)
-{
- struct data *d = data;
-
- (void)client;
-
- free_langs(d->langs);
- free_langlinks(d->langlinks);
- g_free(d);
-}
-
-void prefs_lang_init(struct prefs *prefs)
-{
- prefs->start = start;
- prefs->action = action;
- prefs->stop = stop;
- prefs->name = "Languages";
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _LANG_H
-#define _LANG_H
-
-void prefs_lang_init(struct prefs *prefs);
-
-struct lang {
- gchar *fname;
- gchar *desc;
- gchar *code;
- gboolean ext;
-};
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon-caption.h>
-#include <hildon/hildon.h>
-#include <libosso.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "lang.h"
-#include "langset.h"
-
-#define GETTEXT_PACKAGE "osso-applet-textinput"
-#include <glib/gi18n-lib.h>
-
-#define L_CONF_DIR "/apps/osso/inputmethod/hildon-im-languages"
-
-gboolean get_l_bool(GConfClient *client, char *lang, char *key)
-{
- char *tmp = g_strjoin("/", L_CONF_DIR, lang, key, NULL);
- gboolean res;
-
- res = gconf_client_get_bool(client, tmp, NULL);
- g_free(tmp);
- return res;
-}
-
-void set_l_bool(GConfClient *client, char *lang, char *key, gboolean val)
-{
- char *tmp = g_strjoin("/", L_CONF_DIR, lang, key, NULL);
-
- g_debug("%s %d\n", tmp, val);
-
- gconf_client_set_bool(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-gchar *get_l_str(GConfClient *client, char *lang, char *key)
-{
- char *tmp = g_strjoin("/", L_CONF_DIR, lang, key, NULL);
- GConfValue *val;
- gchar *res;
-
- val = gconf_client_get_without_default(client, tmp, NULL);
- g_free(tmp);
- if (!val)
- return NULL;
- if (val->type != GCONF_VALUE_STRING) {
- gconf_value_free(val);
- return NULL;
- }
- res = g_strdup(gconf_value_get_string(val));
- gconf_value_free(val);
- return res;
-}
-
-void set_l_str(GConfClient *client, char *lang, char *key, gchar *val)
-{
- char *tmp = g_strjoin("/", L_CONF_DIR, lang, key, NULL);
-
- gconf_client_set_string(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-void fill_dict(HildonTouchSelector *combo, GList *langs, gchar *deflang)
-{
- GList *item;
- struct lang *lang;
- unsigned i;
-
- for (item = langs, i = 0; item; item = g_list_next(item)) {
- lang = item->data;
- if (lang->ext)
- continue;
- hildon_touch_selector_append_text(combo, lang->desc);
- if (deflang && !strcmp(lang->code, deflang))
- hildon_touch_selector_set_active(combo, 0, i);
- i++;
- }
- hildon_touch_selector_append_text(combo, _("tein_fi_word_completion_language_empty"));
- if (!deflang || !*deflang)
- hildon_touch_selector_set_active(combo, 0, i);
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _LANGSET_H
-#define _LANGSET_H
-
-gboolean get_l_bool(GConfClient *client, char *lang, char *key);
-void set_l_bool(GConfClient *client, char *lang, char *key, gboolean val);
-gchar *get_l_str(GConfClient *client, char *lang, char *key);
-void set_l_str(GConfClient *client, char *lang, char *key, gchar *val);
-void fill_dict(HildonTouchSelector *combo, GList *langs, gchar *deflang);
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon-caption.h>
-#include <hildon/hildon-controlbar.h>
-#include <hildon/hildon.h>
-#include <device_symbols.h>
-#include <libosso.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "onscreen.h"
-
-#define GETTEXT_PACKAGE "osso-applet-textinput"
-#include <glib/gi18n-lib.h>
-
-struct data {
- HildonCheckButton *use_finger;
-};
-
-static GtkWidget *start(GConfClient *client, GtkWidget *win, void **data)
-{
- struct data *d;
- GtkWidget *vbox;
-
- (void)win;
- d = g_new0(struct data, 1);
-
- vbox = gtk_vbox_new(FALSE, 0);
-
- d->use_finger = HILDON_CHECK_BUTTON(hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT));
- hildon_check_button_set_active(d->use_finger, get_bool(client, "use_finger_kb"));
- gtk_button_set_label (GTK_BUTTON (d->use_finger), _("tein_fi_use_virtual_keyboard"));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(d->use_finger), TRUE, TRUE, 0);
-
- *data = d;
-
- gtk_widget_show_all(vbox);
-
- return vbox;
-}
-
-static void action(GConfClient *client, void *data)
-{
- struct data *d = data;
-
- set_bool(client, "use_finger_kb", hildon_check_button_get_active(d->use_finger));
-}
-
-void prefs_onscreen_init(struct prefs *prefs)
-{
- prefs->start = start;
- prefs->action = action;
- prefs->stop = NULL;
- prefs->name = internal_kbd ? "On-screen" : "General";
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _ONSCREEN_H
-#define _ONSCREEN_H
-
-void prefs_onscreen_init(struct prefs *prefs);
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <libosso.h>
-#include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
-#include <hildon/hildon.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "prefs.h"
-#include "hw.h"
-#include "onscreen.h"
-#include "lang.h"
-#include "about.h"
-
-#define GETTEXT_PACKAGE "osso-applet-textinput"
-#include <glib/gi18n-lib.h>
-
-static init_func inits[] = { prefs_hw_init, prefs_onscreen_init, prefs_lang_init, prefs_about_init };
-#define PLUGINS (sizeof(inits) / sizeof(init_func))
-static struct prefs prefs[PLUGINS];
-
-gboolean internal_kbd;
-
-#define IM_CONF_DIR "/apps/osso/inputmethod"
-
-gboolean get_bool(GConfClient *client, char *key)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
- gboolean res;
-
- res = gconf_client_get_bool(client, tmp, NULL);
- g_free(tmp);
- return res;
-}
-
-void set_bool(GConfClient *client, char *key, gboolean val)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
-
- gconf_client_set_bool(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-gint get_int(GConfClient *client, char *key)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
- gint res;
-
- res = gconf_client_get_int(client, tmp, NULL);
- g_free(tmp);
- return res;
-}
-
-void set_int(GConfClient *client, char *key, gint val)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
-
- gconf_client_set_int(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-gchar *get_str(GConfClient *client, char *key)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
- gchar *res;
-
- res = gconf_client_get_string(client, tmp, NULL);
- g_free(tmp);
- return res;
-}
-
-void set_str(GConfClient *client, char *key, gchar *val)
-{
- char *tmp = g_strjoin("/", IM_CONF_DIR, key, NULL);
-
- gconf_client_set_string(client, tmp, val, NULL);
- g_free(tmp);
-}
-
-static GConfClient *init_conf(void)
-{
- GConfClient *client;
-
- client = gconf_client_get_default();
- if (!client)
- return NULL;
- gconf_client_add_dir(client, IM_CONF_DIR, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
- internal_kbd = get_bool(client, "have-internal-keyboard");
- return client;
-}
-
-static void deinit_conf(GConfClient *client)
-{
- g_object_unref(G_OBJECT(client));
-}
-
-osso_return_t execute(osso_context_t *osso, gpointer data, gboolean user_activated)
-{
- GConfClient *conf;
- GtkDialog *dialog, *about;
- GtkWidget *scroll, *widget, *vbox;
- gchar *title;
- void *plugin_data[PLUGINS];
- unsigned i;
- int res;
-
- (void)osso; (void)user_activated; /* shut up, GCC */
-
- conf = init_conf();
- if (!conf)
- return OSSO_ERROR;
-
- for (i = 0; i < PLUGINS; i++) {
- inits[i](prefs + i);
- }
-
- dialog = GTK_DIALOG(gtk_dialog_new());
- if (!dialog) {
- deinit_conf(conf);
- return OSSO_ERROR;
- }
- gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(data));
-
- title = g_strdup_printf("%s (ukeyboard)", _("tein_ti_text_input_title"));
- gtk_window_set_title(GTK_WINDOW(dialog), title);
- g_free(title);
-
-
- gtk_dialog_add_button(GTK_DIALOG(dialog), "About", GTK_RESPONSE_HELP);
- gtk_dialog_add_button(GTK_DIALOG(dialog), _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT);
-
- scroll = hildon_pannable_area_new();
- gtk_widget_set_size_request(GTK_WIDGET (scroll), -1, 345);
- gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), scroll);
-
- vbox = gtk_vbox_new(FALSE, 0);
- hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA(scroll), vbox);
-
- gtk_widget_show_all(GTK_WIDGET(dialog));
-
- for (i = 0; i < PLUGINS - 1; i++) {
- widget = prefs[i].start(conf, GTK_WIDGET(dialog), &plugin_data[i]);
- if (widget)
- gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
- }
-
- while ((res = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_HELP) {
- about = GTK_DIALOG(gtk_dialog_new());
- gtk_window_set_title(GTK_WINDOW(about), _HL("ecdg_ti_aboutdialog_title"));
- gtk_widget_set_size_request (GTK_WIDGET (about), -1, 300);
-
- widget = prefs[3].start(conf, GTK_WIDGET(about), &plugin_data[3]);
- gtk_container_add(GTK_CONTAINER(GTK_DIALOG(about)->vbox), widget);
-
- gtk_widget_show_all(GTK_WIDGET(about));
- gtk_dialog_run(GTK_DIALOG(about));
- gtk_widget_destroy(GTK_WIDGET(about));
-
- }
- if (res == GTK_RESPONSE_ACCEPT) {
- for (i = 0; i < PLUGINS; i++)
- if (prefs[i].action)
- prefs[i].action(conf, plugin_data[i]);
- }
- gtk_widget_destroy(GTK_WIDGET(dialog));
-
- for (i = 0; i < PLUGINS; i++)
- if (prefs[i].stop)
- prefs[i].stop(conf, plugin_data[i]);
-
- deinit_conf(conf);
- return OSSO_OK;
-}
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- * Copyright (c) 2009 Roman Moravcik <roman.moravcik@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _PREFS_H
-#define _PREFS_H
-
-#define _HL(str) dgettext("hildon-libs",str)
-
-struct prefs {
- GtkWidget *(*start)(GConfClient *, GtkWidget *, void **);
- void (*action)(GConfClient *, void *);
- void (*stop)(GConfClient *, void *);
- char *name;
-};
-
-typedef void (*init_func)(struct prefs *);
-
-extern gboolean internal_kbd;
-
-gboolean get_bool(GConfClient *client, char *key);
-void set_bool(GConfClient *client, char *key, gboolean val);
-gint get_int(GConfClient *client, char *key);
-void set_int(GConfClient *client, char *key, gint val);
-gchar *get_str(GConfClient *client, char *key);
-void set_str(GConfClient *client, char *key, gchar *val);
-
-#endif
+++ /dev/null
-[Desktop Entry]
-Name=tein_ti_text_input_title
-Comment=Advanced input settings configuration
-Type=HildonControlPanelPlugin
-Icon=control_pen_input
-Categories=personalisation
-X-control-panel-plugin=libukeyboard-prefs.so
-X-Text-Domain=osso-applet-textinput
+++ /dev/null
-#!/bin/sh
-store=
-if [ "x$1" = "x-s" ]; then
- store=1
- shift
-fi
-
-if [ "x$1" = x -o "x$2" = x ]; then
- echo "ukeyboard-set: Missing parameters."
- exit 1
-fi
-dest="/usr/share/keyboards/$2.vkb"
-
-if [ "x$1" = "x-r" -a ! -f "$dest-saved" -a ! -f "$dest-empty" ]; then
- echo "ukeyboard-set: No previous file stored."
- exit 4
-fi
-
-if [ -f "$dest" ]; then
- if [ ! -h "$dest" ]; then
- echo "ukeyboard-set: Destination $dest exists and is not a symlink."
- exit 2
- fi
- if [ "$store" != 1 -o -f "$dest-saved" ]; then
- rm "$dest"
- if [ -f "$dest" ]; then
- echo "ukeyboard-set: Cannot delete current symlink $dest."
- exit 3
- fi
- else
- mv "$dest" "$dest-saved"
- fi
-elif [ "$store" = 1 ]; then
- touch "$dest-empty"
-fi
-
-if [ "x$1" = "x-r" ]; then
- if [ -f "$dest-saved" ]; then
- mv "$dest-saved" "$dest"
- else
- rm "$dest" "$dest-empty"
- fi
-elif [ "$store" = 1 ]; then
- ln -s "$1" "$dest"
-else
- ln -s "../ukeyboard/$1.vkb" "$dest"
-fi
-exit 0
+++ /dev/null
-user ALL = NOPASSWD: /usr/libexec/ukeyboard-set
+++ /dev/null
-ukeyboard (2.0) unstable; urgency=low
-
- * Added support for Maemo5 (Fremantle).
- * Dropped Czech and Polish keyboard support, because they are officially
- supported now.
- * OS2008 (Diablo/Chinook) is no longer supported.
-
- -- Roman Moravcik <roman.moravcik@gmail.com> Wed, 29 Oct 2009 22:08:12 +0100
-
-ukeyboard (1.9) unstable; urgency=low
-
- * Added Greek hw layouts for devices with US keyboard by Porfyras.
- * Added Turkish on-screen keyboard layout by Burak Ilgicioglu.
- * Minor fixes in Slovak on-screen keyboard layouts.
-
- -- Roman Moravcik <roman.moravcik@gmail.com> Wed, 21 Oct 2009 10:24:37 +0200
-
-ukeyboard (1.8) unstable; urgency=low
-
- * Added Belarusian on-screen layout by Darafei Praliaskouski.
- * Modified US Dvorak layout.
-
- -- Jiri Benc <jbenc@upir.cz> Tue, 30 Dec 2008 12:31:10 +0100
-
-ukeyboard (1.7) unstable; urgency=low
-
- * Fixed Czech hw keyboard, added more characters (typed by
- Fn+Shift). Thanks to Jan "Yenya" Kasprzak.
- * Added Hebrew on-screen keyboard layout by Matan Ziv-Av.
- * Added Polish QWERTZ and QWERTY sliding keyboard layouts
- for DE hardware by Pawel Dys.
-
- -- Jiri Benc <jbenc@upir.cz> Wed, 01 Oct 2008 00:35:26 +0200
-
-ukeyboard (1.6) unstable; urgency=low
-
- * Added Croatian on-screen keyboard layout by Lovro Oreskovic.
- * Introduced Ukeyboard Creator (ukbdcreator).
-
- -- Jiri Benc <jbenc@upir.cz> Sun, 29 Jun 2008 22:05:19 +0200
-
-ukeyboard (1.5) unstable; urgency=low
-
- * Added Bulgarian phonetic sliding keyboard layout by Ognian
- Samokovliyski.
- * Added Thai Kedmanee on-screen layout by Panu Tangchalermkul.
-
- -- Jiri Benc <jbenc@upir.cz> Sun, 25 May 2008 14:46:59 +0200
-
-ukeyboard (1.4) unstable; urgency=low
-
- * Added Polish sliding keyboard layout by Marcin Juszkiewicz.
-
- -- Jiri Benc <jbenc@upir.cz> Sat, 05 Apr 2008 13:23:50 +0200
-
-ukeyboard (1.3) unstable; urgency=low
-
- * Added Slovak on-screen and sliding keyboard layouts by Roman Moravcik.
- * Added Arabic (Lebanon) on-screen layout by Ali Khadra.
- * Fixed US Dvorak layout.
-
- -- Jiri Benc <jbenc@upir.cz> Sun, 16 Mar 2008 23:02:58 +0100
-
-ukeyboard (1.2) unstable; urgency=low
-
- * Added US Dvorak layout by Paul Sweeney.
- * Added Czech hw layouts for devices with US keyboard by Michal Prihoda.
- * Fixed howto to reflect changes made in ukeyboard for OS2008.
- * Fixed build with OpenEmbedded.
-
- -- Jiri Benc <jbenc@upir.cz> Fri, 29 Feb 2008 21:42:36 +0100
-
-ukeyboard (1.1) unstable; urgency=low
-
- * Fixed wrong label ("Launch finger keyboard with select") in the
- control panel applet on N800.
-
- -- Jiri Benc <jbenc@upir.cz> Tue, 12 Feb 2008 21:48:56 +0100
-
-ukeyboard (1.0) unstable; urgency=low
-
- * Added support for OS2008 on-screen keyboards.
- * Added support for N810 sliding keyboard layouts and small on-screen
- keyboards (scv).
- * Added control panel applet that replaces the default one.
- * Enhanced vkb format documentation.
- * Added Czech QWERTY and QWERTZ layouts for the sliding keyboard.
- * OS2007 is no longer supported.
-
- -- Jiri Benc <jbenc@upir.cz> Sun, 10 Feb 2008 03:17:35 +0100
-
-ukeyboard (0.3.1) unstable; urgency=low
-
- * Added Hungarian layout by Hamorszky Balazs.
-
- -- Jiri Benc <jbenc@upir.cz> Fri, 4 Jan 2008 21:18:26 +0000
-
-ukeyboard (0.3) unstable; urgency=low
-
- * Renamed to ukeyboard.
- * Added Bulgarin phonetic and BDS layouts by Nickola Trupcheff.
- * Fixed Esperanto layout (swapped by mistake with Xeelee's layout).
- * Added support for comments in the compiler.
- * Reworked creating of .deb packages (all info is in .def files now).
- * Added instructions how to create a custom keyboard layout.
-
- -- Jiri Benc <jbenc@upir.cz> Tue, 13 Nov 2007 20:23:57 +0000
-
-czkeyboard (0.2-1) unstable; urgency=low
-
- * Fixed and enhanced the file format documentation.
- * Added support for special keyboards (&!e).
- * Added support for generating of multiple .deb files with different
- keyboard layouts.
-
- -- Jiri Benc <jbenc@upir.cz> Sun, 11 Nov 2007 19:19:23 +0000
-
-czkeyboard (0.1-1) unstable; urgency=low
-
- * Initial Release.
-
- -- Jiri Benc <jbenc@upir.cz> Tue, 26 Jun 2007 21:08:47 +0000
-
+++ /dev/null
-Source: ukeyboard
-Section: user/other
-Priority: optional
-Maintainer: Roman Moravcik <roman.moravcik@gmail.com>
-Build-Depends: debhelper (>= 4.0.0), libosso-dev, libosso-gnomevfs2-dev, libhildonfm2-dev, hildon-control-panel-dev
-Standards-Version: 3.6.1
-
-Package: ukeyboard
-Architecture: any
-Depends: ${shlibs:Depends}
-Description: Additional keyboard layouts
- Additional keyboard layouts for both on-screen and sliding keyboard.
-
-Package: ukbdcreator
-Architecture: any
-Depends: ${shlibs:Depends}, ukeyboard (>= 1.7)
-Description: Ukeyboard Creator
- Simple IDE for creating and testing on-screen keyboard layouts.
+++ /dev/null
-Copyright:
-
-2007-2008, Jiri Benc <jbenc@upir.cz>
-
-License:
-
-GPLv2
+++ /dev/null
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-DESTDIR=$(CURDIR)/debian/ukeyboard
-DESTDIR_CREATOR=$(CURDIR)/debian/ukbdcreator
-
-configure: configure-stamp
-configure-stamp:
- dh_testdir
-
- touch configure-stamp
-
-
-build: build-stamp
-
-build-stamp: configure-stamp
- dh_testdir
-
- $(MAKE)
-
- touch build-stamp
-
-clean:
- dh_testdir
- dh_testroot
- rm -f build-stamp configure-stamp
-
- # Add here commands to clean up after the build process.
- $(MAKE) clean
-
- dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_clean -k
- dh_installdirs
-
- # Add here commands to install the package into $(DESTDIR)
- $(MAKE) DESTDIR=$(DESTDIR) install
- $(MAKE) -C ukbdcreator DESTDIR=$(DESTDIR_CREATOR)/usr install
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
- dh_testdir
- dh_testroot
-# dh_installchangelogs
- dh_fixperms
- dh_installdeb
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
+++ /dev/null
-#!/bin/sh
-if ! grep -q ukeyboard /usr/share/X11/xkb/rules/base; then
- sed -i 's/^.*nokiarx44.*$/\0\n ukeyboard * = nokia_vndr\/ukeyboard(%l)/' /usr/share/X11/xkb/rules/base
-fi
-
-if [ -f /usr/share/applications/hildon-control-panel/cptextinput.desktop ]; then
- mv -f /usr/share/applications/hildon-control-panel/cptextinput.desktop /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed
-fi
-
-gtk-update-icon-cache -f /usr/share/icons/hicolor
-update-sudoers
-exit 0
+++ /dev/null
-#!/bin/sh
-sed -ni '/ukeyboard/!p' /usr/share/X11/xkb/rules/base
-
-if [ -f /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed ]; then
- mv -f /usr/share/applications/hildon-control-panel/cptextinput.desktop.removed /usr/share/applications/hildon-control-panel/cptextinput.desktop
-fi
-
-gtk-update-icon-cache -f /usr/share/icons/hicolor
-update-sudoers
-exit 0
+++ /dev/null
-How to create a custom keyboard layout for Nokia internet tablets
-=================================================================
-
-1. Making a layout compiler
----------------------------
-
-First, you need to compile a compiler. You don't need the scratchbox (an
-environment used for Maemo development) to do that - any Linux distribution
-would do. For creating a .deb package the scratchbox is needed, though.
-
-Simply unpack the ukeyboard package and run "make" in the ukeyboard
-directory:
- tar -xjf ukeyboard-VERSION.tar.bz2
- cd ukeyboard-VERSION
- make
-(replace VERSION by the version you've downloaded)
-
-2. Using the layout compiler
-----------------------------
-
-Run vkb_compiler created in the previous step. As parameters, supply
-a layout source file and name of the destination file. The name of the
-destination file must have a .vkb extension.
- ./vkb_compiler my_layout.def xx_XX.vkb
-
-For rules for naming of destination files, see the section 4.1.
-
-3. Testing the layout
----------------------
-
-Make sure ukeyboard package is installed on the device. It does not have to
-include your new layout.
-
-Copy the compiled .vkb file to the /usr/share/ukeyboard/ directory on the
-device. Ukeyboard will pick up the new layout automatically. Just go to
-Text input settings in the Control panel and set your layout in the
-Languages tab.
-
-If you update the .vkb file, just go to Text input settings again and
-confirm the dialog without changing anything.
-
-4. Limitation of the maemo keyboard layouts
--------------------------------------------
-
-4.1 Allowed names of .vkb files
--------------------------------
-
-The system limits the name of the compiled (.vkb) file in a way that it has
-to match the name defined in the "lang" clause in the source (.def) file
-(see section 6.2). You do not need to worry about that if you put your
-layout into /usr/share/ukeyboard/, ukeyboard will do the necessary magic for
-you. Just be sure the name of the file has the .vkb extension.
-
-4.2 Allowed language codes
---------------------------
-
-The name specified in the "lang" clause in the source file cannot be one of
-da_DK, de_DE, el_GR, en_GB, en_US, es_ES, es_MX, fi_FI, fr_CA, fr_FR, it_IT,
-nl_NL, no_NO, pt_BR, pt_PT, ru_RU and sv_SE. This is a limitation of
-ukeyboard and may be relaxed in the future. If you put one of these codes
-into the "lang" clause, ukeyboard will give you a warning.
-
-In general, the name in the "lang" clause should be a valid language code.
-Ukeyboard permits the country code part to be anything (e.g. you can specify
-en_DV for a Dvorak layout). To be safe, it's better to specify exactly two
-letters in the country code part, though.
-
-5. Different types of keyboards and layouts
--------------------------------------------
-
-There are three types of .vkb files. The first one is an on-screen keyboard
-corresponding to a selected language, the second one is a special keyboard
-activated by pressing the "&!e" button, the third one is a "scv" keyboard,
-which is displayed by pressing the "Chr" key on the sliding keyboard.
-Although vkb_compiler is able to compile all of them, this document covers
-the first type only. By a "keyboard" or "keyboard layout" the first type of
-the keyboard is meant through the whole document. For a "scv" type, read
-this document and then look at the examples in keyboards-scv/ directory.
-
-Each keyboard file contains two keyboard layouts - one for a normal (stylus)
-and one for a thumb keyboard.
-
-A normal layout has two parts, alpha and numeric keyboard, in two variants,
-lowercase and uppercase. This gives four "sublayouts" for a normal layout.
-
-A thumb layout has two mandatory "sublayouts", lowercase and uppercase alpha
-keyboard, and an arbitrary number of "special" sublayouts. They are
-presented as tabs.
-
-Remember, both layouts (normal+thumb) have to be defined.
-
-6. Description of the .def file format
---------------------------------------
-
-6.1 Basics
-----------
-
-Every keyword, symbol, etc. has to be separated by a whitespace (a space,
-a tab or a newline). Especially, be aware that a whitespace is required
-before and after { and }.
-
-A # character starts a comment; everything following the # character is
-ignored until the end of line. This has one exception, though. If
-a character in a key definition is expected, # is considered a valid
-character and doesn't have a special meaning.
-
-
-6.2 The header
---------------
-
-A .def file has to start with a header section:
- header {
- ...header definition...
- }
-
-Inside the header, few global things are defined:
-- a descriptive name of the keyboard
-- a language code
-- default word completion dictionary
-- dimensions of keys
-
-6.2.1 Descriptive name of the keyboard
---------------------------------------
-
-A descriptive name of the keyboard is defined by:
- name "descriptive name"
-
-Ukeyboard uses this name in the list of kayboards in Text input settings
-applet. The OS itself seems to just ignore the name, though.
-
-6.2.2 Language code
--------------------
-
-The locale name of the keyboard. See section 4.2 for allowed values of this
-field and section 4.1 for a discussion about allowed .vkb file names.
-
-Example:
- lang "en_GB"
-
-6.2.3 Word completion dictionary
---------------------------------
-
-When selecting the keyboard layout in the Control panel, a corresponding
-word completion dictionary is preselected. This is specified by this clause.
-
-Example:
- wc "en_GB"
-
-6.2.4 Key dimensions
---------------------
-
-Each key in the keyboard has its dimensions. These dimensions are not
-specified in the key definition, though. Instead, each key has a single
-"size number" assigned. The actual dimensions for the "size number" are
-specified in the header.
-
-The header can contain an arbitrary number of key sizes. The key size
-definition looks like this:
- size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-
-The number after the "size" keyword (0 in the example) specifies the size
-number. You'll use this number in key definitions to specify the size of the
-particular key.
-
-"width" and "height" specify the dimensions of the key in pixels. (Note that
-if the sum of widths of keys in a row is more or less than the expected
-width, it is proportionally enlarged/shrinked. The same applies to heights.)
-
-"texpos" denotes vertical position of the text on the key (the baseline).
-
-"left" and "top" specify left and top padding of the key (i.e. the empty
-space between the previous and this key).
-
-6.3 Layouts and sublayouts
---------------------------
-
-After the header, layout sections are present. They are defined as:
- kbd_normal {
- ...normal keyboard layout definition...
- }
-
- kbd_thumb {
- ...thumb keyboard layout definition...
- }
-
-Inside kbd_normal, the following sections are defined:
- kbd_normal {
- lowercase {
- ...alpha lowercase keyboard...
- }
- lowercase_num {
- ...numeric lowercase keyboard...
- }
- uppercase {
- ...alpha uppercase keyboard...
- }
- uppercase_num {
- ...numeric uppercase keyboard...
- }
- }
-
-Inside kbd_thumb section, the following sections are defined:
- kbd_thumb {
- lowercase {
- ...alpha lowercase keyboard...
- }
- uppercase {
- ...alpha uppercase keyboard...
- }
- special {
- ...keyboard on the second tab...
- }
- special {
- ...keyboard on the third tab...
- }
- ...
- }
-
-Definitions in the sublayout sections are the same for normal and thumb
-keyboard, except the "name" clause, which can be present only in the thumb
-keyboard sublayouts.
-
-6.4 Sublayout definition
-------------------------
-
-A sublayout definition contains the following clauses (the numbers and
-values are just examples):
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- ...
- }
- row {
- ...
- }
- ...
-
-6.4.1 Name of the sublayout
----------------------------
-
-The "name" clause can (and must) be present in thumb keyboard sublayouts
-only. It specifies the name displayed on the corresponding tab.
-
-6.4.2 Margins
--------------
-
-Folowing the "margin" clause, four numbers are specified. They denotes
-margins of the keyboard starting from top and going clock-wise (i.e. top,
-right, bottom, left).
-
-The margins are used for separating of the numerical from alpha keyboard.
-
-6.4.3 Default size
-------------------
-
-The "default_size" clause specifies the default size number for keys in this
-sublayout. By specifying this, you don't need to add the "size" attribute to
-each of the keys.
-
-Remember, the value refers to the dimensions specified in the header.
-
-6.4.4 Row definitions
----------------------
-
-An arbitrary number of rows of keys can be present in each sublayout. See
-the section 6.5.
-
-6.5 Key rows
-------------
-
-Each key row consists of several keys. The number of keys can be different
-for different rows.
-
-The row definition looks like this:
- row {
- ...key 1...
- ...key 2...
- ...
- ...key n...
- }
-
-There are several ways to define a key, depending on a type of the key:
- key X
- white
- slide { key X key X key X }
-
-Independently on the type, each key can have attributes. The attributes are
-given after the key definition, e.g.:
- key c alpha hexa
-
-The order of the attributes is not important. The recognized attributes are:
- alpha
- num
- hexa
- tele
- special
- dead
- size N
-
-6.5.1 Key types
----------------
-
-There are three key types:
-1. regular keys
-2. a space key
-3. slide keys (repeated pressing of the slide key cycles through a set of
- characters)
-
-6.5.2 Key definition
---------------------
-
-After the "key" keyword, the whitespace is required, followed by a single,
-UTF-8 encoded, character (*). This character will be displayed on the key
-and printed when the key is pressed by user.
-
-After the "slide" keyword, a new section ({...}) has to be started,
-containing a "key" keyword followed by a character, followed by a "key"
-keyword, etc. A slide key can contain an arbitrary number of keys.
-
-After the "white" keyword, there is (of course) no character specified.
-
-(*) That's not exactly true. You can specify a bunch of characters, as long
- as they don't contain a whitespace. It should work as expected, i.e.
- outputting all the characters when the key is pressed. The author hasn't
- tested it, though.
-
-6.5.3 Key attributes
---------------------
-
-The "alpha" attribute denotes an alpha key (i.e. letters A to Z plus
-equivalents in other languages, including characters with a diacritic).
-
-The "num" attribute denotes a numeric key (i.e. 0 to 9 and the minus sign).
-
-The "hexa" attribute denotes a key that can be used in a hexadecimal input
-(i.e. 0 to 9 and A to Z).
-
-The "tele" attribute denotes a key present on a telephone keypad (i.e.
-0 to 9, *, #, and few other keys).
-
-The "special" attribute denotes a non-alphanumeric key (i.e. key that is
-neither a letter nor a number).
-
-The "dead" attribute denotes the key is a combining diacritical mark
-(a so-called "dead key").
-
-The "size" attribute is used when the size of the key should be different
-than the default size for this sublayout. Again, remember that the value
-refers to the dimensions specified in the header.
-
-7 Contact, legal stuff
-----------------------
-
-The document is (c) Jiri Benc, <jbenc@upir.cz>. It is licensed under the
-GPLv2.
-
-If you find an error in this document, please contact the author.
-
-maemo is an unregistered trademark of Nokia Corporation.
+++ /dev/null
-vkb format for OS2007/OS2008
-
-- released into public domain (Permission is granted, free of charge, to any
- person obtaining a copy of this file, to deal with the file without
- restriction, including without limitation the right to use, copy, modify,
- merge, publish, distribute, sublicense, and/or sell copies of it. The file
- is provided "as is", without warranty of any kind.)
-- this is the third version of the document
-- changelog:
- - v1: initial version based on reverse engineering of vkb files
- - v2: revised using the excellent work by Kimmo Jukarainen,
- http://idoru.metadreams.net/~kimju/src/maemo/decode_vkb/
- - v3: added 0x80 key flag
-
-- multibyte fields are little endian
-- everything is utf-8 encoded
-- all numbers in the "description" column are written in hexadecimal
-- some (all?) length fields can be zero
-- strings are denoted as 1+n and are encoded as:
- bytes description
- 1 length of the next field, in bytes
- n the string (utf-8 encoded)
-
-GLOBAL HEADER
-bytes description
-1 version (01)
-1 number of sections (02 for normal and thumb kbd, 01 for special kbd)
-1+n descriptive (human-visible) name of the locale
-1+n locale name (e.g. en_GB)
-1+n locale name of a word completion dictionary
-1 number of screen modes supported by this keyboard (02)
-n types of individual screen modes (1 byte each; types are:
- 0 = normal, 1 = thumb, 2 = rotated) (00 01)
-1 number of key sizes (05)
-... KEY SIZE
-... KEY SIZE
- (default key sizes are:
- 23 23 1a 00 00 32 23 1a 00 00 37 23 1a 00 00 48 37 29 00 00 8f 37 29 00 00
- that's: 00 normal key, 01 longer key used on the right side of odd
- rows, 02 more longer key used on the left side of odd rows, 03 big
- key used in thumb kbd, 04 double width big key used in thumb kbd)
- (for special kbd, default key sizes are: 23 23 1a 00 00)
-2 absolute offset in the file of the first section
-2 absolute offset in the file of the second section
- ...
-20 zeros
-... SECTION
-... SECTION
-
-KEY SIZE
-bytes description
-1 width of a key (in pixels? rather seems to be percentage or something)
-1 height of a key
-1 offset of a text (from the top of the key to the bottom of the text)
- - i.e. baseline
-1 left padding (extra value, not included in the width)
-1 top padding (extra value, not included in the height)
-
-SECTION HEADER
-bytes description
-1 type of the section (00 normal kbd, 01 special kbd, 04 thumb kbd;
- other values: 03 large kbd, 05-07 east language kbds, 08 stroke kbd)
-1 number of layouts (02 for normal kbd, 04 for thumb kbd, 06 for special kbd)
-1 numeric kbd (00); the meaning of this field is unclear
-1 default key size (00 for normal kbd, 03 for thumb kbd, 00 for special kbd)
-... LAYOUT
-... LAYOUT
-
-LAYOUT HEADER
-bytes description
-1 layout type (00 lowercase, 01 uppercase, 02 neither - i.e. special chars)
- notes:
- - in a special kbd, even tabs with letters are of the 02 type
- - it seems to be hard-coded that the first two layouts in a special
- kbd have the shift key disabled
-1 corresponding other case layout number, counted from 0; ff for
- a single case layout
-1+n name of the layout (in normal kbd should be empty; in thumb kbd
- should be 3 utf-8 chars; in special kbd corresponding lower/upper
- layouts should have the same name)
-1 number of sublayouts (normal kbd has 2 sublayouts, thumb kbd and
- special kbd have 1 sublayout)
-... SUBLAYOUT
-... SUBLAYOUT
-
-SUBLAYOUT HEADER
-bytes description
-1 number of keys in the sublayout
-1 number of rows of the sublayout
-1 left margin (in pixels?) (9 for numeric kbd)
-1 top margin
-1 bottom margin
-1 right margin (seems that setting of margins affects also other
- sublayout margins in some strange way)
-n number of keys in individual rows (1 byte for each row)
-... KEY
-... KEY
-
-KEY
-bytes description
-1 key type (00 normal key, 01 sliding key, 02 modifier key, 04 multiple key)
-... these fields depend on the key type (KEY_NORMAL, KEY_SLIDING, etc.)
-
-KEY_NORMAL
-bytes description
-1 or 2 FIELD_KEY_FLAGS
-1+n letter
-1 key size
-
-KEY_SLIDING
-bytes description
-1 or 2 FIELD_KEY_FLAGS
-1 number of keys on the sliding key | 0x80
-1+n letter
-1+n letter
- ...
-1 key size
-
-KEY_MODIFIER
-?
-
-KEY_MULTIPLE
-bytes description
-1 number of keys
-... KEY
-... KEY
-
-FIELD_KEY_FLAGS
-bytes description
-1 key flags (bitfield)
- bits: 0 (0x01) alpha
- 1 (0x02) numeric
- 2 (0x04) hexa
- 3 (0x08) telephone
- 4 (0x10) special
- 5 (0x20) dead
- 6 (0x40) whitespace
- 7 (0x80) next byte is continuation of the flags
-1 present only if the previous field contains 0x80 flag:
- more key flags (bitfield?)
- bits: 2 (0x04) draw tab face over the key
+++ /dev/null
-layouts = \
- sk-qwerty.vkb sk-qwertz.vkb
-
-all: $(layouts)
-
-%.vkb: %.def
- if [ -h $< ] ; then f=`readlink $< | sed 's/\.def/\.vkb/'` ; ln -s $$f $@ ; \
- else ../vkb_compiler $< $@ ; \
- fi
-
-install:
- install -d $(DESTDIR)/usr/share/scv_layouts
- install -m 0644 $(layouts) $(DESTDIR)/usr/share/scv_layouts/
-
-clean:
- rm -f *.vkb
+++ /dev/null
-# Slovak scv keyboard layout
-# Created by Roman Moravčík <roman.moravcik@gmail.com>
-
-header {
-name ""
-lang "Slovenčina"
-wc ""
-
-size 0 { width 102 height 58 textpos 41 left 0 top 0 }
-}
-
-kbd_special {
-special {
- name ""
- margin 0 0 0 0
- default_size 0
- row {
- key ^ special
- key ` special
- key $ special
- key • special
- key ‘ special
- key [ special
- key ] special
- }
- row {
- tab
- key ← special
- key → special
- key „ special
- key “ special
- key { special
- key } special
- }
-}
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key ß alpha
- key ° special
- key ± special
- key ½ special
- key ’ special
- key § special
- key £ special
- }
- row {
- key ú alpha
- key ä alpha
- key ô alpha
- key ň alpha
- key ” special
- key « special
- key » special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key ß alpha
- key ` special
- key ± special
- key ½ special
- key ’ special
- key § special
- key £ special
- }
- row {
- key Ú alpha
- key Ä alpha
- key Ô alpha
- key Ň alpha
- key ” special
- key « special
- key » special
- }
-}
-}
+++ /dev/null
-sk-qwerty.def
\ No newline at end of file
+++ /dev/null
-layouts = \
- ar-lebanon.vkb \
- be-by.vkb \
- bg-bds.vkb \
- bg-phonetic.vkb \
- en-dvorak.vkb \
- eo-qwerty.vkb \
- he-qwerty.vkb \
- hr-qwerty.vkb hr-qwertz.vkb \
- hu-qwertz.vkb \
- sk-qwerty.vkb sk-qwertz.vkb \
- th-kedmanee.vkb \
- tr-qwerty.vkb
-
-all: $(layouts)
-
-%.vkb: %.def
- ../vkb_compiler $< $@
-
-install:
- install -d $(DESTDIR)/usr/share/ukeyboard
- install -m 0644 $(layouts) $(DESTDIR)/usr/share/ukeyboard/
-
-clean:
- rm -f *.vkb
+++ /dev/null
-# title: Arabic keyboard layout (Lebanon)
-# author: Ali Khadra <tyros99@yahoo.com>
-# url: http://tyros.leb.net/nokia
-
-header {
-name "Arabic (Lebanon)"
-lang "ar_LB"
-wc "ar_LB"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 35 height 35 textpos 26 left 0 top 0 }
-size 2 { width 66 height 55 textpos 41 left 0 top 0 }
-size 3 { width 131 height 55 textpos 41 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 1
- row {
- key ض alpha
- key ص alpha
- key ث alpha
- key ق alpha
- key ف alpha
- key غ alpha
- key ع alpha
- key ه alpha
- key خ alpha
- key ح alpha
- key ج alpha
- key د alpha
- }
- row {
- key ش alpha
- key س alpha
- key ي alpha
- key ب alpha
- key ل alpha
- key ا alpha
- key ت alpha
- key ن alpha
- key م alpha
- key ك alpha
- key ط alpha
- key ذ alpha
- }
- row {
- key ئ alpha
- key ء alpha
- key ؤ alpha
- key ر alpha
- key ﻻ alpha
- key ى alpha
- key ة alpha
- key و alpha
- key ز alpha
- key ظ alpha
- key ، special
- key . special
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key + special
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 1
- row {
- key َ special dead
- key ً special dead
- key ُ special dead
- key ٌ special dead
- key ﻹ alpha
- key إ alpha
- key ‘ special
- key ÷ special
- key × special
- key ؛ special
- key < special
- key > special
- }
- row {
- key \ special
- key @ special
- key ] special
- key [ special
- key ﻷ alpha
- key أ alpha
- key ـ special
- key ، special
- key / special
- key : special
- key " special
- key ّ special dead
- }
- row {
- key ~ special
- key ْ special dead
- key ِ special dead
- key ٍ special dead
- key ﻵ alpha
- key آ alpha
- key ’ special
- key , special
- key . special
- key ؟ special
- key ! special
- key | special
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ١ num tele
- key ٢ num tele
- key ٣ num tele
- }
- row {
- key ٤ num tele
- key ٥ num tele
- key ٦ num tele
- }
- row {
- key ٧ num tele
- key ٨ num tele
- key ٩ num tele
- }
- row {
- key - num special tele
- key ٠ num tele
- key = special
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "ا ب"
- margin 0 0 0 0
- default_size 2
- row {
- key ض alpha
- key ص alpha
- key ث alpha
- key ق alpha
- key ف alpha
- key غ alpha
- key ع alpha
- key ه alpha
- key خ alpha
- key ح alpha
- key ج alpha
- key د alpha
- }
- row {
- key ش alpha
- key س alpha
- key ي alpha
- key ب alpha
- key ل alpha
- key ا alpha
- key ت alpha
- key ن alpha
- key م alpha
- key ك alpha
- key ط alpha
- key ذ alpha
- }
- row {
- key ئ alpha
- key ء alpha
- key ؤ alpha
- key ر alpha
- key ﻻ alpha
- key ى alpha
- key ة alpha
- key و alpha
- key ز alpha
- key ظ alpha
- white size 3
- }
-}
-uppercase {
- name "أ إ آ"
- margin 0 0 0 0
- default_size 2
- row {
- key َ special dead
- key ً special dead
- key ُ special dead
- key ٌ special dead
- key ﻹ alpha
- key إ alpha
- key ‘ special
- key ’ special
- key @ special
- key ؛ special
- key < special
- key > special
- }
- row {
- key \ special
- key | special
- key ] special
- key [ special
- key ﻷ alpha
- key أ alpha
- key ـ special
- key ، special
- key / special
- key : special
- key " special
- key ّ special dead
- }
- row {
- key ~ special
- key ْ special dead
- key ِ special dead
- key ٍ special dead
- key ﻵ alpha
- key آ alpha
- key , special
- key . special
- slide special { key ؟ key ! key ( key ) key { key } } size 3
- white size 3
- }
-}
-special {
- name "؛؟١"
- margin 0 0 0 0
- default_size 2
- row {
- key ١ num tele
- key ٢ num tele
- key ٣ num tele
- key ؛ special
- key ، special
- key , special
- key | special
- key # special
- key % special
- key € special
- key ¥ special
- key ^ special
- }
- row {
- key ٤ num tele
- key ٥ num tele
- key ٦ num tele
- key § special
- key * special
- key ½ special
- key « special
- key » special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ٧ num tele
- key ٨ num tele
- key ٩ num tele
- key ٠ num tele
- key ‘ special
- key ’ special
- key ؟ special
- key „ special
- key “ special
- key ± special
- key ™ special
- key © special
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 2
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- key ° special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ¡ special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key ¿ special
- key $ special
- key £ special
- key < special
- key > special
- }
-}
-}
+++ /dev/null
-# title: Belarusian layout
-# author: Darafei Praliaskouski <komzpa@gmail.com>
-
-header {
-name "Беларуская"
-lang "be_BY"
-wc "be_BY"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key й alpha size 2
- key ц alpha
- key у alpha
- key к alpha
- key е alpha
- key н alpha
- key г alpha
- key ш alpha
- key ў alpha
- key з alpha
- key х special size 1
- }
- row {
- key ф alpha
- key ы alpha
- key в alpha
- key а alpha
- key п alpha
- key р alpha
- key о alpha
- key л alpha
- key д alpha
- key ж alpha
- key э alpha
- key ' special
- }
- row {
- key я alpha size 2
- key ч alpha
- key с alpha
- key м alpha
- key і alpha
- key т alpha
- key ь alpha
- key б alpha
- key ю alpha
- key , special tele
- key . special tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key ё special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Й alpha size 2
- key Ц alpha
- key У alpha
- key К alpha
- key Е alpha
- key Н alpha
- key Г alpha
- key Ш alpha
- key Ў alpha
- key З alpha
- key Х special size 5
- key + special size 5
- }
- row {
- key Ф alpha
- key Ы alpha
- key В alpha
- key А alpha
- key П alpha
- key Р alpha
- key О alpha
- key Л alpha
- key Д alpha
- key Ж alpha
- key Э alpha
- key " special
- }
- row {
- key Я alpha size 2
- key Ч alpha
- key С alpha
- key М alpha
- key І alpha
- key Т alpha
- key Ь alpha
- key Б alpha
- key Ю alpha
- key ; special
- key : special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key ? special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key ! special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key Ё special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "aбв"
- margin 0 0 0 0
- default_size 3
- row {
- key й alpha
- key ц alpha
- key у alpha
- key к alpha
- key е alpha
- key н alpha
- key г alpha
- key ш alpha
- key ў alpha
- key з alpha
- key х alpha
- }
- row {
- key ф alpha
- key ы alpha
- key в alpha
- key а alpha
- key п alpha
- key р alpha
- key о alpha
- key л alpha
- key д alpha
- key ж alpha
- key э alpha
- }
- row {
- white
- key я alpha
- key ч alpha
- key с alpha
- key м alpha
- key і alpha
- key т alpha
- key ь alpha
- key б alpha
- key ю alpha
- slide special { key . key , key ? key ' key ! key @ key ( key ) }
- }
-}
-uppercase {
- name "AБВ"
- margin 0 0 0 0
- default_size 3
- row {
- key Й alpha
- key Ц alpha
- key У alpha
- key К alpha
- key Е alpha
- key Н alpha
- key Г alpha
- key Ш alpha
- key Ў alpha
- key З alpha
- key Х alpha
- }
- row {
- key Ф alpha
- key Ы alpha
- key В alpha
- key А alpha
- key П alpha
- key Р alpha
- key О alpha
- key Л alpha
- key Д alpha
- key Ж alpha
- key Э alpha
- }
- row {
- white
- key Я alpha
- key Ч alpha
- key С alpha
- key М alpha
- key І alpha
- key Т alpha
- key Ь alpha
- key Б alpha
- key Ю alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Bulgarian BDS layout
-# author: Nickola Trupcheff <n.trupcheff@gmail.com>
-
-header {
-name "Български БДС"
-lang "bg_BG"
-wc "bg_BG"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key у alpha size 2
- key е alpha
- key и alpha
- key ш alpha
- key щ alpha
- key к alpha
- key с alpha
- key д alpha
- key з alpha
- key ц alpha
- key @ special size 1
- }
- row {
- key ь alpha
- key я alpha
- key а alpha
- key о alpha
- key ж alpha
- key г alpha
- key т alpha
- key н alpha
- key в alpha
- key м alpha
- key ч alpha
- key / special
- }
- row {
- key ю alpha size 2
- key й alpha
- key ъ alpha
- key ф alpha
- key х alpha
- key п alpha
- key р alpha
- key л alpha
- key б alpha
- key , special tele
- key . special tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key У alpha size 2
- key Е alpha
- key И alpha
- key Ш alpha
- key Щ alpha
- key К alpha
- key С alpha
- key Д alpha
- key З alpha
- key Ц alpha
- key ~ special size 5
- key | special size 5
- }
- row {
- key Ь alpha
- key Я alpha
- key А alpha
- key О alpha
- key Ж alpha
- key Г alpha
- key Т alpha
- key Н alpha
- key В alpha
- key М alpha
- key Ч alpha
- key " special
- }
- row {
- key Ю alpha size 2
- key Й alpha
- key Ъ alpha
- key Ф alpha
- key Х alpha
- key П alpha
- key Р alpha
- key Л alpha
- key Б alpha
- key ; special
- key : special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key ? special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key ! special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key у alpha
- key е alpha
- key и alpha
- key ш alpha
- key щ alpha
- key к alpha
- key с alpha
- key д alpha
- key з alpha
- key ц alpha
- key ч alpha
- }
- row {
- key ь alpha
- key я alpha
- key а alpha
- key о alpha
- key ж alpha
- key г alpha
- key т alpha
- key н alpha
- key в alpha
- key м alpha
- key б alpha
- }
- row {
- white size 4
- key ю alpha
- key й alpha
- key ъ alpha
- key ф alpha
- key х alpha
- key п alpha
- key р alpha
- slide special size 4 { key л key . key , key ? key ! key @ key ( key ) }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key у alpha
- key Е alpha
- key И alpha
- key Ш alpha
- key Щ alpha
- key К alpha
- key С alpha
- key Д alpha
- key З alpha
- key Ц alpha
- key Ч alpha
- }
- row {
- key Ь alpha
- key Я alpha
- key А alpha
- key О alpha
- key Ж alpha
- key Г alpha
- key Т alpha
- key Н alpha
- key В alpha
- key М alpha
- key Б alpha
- }
- row {
- white size 4
- key Ю alpha
- key Й alpha
- key Ъ alpha
- key Ф alpha
- key Х alpha
- key П alpha
- key Р alpha
- slide special size 4 { key Л key . key , key ? key ! key @ key ( key ) }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Bulgarian phonetic layout
-# author: Nickola Trupcheff <n.trupcheff@gmail.com>
-
-header {
-name "Български (phonetic)"
-lang "bg_BG"
-wc "bg_BG"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key я alpha size 2
- key в alpha tele
- key е alpha hexa
- key р alpha
- key т alpha
- key ъ alpha
- key у alpha
- key и alpha
- key о alpha
- key п alpha tele
- key @ special size 1
- }
- row {
- key а alpha hexa
- key с alpha
- key д alpha hexa
- key ф alpha hexa
- key г alpha
- key х alpha
- key й alpha
- key к alpha
- key л alpha
- key ш alpha
- key щ alpha
- key ю alpha
- }
- row {
- key з alpha size 2
- key ь alpha
- key ц alpha hexa
- key ж alpha
- key б alpha hexa
- key н alpha
- key м alpha
- key , special tele
- key . special tele
- key / special tele
- key ч alpha tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Я alpha size 2
- key В alpha tele
- key Е alpha hexa
- key Р alpha
- key Т alpha
- key Ъ alpha
- key У alpha
- key И alpha
- key О alpha
- key П alpha tele
- key ~ special size 5
- key | special size 5
- }
- row {
- key А alpha hexa
- key С alpha
- key Д alpha hexa
- key Ф alpha hexa
- key Г alpha
- key Х alpha
- key Й alpha
- key К alpha
- key Л alpha
- key Ш alpha
- key Щ alpha
- key Ю alpha
- }
- row {
- key З alpha size 2
- key Ь alpha
- key Ц alpha hexa
- key Ж alpha
- key Б alpha hexa
- key Н alpha
- key М alpha
- key ; special
- key : special
- key " special
- key Ч alpha size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key ? special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key ! special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key я alpha
- key в alpha tele
- key е alpha hexa
- key р alpha
- key т alpha
- key ъ alpha
- key у alpha
- key и alpha
- key о alpha
- key п alpha tele
- key ю alpha
- }
- row {
- key а alpha hexa
- key с alpha
- key д alpha hexa
- key ф alpha hexa
- key г alpha
- key х alpha
- key й alpha
- key к alpha
- key л alpha
- key ш alpha
- key щ alpha
- }
- row {
- white size 4
- key з alpha
- key ь alpha
- key ц alpha hexa
- key ж alpha
- key б alpha hexa
- key н alpha
- key м alpha
- slide special size 4 { key ч key . key , key ? key ! key @ key ( key ) }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Я alpha
- key В alpha tele
- key Е alpha hexa
- key Р alpha
- key Т alpha
- key Ъ alpha
- key У alpha
- key И alpha
- key О alpha
- key П alpha tele
- key Ю alpha
- }
- row {
- key А alpha hexa
- key С alpha
- key Д alpha hexa
- key Ф alpha hexa
- key Г alpha
- key Х alpha
- key Й alpha
- key К alpha
- key Л alpha
- key Ш alpha
- key Щ alpha
- }
- row {
- white size 4
- key З alpha
- key Ь alpha
- key Ц alpha hexa
- key Ж alpha
- key Б alpha hexa
- key Н alpha
- key М alpha
- slide special size 4 { key Ч key . key , key ? key ! key @ key ( key ) }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: US Dvorak layout
-# author: Paul Sweeney <paul@8-bitdesign.com>
-# modified by: Ethan S. <dragon788@gmail.com>
-# license: GPLv2
-
-header {
-name "US Dvorak"
-lang "en_DV"
-wc "en_GB"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key ' special size 2
- key , special
- key . special
- key p alpha
- key y alpha
- key f alpha hexa
- key g alpha
- key c alpha hexa
- key r alpha
- key l alpha
- key / special size 1
- }
- row {
- key ~ special
- key a alpha hexa
- key o alpha
- key e alpha hexa
- key u alpha
- key i alpha
- key d alpha hexa
- key h alpha
- key t alpha
- key n alpha
- key s alpha
- key - special
- }
- row {
- key ; special size 2
- key q alpha
- key j alpha
- key k alpha
- key x alpha
- key b alpha hexa
- key m alpha
- key w alpha
- key v alpha
- key z alpha
- key @ special size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key ? num special tele
- key 0 num hexa tele
- key . special tele
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key " special size 2
- key < special
- key > special
- key P alpha
- key Y alpha
- key F alpha hexa
- key G alpha
- key C alpha hexa
- key R alpha
- key L alpha
- key \ special size 1
- }
- row {
- key | special
- key A alpha hexa
- key O alpha
- key E alpha hexa
- key U alpha
- key I alpha
- key D alpha hexa
- key H alpha
- key T alpha
- key N alpha
- key S alpha
- key _ special
- }
- row {
- key : special size 2
- key Q alpha
- key J alpha
- key K alpha
- key X alpha
- key B alpha hexa
- key M alpha
- key W alpha
- key V alpha
- key Z alpha
- key * special tele size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ! special
- key ` alpha dead
- key # special tele
- }
- row {
- key $ special
- key % special
- key & special
- }
- row {
- key ^ special
- key ( special
- key ) special
- }
- row {
- key + special
- key = special
- key ´ alpha dead
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key ' special
- key , special
- key . special
- key p alpha
- key y alpha
- key f alpha hexa
- key g alpha
- key c alpha hexa
- key r alpha
- key l alpha
- key / special
- }
- row {
- key a alpha hexa
- key o alpha
- key e alpha hexa
- key u alpha
- key i alpha
- key d alpha hexa
- key h alpha
- key t alpha
- key n alpha
- key s alpha
- key - special
- }
- row {
- white size 4
- key q alpha
- key j alpha
- key k alpha
- key x alpha
- key b alpha hexa
- key m alpha
- key w alpha
- key v alpha
- key z alpha
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key " special
- key < special
- key > special
- key P alpha
- key Y alpha
- key F alpha hexa
- key G alpha
- key C alpha hexa
- key R alpha
- key L alpha
- key ? special
- }
- row {
- key A alpha hexa
- key O alpha
- key E alpha hexa
- key U alpha
- key I alpha
- key D alpha hexa
- key H alpha
- key T alpha
- key N alpha
- key S alpha
- key _ special
- }
- row {
- white size 4
- key Q alpha
- key J alpha
- key K alpha
- key X alpha
- key B alpha hexa
- key M alpha
- key W alpha
- key V alpha
- key Z alpha
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key ! special
- key & special
- key ` alpha dead
- key ´ alpha dead
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ? special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key € special
- key £ special
- key $ special
- key ~ special
- key @ special
- }
-}
-
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special tele
- key % special
- key ¤ special
- key < special
- key > special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special tele
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ¢ special
- key ß alpha
- key ç alpha
- key ¥ special
- key _ special
- key “ special
- key ” special
- key ‘ special
- key ’ special
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Esperanto layout
-# author: Jiří Benc <jbenc@upir.cz>
-
-header {
-name "Esperanto"
-lang "eo_EO"
-wc "eo_EO"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha size 2
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key @ special size 1
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key " special
- key ŭ alpha
- key ^ alpha dead
- }
- row {
- key z alpha size 2
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special tele
- key . special tele
- key / special tele
- key ? special tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha size 2
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key ~ special size 5
- key | special size 5
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key ' special
- key Ŭ alpha
- key ^ alpha dead
- }
- row {
- key Z alpha size 2
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special
- key : special
- key & special
- key ! special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key # special tele
- key % special
- }
- row {
- key $ special
- key < special
- key > special
- }
- row {
- key € special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- slide special { key : key ; key - key _ key / key < key > }
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ŭ alpha
- key ^ alpha dead
- }
- row {
- white size 4
- key z alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- slide special { key . key , key ? key ! key @ key ( key ) } size 4
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- slide special { key : key ; key - key _ key / key < key > }
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ŭ alpha
- key ^ alpha dead
- }
- row {
- white size 4
- key Z alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- slide special { key . key , key ? key ! key @ key ( key ) } size 4
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Hebrew layout
-# author: Matan Ziv-Av <matan@svgalib.org>
-
-header {
-name "Hebrew"
-lang "he_IL"
-wc "he_IL"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key / special size 2
- key ' special
- key ק alpha
- key ר alpha
- key א alpha
- key ט alpha
- key ו alpha
- key ן alpha
- key ם alpha
- key פ alpha
- key = special size 1
- }
- row {
- key ! special
- key ש alpha
- key ד alpha
- key ג alpha
- key כ alpha
- key ע alpha
- key י alpha
- key ח alpha
- key ל alpha
- key ך alpha
- key ף special
- key [ special
- key ^ special
- }
- row {
- key ? special size 2
- key ז alpha
- key ס alpha
- key ב alpha hexa
- key ה alpha
- key נ alpha hexa
- key מ alpha
- key צ alpha
- key ת alpha
- key ץ alpha
- key . special
- key , special size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key + special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha size 2
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key @ special size 1
- }
- row {
- key ~ special
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key " special
- key | special
- key ] alpha dead
- }
- row {
- key ^ special size 2
- key z alpha
- key x alpha hexa
- key c alpha
- key v alpha hexa
- key b alpha
- key n alpha
- key m special
- key < special
- key > special
- key : special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ` special
- key # special tele
- key % special
- }
- row {
- key $ special
- key { special
- key } special
- }
- row {
- key \ special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key ת alpha
- key ץ alpha
- key ק alpha
- key ר alpha
- key א alpha
- key ט alpha
- key ו alpha
- key ן alpha
- key ם alpha
- key פ alpha
- slide special { key : key ; key - key _ key / key < key > }
- }
- row {
- key ש alpha
- key ד alpha
- key ג alpha
- key כ alpha
- key ע alpha
- key י alpha
- key ח alpha
- key ל alpha
- key ך alpha
- key ף alpha
- key ^ alpha
- }
- row {
- white size 4
- key ז alpha
- key ס alpha
- key ב alpha
- key ה alpha
- key נ alpha
- key מ alpha
- key צ alpha
- slide special { key . key , key ? key ! key @ key ( key ) } size 4
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- slide special { key : key ; key - key _ key / key < key > }
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key " alpha
- key ^ alpha dead
- }
- row {
- white size 4
- key z alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- slide special { key . key , key ? key ! key @ key ( key ) } size 4
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key ג\80\9e special
- key ג\80\9c special
- key < special
- key > special
- }
-}
-special {
- name "*�§��"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key ג\82¬ special
- key �£ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key �� special
- key �� special
- key �§ special
- key * special
- key �· special
- key ג\80¢ special
- key �° special
- key �± special
- key �½ special
- key �« special
- key �» special
- }
- row {
- key �¤ alpha
- key �« alpha
- key �¶ alpha
- key �¼ alpha
- key �\84 alpha
- key �\8b alpha
- key �\96 alpha
- key �\9c alpha
- key �\9f alpha
- key ג\84¢ special
- key �© special
- }
-}
-}
+++ /dev/null
-# title: Croatian QWERTY layout
-# author: Lovro Oreskovic <oreskovic@gmail.com>
-
-header {
-name "Hrvatski (QWERTY)"
-lang "hr_HR"
-wc "hr_HR"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-size 6 { width 35 height 35 textpos 26 left 15 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key š alpha
- key đ alpha
- }
- row {
- key a alpha hexa size 6
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key č alpha
- key ć alpha
- key ž alpha
- }
- row {
- key < special
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special
- key . special
- key - special tele
- key @ special
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key ? num special tele
- key 0 num hexa tele
- key * special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Š alpha
- key Đ alpha
- }
- row {
- key A alpha hexa size 6
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Č alpha
- key Ć alpha
- key Ž alpha
- }
- row {
- key > special
- key Z alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special
- key : special
- key _ special
- key @ special
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ! special
- key " special
- key # special tele
- }
- row {
- key $ special
- key % special
- key & special
- }
- row {
- key & special
- key / special
- key ( special tele
- }
- row {
- key ) special tele
- key = special
- key ? special
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key š alpha
- key đ alpha
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key č alpha
- key ć alpha
- key ž alpha
- }
- row {
- white size 4
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Š alpha
- key Đ alpha
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Č alpha
- key Ć alpha
- key Ž alpha
- }
- row {
- white size 4
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Croatian QWERTZ layout
-# author: Lovro Oreskovic <oreskovic@gmail.com>
-
-header {
-name "Hrvatski (QWERTZ)"
-lang "hr_HR"
-wc "hr_HR"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-size 6 { width 35 height 35 textpos 26 left 15 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key š alpha
- key đ alpha
- }
- row {
- key a alpha hexa size 6
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key č alpha
- key ć alpha
- key ž alpha
- }
- row {
- key < special
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special
- key . special
- key - special tele
- key @ special
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key ? num special tele
- key 0 num hexa tele
- key * special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Š alpha
- key Đ alpha
- }
- row {
- key A alpha hexa size 6
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Č alpha
- key Ć alpha
- key Ž alpha
- }
- row {
- key > special
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special
- key : special
- key _ special
- key @ special
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ! special
- key " special
- key # special tele
- }
- row {
- key $ special
- key % special
- key & special
- }
- row {
- key & special
- key / special
- key ( special tele
- }
- row {
- key ) special tele
- key = special
- key ? special
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key š alpha
- key đ alpha
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key č alpha
- key ć alpha
- key ž alpha
- }
- row {
- white size 4
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Š alpha
- key Đ alpha
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Č alpha
- key Ć alpha
- key Ž alpha
- }
- row {
- white size 4
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Hungarian QWERTZ layout
-# author: Hámorszky Balázs <balihb@freepop.hu>
-
-header {
-name "Magyar (QWERTZ)"
-lang "hu_HU"
-wc "hu_HU"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key @ special size 5
- key : special size 5
- key ) special size 5
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ´ alpha dead
- key ¨ alpha dead
- key ˝ alpha dead
- }
- row {
- key ´ alpha dead size 5
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special tele
- key . special tele
- key / special tele
- key ? special tele size 5
- key ! special size 5
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key ~ special
- key | special
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key ´ alpha dead
- key ¨ alpha dead
- key ˝ alpha dead
- }
- row {
- key ´ alpha dead size 5
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special size 5
- key : special
- key " special size 5
- key ( special
- key ) special
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key # special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key & special
- key { special tele
- key } special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key ¨ alpha dead
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ´ alpha dead
- key ˝ alpha dead
- }
- row {
- white size 4
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- slide special { key . key , key ) key ( key @ key < key > }
- slide special { key ? key ! key : key - key _ key / key ; }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key ¨ alpha dead
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key ´ alpha dead
- key ˝ alpha dead
- }
- row {
- white size 4
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- slide special { key . key , key ) key ( key @ key < key > }
- slide special { key ? key ! key : key - key _ key / key ; }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-header {
-name ""
-lang "en_GB"
-wc ""
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_special {
-special {
- name "test 1"
- default_size 0
- row {
- key a alpha
- }
- row {
- key b alpha
- }
- row {
- key c alpha
- }
-}
-special {
- name "test 2"
- default_size 0
- row {
- key d alpha
- }
- row {
- key e alpha
- }
- row {
- key f alpha
- }
-}
-special_lowercase {
- name "test 3"
- default_size 0
- row {
- key g alpha
- }
- row {
- key h alpha
- }
- row {
- key i alpha
- }
-}
-special_uppercase {
- default_size 0
- row {
- key G alpha
- }
- row {
- key H alpha
- }
- row {
- key I alpha
- }
-}
-special_lowercase {
- name "test 4"
- default_size 0
- row {
- key j alpha
- }
- row {
- key k alpha
- }
- row {
- key l alpha
- }
-}
-special_uppercase {
- default_size 0
- row {
- key J alpha
- }
- row {
- key K alpha
- }
- row {
- key L alpha
- }
-}
-}
+++ /dev/null
-# title: Slovak QWERTY layout
-# author: Roman Moravčík <roman.moravcik@gmail.com>
-
-header {
-name "Slovenčina (QWERTY)"
-lang "sk_SK"
-wc "sk_SK"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha size 2
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key @ special size 1
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ô alpha
- key ´ alpha dead
- key ˇ alpha dead
- }
- row {
- key z alpha size 2
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special tele
- key . special tele
- key / special tele
- key ? special tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha size 2
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key ~ special size 5
- key | special size 5
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ô alpha
- key ´ alpha dead
- key ˇ alpha dead
- }
- row {
- key Z alpha size 2
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special
- key : special
- key " special
- key ! special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key # special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key & special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key ä alpha
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ô alpha
- key ´ alpha dead
- }
- row {
- key z alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- white size 4
- key ˇ alpha dead
- slide special { key . key , key ? key ! key - key _ key & key | key \ key / key < key > }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Ä alpha
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ô alpha
- key ´ alpha dead
- }
- row {
- key Z alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- white size 4
- key ˇ alpha dead
- slide special { key . key , key ? key ! key - key _ key & key | key \ key / key < key > }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key £ special
- key € special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key ¤ special
- key $ special
- key ¥ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key ¨ special
- key ° special
- key · special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ¢ alpha
- key ß alpha
- key ç alpha
- key ´ alpha
- key ` alpha
- key “ alpha
- key ” alpha
- key ‘ alpha
- key ’ alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Slovak QWERTZ layout
-# author: Roman Moravčík <roman.moravcik@gmail.com>
-
-header {
-name "Slovenčina (QWERTZ)"
-lang "sk_SK"
-wc "sk_SK"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha size 2
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key @ special size 1
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ô alpha
- key ´ alpha dead
- key ˇ alpha dead
- }
- row {
- key y alpha size 2
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key , special tele
- key . special tele
- key / special tele
- key ? special tele size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key - num special tele
- key 0 num hexa tele
- key = special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha size 2
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key ~ special size 5
- key | special size 5
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ô alpha
- key ´ alpha dead
- key ˇ alpha dead
- }
- row {
- key Y alpha size 2
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key ; special
- key : special
- key " special
- key ! special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ' special
- key # special tele
- key $ special
- }
- row {
- key % special
- key < special
- key > special
- }
- row {
- key & special
- key ( special tele
- key ) special tele
- }
- row {
- key _ special
- key * special tele
- key + special tele
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key z alpha
- key u alpha
- key i alpha
- key o alpha
- key p alpha tele
- key ä alpha
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ô alpha
- key ´ alpha dead
- }
- row {
- key y alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- white size 4
- key ˇ alpha dead
- slide special { key . key , key ? key ! key - key _ key & key | key \ key / key < key > }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Z alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Ä alpha
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ô alpha
- key ´ alpha dead
- }
- row {
- key Y alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- white size 4
- key ˇ alpha dead
- slide special { key . key , key ? key ! key - key _ key & key | key \ key / key < key > }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key £ special
- key € special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key ¤ special
- key $ special
- key ¥ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key ¨ special
- key ° special
- key · special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ¢ alpha
- key ß alpha
- key ç alpha
- key ´ alpha
- key ` alpha
- key “ alpha
- key ” alpha
- key ‘ alpha
- key ’ alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: TH Kedmanee layout
-# author: Panu Tangchalermkul <panuta@gmail.com>
-# license: GPLv2
-
-header {
-name "ไทย Kedmanee"
-lang "th_TH"
-wc "th_TH"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key ๆ special size 2
- key ไ special
- key ำ special
- key พ alpha
- key ะ special
- key ั special
- key ี special
- key ร alpha
- key น alpha
- key ย alpha
- key บ alpha size 1
- }
- row {
- key ฟ alpha
- key ห alpha
- key ก alpha
- key ด alpha
- key เ special
- key ้ special
- key ่ special
- key า special
- key ส alpha
- key ว alpha
- key ง alpha
- key ล alpha
- }
- row {
- key ผ alpha size 2
- key ป alpha
- key แ special
- key อ alpha
- key ิ special
- key ื special
- key ท alpha
- key ม alpha
- key ใ special
- key ฝ alpha
- key @ special size 1
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ๅ special
- key / special
- key - special
- }
- row {
- key ภ alpha
- key ถ alpha
- key ุ special
- }
- row {
- key ึ special
- key ค alpha
- key ต alpha
- }
- row {
- key จ alpha
- key ข alpha
- key ช alpha
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key + special size 2
- key " special
- key ฎ alpha
- key ฑ alpha
- key ธ alpha
- key ํ special
- key ๊ special
- key ณ alpha
- key ฯ special
- key ญ alpha
- key ฐ alpha size 1
- }
- row {
- key ฤ alpha
- key ฆ alpha
- key ฏ alpha
- key โ special
- key ฌ alpha
- key ็ special
- key ๋ special
- key ษ alpha
- key ศ alpha
- key ซ alpha
- key . special
- key , special
- }
- row {
- key ( special size 2
- key ) special
- key ฉ alpha
- key ฮ alpha
- key ฺ special
- key ์ special
- key ? special
- key ฒ alpha
- key ฬ alpha
- key ฦ alpha
- key * special size 1
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ๑ num
- key ๒ num
- key ๓ num
- }
- row {
- key ๔ num
- key ๕ num
- key ๖ num
- }
- row {
- key ๗ num
- key ๘ num
- key ๙ num
- }
- row {
- key ู special
- key ๐ num
- key ฿ special
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "กขค"
- margin 0 0 0 0
- default_size 3
- row {
- key พ alpha
- key ร alpha
- key น alpha
- key ย alpha
- key บ alpha
- key ล alpha
- key ภ alpha
- key ถ alpha
- key ค alpha
- slide special { key ิ key ี key ึ key ื }
- slide special { key ่ key ้ key ๊ key ๋ }
- }
- row {
- key ฟ alpha
- key ห alpha
- key ก alpha
- key ด alpha
- key ส alpha
- key ว alpha
- key ง alpha
- key ต alpha
- key จ alpha
- slide special { key เ key แ key โ key ไ key ใ }
- slide special { key ะ key า key ำ }
- }
- row {
- white size 3
- key ผ alpha
- key ป alpha
- key อ alpha
- key ท alpha
- key ม alpha
- key ฝ alpha
- key ข alpha
- key ช alpha
- slide special { key ุ key ู }
- slide special { key ั key ็ key ์ }
- }
-}
-uppercase {
- name "ฏฑธ"
- margin 0 0 0 0
- default_size 3
- row {
- key ฎ alpha
- key ฑ alpha
- key ธ alpha
- key ณ alpha
- key ฯ special
- key ญ alpha
- key ฐ alpha
- key , special
- key ฿ special
- slide special { key ิ key ี key ึ key ื }
- slide special { key ่ key ้ key ๊ key ๋ }
- }
- row {
- key ฤ alpha
- key ฆ alpha
- key ฏ alpha
- key ฌ alpha
- key ็ special
- key ษ alpha
- key ศ alpha
- key ซ alpha
- key . special
- slide special { key เ key แ key โ key ไ key ใ }
- slide special { key ะ key า key ำ }
- }
- row {
- white size 3
- key ( special
- key ) special
- key ฉ alpha
- key ฮ alpha
- key ์ special
- key ฒ alpha
- key ฬ alpha
- key ฦ alpha
- slide special { key ุ key ู }
- slide special { key ั key ็ key ์ }
- }
-}
-special {
- name "๑!+"
- margin 0 0 0 0
- default_size 3
- row {
- key ๑ num tele
- key ๒ num tele
- key ๓ num tele
- key " special
- key + special
- key - special
- key = special
- key ! special
- key & special
- key ` alpha dead
- key ´ alpha dead
- }
- row {
- key ๔ num tele
- key ๕ num tele
- key ๖ num tele
- key ' special
- key : special
- key ; special
- key ? special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key ๗ num tele
- key ๘ num tele
- key ๙ num tele
- key ๐ num tele
- key . special
- key , special
- key € special
- key £ special
- key $ special
- key ~ special
- key @ special
- }
-}
-
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special tele
- key % special
- key ¤ special
- key < special
- key > special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special tele
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ¢ special
- key ß alpha
- key ç alpha
- key ¥ special
- key _ special
- key “ special
- key ” special
- key ‘ special
- key ’ special
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-# title: Turkish QWERTY layout
-# author: Burak Ilgicioglu <ilgicioglu@gmail.com>
-
-header {
-name "Türkçe (QWERTY)"
-lang "tr_TR"
-wc "tr_TR"
-
-size 0 { width 35 height 35 textpos 26 left 0 top 0 }
-size 1 { width 50 height 35 textpos 26 left 0 top 0 }
-size 2 { width 55 height 35 textpos 26 left 0 top 0 }
-size 3 { width 72 height 55 textpos 41 left 0 top 0 }
-size 4 { width 143 height 55 textpos 41 left 0 top 0 }
-size 5 { width 24 height 35 textpos 26 left 0 top 0 }
-size 6 { width 35 height 35 textpos 26 left 15 top 0 }
-}
-
-kbd_normal {
-lowercase {
- margin 0 0 0 0
- default_size 0
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key ı alpha
- key o alpha
- key p alpha tele
- key ğ alpha
- key ü alpha
- }
- row {
- key a alpha hexa size 6
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ş alpha
- key i alpha
- key ; special
- }
- row {
- key < special
- key z alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key ö special
- key ç special
- key . special tele
- }
-}
-lowercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- }
- row {
- key ? num special tele
- key 0 num hexa tele
- key * special
- }
-}
-uppercase {
- margin 0 0 0 0
- default_size 0
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Ğ alpha
- key Ü alpha
- }
- row {
- key A alpha hexa size 6
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ş alpha
- key i alpha
- key ; alpha
- }
- row {
- key > special
- key Z alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key Ö alpha
- key Ç alpha
- key . special
- }
-}
-uppercase_num {
- margin 0 0 0 9
- default_size 0
- row {
- key ! special
- key " special
- key # special tele
- }
- row {
- key $ special
- key % special
- key & special
- }
- row {
- key & special
- key / special
- key ( special tele
- }
- row {
- key ) special tele
- key = special
- key ? special
- }
-}
-}
-
-kbd_thumb {
-lowercase {
- name "abc"
- margin 0 0 0 0
- default_size 3
- row {
- key q alpha
- key w alpha tele
- key e alpha hexa
- key r alpha
- key t alpha
- key y alpha
- key u alpha
- key ı alpha
- key o alpha
- key p alpha tele
- key ğ alpha
- key ü alpha
- }
- row {
- key a alpha hexa
- key s alpha
- key d alpha hexa
- key f alpha hexa
- key g alpha
- key h alpha
- key j alpha
- key k alpha
- key l alpha
- key ş alpha
- key i alpha
- key ; special
- }
- row {
- white size 4
- key z alpha
- key x alpha
- key c alpha hexa
- key v alpha
- key b alpha hexa
- key n alpha
- key m alpha
- key ö alpha
- key ç alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-uppercase {
- name "ABC"
- margin 0 0 0 0
- default_size 3
- row {
- key Q alpha
- key W alpha tele
- key E alpha hexa
- key R alpha
- key T alpha
- key Y alpha
- key U alpha
- key I alpha
- key O alpha
- key P alpha tele
- key Ğ alpha
- key Ü alpha
- }
- row {
- key A alpha hexa
- key S alpha
- key D alpha hexa
- key F alpha hexa
- key G alpha
- key H alpha
- key J alpha
- key K alpha
- key L alpha
- key Ş alpha
- key İ alpha
- key ; special
- }
- row {
- white size 4
- key Z alpha
- key X alpha
- key C alpha hexa
- key V alpha
- key B alpha hexa
- key N alpha
- key M alpha
- key Ö alpha
- key Ç alpha
- slide special { key . key , key ? key ! key @ key ( key ) }
- slide special { key : key ; key - key _ key / key < key > }
- }
-}
-special {
- name "1!+"
- margin 0 0 0 0
- default_size 3
- row {
- key 1 num hexa tele
- key 2 num hexa tele
- key 3 num hexa tele
- key " special
- key + special
- key - special
- key = special
- key _ special
- key & special
- key @ special
- key ~ special
- }
- row {
- key 4 num hexa tele
- key 5 num hexa tele
- key 6 num hexa tele
- key ' special
- key : special
- key ; special
- key ! special
- key ( special
- key ) special
- key / special
- key \ special
- }
- row {
- key 7 num hexa tele
- key 8 num hexa tele
- key 9 num hexa tele
- key 0 num hexa tele
- key . special
- key , special
- key ? special
- key „ special
- key “ special
- key < special
- key > special
- }
-}
-special {
- name "*§¿"
- margin 0 0 0 0
- default_size 3
- row {
- key # special
- key % special
- key € special
- key £ special
- key $ special
- key ^ special
- key | special
- key [ special
- key ] special
- key { special
- key } special
- }
- row {
- key ¡ special
- key ¿ special
- key § special
- key * special
- key · special
- key • special
- key ° special
- key ± special
- key ½ special
- key « special
- key » special
- }
- row {
- key ä alpha
- key ë alpha
- key ö alpha
- key ü alpha
- key Ä alpha
- key Ë alpha
- key Ö alpha
- key Ü alpha
- key ß alpha
- key ™ special
- key © special
- }
-}
-}
+++ /dev/null
-CFLAGS_ADD = -g -W -Wall `pkg-config --cflags gtk+-2.0 hildon-1 hildon-fm-2 libosso gnome-vfs-2.0`
-LDFLAGS_ADD = `pkg-config --libs gtk+-2.0 hildon-1 hildon-fm-2 libosso libosso gnome-vfs-2.0`
-LD = $(CC)
-
-all: ukbdcreator
-
-ukbdcreator.o: ukbdcreator.c version.h ukbdcreator.h
- $(CC) $(CFLAGS_ADD) -c -o $@ $<
-
-compiler.o: compiler.c ukbdcreator.h ../vkb_compiler.h
- $(CC) $(CFLAGS_ADD) -c -o $@ $<
-
-ukbdcreator: ukbdcreator.o compiler.o ../vkb_compiler_lib.o
- $(LD) $(LDFLAGS_ADD) -o $@ $+
-
-version.h: ../VERSION
- echo '#define UKBD_VERSION "'`cat ../VERSION`'"' > version.h
-
-clean:
- rm -f ukbdcreator *.o core version.h
-
-DESTDIR ?= /usr/local
-install:
- install -d $(DESTDIR)/bin $(DESTDIR)/share/applications/hildon $(DESTDIR)/share/dbus-1/services
- install ukbdcreator $(DESTDIR)/bin
- install -m 0644 ukbdcreator.desktop $(DESTDIR)/share/applications/hildon
- install -m 0644 cz.upir.ukbdcreator.service $(DESTDIR)/share/dbus-1/services
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <gtk/gtk.h>
-#include <glib/gstdio.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "../vkb_compiler.h"
-#include "ukbdcreator.h"
-
-static gchar *saved_layout = NULL;
-static gchar *saved_lang = NULL;
-static gchar *act_layout = NULL;
-
-struct priv {
- char *buf;
- size_t pos;
- int fout;
- gchar *lang;
-};
-
-static void error(void *p, int line, char *msg)
-{
- (void)p;
- disp_compile_error(line, msg);
-}
-
-static int warning(void *p, int line, char *msg)
-{
- (void)p;
- disp_compile_error(line, msg);
- return -1;
-}
-
-static int get_line(void *p, void *buf, size_t size)
-{
- struct priv *priv = p;
- size_t dpos = 0;
- char *dbuf = buf;
-
- while (priv->buf[priv->pos]) {
- if (dpos + 1 < size)
- dbuf[dpos++] = priv->buf[priv->pos];
- if (priv->buf[priv->pos++] == '\n')
- break;
- }
- dbuf[dpos] = '\0';
- return (priv->buf[priv->pos] || dpos) ? 0 : -1;
-}
-
-static int write_buf(void *p, void *buf, size_t size)
-{
- struct priv *priv = p;
-
- if (write(priv->fout, buf, size) != (ssize_t)size) {
- disp_error("Error writing temporary file");
- return -1;
- }
- return 0;
-}
-
-static off_t tell_buf(void *p)
-{
- struct priv *priv = p;
-
- return lseek(priv->fout, 0, SEEK_CUR);
-}
-
-static void seek_buf(void *p, off_t pos)
-{
- struct priv *priv = p;
-
- lseek(priv->fout, pos, SEEK_SET);
-}
-
-static void return_lang(void *p, char *lang)
-{
- struct priv *priv = p;
-
- priv->lang = g_strdup(lang);
-}
-
-static struct compiler_ops ops = {
- .get_line = get_line,
- .write = write_buf,
- .tell = tell_buf,
- .seek = seek_buf,
- .error = error,
- .warning = warning,
- .return_lang = return_lang,
-};
-
-gboolean compile_layout(gchar *buf, gchar **fname, gchar **lang)
-{
- struct priv priv;
- int res;
-
- priv.buf = buf;
- priv.pos = 0;
- priv.lang = NULL;
-
- *fname = g_build_filename(g_get_tmp_dir(), "ukbdXXXXXX", NULL);
- priv.fout = g_mkstemp(*fname);
- if (priv.fout < 0) {
- g_free(*fname);
- disp_error("Error creating temporary file");
- return FALSE;
- }
- res = compile(&ops, &priv);
- close(priv.fout);
- if (res < 0) {
- g_unlink(*fname);
- g_free(*fname);
- g_free(priv.lang);
- return FALSE;
- }
- *lang = priv.lang;
- return TRUE;
-}
-
-static gchar *get_lang(GConfClient *conf)
-{
- return gconf_client_get_string(conf,
- "/apps/osso/inputmethod/hildon-im-languages/language-0", NULL);
-}
-
-static void set_lang(GConfClient *conf, gchar *val)
-{
- gconf_client_set_string(conf,
- "/apps/osso/inputmethod/hildon-im-languages/language-0", val, NULL);
-}
-
-void test_layout(GConfClient *conf, gchar *fname, gchar *lang)
-{
- gchar *cmd;
- int res;
-
- if (saved_lang)
- restore_layout(conf, FALSE);
- cmd = g_strdup_printf("sudo /usr/libexec/ukeyboard-set -s %s %s", fname, lang);
- res = system(cmd);
- g_free(cmd);
- if (!WIFEXITED(res)) {
- disp_error("Cannot execute helper script");
- return;
- }
- res = WEXITSTATUS(res);
- if (res == 2) {
- disp_error("Redefining a system language is not possible");
- return;
- }
- if (res) {
- disp_error("Activating of the layout failed");
- return;
- }
- saved_lang = g_strdup(lang);
- saved_layout = get_lang(conf);
- set_lang(conf, "en_GB");
- set_lang(conf, lang);
- if (act_layout) {
- g_unlink(act_layout);
- g_free(act_layout);
- }
- act_layout = g_strdup(fname);
- disp_info("Layout activated");
-}
-
-void restore_layout(GConfClient *conf, gboolean warn)
-{
- gchar *cmd;
- int res;
-
- if (!saved_lang) {
- if (warn)
- disp_info("No layout to restore");
- return;
- }
- cmd = g_strdup_printf("sudo /usr/libexec/ukeyboard-set -r %s", saved_lang);
- res = system(cmd);
- g_free(cmd);
- if (!WIFEXITED(res)) {
- disp_error("Cannot execute helper script");
- return;
- }
- res = WEXITSTATUS(res);
- if (res) {
- disp_error("Restoring of original layout failed");
- return;
- }
- set_lang(conf, "en_GB");
- set_lang(conf, saved_layout);
- g_free(saved_lang);
- g_free(saved_layout);
- saved_lang = saved_layout = NULL;
- if (act_layout) {
- g_unlink(act_layout);
- g_free(act_layout);
- act_layout = NULL;
- }
- if (warn)
- disp_info("Layout restored");
-}
-
+++ /dev/null
-[D-BUS Service]
-Name=cz.upir.ukbdcreator
-Exec=/usr/bin/ukbdcreator
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon.h>
-#include <hildon/hildon-file-chooser-dialog.h>
-#include <libosso.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include "version.h"
-#include "ukbdcreator.h"
-
-static HildonWindow *window_main;
-static GtkClipboard *clipboard;
-static GtkTextView *view;
-static GtkTextBuffer *buffer;
-static gchar *filename = NULL;
-static gboolean is_fullscreen = FALSE;
-static gboolean is_modified = FALSE;
-
-static int last_error_line = 0;
-static gchar *last_error_msg = NULL;
-
-static GConfClient *conf;
-
-
-static void toggle_fullscreen(void)
-{
- if (is_fullscreen)
- gtk_window_unfullscreen(GTK_WINDOW(window_main));
- else
- gtk_window_fullscreen(GTK_WINDOW(window_main));
- is_fullscreen = !is_fullscreen;
-}
-
-static void set_modified(void)
-{
- is_modified = TRUE;
-}
-
-static void set_filename(gchar *fname)
-{
- if (filename)
- g_free(filename);
- filename = fname;
-}
-
-void disp_error(gchar *msg)
-{
- hildon_banner_show_information(GTK_WIDGET(window_main), GTK_STOCK_DIALOG_ERROR, msg);
-}
-
-void disp_info(gchar *msg)
-{
- hildon_banner_show_information(GTK_WIDGET(window_main), GTK_STOCK_DIALOG_INFO, msg);
-}
-
-static void __disp_compile_error(void)
-{
- GtkTextIter iter;
-
- if (!last_error_msg)
- return;
- if (last_error_line > 0) {
- gtk_text_buffer_get_iter_at_line(buffer, &iter, last_error_line - 1);
- gtk_text_buffer_place_cursor(buffer, &iter);
- gtk_text_view_scroll_mark_onscreen(view, gtk_text_buffer_get_mark(buffer, "insert"));
- }
- hildon_banner_show_information(GTK_WIDGET(window_main), GTK_STOCK_DIALOG_ERROR, last_error_msg);
-}
-
-void disp_compile_error(int line, gchar *msg)
-{
- g_free(last_error_msg);
- last_error_msg = g_strdup(msg);
- last_error_line = line;
- __disp_compile_error();
-}
-
-static gboolean read_file(gchar *fname)
-{
- GnomeVFSFileInfo finfo;
- GnomeVFSHandle *handle = NULL;
- GnomeVFSFileSize bytes;
- gchar *buf;
-
- if (gnome_vfs_get_file_info(fname, &finfo, GNOME_VFS_FILE_INFO_DEFAULT) != GNOME_VFS_OK ||
- gnome_vfs_open(&handle, fname, GNOME_VFS_OPEN_READ) != GNOME_VFS_OK) {
- disp_error("Error opening file");
- return FALSE;
- }
- buf = g_malloc0(finfo.size + 1);
- if (!buf) {
- gnome_vfs_close(handle);
- disp_error("Not enough memory");
- return FALSE;
- }
- if (gnome_vfs_read(handle, buf, finfo.size, &bytes) != GNOME_VFS_OK || bytes != finfo.size) {
- gnome_vfs_close(handle);
- g_free(buf);
- disp_error("Error reading file");
- return FALSE;
- }
- gnome_vfs_close(handle);
-
- gtk_text_buffer_set_text(buffer, buf, -1);
- g_free(buf);
- return TRUE;
-}
-
-static gchar *get_buffer(void)
-{
- GtkTextIter start, end;
-
- gtk_text_buffer_get_bounds(buffer, &start, &end);
- return gtk_text_buffer_get_slice(buffer, &start, &end, TRUE);
-}
-
-static gboolean write_file(gchar *fname)
-{
- GnomeVFSHandle *handle = NULL;
- GnomeVFSFileSize bytes;
- gchar *buf;
- size_t size;
-
- if (gnome_vfs_create(&handle, fname, GNOME_VFS_OPEN_WRITE, FALSE, 0644) != GNOME_VFS_OK) {
- disp_error("Error creating file");
- return FALSE;
- }
- buf = get_buffer();
- size = strlen(buf);
- if (gnome_vfs_write(handle, buf, size, &bytes) != GNOME_VFS_OK || bytes != size) {
- gnome_vfs_close(handle);
- g_free(buf);
- disp_error("Error writing file");
- return FALSE;
- }
- gnome_vfs_close(handle);
- g_free(buf);
- disp_info("Saved");
- return TRUE;
-}
-
-static gchar *file_chooser(gboolean open)
-{
- GtkWidget *chooser;
- GtkFileFilter *filter;
- gchar *result = NULL;
-
- chooser = hildon_file_chooser_dialog_new(GTK_WINDOW(window_main),
- open ? GTK_FILE_CHOOSER_ACTION_OPEN : GTK_FILE_CHOOSER_ACTION_SAVE);
- filter = gtk_file_filter_new();
- gtk_file_filter_add_pattern(filter, "*.def");
- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), filter);
- gtk_widget_show_all(chooser);
- if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_OK)
- result = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));
- gtk_widget_destroy(chooser);
- if (!open && result && !g_str_has_suffix(result, ".def")) {
- gchar *tmp = result;
-
- result = g_strconcat(result, ".def", NULL);
- g_free(tmp);
- }
- return result;
-}
-
-static void file_save_as(void)
-{
- gchar *fname;
-
- fname = file_chooser(FALSE);
- if (fname) {
- if (write_file(fname)) {
- set_filename(fname);
- is_modified = FALSE;
- } else
- g_free(fname);
- }
-}
-
-static void file_save(void)
-{
- if (!filename) {
- file_save_as();
- return;
- }
- if (write_file(filename))
- is_modified = FALSE;
-}
-
-static gboolean file_ask_save(void)
-{
- GtkWidget *note;
- gint res;
-
- if (!is_modified)
- return TRUE;
- note = hildon_note_new_confirmation_add_buttons(GTK_WINDOW(window_main),
- "Save the file before closing?", "Yes", 1, "No", 2, "Cancel", 0, NULL);
- res = gtk_dialog_run(GTK_DIALOG(note));
- gtk_widget_destroy(note);
- if (res == 1) {
- file_save_as();
- return !is_modified;
- }
- if (res == 2)
- return TRUE;
- return FALSE;
-}
-
-static void file_open(void)
-{
- gchar *fname;
-
- if (!file_ask_save())
- return;
- fname = file_chooser(TRUE);
- if (fname) {
- if (read_file(fname)) {
- set_filename(fname);
- is_modified = FALSE;
- g_free(last_error_msg);
- last_error_msg = NULL;
- } else
- g_free(fname);
- }
-}
-
-static void file_new(void)
-{
- if (!file_ask_save())
- return;
- gtk_text_buffer_set_text(buffer, "", -1);
- set_filename(NULL);
- is_modified = FALSE;
- g_free(last_error_msg);
- last_error_msg = NULL;
-}
-
-static gboolean file_quit(void)
-{
- if (!file_ask_save())
- return TRUE;
- restore_layout(conf, FALSE);
- gtk_main_quit();
- return FALSE;
-}
-
-static void edit_cut(void)
-{
- gtk_text_buffer_cut_clipboard(buffer, clipboard, TRUE);
-}
-
-static void edit_copy(void)
-{
- gtk_text_buffer_copy_clipboard(buffer, clipboard);
-}
-
-static void edit_paste(void)
-{
- gtk_text_buffer_paste_clipboard(buffer, clipboard, NULL, TRUE);
-}
-
-static void run_about(void)
-{
- gtk_show_about_dialog(GTK_WINDOW(window_main),
- "version", UKBD_VERSION,
- "comments", "Licensed under GPLv2. Please send bug reports and feature requests to jbenc@upir.cz.",
- "copyright", "(c) 2008 Jiri Benc",
- "website", "http://upir.cz/maemo/keyboards/");
-}
-
-static void compile_and_test(void)
-{
- gchar *buf, *fname, *lang;
- gboolean res;
-
- buf = get_buffer();
- res = compile_layout(buf, &fname, &lang);
- g_free(buf);
- if (res) {
- test_layout(conf, fname, lang);
- g_free(fname);
- g_free(lang);
- }
-}
-
-static void untest(void)
-{
- restore_layout(conf, TRUE);
-}
-
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event)
-{
- (void)widget;
- switch (event->keyval) {
- case GDK_F6:
- toggle_fullscreen();
- return TRUE;
- }
- return FALSE;
-}
-
-static GtkWidget *main_layout(void)
-{
- GtkWidget *scroll;
-
- view = GTK_TEXT_VIEW(gtk_text_view_new());
- gtk_text_view_set_editable(view, TRUE);
- gtk_text_view_set_left_margin(view, 10);
- gtk_text_view_set_right_margin(view, 10);
-
- scroll = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_container_add(GTK_CONTAINER(scroll), GTK_WIDGET(view));
-
- buffer = gtk_text_view_get_buffer(view);
- g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(set_modified), NULL);
- g_signal_connect(G_OBJECT(buffer), "modified-changed", G_CALLBACK(set_modified), NULL);
-
- return scroll;
-}
-
-static GtkMenu *main_menu(void)
-{
- GtkMenuShell *menu, *submenu;
- GtkWidget *item;
-
- menu = GTK_MENU_SHELL(gtk_menu_new());
-
- submenu = GTK_MENU_SHELL(gtk_menu_new());
- item = gtk_menu_item_new_with_label("File");
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), GTK_WIDGET(submenu));
- gtk_menu_shell_append(menu, item);
-
- item = gtk_menu_item_new_with_label("New");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(file_new), NULL);
- gtk_menu_shell_append(submenu, item);
- item = gtk_menu_item_new_with_label("Open...");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(file_open), NULL);
- gtk_menu_shell_append(submenu, item);
- item = gtk_menu_item_new_with_label("Save");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(file_save), NULL);
- gtk_menu_shell_append(submenu, item);
- item = gtk_menu_item_new_with_label("Save as...");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(file_save_as), NULL);
- gtk_menu_shell_append(submenu, item);
-
- submenu = GTK_MENU_SHELL(gtk_menu_new());
- item = gtk_menu_item_new_with_label("Edit");
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), GTK_WIDGET(submenu));
- gtk_menu_shell_append(menu, item);
-
- item = gtk_menu_item_new_with_label("Cut");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(edit_cut), NULL);
- gtk_menu_shell_append(submenu, item);
- item = gtk_menu_item_new_with_label("Copy");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(edit_copy), NULL);
- gtk_menu_shell_append(submenu, item);
- item = gtk_menu_item_new_with_label("Paste");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(edit_paste), NULL);
- gtk_menu_shell_append(submenu, item);
-
- gtk_menu_shell_append(menu, gtk_separator_menu_item_new());
- item = gtk_menu_item_new_with_label("Test layout");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(compile_and_test), NULL);
- gtk_menu_shell_append(menu, item);
- item = gtk_menu_item_new_with_label("Restore original layout");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(untest), NULL);
- gtk_menu_shell_append(menu, item);
- item = gtk_menu_item_new_with_label("Show last error");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(__disp_compile_error), NULL);
- gtk_menu_shell_append(menu, item);
-
- gtk_menu_shell_append(menu, gtk_separator_menu_item_new());
- item = gtk_menu_item_new_with_label("Fullscreen");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(toggle_fullscreen), NULL);
- gtk_menu_shell_append(menu, item);
- item = gtk_menu_item_new_with_label("About");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(run_about), NULL);
- gtk_menu_shell_append(menu, item);
- item = gtk_menu_item_new_with_label("Exit");
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(file_quit), NULL);
- gtk_menu_shell_append(menu, item);
-
- return GTK_MENU(menu);
-}
-
-static GtkToolbar *main_toolbar(void)
-{
- GtkToolbar *bar;
- GtkToolItem *item;
-
- bar = GTK_TOOLBAR(gtk_toolbar_new());
- gtk_toolbar_set_orientation(bar, GTK_ORIENTATION_HORIZONTAL);
- gtk_toolbar_set_style(bar, GTK_TOOLBAR_BOTH_HORIZ);
-
- item = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(file_open), NULL);
- gtk_toolbar_insert(bar, item, -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(file_save), NULL);
- gtk_toolbar_insert(bar, item, -1);
- gtk_toolbar_insert(bar, gtk_separator_tool_item_new(), -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_CUT);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(edit_cut), NULL);
- gtk_toolbar_insert(bar, item, -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_COPY);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(edit_copy), NULL);
- gtk_toolbar_insert(bar, item, -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_PASTE);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(edit_paste), NULL);
- gtk_toolbar_insert(bar, item, -1);
- gtk_toolbar_insert(bar, gtk_separator_tool_item_new(), -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_MEDIA_PLAY);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(compile_and_test), NULL);
- gtk_toolbar_insert(bar, item, -1);
- item = gtk_tool_button_new_from_stock(GTK_STOCK_MEDIA_STOP);
- g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(untest), NULL);
- gtk_toolbar_insert(bar, item, -1);
-
- return bar;
-}
-
-int main(int argc, char **argv)
-{
- HildonProgram *program;
-
- gtk_init(&argc, &argv);
- program = hildon_program_get_instance();
- g_set_prgname("ukbdcreator");
- g_set_application_name("Ukeyboard Creator");
- osso_initialize("cz.upir.ukbdcreator", UKBD_VERSION, TRUE, NULL);
- gnome_vfs_init();
- conf = gconf_client_get_default();
- gconf_client_add_dir(conf, "/apps/osso/inputmethod/hildon-im-languages",
- GCONF_CLIENT_PRELOAD_NONE, NULL);
-
- window_main = HILDON_WINDOW(hildon_window_new());
- hildon_program_add_window(program, window_main);
- clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_can_store(clipboard, NULL, 0);
-
- gtk_container_add(GTK_CONTAINER(window_main), main_layout());
- hildon_window_set_menu(window_main, main_menu());
- hildon_window_add_toolbar(window_main, main_toolbar());
-
- g_signal_connect(G_OBJECT(window_main), "key_press_event", G_CALLBACK(key_pressed), NULL);
- g_signal_connect(G_OBJECT(window_main), "delete_event", G_CALLBACK(file_quit), NULL);
-
- gtk_widget_show_all(GTK_WIDGET(window_main));
- gtk_main();
- return 0;
-}
+++ /dev/null
-[Desktop Entry]
-Encoding=UTF-8
-Type=Application
-Name=Ukeyboard Creator
-Exec=/usr/bin/ukbdcreator
-X-Osso-Service=cz.upir.ukbdcreator
-Icon=ukeyboard
-StartupWMClass=ukbdcreator
+++ /dev/null
-/*
- * Copyright (c) 2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _UKBDCREATOR_H
-#define _UKBDCREATOR_H
-
-void disp_error(gchar *msg);
-void disp_info(gchar *msg);
-void disp_compile_error(int line, gchar *msg);
-
-gboolean compile_layout(gchar *buf, gchar **fname, gchar **lang);
-void test_layout(GConfClient *conf, gchar *fname, gchar *lang);
-void restore_layout(GConfClient *conf, gboolean warn);
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2007-2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "vkb_compiler.h"
-
-struct priv {
- FILE *fin;
- FILE *fout;
- char *fin_name;
- char *fout_name;
-};
-
-static void error(void *p, int line, char *msg)
-{
- struct priv *priv = p;
-
- if (line < 0)
- fprintf(stderr, "%s: Error: %s.\n", priv->fin_name, msg);
- else
- fprintf(stderr, "%s:%d: Error: %s.\n", priv->fin_name, line, msg);
-}
-
-static int warning(void *p, int line, char *msg)
-{
- struct priv *priv = p;
-
- fprintf(stderr, "%s:%d: Warning: %s.\n", priv->fin_name, line, msg);
- return 0;
-}
-
-static int get_line(void *p, void *buf, size_t size)
-{
- struct priv *priv = p;
-
- return fgets(buf, size, priv->fin) ? 0 : -1;
-}
-
-static int write_buf(void *p, void *buf, size_t size)
-{
- struct priv *priv = p;
-
- if (fwrite(buf, 1, size, priv->fout) != size) {
- fprintf(stderr, "Error writing %s.\n", priv->fout_name);
- return -1;
- }
- return 0;
-}
-
-static off_t tell_buf(void *p)
-{
- struct priv *priv = p;
-
- return ftell(priv->fout);
-}
-
-static void seek_buf(void *p, off_t pos)
-{
- struct priv *priv = p;
-
- fseek(priv->fout, pos, SEEK_SET);
-}
-
-static void init_input(struct priv *priv, char *fname)
-{
- priv->fin_name = fname;
- priv->fin = fopen(fname, "r");
- if (!priv->fin) {
- error(priv, -1, "Cannot open input file");
- exit(1);
- }
-}
-
-static void init_output(struct priv *priv, char *fname)
-{
- priv->fout_name = fname;
- priv->fout = fopen(fname, "w");
- if (!priv->fout) {
- fprintf(stderr, "Error creating %s.\n", fname);
- exit(1);
- }
-}
-
-static void close_input(struct priv *priv)
-{
- fclose(priv->fin);
-}
-
-static void close_output(struct priv *priv)
-{
- fclose(priv->fout);
-}
-
-static struct compiler_ops ops = {
- .get_line = get_line,
- .write = write_buf,
- .tell = tell_buf,
- .seek = seek_buf,
- .error = error,
- .warning = warning,
-};
-
-int main(int argc, char **argv)
-{
- struct priv priv;
- int res;
-
- if (argc < 3) {
- fprintf(stderr, "Missing parameters (source and destination filename).\n");
- exit(1);
- }
- init_input(&priv, argv[1]);
- init_output(&priv, argv[2]);
- res = compile(&ops, &priv);
- close_output(&priv);
- close_input(&priv);
- return res ? 1 : 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2007-2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _VKB_COMPILER_H
-#define _VKB_COMPILER_H
-
-struct compiler_ops {
- /* return -1 on eof or if error occurred */
- int (*get_line)(void *priv, void *buf, size_t size);
- /* return -1 if error occurred; error callback is not called for
- * write errors */
- int (*write)(void *priv, void *buf, size_t size);
- off_t (*tell)(void *priv);
- void (*seek)(void *priv, off_t pos);
- /* line is -1 if general error */
- void (*error)(void *priv, int line, char *msg);
- /* return -1 if the warning should be fatal */
- int (*warning)(void *priv, int line, char *msg);
- /* can be NULL; copy the string if you need it later */
- void (*return_lang)(void *priv, char *lang);
-};
-
-int compile(struct compiler_ops *ops, void *priv);
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2007-2008 Jiri Benc <jbenc@upir.cz>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <setjmp.h>
-#include "vkb_compiler.h"
-
-static struct compiler_ops *cops;
-static void *cpriv;
-static jmp_buf cjmp;
-
-#define BUF_SIZE 8192
-
-/*** tokenizer ***/
-
-struct tokenizer {
- int line;
- char *buf, *pos;
- char *pushed;
-};
-
-static char keywords[][32] = {
- "header", "name", "lang", "wc", "size", "width", "height",
- "textpos", "left", "top", "kbd_normal", "kbd_thumb", "kbd_special",
- "lowercase", "lowercase_num", "uppercase", "uppercase_num",
- "special_lowercase", "special_uppercase",
- "special", "margin", "default_size", "row", "key", "slide",
- "white", "tab", "alpha", "num", "hexa", "tele", "dead"
-};
-enum keywords_const {
- TOK_HEADER, TOK_NAME, TOK_LANG, TOK_WC, TOK_SIZE, TOK_WIDTH, TOK_HEIGHT,
- TOK_TEXTPOS, TOK_LEFT, TOK_TOP, TOK_KBD_NORMAL, TOK_KBD_THUMB, TOK_KBD_SPECIAL,
- TOK_LOWERCASE, TOK_LOWERCASE_NUM, TOK_UPPERCASE, TOK_UPPERCASE_NUM,
- TOK_SPEC_LOWERCASE, TOK_SPEC_UPPERCASE,
- TOK_SPECIAL, TOK_MARGIN, TOK_DEFAULT_SIZE, TOK_ROW, TOK_KEY, TOK_SLIDE,
- TOK_WHITE, TOK_TAB, TOK_ALPHA, TOK_NUM, TOK_HEXA, TOK_TELE, TOK_DEAD
-};
-
-enum tok_type {
- TT_KEYWORD, TT_NUM, TT_STRING, TT_BEGIN, TT_END, TT_EOF
-};
-
-static void tok_error(struct tokenizer *tokenizer, char *msg)
-{
- cops->error(cpriv, tokenizer->line, msg);
- longjmp(cjmp, 1);
-}
-
-static void tok_warning(struct tokenizer *tokenizer, char *msg)
-{
- if (cops->warning(cpriv, tokenizer->line, msg))
- longjmp(cjmp, 1);
-}
-
-static void *e_malloc(size_t size)
-{
- void *p = calloc(1, size);
- if (!p) {
- cops->error(cpriv, -1, "Out of memory");
- longjmp(cjmp, 1);
- }
- return p;
-}
-
-static void set_str(char **str, char *val)
-{
- if (*str)
- free(*str);
- if (!val) {
- *str = NULL;
- return;
- }
- *str = e_malloc(strlen(val) + 1);
- strcpy(*str, val);
-}
-
-static char *ltrim(char *buf)
-{
- while (buf && (*buf == ' ' || *buf == '\t' || *buf == '\n' || *buf == '\r'))
- buf++;
- return buf;
-}
-
-static char *find_white(char *buf)
-{
- while (buf && *buf && *buf != ' ' && *buf != '\t' && *buf != '\n' && *buf != '\r')
- buf++;
- return buf;
-}
-
-static int read_raw(struct tokenizer *tokenizer, char *dest, size_t size, int no_ltrim)
-{
- char *s;
- char tmp;
-
- while (1) {
- if (!no_ltrim)
- tokenizer->pos = ltrim(tokenizer->pos);
- if (!*tokenizer->pos) {
- tokenizer->line++;
- tokenizer->pos = tokenizer->buf;
- if (cops->get_line(cpriv, tokenizer->buf, BUF_SIZE))
- return -1;
- } else
- break;
- }
- s = find_white(tokenizer->pos + 1);
- tmp = *s;
- *s = '\0';
- if (size) {
- strncpy(dest, tokenizer->pos, size - 1);
- dest[size - 1] = '\0';
- }
- *s = tmp;
- tokenizer->pos = s;
- return 0;
-}
-
-static void finish_read_string(struct tokenizer *tokenizer, char *dest, size_t size)
-{
- char *s = dest + 1;
- char *new = dest;
- int special = 0;
-
- while (1) {
- while (*s) {
- if (special) {
- *new++ = *s++;
- special = 0;
- continue;
- }
- if (*s == '\\') {
- special = 1;
- s++;
- continue;
- }
- if (*s == '"') {
- *new = '\0';
- if (s[1] != '\0')
- tok_warning(tokenizer, "Ignored extra characters after the string");
- return;
- }
- *new++ = *s++;
- }
- if (read_raw(tokenizer, s, size - (s - dest), 1) < 0)
- tok_error(tokenizer, "Unterminated (or too long) string");
- }
-}
-
-static void skip_comment(struct tokenizer *tokenizer)
-{
- while (*tokenizer->pos)
- tokenizer->pos++;
-}
-
-static int find_keyword(char *s)
-{
- int i;
- int max = (sizeof(keywords) / sizeof(*keywords));
-
- for (i = 0; i < max; i++) {
- if (!strcmp(s, keywords[i]))
- return i;
- }
- return -1;
-}
-
-static void unread_tok(struct tokenizer *tokenizer, char *tok)
-{
- strncpy(tokenizer->pushed, tok, BUF_SIZE - 1);
- tokenizer->pushed[BUF_SIZE - 1] = '\0';
-}
-
-static enum tok_type read_tok(struct tokenizer *tokenizer, char *dest, size_t size, int *parsed_int)
-{
- int res;
-
- while (1) {
- if (*tokenizer->pushed) {
- strncpy(dest, tokenizer->pushed, size - 1);
- dest[size - 1] = '\0';
- *tokenizer->pushed = '\0';
- } else {
- res = read_raw(tokenizer, dest, size, 0);
- if (res < 0)
- return TT_EOF;
- }
- if (dest[0] == '#')
- skip_comment(tokenizer);
- else
- break;
- }
- if ((dest[0] >= '0' && dest[0] <= '9') || dest[0] == '-') {
- *parsed_int = atoi(dest);
- return TT_NUM;
- }
- if (dest[0] == '"') {
- finish_read_string(tokenizer, dest, size);
- return TT_STRING;
- }
- if (dest[0] == '{') {
- if (dest[1] != '\0')
- tok_error(tokenizer, "Whitespace required after {");
- return TT_BEGIN;
- }
- if (dest[0] == '}') {
- if (dest[1] != '\0')
- tok_error(tokenizer, "Whitespace required after }");
- return TT_END;
- }
- res = find_keyword(dest);
- if (res < 0)
- tok_error(tokenizer, "Uknown keyword");
- *parsed_int = res;
- return TT_KEYWORD;
-}
-
-static void init_tokenizer(struct tokenizer *tokenizer)
-{
- tokenizer->pos = tokenizer->buf = e_malloc(BUF_SIZE);
- tokenizer->pushed = e_malloc(BUF_SIZE);
-}
-
-static void close_tokenizer(struct tokenizer *tokenizer)
-{
- if (!tokenizer)
- return;
- free(tokenizer->buf);
- free(tokenizer->pushed);
-}
-
-/*** parser structures ***/
-
-struct slide_key {
- char *name;
- struct slide_key *next;
-};
-
-struct key {
- int slides_cnt;
- union {
- char *name;
- struct slide_key *slides;
- } u;
- int size;
- int flags;
- struct key *next;
-};
-
-#define KEY_ALPHA 0x01
-#define KEY_NUM 0x02
-#define KEY_HEXA 0x04
-#define KEY_TELE 0x08
-#define KEY_SPECIAL 0x10
-#define KEY_DEAD 0x20
-#define KEY_WHITE 0x40
-#define KEY_EXTEND 0x80
-
-#define KEY_TAB (0x0400 | KEY_EXTEND)
-
-struct row {
- int keys_cnt;
- struct key *keys;
- struct row *next;
-};
-
-struct layout {
- int type;
- char *name;
- int margins[4];
- int default_size;
- int rows_cnt;
- struct row *rows;
- struct layout *sublayout;
- struct layout *next;
-};
-
-#define LAY_LOWERCASE 0
-#define LAY_UPPERCASE 1
-#define LAY_LOWERCASE_NUM 2
-#define LAY_UPPERCASE_NUM 3
-#define LAY_SPECIAL 4
-#define LAY_SPECIAL_LOWER 5
-#define LAY_SPECIAL_UPPER 6
-
-struct kbd {
- int type;
- int layouts_cnt;
- struct layout *layouts;
- struct kbd *next;
-};
-
-struct size {
- int dim[5];
- struct size *next;
-};
-
-#define KBD_NORMAL 0
-#define KBD_THUMB 4
-#define KBD_SPECIAL 1
-
-struct global {
- char *name;
- char *lang;
- char *wc;
- int sizes_cnt;
- struct size *sizes;
- int kbds_cnt;
- struct kbd *kbds;
-};
-
-static struct global *new_global(void)
-{
- return e_malloc(sizeof(struct global));
-}
-
-static void free_sizes(struct size *size)
-{
- struct size *next;
-
- while (size) {
- next = size->next;
- free(size);
- size = next;
- }
-}
-
-static void free_slides(struct slide_key *sl)
-{
- struct slide_key *next;
-
- while (sl) {
- next = sl->next;
- free(sl->name);
- free(sl);
- sl = next;
- }
-}
-
-static void free_keys(struct key *key)
-{
- struct key *next;
-
- while (key) {
- next = key->next;
- if (key->slides_cnt)
- free_slides(key->u.slides);
- else
- free(key->u.name);
- free(key);
- key = next;
- }
-}
-
-static void free_rows(struct row *row)
-{
- struct row *next;
-
- while (row) {
- next = row->next;
- free_keys(row->keys);
- free(row);
- row = next;
- }
-}
-
-static void free_layouts(struct layout *lay)
-{
- struct layout *next;
-
- while (lay) {
- next = lay->next;
- free_rows(lay->rows);
- free_layouts(lay->sublayout);
- free(lay->name);
- free(lay);
- lay = next;
- }
-}
-
-static void free_kbds(struct kbd *kbd)
-{
- struct kbd *next;
-
- while (kbd) {
- next = kbd->next;
- free_layouts(kbd->layouts);
- free(kbd);
- kbd = next;
- }
-}
-
-static void free_global(struct global *glob)
-{
- if (!glob)
- return;
- free_sizes(glob->sizes);
- free_kbds(glob->kbds);
- free(glob->name);
- free(glob->lang);
- free(glob->wc);
- free(glob);
-}
-
-/*** parser ***/
-
-struct parser {
- struct tokenizer *tokenizer;
- struct global *global;
- int ttype;
- char *tstr;
- int tint;
-};
-
-static void init_parser(struct parser *parser)
-{
- parser->tokenizer = e_malloc(sizeof(struct tokenizer));
- init_tokenizer(parser->tokenizer);
- parser->tstr = e_malloc(BUF_SIZE);
- parser->global = new_global();
-}
-
-static void close_parser(struct parser *parser)
-{
- if (!parser)
- return;
- free_global(parser->global);
- free(parser->tstr);
- close_tokenizer(parser->tokenizer);
- free(parser->tokenizer);
-}
-
-#define error(parser, msg) tok_error((parser)->tokenizer, msg)
-#define warning(parser, msg) tok_warning((parser)->tokenizer, msg)
-#define error_end(parser) error(parser, "} expected")
-
-static void get_tok(struct parser *parser)
-{
- parser->ttype = read_tok(parser->tokenizer, parser->tstr, BUF_SIZE, &parser->tint);
-}
-
-static void __get_raw(struct parser *parser)
-{
- if (read_raw(parser->tokenizer, parser->tstr, BUF_SIZE, 0) < 0)
- error(parser, "Unexpected end of file");
-}
-
-static void push_tok(struct parser *parser)
-{
- unread_tok(parser->tokenizer, parser->tstr);
-}
-
-#define is_type(parser, t) ((parser)->ttype == (t))
-#define is_keyword(parser, w) ((parser)->ttype == TT_KEYWORD && (parser)->tint == (w))
-#define is_begin(parser) ((parser)->ttype == TT_BEGIN)
-#define is_end(parser) ((parser)->ttype == TT_END)
-#define is_eof(parser) ((parser)->ttype == TT_EOF)
-
-static void get_tok_type(struct parser *parser, int tt)
-{
- get_tok(parser);
- if (!is_type(parser, tt)) {
- switch (tt) {
- case TT_NUM: error(parser, "Number expected");
- case TT_STRING: error(parser, "String expected");
- case TT_BEGIN: error(parser, "{ expected");
- case TT_END: error(parser, "} expected");
- default: error(parser, "Syntax error");
- }
- }
-}
-
-#define get_tok_num(parser) get_tok_type(parser, TT_NUM)
-#define get_tok_string(parser) get_tok_type(parser, TT_STRING)
-#define get_tok_begin(parser) get_tok_type(parser, TT_BEGIN)
-#define get_tok_end(parser) get_tok_type(parser, TT_END)
-
-static void parse_sizes(struct parser *parser, struct global *glob)
-{
- struct size *size;
-
- get_tok_num(parser);
- if (parser->tint != glob->sizes_cnt)
- error(parser, "size number out of order");
- size = e_malloc(sizeof(struct size));
- glob->sizes_cnt++;
- if (!glob->sizes)
- glob->sizes = size;
- else {
- struct size *last = glob->sizes;
- while (last->next)
- last = last->next;
- last->next = size;
- }
- get_tok_begin(parser);
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_WIDTH)) {
- get_tok_num(parser);
- size->dim[0] = parser->tint;
- } else if (is_keyword(parser, TOK_HEIGHT)) {
- get_tok_num(parser);
- size->dim[1] = parser->tint;
- } else if (is_keyword(parser, TOK_TEXTPOS)) {
- get_tok_num(parser);
- size->dim[2] = parser->tint;
- } else if (is_keyword(parser, TOK_LEFT)) {
- get_tok_num(parser);
- size->dim[3] = parser->tint;
- } else if (is_keyword(parser, TOK_TOP)) {
- get_tok_num(parser);
- size->dim[4] = parser->tint;
- } else if (is_end(parser)) {
- return;
- } else
- error_end(parser);
- }
-}
-
-static void parse_header(struct parser *parser, struct global *glob)
-{
- get_tok_begin(parser);
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_NAME)) {
- get_tok_string(parser);
- set_str(&glob->name, parser->tstr);
- } else if (is_keyword(parser, TOK_LANG)) {
- get_tok_string(parser);
- set_str(&glob->lang, parser->tstr);
- } else if (is_keyword(parser, TOK_WC)) {
- get_tok_string(parser);
- set_str(&glob->wc, parser->tstr);
- } else if (is_keyword(parser, TOK_SIZE)) {
- parse_sizes(parser, glob);
- } else if (is_end(parser)) {
- return;
- } else
- error_end(parser);
- }
-}
-
-static void parse_slide(struct parser *parser, struct key *key)
-{
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_KEY)) {
- struct slide_key *skey = e_malloc(sizeof(struct slide_key));
-
- key->slides_cnt++;
- if (!key->u.slides)
- key->u.slides = skey;
- else {
- struct slide_key *last = key->u.slides;
- while (last->next)
- last = last->next;
- last->next = skey;
- }
- __get_raw(parser);
- set_str(&skey->name, parser->tstr);
- } else if (is_end(parser))
- return;
- else
- error_end(parser);
- }
-}
-
-static void parse_key(struct parser *parser, struct row *row, int type)
-{
- struct key *key = e_malloc(sizeof(struct key));
-
- key->size = -1;
- row->keys_cnt++;
- if (!row->keys)
- row->keys = key;
- else {
- struct key *last = row->keys;
- while (last->next)
- last = last->next;
- last->next = key;
- }
- if (type == TOK_KEY) {
- __get_raw(parser);
- set_str(&key->u.name, parser->tstr);
- } else if (type == TOK_WHITE) {
- set_str(&key->u.name, "");
- key->flags |= KEY_WHITE;
- } else if (type == TOK_TAB) {
- set_str(&key->u.name, "");
- key->flags |= KEY_TAB;
- }
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_ALPHA))
- key->flags |= KEY_ALPHA;
- else if (is_keyword(parser, TOK_NUM))
- key->flags |= KEY_NUM;
- else if (is_keyword(parser, TOK_HEXA))
- key->flags |= KEY_HEXA;
- else if (is_keyword(parser, TOK_TELE))
- key->flags |= KEY_TELE;
- else if (is_keyword(parser, TOK_SPECIAL))
- key->flags |= KEY_SPECIAL;
- else if (is_keyword(parser, TOK_DEAD))
- key->flags |= KEY_DEAD;
- else if (is_keyword(parser, TOK_SIZE)) {
- get_tok_num(parser);
- key->size = parser->tint;
- } else if (is_begin(parser) && type == TOK_SLIDE)
- parse_slide(parser, key);
- else if (is_keyword(parser, TOK_KEY) ||
- is_keyword(parser, TOK_WHITE) ||
- is_keyword(parser, TOK_TAB) ||
- is_keyword(parser, TOK_SLIDE) ||
- is_end(parser)) {
- push_tok(parser);
- if (type == TOK_SLIDE && !key->slides_cnt)
- error(parser, "{ expected");
- return;
- } else
- error_end(parser);
- }
-}
-
-static void parse_row(struct parser *parser, struct layout *lay)
-{
- struct row *row = e_malloc(sizeof(struct row));
-
- lay->rows_cnt++;
- if (!lay->rows)
- lay->rows = row;
- else {
- struct row *last = lay->rows;
- while (last->next)
- last = last->next;
- last->next = row;
- }
- get_tok_begin(parser);
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_KEY))
- parse_key(parser, row, TOK_KEY);
- else if (is_keyword(parser, TOK_WHITE))
- parse_key(parser, row, TOK_WHITE);
- else if (is_keyword(parser, TOK_TAB))
- parse_key(parser, row, TOK_TAB);
- else if (is_keyword(parser, TOK_SLIDE))
- parse_key(parser, row, TOK_SLIDE);
- else if (is_end(parser))
- return;
- else
- error_end(parser);
- }
-}
-
-static void parse_layout(struct parser *parser, struct kbd *kbd, int type)
-{
- struct layout *lay = e_malloc(sizeof(struct layout));
-
- if (type == LAY_LOWERCASE_NUM || type == LAY_UPPERCASE_NUM) {
- /* numeric layout is a sublayout of a normal layout */
- struct layout *find = kbd->layouts;
- while (find) {
- if (find->type == type - 2) {
- find->sublayout = lay;
- break;
- }
- find = find->next;
- }
- if (!find) {
- free(lay);
- error(parser, "lowercase_num/uppercase_num has to follow lowercase/uppercase definition");
- }
- } else {
- struct layout *last = kbd->layouts;
-
- if (!last)
- kbd->layouts = lay;
- else {
- while (last->next)
- last = last->next;
- last->next = lay;
- }
- kbd->layouts_cnt++;
- if ((type == LAY_UPPERCASE && (!last || last->type != LAY_LOWERCASE)) ||
- (type == LAY_SPECIAL_UPPER && (!last || last->type != LAY_SPECIAL_LOWER)))
- error(parser, "uppercase has to follow lowercase definition");
- if (type == LAY_SPECIAL_UPPER && last->name)
- set_str(&lay->name, last->name);
- }
- lay->type = type;
- get_tok_begin(parser);
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_NAME)) {
- get_tok_string(parser);
- if (lay->name)
- error(parser, "name must not be specified for uppercase layout in kbd_special section");
- set_str(&lay->name, parser->tstr);
- } else if (is_keyword(parser, TOK_MARGIN)) {
- int i;
- for (i = 0; i < 4; i++) {
- get_tok_num(parser);
- lay->margins[i] = parser->tint;
- }
- } else if (is_keyword(parser, TOK_DEFAULT_SIZE)) {
- get_tok_num(parser);
- lay->default_size = parser->tint;
- } else if (is_keyword(parser, TOK_ROW))
- parse_row(parser, lay);
- else if (is_end(parser))
- return;
- else
- error_end(parser);
- }
-}
-
-static void parse_kbd(struct parser *parser, struct global *glob, int type)
-{
- struct kbd *kbd = e_malloc(sizeof(struct kbd));
-
- if (!glob->kbds)
- glob->kbds = kbd;
- else {
- struct kbd *last = glob->kbds;
- while (last->next)
- last = last->next;
- last->next = kbd;
- }
- glob->kbds_cnt++;
- kbd->type = type;
- get_tok_begin(parser);
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_LOWERCASE))
- parse_layout(parser, kbd, LAY_LOWERCASE);
- else if (is_keyword(parser, TOK_UPPERCASE))
- parse_layout(parser, kbd, LAY_UPPERCASE);
- else if (is_keyword(parser, TOK_SPEC_LOWERCASE)) {
- if (type != KBD_SPECIAL)
- error(parser, "special_lowercase allowed only in kbd_special section");
- parse_layout(parser, kbd, LAY_SPECIAL_LOWER);
- } else if (is_keyword(parser, TOK_SPEC_UPPERCASE)) {
- if (type != KBD_SPECIAL)
- error(parser, "special_uppercase allowed only in kbd_special section");
- parse_layout(parser, kbd, LAY_SPECIAL_UPPER);
- } else if (is_keyword(parser, TOK_LOWERCASE_NUM)) {
- if (type != KBD_NORMAL)
- error(parser, "lowercase_num allowed only in kbd_normal section");
- parse_layout(parser, kbd, LAY_LOWERCASE_NUM);
- } else if (is_keyword(parser, TOK_UPPERCASE_NUM)) {
- if (type != KBD_NORMAL)
- error(parser, "uppercase_num allowed only in kbd_normal section");
- parse_layout(parser, kbd, LAY_UPPERCASE_NUM);
- } else if (is_keyword(parser, TOK_SPECIAL)) {
- if (type != KBD_THUMB && type != KBD_SPECIAL)
- error(parser, "special allowed only in kbd_thumb and kbd_special sections");
- parse_layout(parser, kbd, LAY_SPECIAL);
- } else if (is_end(parser)) {
- if (!kbd->layouts_cnt)
- error(parser, "no keyboard layouts defined");
- return;
- } else
- error_end(parser);
- }
-}
-
-static void parse_global(struct parser *parser)
-{
- struct global *glob = parser->global;
-
- while (1) {
- get_tok(parser);
- if (is_keyword(parser, TOK_HEADER))
- parse_header(parser, glob);
- else if (is_keyword(parser, TOK_KBD_NORMAL))
- parse_kbd(parser, glob, KBD_NORMAL);
- else if (is_keyword(parser, TOK_KBD_THUMB))
- parse_kbd(parser, glob, KBD_THUMB);
- else if (is_keyword(parser, TOK_KBD_SPECIAL))
- parse_kbd(parser, glob, KBD_SPECIAL);
- else if (is_eof(parser)) {
- if (!glob->kbds_cnt)
- error(parser, "no keyboards defined");
- return;
- } else
- error(parser, "header, kbd_normal, kbd_thumb or kbd_special expected");
- }
-}
-
-/*** writer ***/
-
-struct writer {
- struct global *global;
- int start_table;
- int *starts;
-};
-
-static void werror(struct writer *writer)
-{
- (void)writer;
- longjmp(cjmp, 1);
-}
-
-static void init_writer(struct writer *writer, struct global *global)
-{
- writer->global = global;
- writer->starts = e_malloc(sizeof(int) * global->kbds_cnt);
-}
-
-static void close_writer(struct writer *writer)
-{
- if (!writer)
- return;
- free(writer->starts);
-}
-
-static void writer_byte(struct writer *writer, unsigned char b)
-{
- if (cops->write(cpriv, &b, 1))
- werror(writer);
-}
-
-static void writer_word(struct writer *writer, unsigned int w)
-{
- unsigned char a[2];
-
- a[0] = w & 0xff;
- a[1] = (w >> 8) & 0xff;
- if (cops->write(cpriv, a, 2))
- werror(writer);
-}
-
-static void writer_string(struct writer *writer, char *s)
-{
- int len;
-
- if (!s)
- len = 0;
- else
- len = strlen(s);
- writer_byte(writer, len);
- if (len) {
- if (cops->write(cpriv, s, len))
- werror(writer);
- }
-}
-
-static void writer_sizes(struct writer *writer, struct size *sizes)
-{
- int i;
-
- while (sizes) {
- for (i = 0; i < 5; i++)
- writer_byte(writer, sizes->dim[i]);
- sizes = sizes->next;
- }
-}
-
-static void writer_keys(struct writer *writer, struct key *key, int default_size)
-{
- struct slide_key *skey;
-
- while (key) {
- writer_byte(writer, key->slides_cnt ? 1 : 0);
- writer_byte(writer, key->flags & 0xff);
- if (key->flags & KEY_EXTEND)
- writer_byte(writer, (key->flags >> 8) & 0xff);
- if (!key->slides_cnt)
- writer_string(writer, key->u.name);
- else {
- writer_byte(writer, key->slides_cnt | 0x80);
- skey = key->u.slides;
- while (skey) {
- writer_string(writer, skey->name);
- skey = skey->next;
- }
- }
- writer_byte(writer, key->size >= 0 ? key->size : default_size);
- key = key->next;
- }
-}
-
-static void writer_sublayout(struct writer *writer, struct layout *lay)
-{
- int cnt;
- struct row *tmp;
-
- cnt = 0;
- for (tmp = lay->rows; tmp; tmp = tmp->next)
- cnt += tmp->keys_cnt;
- writer_byte(writer, cnt);
- writer_byte(writer, lay->rows_cnt);
- writer_byte(writer, lay->margins[3]);
- writer_byte(writer, lay->margins[0]);
- writer_byte(writer, lay->margins[2]);
- writer_byte(writer, lay->margins[1]);
- for (tmp = lay->rows; tmp; tmp = tmp->next)
- writer_byte(writer, tmp->keys_cnt);
- for (tmp = lay->rows; tmp; tmp = tmp->next)
- writer_keys(writer, tmp->keys, lay->default_size);
-}
-
-static void writer_layouts(struct writer *writer, struct layout *lay, int idx)
-{
- int type, other;
-
- switch (lay->type) {
- case LAY_LOWERCASE:
- type = 0;
- break;
- case LAY_UPPERCASE:
- type = 1;
- break;
- default:
- type = 2;
- break;
- }
- switch (lay->type) {
- case LAY_LOWERCASE:
- case LAY_SPECIAL_LOWER:
- other = idx + 1;
- break;
- case LAY_UPPERCASE:
- case LAY_SPECIAL_UPPER:
- other = idx - 1;
- break;
- default:
- other = 0xff;
- break;
- }
- writer_byte(writer, type);
- writer_byte(writer, other);
- writer_string(writer, lay->name);
- writer_byte(writer, lay->sublayout ? 2 : 1);
- writer_sublayout(writer, lay);
- if (lay->sublayout)
- writer_sublayout(writer, lay->sublayout);
-}
-
-static void writer_kbd(struct writer *writer, struct kbd *kbd)
-{
- struct layout *lay;
- int i;
-
- writer_byte(writer, kbd->type);
- writer_byte(writer, kbd->layouts_cnt);
- writer_byte(writer, 0);
- writer_byte(writer, kbd->layouts->default_size); /* use the default size of the first layout */
- for (lay = kbd->layouts, i = 0; lay; lay = lay->next, i++)
- writer_layouts(writer, lay, i);
-}
-
-static void writer_global(struct writer *writer)
-{
- struct global *glob = writer->global;
- struct kbd *kbd;
- int i;
-
- writer_byte(writer, 1); /* version */
- writer_byte(writer, glob->kbds_cnt);
- writer_string(writer, glob->name);
- writer_string(writer, glob->lang);
- writer_string(writer, glob->wc);
- writer_byte(writer, 2); /* always use the default screen modes */
- writer_byte(writer, 0);
- writer_byte(writer, 1);
- writer_byte(writer, glob->sizes_cnt);
- writer_sizes(writer, glob->sizes);
- writer->start_table = cops->tell(cpriv);
- for (i = 0; i < glob->kbds_cnt; i++)
- writer_word(writer, 0);
- for (i = 0; i < 20; i++)
- writer_byte(writer, 0);
- for (kbd = glob->kbds, i = 0; kbd; kbd = kbd->next, i++) {
- writer->starts[i] = cops->tell(cpriv);
- writer_kbd(writer, kbd);
- }
- cops->seek(cpriv, writer->start_table);
- for (i = 0; i < glob->kbds_cnt; i++)
- writer_word(writer, writer->starts[i]);
-}
-
-/*** main ***/
-
-int compile(struct compiler_ops *ops, void *priv)
-{
- struct parser *parser = NULL;
- struct writer *writer = NULL;
- int res;
-
- cops = ops;
- cpriv = priv;
-
- res = setjmp(cjmp);
- if (!res) {
- parser = e_malloc(sizeof(struct parser));
- writer = e_malloc(sizeof(struct writer));
- init_parser(parser);
- parse_global(parser);
- init_writer(writer, parser->global);
- writer_global(writer);
- if (cops->return_lang)
- cops->return_lang(cpriv, parser->global->lang);
- }
- close_writer(writer);
- close_parser(parser);
- free(writer);
- free(parser);
- return res ? -1 : 0;
-}
+++ /dev/null
-// author: Roman Moravcik
-xkb_symbols "sk" {
- name[Group1] = "Slovak QWERTZ (CZ HW)";
-
- include "nokia_vndr/rx-51(english_base)"
- include "nokia_vndr/rx-51(arrows_2btns)"
-
- // 1. row
- key <AD06> { [ z, Z, 6, 6 ] };
- key <AB08> { [ dead_acute, dead_acute, sterling, sterling ] };
-
- // 2. row
- key <AC08> { [ k, K, semicolon, semicolon ] };
- key <AC09> { [ l, L, colon, colon ] };
- key <AB09> { [ ocircumflex, adiaeresis, EuroSign, EuroSign ] };
- key <UP> { [ dead_caron, dead_caron, dollar, dollar ] };
-
- // 3. row
- key <AB01> { [ y, Y, percent, percent ] };
- key <AB02> { [ x, X, slash, slash ] };
- key <AB03> { [ c, C, backslash, backslash ] };
- key <AB04> { [ v, V, apostrophe, apostrophe ] };
- key <AB05> { [ b, B, quotedbl, quotedbl ] };
- key <AB06> { [ n, N, exclam, exclam ] };
- key <AB07> { [ m, M, question, question ] };
- key <LEFT> { [ period, comma, Tab, bar ] };
-};
-
-xkb_symbols "sk_qwerty" {
- name[Group1] = "Slovak QWERTY (CZ hw)";
-
- include "nokia_vndr/rx-51(sk)"
-
- // 1. row
- key <AD06> { [ y, Y, 6, 6 ] };
-
- // 3. row
- key <AB01> { [ z, Z, percent, percent ] };
-};
-