summaryrefslogtreecommitdiffstats
path: root/ktouch
diff options
context:
space:
mode:
Diffstat (limited to 'ktouch')
-rw-r--r--ktouch/AUTHORS2
-rw-r--r--ktouch/COPYING340
-rw-r--r--ktouch/ChangeLog269
-rw-r--r--ktouch/INSTALL47
-rw-r--r--ktouch/Makefile.am13
-rw-r--r--ktouch/configure.in.in1
-rw-r--r--ktouch/extras/sliding_line.odgbin0 -> 13625 bytes
-rw-r--r--ktouch/extras/training-gen/c/README8
-rw-r--r--ktouch/extras/training-gen/c/english_conf13
-rw-r--r--ktouch/extras/training-gen/c/ktouchgen.c233
-rw-r--r--ktouch/extras/training-gen/perl/README80
-rw-r--r--ktouch/extras/training-gen/perl/dk.config19
-rw-r--r--ktouch/extras/training-gen/perl/en.config15
-rw-r--r--ktouch/extras/training-gen/perl/es.config17
-rwxr-xr-xktouch/extras/training-gen/perl/ktouch-gen.pl180
-rw-r--r--ktouch/extras/training-gen/perl/no.config20
-rw-r--r--ktouch/extras/training-gen/python/README5
-rw-r--r--ktouch/extras/training-gen/python/english_conf190
-rw-r--r--ktouch/extras/training-gen/python/ktouchgen.py269
-rw-r--r--ktouch/graphics/Makefile.am2
-rw-r--r--ktouch/graphics/splash.pngbin0 -> 94922 bytes
-rw-r--r--ktouch/icons/Makefile.am3
-rw-r--r--ktouch/icons/hi128-app-ktouch.pngbin0 -> 7967 bytes
-rw-r--r--ktouch/icons/hi16-app-ktouch.pngbin0 -> 671 bytes
-rw-r--r--ktouch/icons/hi22-app-ktouch.pngbin0 -> 979 bytes
-rw-r--r--ktouch/icons/hi32-app-ktouch.pngbin0 -> 1501 bytes
-rw-r--r--ktouch/icons/hi48-app-ktouch.pngbin0 -> 2421 bytes
-rw-r--r--ktouch/icons/hisc-app-ktouch.svgzbin0 -> 5616 bytes
-rw-r--r--ktouch/keyboards/Makefile.am46
-rw-r--r--ktouch/keyboards/be.keyboard150
-rw-r--r--ktouch/keyboards/bg.keyboard99
-rw-r--r--ktouch/keyboards/de.keyboard130
-rw-r--r--ktouch/keyboards/de.keypad.keyboard31
-rw-r--r--ktouch/keyboards/de.neo.keyboard100
-rw-r--r--ktouch/keyboards/de.swiss.keyboard130
-rw-r--r--ktouch/keyboards/dk.keyboard104
-rw-r--r--ktouch/keyboards/dvorak_fr.keyboard131
-rw-r--r--ktouch/keyboards/ee.keyboard124
-rw-r--r--ktouch/keyboards/en.dvorak.keyboard99
-rw-r--r--ktouch/keyboards/en.keyboard124
-rw-r--r--ktouch/keyboards/es.dvorak.keyboard149
-rw-r--r--ktouch/keyboards/es.keyboard154
-rw-r--r--ktouch/keyboards/fi.keyboard124
-rw-r--r--ktouch/keyboards/fr.a.keyboard126
-rw-r--r--ktouch/keyboards/fr.keyboard157
-rw-r--r--ktouch/keyboards/fr.swiss.keyboard135
-rw-r--r--ktouch/keyboards/he.keyboard149
-rw-r--r--ktouch/keyboards/hu.keyboard177
-rw-r--r--ktouch/keyboards/it.keyboard155
-rw-r--r--ktouch/keyboards/la.keyboard109
-rw-r--r--ktouch/keyboards/nb.keyboard190
-rw-r--r--ktouch/keyboards/nn.keyboard106
-rw-r--r--ktouch/keyboards/pl.keyboard135
-rw-r--r--ktouch/keyboards/pt.br.keyboard150
-rw-r--r--ktouch/keyboards/pt.keyboard109
-rw-r--r--ktouch/keyboards/ru.2.keyboard157
-rw-r--r--ktouch/keyboards/ru.3.keyboard149
-rw-r--r--ktouch/keyboards/ru.basic.keyboard149
-rw-r--r--ktouch/keyboards/ru.keyboard149
-rw-r--r--ktouch/keyboards/ru.typewriter.keyboard149
-rw-r--r--ktouch/keyboards/ru.winkeys.keyboard149
-rw-r--r--ktouch/keyboards/sl.keyboard175
-rw-r--r--ktouch/keyboards/sv.dvorak.keyboard107
-rw-r--r--ktouch/keyboards/sv.keyboard128
-rw-r--r--ktouch/keyboards/tr.f.keyboard192
-rw-r--r--ktouch/keyboards/tr.q.keyboard125
-rw-r--r--ktouch/keyboards/uk.basic.keyboard149
-rw-r--r--ktouch/keyboards/uk.typewriter.keyboard149
-rw-r--r--ktouch/keyboards/uk.winkeys.keyboard149
-rw-r--r--ktouch/ktouch.desktop82
-rw-r--r--ktouch/ktouch.lsm19
-rw-r--r--ktouch/sounds/Makefile.am2
-rw-r--r--ktouch/sounds/down.wavbin0 -> 53760 bytes
-rw-r--r--ktouch/sounds/typewriter.wavbin0 -> 29840 bytes
-rw-r--r--ktouch/sounds/up.wavbin0 -> 470316 bytes
-rw-r--r--ktouch/src/Makefile.am62
-rw-r--r--ktouch/src/ktouch.cpp878
-rw-r--r--ktouch/src/ktouch.h184
-rw-r--r--ktouch/src/ktouch.kcfg135
-rw-r--r--ktouch/src/ktouchchartwidget.cpp36
-rw-r--r--ktouch/src/ktouchchartwidget.h34
-rw-r--r--ktouch/src/ktouchcoloreditor.cpp211
-rw-r--r--ktouch/src/ktouchcoloreditor.h65
-rw-r--r--ktouch/src/ktouchcoloreditor_dlg.ui824
-rw-r--r--ktouch/src/ktouchcolorscheme.cpp309
-rw-r--r--ktouch/src/ktouchcolorscheme.h82
-rw-r--r--ktouch/src/ktouchdefaults.cpp23
-rw-r--r--ktouch/src/ktouchdefaults.h28
-rw-r--r--ktouch/src/ktouchkey.cpp139
-rw-r--r--ktouch/src/ktouchkey.h96
-rw-r--r--ktouch/src/ktouchkeyboard.cpp658
-rw-r--r--ktouch/src/ktouchkeyboard.h67
-rw-r--r--ktouch/src/ktouchkeyboardeditor.cpp243
-rw-r--r--ktouch/src/ktouchkeyboardeditor.h113
-rw-r--r--ktouch/src/ktouchkeyboardeditor_dlg.ui406
-rw-r--r--ktouch/src/ktouchkeyboardwidget.cpp532
-rw-r--r--ktouch/src/ktouchkeyboardwidget.h98
-rw-r--r--ktouch/src/ktouchkeyconnector.cpp49
-rw-r--r--ktouch/src/ktouchkeyconnector.h48
-rw-r--r--ktouch/src/ktouchkeys.cpp223
-rw-r--r--ktouch/src/ktouchkeys.h151
-rw-r--r--ktouch/src/ktouchlecture.cpp300
-rw-r--r--ktouch/src/ktouchlecture.h82
-rw-r--r--ktouch/src/ktouchlectureeditor.cpp420
-rw-r--r--ktouch/src/ktouchlectureeditor.h117
-rw-r--r--ktouch/src/ktouchlectureeditor_dlg.ui684
-rw-r--r--ktouch/src/ktouchleveldata.cpp120
-rw-r--r--ktouch/src/ktouchleveldata.h80
-rw-r--r--ktouch/src/ktouchopenrequest.cpp121
-rw-r--r--ktouch/src/ktouchopenrequest.h81
-rw-r--r--ktouch/src/ktouchopenrequest_dlg.ui289
-rw-r--r--ktouch/src/ktouchprefcolorslayout.ui516
-rw-r--r--ktouch/src/ktouchprefgenerallayout.ui341
-rw-r--r--ktouch/src/ktouchprefkeyboardlayout.ui142
-rw-r--r--ktouch/src/ktouchpreftraininglayout.ui331
-rw-r--r--ktouch/src/ktouchslideline.cpp577
-rw-r--r--ktouch/src/ktouchslideline.h156
-rw-r--r--ktouch/src/ktouchstatistics.cpp475
-rw-r--r--ktouch/src/ktouchstatistics.h60
-rw-r--r--ktouch/src/ktouchstatistics_dlg.ui1287
-rw-r--r--ktouch/src/ktouchstatisticsdata.cpp553
-rw-r--r--ktouch/src/ktouchstatisticsdata.h214
-rw-r--r--ktouch/src/ktouchstatus.cpp47
-rw-r--r--ktouch/src/ktouchstatus.h41
-rw-r--r--ktouch/src/ktouchstatuslayout.ui360
-rw-r--r--ktouch/src/ktouchtrainer.cpp502
-rw-r--r--ktouch/src/ktouchtrainer.h163
-rw-r--r--ktouch/src/ktouchui.rc29
-rw-r--r--ktouch/src/ktouchutils.cpp43
-rw-r--r--ktouch/src/ktouchutils.h28
-rw-r--r--ktouch/src/main.cpp76
-rw-r--r--ktouch/src/prefs.kcfgc6
-rw-r--r--ktouch/training/Makefile.am36
-rw-r--r--ktouch/training/bulgarian.ktouch.xml215
-rw-r--r--ktouch/training/bulgarian_long.ktouch.xml502
-rw-r--r--ktouch/training/catalan.ktouch.xml203
-rw-r--r--ktouch/training/danish.ktouch.xml1178
-rw-r--r--ktouch/training/danish2.ktouch.xml152
-rw-r--r--ktouch/training/dvorak-fr-1.ktouch.xml299
-rw-r--r--ktouch/training/dvorak-fr-2.ktouch.xml257
-rw-r--r--ktouch/training/dvorak.ktouch.xml602
-rw-r--r--ktouch/training/dvorak_ABCD.ktouch.xml496
-rw-r--r--ktouch/training/dvorak_es.ktouch.xml407
-rw-r--r--ktouch/training/english.ktouch.xml203
-rw-r--r--ktouch/training/finnish.ktouch.xml508
-rw-r--r--ktouch/training/finnish_for_kids.ktouch.xml508
-rw-r--r--ktouch/training/french.ktouch.xml932
-rw-r--r--ktouch/training/french2.ktouch.xml470
-rw-r--r--ktouch/training/german.ktouch.xml310
-rw-r--r--ktouch/training/german.neo.ktouch.xml889
-rw-r--r--ktouch/training/german.number.ktouch.xml279
-rw-r--r--ktouch/training/german2.ktouch.xml1107
-rw-r--r--ktouch/training/german3.ktouch.xml883
-rw-r--r--ktouch/training/hungarian.ktouch.xml553
-rw-r--r--ktouch/training/hungarian_expert.ktouch.xml932
-rw-r--r--ktouch/training/italian.ktouch.xml503
-rw-r--r--ktouch/training/nederlands.ktouch.xml417
-rw-r--r--ktouch/training/nederlands_junior.ktouch.xml265
-rw-r--r--ktouch/training/norwegian.ktouch.xml376
-rw-r--r--ktouch/training/polish.ktouch.xml1393
-rw-r--r--ktouch/training/russian.ktouch.xml202
-rw-r--r--ktouch/training/russian2ktouch.xml261
-rw-r--r--ktouch/training/russian_long.ktouch.xml535
-rw-r--r--ktouch/training/slovenian.ktouch.xml661
-rw-r--r--ktouch/training/spanish.ktouch.xml353
-rw-r--r--ktouch/training/turkish.ktouch.xml352
166 files changed, 38472 insertions, 0 deletions
diff --git a/ktouch/AUTHORS b/ktouch/AUTHORS
new file mode 100644
index 00000000..c8cfdf5c
--- /dev/null
+++ b/ktouch/AUTHORS
@@ -0,0 +1,2 @@
+Håvard Frøiland <haavard@solveien.net>
+Andreas Nicolai <Andreas.Nicolai@gmx.net>
diff --git a/ktouch/COPYING b/ktouch/COPYING
new file mode 100644
index 00000000..c13faf0d
--- /dev/null
+++ b/ktouch/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU 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.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ktouch/ChangeLog b/ktouch/ChangeLog
new file mode 100644
index 00000000..52a4a866
--- /dev/null
+++ b/ktouch/ChangeLog
@@ -0,0 +1,269 @@
+2007-02-04 Håvard Frøiland <haavard@solveien.net>
+ * Backport: Added a dialog box that pop's up when the user has finished
+ the last level. This will only happen on automatic level change.
+
+2007-03-01 Håvard Frøiland <haavard@solveien.net>
+ * Bugfix: Bug 118862: accents dead keys do not work
+ Bug 134371: Ktouch no pone acentos (Respuesta en Español)
+
+2006-04-09 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Bugfix: color scheme entries in the main menu will be shown
+ without interpreting & as automatic accelerator
+ * Feature: color schemes can now be edited and saved, also a
+ color scheme includes now keyboard and slide line
+ colors, new option to have common slide line colors
+ in configuration (request: #90548)
+ * Bugfix: several keyboard layouts were wrong (showing the
+ wrong colors and were therefore misleading), a few
+ have been already fixed and the others temporarily
+ removed from the install section of the make files
+ (bug: #119189)
+
+2006-04-08 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * New version: 1.5.3
+ * Bugfix: slideline algorithm reworked and enhanced, cleared bugs related
+ to improper cursor movement/size, wrong sliding etc.
+ (bug reports: #54329, #116838)
+ * Feature: configuration settings allow change of sliding widget height limit,
+ useful for large screen resolutions (feature request: #76666 )
+ * Feature: line length limit removed, teacher text can now be as long as
+ desired, wrong student line text is limited to size of
+ teacher lengths + some offset
+ * Feature: new default mini level with a few more lines
+ (bug report:
+ * Feature: default keyboard is selected based on KDE locale
+ (requests: #54379, #99947)
+ * Feature: quick select lists of training lectures/keyboard layouts are now
+ sorted alphabetically
+ * Bugfix: trailing spaces are removed from lines when lecture is
+ read (bug: #107080)
+ * Bugfix: fixed freeze of appliation on click on "clear statistics"
+ button (bug: #119568)
+ * Feature: added keyboard hiding feature in configuration (request: #104238)
+ * Added: new slovenian training lecture
+ * Bugfix: changed default lecture font from Courier to Monospace
+ in KTouch and all lecture files (bug: #108690)
+ * Feature: show language names for keyboards in addition to file names in
+ quick selection menu
+ * Bugfix: statistics are also stored for the mini-default level
+ * Feature: statistics dialog has been rearranged
+ * Feature: manual level change buttons can be disabled in automatic-level
+ change mode (request: #121598)
+
+2006-03-30 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * New version: 1.5.2
+ * Bugfix: fixed false error on reading single-level-lectures (bug: #120414)
+ * Feature: lines with spaces at the end are trimmed (whitespace removed)
+ * Feature: line length limit increased to 300 (request: #116838)
+ * Added: added new/fixed keyboard layouts
+ (requests: #40962, #85584, #119670)
+
+2006-03-27 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * New version: 1.5.1
+ * Bugfixes: Statistics dialog used to hang on "clear history"
+ * Added: Various new training lectures and keyboards
+
+2005-06-14 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * New version: 1.5
+ * Added: New statistics engine (compressed XML statistics,
+ level and session based statistics, chart widget now based
+ on kdeeduplot lib)
+ * Bugfixes: a lot of smaller fixes in various parts of KTouch
+ (strange behaviour, unexpected results etc.)
+ * Review: general code review and restructuring of many important
+ functions
+
+2004-11-21 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Added: "Open lecture ..." menu entry in File menu to allow
+ users to open their own lecture files.
+
+2004-11-09 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Bugfixes: sliding line typing limit,
+ removed mid-level advance (due to popular request)
+ reset session stats in every new level
+ * Added: new keyboard layout for switzerland-german keyboards
+
+2004-11-02 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Added: checks in the quick-select menues
+ * Now the current lecture is again saved and restored the next time
+ KTouch is started.
+
+2004-11-01 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Moved all configuration data to Prefs (using KConfig XT) or
+ to the KTouch Main Widget
+ * Removed the old configuration object completely
+ * Changed the startup procedure somewhat
+
+2004-10-29 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Moved some more configuration entries to the KConfig XT,
+ fixed some bugs with the configuration dialog
+ * added font override buttons.
+
+2004-10-26 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Converted the remaining lecture files to XML format
+
+2004-10-01 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Converted all not yet converted source files to UTF-8
+
+2004-09-30 Andreas Nicolai <andreas.nicolai@gmx.net>
+ * Implemented support for XML lecture files and ported some lecture
+ files to XML
+ * Implemented new lecture editor
+ * Added generic open request dialog (also used for all other editors)
+ * Reordered KTouch main class and cleaned up startup code
+ * Added titles to lectures, so that file names do not appear in the
+ context menu anylonger
+ * Fixed the deprecated download/upload routines
+ * Revised the configuration class and added new config data (still to
+ be syncronized with KConfig XT)
+ * plus much more...
+
+2004-09-30 Anne-Marie Mahfouf <annemarie.mahfouf@free.fr>
+ * Port to KConfig XT
+ * Port the Trainig ->Default Lectures, Settings->Keyboard Layouts,
+ Settings->Keyboard Color Schemes to KSelectAction
+ * Add tooltips and QWhatsThis help in Config dialogs
+
+2004-04-02 Andreas Nicolai <andreas.nicolai@gmx.net>
+ (develop)
+ * Fixed a bug in ktouch.cpp (wrong slots type)
+ * Cleaned up some files
+
+2003-05-19 Haavard Froeiland <haavard@users.sourceforge.net>
+ (develop)
+ * Added an extra keyboard colour scheme
+ * Added different scaling for the keys
+
+2003-05-09 Haavard Froeiland <haavard@users.sourceforge.net>
+ (develop)
+ * Added an option for changing fonts on the keyboard
+
+2003-05-05 Andreas Nicolai <andreas.nicolai@gmx.net>
+ (develop)
+ * added new files to CVS
+ * color and slide bug fix in slide line widget
+ * session management works now
+
+2003-04-01 Andreas Nicolai <andreas.nicolai@gmx.net>
+ (develop)
+ * code port to KDE3
+ * added many features (statistics, preferences dialog & other stuff)
+
+2001-09-24 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * Fixed unwanted behaviour, when automatically level changes accured
+
+2001-09-22 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added sound support for automatic level change
+ * made option for it in the general dialog
+ * statistics are now saved to file
+
+2001-09-18 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * Started work on statistics.
+
+2001-05-19 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * Support for training on keypad is added. ;-)
+
+2001-05-14 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added font chooice in option general
+
+2001-05-14 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added color chooice for visual notification.
+
+2001-05-09 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added option for visual notification.
+
+2001-04-17 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added visual notification if you typed something wrong.
+
+2001-04-11 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (develop)
+ * added option for turning error beep on/of
+ * added option for automatic level change
+ * added possability to change level manually
+
+2001-04-10 Christian SPENER <chris@spener.net>
+
+ (admin stuff)
+ * test some homepage stuff
+
+2001-04-07 Christian SPENER <chris@spener.net>
+
+ (admin stuff)
+ * editing this ChangeLog File to be useful
+
+2001-04-05 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.91 is out
+ * new features:
+ pause button
+ added frensh keyboard
+
+2001-03-17 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.90 is out
+ * new features:
+ KDE2
+ colorful keyboard
+ scrolling text if text doesn't fit into window
+
+2000-08-11 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.70 is out
+ * new features:
+ you have to press enter at the end of each line
+ KTouch can now remember where you were last time you were practising
+ You can adjust how the levels change according to your typing skills
+ Latin-American and Portuguese keyboards added
+
+2000-06-11 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.60 is out
+ * new features:
+ Change between different keyboard layouts. Supported keyboard's is English, German and Norwegian.
+
+2000-05-09 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.50 is out
+ * new features:
+ Higlighting of the control keys. e.g uppercase letters will be indicated with the shift button.Bug fix:
+ You can now use ASCII characters in the extended table. Thanks to: Peter Rexigel
+
+2000-04-26 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.30 is out
+ * new features:
+ It is now possible to load your own text-files for training. Use a blank line for new levels, and # for commenting.
+
+2000-04-19 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (new version)
+ * ktouch 0.10 is out
+ * website online
+
+2000-03-15 Haavard Froeiland <haavard@users.sourceforge.net>
+
+ (project start)
+ * ktouch was started
diff --git a/ktouch/INSTALL b/ktouch/INSTALL
new file mode 100644
index 00000000..edc7dacc
--- /dev/null
+++ b/ktouch/INSTALL
@@ -0,0 +1,47 @@
+Retrieving the source
+---------------------
+
+After a subversion checkout of the kdeedu module you will automatically have the
+ktouch directory inside the kdeedu directory.
+
+If you want to update/checkout ktouch alone, use
+
+ svn checkout -P kdeedu/ktouch
+
+or
+
+ svn update -P kdeedu/ktouch
+
+The flag -P is recommanded so that empty directories left over from previous
+versions are not transferred.
+
+
+Installation from SVN
+---------------------
+
+Enter the kdeedu directory and do a
+
+ make -f Makefile.CVS
+
+and
+
+ ./configure
+
+(don't forget to add your options)
+
+Then change into the subdirectory kdeedu/ktouch and do as usual
+
+ make
+
+and/or
+
+ make install
+
+
+Install is always necessery if the ktouch.rc file has been changed.
+
+
+Good luck!
+Andreas
+(ghorwin@users.sourceforge.net)
+
diff --git a/ktouch/Makefile.am b/ktouch/Makefile.am
new file mode 100644
index 00000000..4150939c
--- /dev/null
+++ b/ktouch/Makefile.am
@@ -0,0 +1,13 @@
+# This file you have to edit. Change the name here
+SUBDIRS = src keyboards training sounds graphics icons
+
+# not a GNU package. You can remove this line, if
+# have all needed files, that a GNU package needs
+AUTOMAKE_OPTIONS = foreign
+
+# place KTouch in the start menu under edutainment
+xdg_apps_DATA = ktouch.desktop
+
+
+
+include ../admin/Doxyfile.am
diff --git a/ktouch/configure.in.in b/ktouch/configure.in.in
new file mode 100644
index 00000000..a2d12bf5
--- /dev/null
+++ b/ktouch/configure.in.in
@@ -0,0 +1 @@
+AC_CHECK_HEADERS(sstream)
diff --git a/ktouch/extras/sliding_line.odg b/ktouch/extras/sliding_line.odg
new file mode 100644
index 00000000..2efa03b3
--- /dev/null
+++ b/ktouch/extras/sliding_line.odg
Binary files differ
diff --git a/ktouch/extras/training-gen/c/README b/ktouch/extras/training-gen/c/README
new file mode 100644
index 00000000..230ed429
--- /dev/null
+++ b/ktouch/extras/training-gen/c/README
@@ -0,0 +1,8 @@
+To get files with words:
+$ aspell dump master hash_file
+
+Compile the program:
+$ gcc ktouchgen.c -o ktouchgen
+
+Run the program:
+$ ./ktouchgen english_conf english_word english.ktouch
diff --git a/ktouch/extras/training-gen/c/english_conf b/ktouch/extras/training-gen/c/english_conf
new file mode 100644
index 00000000..121a6ee6
--- /dev/null
+++ b/ktouch/extras/training-gen/c/english_conf
@@ -0,0 +1,13 @@
+jf
+kd
+ls
+ai
+en
+vu
+ir
+oc
+pq
+wm
+bp
+ty
+xz
diff --git a/ktouch/extras/training-gen/c/ktouchgen.c b/ktouch/extras/training-gen/c/ktouchgen.c
new file mode 100644
index 00000000..dbb2dcf2
--- /dev/null
+++ b/ktouch/extras/training-gen/c/ktouchgen.c
@@ -0,0 +1,233 @@
+/***************************************************************************
+ main.c - description
+ -------------------
+ begin : Wed Mar 21 21:39:53 EST 2001
+ copyright : (C) 2001 by Haavard Froeiland 2264228
+ email : havard@student.unsw.edu.au
+
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <ctype.h>
+#include <time.h>
+
+#define max 50
+
+typedef struct WordNode *WordList;
+
+struct WordNode
+{
+ char *word;
+ struct WordNode *next;
+};
+
+void *addWord(WordList first, char w[])
+{
+ struct WordNode *ptr;
+
+ ptr=malloc(sizeof(struct WordNode));
+ ptr->word=strdup(w);
+ ptr->next=first;
+ return ptr;
+}
+
+void printWordList(WordList l)
+{
+ struct WordNode *ptr=l;
+ /* loop throug the linked list */
+ while(ptr!=NULL)
+ {
+ printf("%s\n",ptr->word);
+ ptr=ptr->next;
+ }
+}
+
+void printLevel(FILE *f,char *l[])
+{
+ int pos=0;
+ int line=0;
+ int arrayMax=0;
+ int arrayPos=0;
+
+ while(l[arrayMax]!=NULL)
+ {
+ arrayMax++;
+ }
+
+ if (arrayMax == 0) return;
+ /* loop throug the linked list */
+ while(line<30)
+ {
+ arrayPos=((float)rand()/RAND_MAX)*arrayMax;
+ pos=pos+strlen(l[arrayPos]);
+ fprintf(f,"%s",l[arrayPos]);
+ if(pos>40)
+ {
+ fprintf(f,"\n");
+ pos=0;
+ line++;
+ }
+ else
+ {
+ pos++;
+ fprintf(f," ");
+ }
+ }
+}
+
+
+void creatLevelList(WordList l,char *levelList[],char s_or[], char s_and[])
+{
+ struct WordNode *ptr=l;
+ int i;
+ int j;
+ int pos=0;
+ bool or_failed;
+ bool and_failed;
+
+ /* loop throug the linked list */
+ while(ptr!=NULL)
+ {
+ /* loop through the word */
+ /* printf("%s\n",ptr->word); */
+ i=strlen(ptr->word)-1;
+ for(;i>=0;i--)
+ {
+
+ or_failed=true;
+ j=strlen(s_or)-1;
+ for(;j>=0;j--)
+ {
+ if(ptr->word[i]==s_or[j])
+ {
+ or_failed=false;
+ j=-1;
+ }
+ }
+
+ and_failed=true;
+ j=strlen(s_and)-1;
+ for(;j>=0;j--)
+ {
+ if(ptr->word[i]==s_and[j])
+ {
+ and_failed=false;
+ j=-1;
+ }
+ }
+
+ if(or_failed==true)
+ {
+ i=-1;
+ }
+ }
+ if(or_failed==false && and_failed==false)
+ {
+ levelList[pos]=ptr->word;
+ pos++;
+ /* printf("%d\n",pos); */
+ }
+
+ ptr=ptr->next;
+ }
+ levelList[pos]=NULL;
+}
+
+
+int main(int argc, char *argv[])
+{
+ time_t lt;
+ FILE *file;
+ WordList list=NULL;
+ char *levelList[100000];
+ char word[max];
+ char test[100];
+ int i=0;
+ char *s[50];
+
+ if(argc<4)
+ {
+ printf("\nUsage: ktouchgen ConfigFile WordFile TrainingFile\n");
+ exit(0);
+ }
+
+ /**
+ * Read in the configFile
+ *
+ */
+ if((file = fopen(argv[1],"r"))==NULL)
+ {
+ printf("can't open config_file:%s for reading",argv[2]);
+ }
+ i=0;
+ while(!feof(file))
+ {
+ fscanf(file,"%s",word);
+
+ s[i]=strdup(word);
+ printf("%s\n",s[i]);
+ i++;
+ }
+ s[i]=NULL;
+ fclose(file);
+
+
+
+ /**
+ * Read in the wordFile and add each word to the list
+ *
+ */
+ printf("Starting reading words");
+ if((file = fopen(argv[2],"r"))==NULL)
+ {
+ printf("can't open word_file:%s for reading",argv[2]);
+ }
+ while(!feof(file))
+ {
+ fscanf(file,"%s",word);
+ list=addWord(list, word);
+ }
+ fclose(file);
+
+
+ if((file = fopen(argv[3],"w"))==NULL)
+ {
+ printf("Error when writing to file:%s",argv[3]);
+ }
+
+ lt = time(NULL);
+ fprintf(file,"#############################################################\n");
+ fprintf(file,"# Rrainingfile genereated %s",ctime(&lt));
+ fprintf(file,"# Program written by Hvard Friland\n");
+ fprintf(file,"#############################################################\n\n");
+
+ strcpy(test,"");
+
+ i=0;
+ while(s[i]!=NULL)
+ {
+ if (strlen(test) + strlen(s[i]) + 1 > sizeof(test))
+ {
+ printf("Buffer overflow.\n");
+ exit(1);
+ }
+ strcat(test,s[i]);
+ fprintf(file,"# Level %d\n",i+1);
+ fprintf(file,"%s\n", s[i]);
+ creatLevelList(list,levelList,test,s[i]);
+ printLevel(file,levelList);
+ fprintf(file,"\n");
+ i++;
+ }
+ fclose(file);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/ktouch/extras/training-gen/perl/README b/ktouch/extras/training-gen/perl/README
new file mode 100644
index 00000000..557a7468
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/README
@@ -0,0 +1,80 @@
+###################################################################
+#
+# ktouch-gen.pl
+#
+# written by: Steinar Theigmann <steinart@incatel.no>
+# Hvard Friland <havard.froiland@chello.no>
+#
+# This file describes how to generate your own training files
+# in 3. steps.
+#
+
+
+Step 1: Collect data
+
+The script needs a data file with words, one word on each line. You
+can create it in your editor, or you can get it generated (see
+below). You will also find some data files in cvs.
+
+Suggestion for creating your own data file using an excisting dictionary. See http://aspell.sourceforge.net for more info.
+
+$ aspell dump master
+
+This will print out a looong list with words in the default
+language. If you have installed other languages that you want to use
+you can write:
+
+$ aspell dump master norwegian
+
+This will print out all the norwegian words found in the norwegian
+ditionary.
+
+Since we don't want this word on the screen, but in a file we do this:
+
+$ aspell dump master > ~/your-word-file
+
+You will now have a file called your-word-file stored in your home directory.
+
+
+Step 2: Creat a configuration file
+
+The config file is shown below.
+
+<---- the file starts here ---->
+length-of-line 20
+number-of-line 10
+
+jf
+kd
+ls
+ca
+nt
+iv
+me
+hr
+go
+bp
+qu
+wn
+cx
+yz
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
+<---- the file ends here ---->
+
+The length of a line is set to be 20 characters, and each level should
+be 10 lines loong. The first level will only contain combinations of
+"jf" and the next one will contain "jfkd" and so on.
+
+Save it to a file called your-config-file, and we are ready to try the script.
+
+
+Step 3: Generate your training file
+
+To test the script you should do this:
+
+$ perl ktouch-gen.pl your-config-file < your-word-file
+
+This will print out the newly generated training file to your screen,
+if you are happy with it, you could save it to file by doing this.
+
+$ perl ktouch-gen.pl your-config-file < your-word-file > your-training-file.ktouch
diff --git a/ktouch/extras/training-gen/perl/dk.config b/ktouch/extras/training-gen/perl/dk.config
new file mode 100644
index 00000000..409a07ca
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/dk.config
@@ -0,0 +1,19 @@
+length-of-line 12
+number-of-line 6
+
+jf
+kd
+ls
+a
+nt
+iv
+me
+hr
+go
+bp
+q
+wn
+c
+x
+,.
+ABCDEFGHIJKLMNOPQRSTUVWYZ \ No newline at end of file
diff --git a/ktouch/extras/training-gen/perl/en.config b/ktouch/extras/training-gen/perl/en.config
new file mode 100644
index 00000000..bb5df1ae
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/en.config
@@ -0,0 +1,15 @@
+jf
+kd
+ls
+ca
+nt
+iv
+me
+hr
+go
+bp
+qu
+wn
+cx
+yz
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
diff --git a/ktouch/extras/training-gen/perl/es.config b/ktouch/extras/training-gen/perl/es.config
new file mode 100644
index 00000000..49b8b32d
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/es.config
@@ -0,0 +1,17 @@
+length-of-line 30
+number-of-line 20
+jf
+kd
+ls
+ca
+nt
+iv
+me
+hr
+go
+bp
+qu
+wn
+cx
+yz
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
diff --git a/ktouch/extras/training-gen/perl/ktouch-gen.pl b/ktouch/extras/training-gen/perl/ktouch-gen.pl
new file mode 100755
index 00000000..901df6e0
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/ktouch-gen.pl
@@ -0,0 +1,180 @@
+#!/usr/bin/perl -w --strict
+
+# default values
+$length_of_line = 60;
+$number_of_line = 30;
+
+
+# genword( accumulated, core )
+# This function will generate a random sequens of character
+# containing only characters from accum or core and all words
+# generated will contain at lest on character from core
+sub genword
+{
+ (my $accum, my $core) = @_;
+
+ my $all=$accum.$core;
+ my $res="";
+
+ for(my $i=0;$i<=rand(5);$i++)
+ {
+ my $ran_pos=int(rand(length($all)));
+ $res=$res.substr($all,$ran_pos,1);
+ }
+
+ # check if we have generated a walid word, containig some characters from $core
+ if ($res =~ m/[$core]/)
+ {
+ return $res;
+ }
+ else
+ {
+ return genword($accum,$core);
+ }
+}
+
+# This function will return a list of words containing only characters from
+# accum or core. And all words will contain at lest on echaracter from core.
+# If we can't find enough words, we will use genword to generate enough words
+# to fill the list.
+sub genlist
+{
+ ($accum, $core) = @_;
+ my @res;
+
+ my $all=$accum.$core;
+
+
+ #print "$core\n";
+
+ foreach(@word_list)
+ {
+ chomp($_);
+ if (m/[$core]/ && m/^[($all)][$all]*$/)
+ {
+ push @res,$_;
+ }
+ }
+
+ for(my $i=@res;$i<30;$i++)
+ {
+ push @res,genword($accum,$core);
+ }
+
+ return @res;
+}
+
+
+# Genlevel will generate a level
+sub genlevel
+{
+ ($accum, $core) = @_;
+ my $res = "";
+ my @list = genlist($accum,$core);
+ my $max_lines = $number_of_line;
+ my $max_length = $length_of_line;
+ while($max_lines >0)
+ {
+ my $tmp=$list[rand(@list)-1];
+ $res = $res.$tmp; # first word on line should not have space
+ while($max_length >0)
+ {
+ my $tmp=$list[rand(@list)-1];
+ $res = $res." ".$tmp;
+ $max_length = $max_length - (length($tmp) + 1); # +1 is for counting one extra space for each word
+ }
+ $res = $res."\n";
+ $max_length = $length_of_line;
+ $max_lines = $max_lines - 1;
+ }
+ return $res;
+}
+
+sub rrr
+{
+ print ".";
+ s/\\/\\\\/g; #remove escape character...
+ s/-/\\-/g; #remove any - since this will mean range
+ s/ //g;
+ return $_;
+}
+
+sub heading
+{
+ return
+ "######################################################################\n".
+ "##\n".
+ "# KTouch training file generated ".localtime(time())."\n".
+ "#\n".
+ "# Perl Script written by Steinar Theigmann & Hvard Friland.\n".
+ "#\n";
+}
+
+sub usage
+{
+ return
+ "\n".
+ "usage: ktouch-gen config_file\n".
+ " Example: ./ktouch-gen english-conf < english-word-file\n".
+ "\n";
+}
+
+# --------------------- START ----------------------------
+
+if(@ARGV == 0) # exit if there is no config_file specified
+{
+ die usage;
+}
+
+open(CONFIG,$ARGV[0]) # First argument should be config file
+ or die "\ nCan't find config_file: $ARGV[0]\n\n";
+
+# Read in all elements in config file
+while (<CONFIG>)
+{
+ chomp($_);
+
+ if(s/length\-of\-line//)
+ {
+ $length_of_line = $_;
+ }
+ elsif(s/number\-of\-line//)
+ {
+ $number_of_line = $_;
+ }
+ elsif($_) # Add to config if not empty
+ {
+ push @config,$_;
+ }
+}
+
+#foreach(@config)
+#{
+# print "$_\n";
+#}
+#exit 0;
+
+# Read in all words
+while (<STDIN>)
+{
+ chomp($_);
+ if(length($_)>0)
+ {
+ push @word_list, $_;
+ }
+}
+
+print heading;
+
+$accum="";
+$count=0;
+foreach(@config)
+{
+ $count++;
+ print "# Level $count\n";
+ print "$_\n";
+ print genlevel($accum,$_);
+ $accum=$accum.$_;
+ print "\n\n";
+}
+
diff --git a/ktouch/extras/training-gen/perl/no.config b/ktouch/extras/training-gen/perl/no.config
new file mode 100644
index 00000000..2135fce3
--- /dev/null
+++ b/ktouch/extras/training-gen/perl/no.config
@@ -0,0 +1,20 @@
+length-of-line 20
+number-of-line 10
+
+jf
+kd
+ls
+a
+nt
+iv
+me
+hr
+go
+bp
+q
+wn
+c
+x
+,.
+-
+<>
diff --git a/ktouch/extras/training-gen/python/README b/ktouch/extras/training-gen/python/README
new file mode 100644
index 00000000..98115f52
--- /dev/null
+++ b/ktouch/extras/training-gen/python/README
@@ -0,0 +1,5 @@
+To get files with words:
+$ aspell dump master hash_file
+
+Usage:
+python ktouchgen.py english_word english.conf english.ktouch
diff --git a/ktouch/extras/training-gen/python/english_conf b/ktouch/extras/training-gen/python/english_conf
new file mode 100644
index 00000000..62fe9aa6
--- /dev/null
+++ b/ktouch/extras/training-gen/python/english_conf
@@ -0,0 +1,190 @@
+# Configfile for ktouchgen.py
+# For Documentation see ktouchgen.by
+
+[Main]
+level_rows = 40
+row_length = 70
+
+[Level1]
+lchars = jf
+title = mainregion jf
+rows = 10
+type = 2
+
+[Level2]
+lchars = kd
+title = mainregion kd
+rows = 10
+type = 2
+
+[Level3]
+lchars = ls
+title = mainregion ls
+rows = 10
+type = 2
+
+[Level4]
+lchars = a;
+title = mainregion a;
+rows = 10
+type = 2
+
+[Level5]
+lchars = asdfjkl;
+title = mainregion practice
+
+[Level6]
+lchars = ei
+rows = 10
+type = 2
+
+[Level7]
+title = practice ei
+lchars = ei
+
+[Level8]
+lchars = ur
+rows = 10
+type = 2
+
+[Level9]
+title = practice ru
+lchars = ru
+
+[Level10]
+lchars = gh
+rows = 10
+type = 2
+
+[Level11]
+lchars = gh
+title = practice gh
+
+[Level12]
+lchars = ty
+type = 2
+rows = 10
+
+[Level13]
+lchars = ty
+title = practice ty
+
+[Level14]
+lchars = ghty
+title = practice ghty
+
+[Level15]
+lchars = vn
+type = 2
+rows = 10
+
+[Level16]
+lchars = vn
+title = practice vn
+
+[Level17]
+lchars = mc
+type = 2
+rows = 10
+
+[Level18]
+lchars = mc
+title = practice mc
+
+[Level19]
+lchars = b
+type = 2
+rows = 10
+
+[Level20]
+lchars = by
+title = practice by
+
+[Level21]
+lchars = cvbynm
+title = practice by
+
+[Level22]
+lchars = ow
+type = 2
+rows = 10
+
+[Level23]
+lchars = ow
+title = practice ow
+
+[Level24]
+lchars = pq
+type = 2
+rows = 10
+
+[Level25]
+lchars = oq
+title = practice pq
+
+[Level26]
+lchars = ['
+type = 2
+rows = 10
+
+[Level27]
+lchars = qwop['
+title = practice qwoop['
+
+[Level28]
+lchars = xz
+type = 2
+rows = 10
+
+[Level29]
+lchars = xz
+title = practice xz
+
+[Level30]
+lchars = ,.
+type = 2
+rows = 10
+
+[Level31]
+lchars = JUYHNM
+type = 2
+rows = 10
+
+[Level32]
+lchars = JUYHNM
+title = practice JUYHNM
+
+[Level33]
+lchars = FRTGBV
+type = 2
+rows = 10
+
+[Level34]
+lchars = FRTGBV
+title = practice FRTGBV
+
+[Level35]
+lchars = EDCWSXQAZ
+type = 2
+rows = 10
+
+[Level36]
+lchars = EDCWSXQAZ
+title = practice EDCWSXQAZ
+
+[Level37]
+lchars = IKOLP;:
+type = 2
+rows = 10
+
+[Level38]
+lchars = IKOLP;:
+title = practice IKOLP;:
+
+[Level39]
+lchars = QWERTYUIOPLKJHGFDSAZXCVBNM;:
+title = Gesamtbung
+
+
+
+
diff --git a/ktouch/extras/training-gen/python/ktouchgen.py b/ktouch/extras/training-gen/python/ktouchgen.py
new file mode 100644
index 00000000..97083c01
--- /dev/null
+++ b/ktouch/extras/training-gen/python/ktouchgen.py
@@ -0,0 +1,269 @@
+#!/usr/bin/python
+##################################################################################
+#
+# ktouchgen.py Builds Levelfiles for ktouch
+# This is an enhanced reimplementation of a programm written by
+# Haavard Froeiland <havard@student.unsw.edu.au>
+#
+# This Version was written by
+# Hendrik Naumann <hn75@gmx.de>
+# License: GPL
+# Last edited: 11.10.2001
+##################################################################################
+#
+# SYNTAX OF THE CONFIGFILE
+#
+# Sections:
+# [Main]
+# level_rows = Generated rows per level
+# row_length = Length of the generated rows
+#
+# [Level<Num>] Settings for the Levels to create
+# lchars = Chars that must be in the words
+# in the following levels these chars will be
+# permitted to be in the words
+# title = Title of the Level. If not given it is set to
+# lchars
+# rows = Number of rows. This overwrites level_rows.
+# type = 0 Wordlist will be used for Level. If type is
+# not given this is default.
+# type > 0 Words will be created from lchars and permitted
+# chars. The number of type indicates the length
+# of the genrated words.
+#
+##################################################################################
+
+from whrandom import randint, random
+import string
+from string import join, maketrans, translate, count, strip, lower, find, upper
+import time
+import sys
+import ConfigParser
+import regex
+
+DOCSTRING = """
+Usage:
+ ./ktouchgen.py wordfile configfile outputfile
+ wordfile Is an file containing the words the levels are build from.
+ It should contain one word on each line
+ configfile File that contains the configuration of the levels.
+ See ktouchgen.py for documentation.
+ outputfile The name of the new levelfile. If it exists it will
+ be overwritten.
+"""
+
+class LevelList:
+ "Level List Class"
+ def __init__(self, Levelchars, Permitchars):
+ self.list = {0:[join(Levelchars,"")]}
+ self.wordcount = 0.0
+ self.llist = Levelchars
+ self.plist = Permitchars
+
+ def SelectWords(self, Wordlist):
+ """
+ SelectWords(self, Wordlist)
+ Searches for words only contain Permitchars and at least
+ one Levelchar.
+ Calculate the number of levelchars / per chars of the word
+ and fill this values in an mapping
+ {lchars/chars*1000 :[list of words with this property]}
+ """
+ Transstring = maketrans("","")
+ pliststring = join(self.plist, "")
+ lliststring = join(self.llist, "")
+
+ for Word in Wordlist:
+ lchar_count = 0
+ if len(translate(Word, Transstring, pliststring)) == 0:
+ lchar_count = len(Word) - len(translate(Word, Transstring, lliststring))
+ if lchar_count:
+ weight = int((float(lchar_count) / float(len(Word))) * 1000)
+ if self.list.has_key(weight):
+ self.list[weight].append(Word)
+ else:
+ self.list[weight] = [Word]
+ self.wordcount = self.wordcount + 1
+
+ def GetRandomList(self, listlength):
+ """
+ GetRandomList(self, listlength)
+ Returns a list of randomwords with listlength length.
+ First choose words with most Levelchars, if these are
+ not enough, words with less are chosen.
+ """
+ retlist = []
+ selectlist = []
+ length = 0
+ val = 0
+ temp = 0
+ keys = self.list.keys()
+ keys.sort()
+ keys.reverse()
+ for key in keys:
+ if length < listlength:
+ for count in range(len(self.list[key]) - 1):
+ if length < listlength and key > 0 :
+ num = randint (0, len(self.list[key]) - 1)
+ word = self.list[key][num]
+ temp = temp + key
+ del(self.list[key][num])
+ val = val + 1
+ length = length + len(word)
+ selectlist.append(word)
+ else:
+ break
+ else:
+ break
+ temp = float(temp) / val / 10
+ print 'Got words with an averages of %(temp).2f %% lchars.' %vars()
+ # Select the returnlist from selectlist
+ val = val - 1
+ length = 0
+ while length < listlength:
+ word = selectlist[randint(0, val)]
+ length = length + len(word)
+ retlist.append(word)
+
+ return retlist
+
+ def GenArtWord(self, Wordlength):
+ """
+ GenArtWord(self, Wordlength)
+ Builds an artifical word (with length Wordlength) out of Levelchars and Permitchars.
+ Does it like: random(lchar) + random(pchar) + .....
+ """
+ ret = ""
+ while len(ret) < Wordlength:
+ ret = ret + self.llist[randint(0, len(self.llist) - 1)] + self.plist[randint(0, len(self.plist) - 1)]
+ return ret
+
+ def GetArtList(self, Listlength, Wordlength):
+ """
+ GetArtList(self, Listlength, Wordlength)
+ Buids an Wordlist with length Listlength out of artificial words.
+ See: self.GenArtWord()
+ """
+ length = 0
+ ret = []
+ while length < Listlength:
+ word = self.GenArtWord(Wordlength)
+ ret.append(word)
+ length = length + len(word)
+ return ret
+
+
+def main(argv):
+ Wordlist = []
+ UpcaseWordlist = []
+ # Reading the Wordlist
+ try:
+ wordfile = open(argv[1], 'r')
+ except IOError:
+ print "\nWordfile couldn't be opened.\n", DOCSTRING
+ return 1
+ # Create two Wordlists, one with first char lowered
+ # (more words for the first levels) and one like it ist read
+ for wordstring in wordfile.readlines():
+ wordstring = strip(wordstring)
+ if lower(wordstring) != wordstring:
+ UpcaseWordlist.append(wordstring)
+ Wordlist.append(lower(wordstring))
+ wordfile.close()
+
+ # Parse the configfile
+ # Creates a List Levelops with [(Options), ]
+ # Optiontuple contains (lchars, title, rows)
+ conf = ConfigParser.ConfigParser()
+ try:
+ file = open(argv[2],'r')
+ except IOError:
+ print '\nConfigfile could not be opened.\n', DOCSTRING
+ return 1
+ file.close()
+ conf.read(argv[2])
+ try:
+ Rowlength = conf.getint('Main', 'row_length')
+ except ConfigParser.MissingSectionHeaderError:
+ print '\nWrong configfile. See ktouchgen.py for Documentation.' + DOCSTRING
+ Levelrows = conf.getint('Main', 'level_rows')
+ Levelops = []
+ Levelnum = 1
+ section = 'Level' + str(Levelnum)
+ while conf.has_section(section):
+ lchars = []
+ try:
+ for char in strip(conf.get(section, 'lchars')):
+ lchars.append(char)
+ except ConfigParser.NoOptionError:
+ print '\nNo characters defined for level %(Levelnum)s !' %vars()
+ return 1
+ try:
+ title = conf.get(section, 'title')
+ except ConfigParser.NoOptionError:
+ title = join(lchars)
+ try:
+ rows = conf.getint(section, 'rows')
+ except ConfigParser.NoOptionError:
+ rows = Levelrows
+ try:
+ type = conf.getint(section, 'type')
+ except ConfigParser.NoOptionError:
+ type = 0
+
+ Levelops.append((lchars, title, rows, type))
+ Levelnum = Levelnum + 1
+ section = 'Level' + str(Levelnum)
+ print '\nConfiguration for %(Levelnum)s levels read. \n!!! Be aware, if the Levels are not numberd correctly \n!!! they will not be read completely!' %vars()
+
+ # Generate Output
+ try:
+ outfile = open(argv[3], 'w')
+ except IOError:
+ print "Outputfile could not be opened.\n", DOCSTRING
+ return 1
+ outfile.write('#########################################################\n' +\
+ '# Trainingfile generaded ' + time.ctime(time.time()) + '\n' +\
+ '# Program written by Hendrik Naumann <hn75@gmx.de>\n' +\
+ '# Inspired by Hvard Friland\'s version\n' +\
+ '#########################################################\n')
+ permit_chars = []
+ Levelnum = 0
+ for Option in Levelops:
+ cachestring = ""
+ Levelnum = Levelnum + 1
+ for new_char in Option[0]:
+ if new_char not in join(permit_chars,""):
+ permit_chars.extend(Option[0])
+ outfile.write('\n# Level %(Levelnum)s\n' %vars() + Option[1] + "\n")
+
+ print "Generating Level " + str(Levelnum)
+ print join(permit_chars,"")
+
+ # Generate a LevelList object and give the needed Wordlists
+ levelwordlist = LevelList (Option[0], permit_chars)
+ if Option[3] == 0:
+ if lower(join(permit_chars,"")) != join(permit_chars,""):
+ if upper(join(Option[0],"")) != join(Option[0],""):
+ levelwordlist.SelectWords(Wordlist)
+ levelwordlist.SelectWords(UpcaseWordlist)
+ else:
+ levelwordlist.SelectWords(Wordlist)
+ randomlist = levelwordlist.GetRandomList(Rowlength * Option[2])
+ else:
+ randomlist = levelwordlist.GetArtList(Rowlength * Option[2], Option[3])
+
+ # Write the randomlist
+ for word in randomlist:
+ cachestring = cachestring + " " + word
+ if len(cachestring) > Rowlength - 3:
+ outfile.write(strip(cachestring) + "\n")
+ cachestring = ""
+ outfile.close()
+ return 0
+
+if __name__ == "__main__":
+ if len(sys.argv) == 4:
+ main(sys.argv)
+ else:
+ print '\nWrong number of parameters\n' + DOCSTRING
diff --git a/ktouch/graphics/Makefile.am b/ktouch/graphics/Makefile.am
new file mode 100644
index 00000000..4610f1d5
--- /dev/null
+++ b/ktouch/graphics/Makefile.am
@@ -0,0 +1,2 @@
+graphdir = $(kde_datadir)/ktouch
+graph_DATA = splash.png
diff --git a/ktouch/graphics/splash.png b/ktouch/graphics/splash.png
new file mode 100644
index 00000000..d58e2832
--- /dev/null
+++ b/ktouch/graphics/splash.png
Binary files differ
diff --git a/ktouch/icons/Makefile.am b/ktouch/icons/Makefile.am
new file mode 100644
index 00000000..cf9855c9
--- /dev/null
+++ b/ktouch/icons/Makefile.am
@@ -0,0 +1,3 @@
+KDE_ICON=AUTO
+
+
diff --git a/ktouch/icons/hi128-app-ktouch.png b/ktouch/icons/hi128-app-ktouch.png
new file mode 100644
index 00000000..95d4caa7
--- /dev/null
+++ b/ktouch/icons/hi128-app-ktouch.png
Binary files differ
diff --git a/ktouch/icons/hi16-app-ktouch.png b/ktouch/icons/hi16-app-ktouch.png
new file mode 100644
index 00000000..301c8f81
--- /dev/null
+++ b/ktouch/icons/hi16-app-ktouch.png
Binary files differ
diff --git a/ktouch/icons/hi22-app-ktouch.png b/ktouch/icons/hi22-app-ktouch.png
new file mode 100644
index 00000000..508e50a9
--- /dev/null
+++ b/ktouch/icons/hi22-app-ktouch.png
Binary files differ
diff --git a/ktouch/icons/hi32-app-ktouch.png b/ktouch/icons/hi32-app-ktouch.png
new file mode 100644
index 00000000..36335a86
--- /dev/null
+++ b/ktouch/icons/hi32-app-ktouch.png
Binary files differ
diff --git a/ktouch/icons/hi48-app-ktouch.png b/ktouch/icons/hi48-app-ktouch.png
new file mode 100644
index 00000000..6c42fb26
--- /dev/null
+++ b/ktouch/icons/hi48-app-ktouch.png
Binary files differ
diff --git a/ktouch/icons/hisc-app-ktouch.svgz b/ktouch/icons/hisc-app-ktouch.svgz
new file mode 100644
index 00000000..ec1aea06
--- /dev/null
+++ b/ktouch/icons/hisc-app-ktouch.svgz
Binary files differ
diff --git a/ktouch/keyboards/Makefile.am b/ktouch/keyboards/Makefile.am
new file mode 100644
index 00000000..b1cccbb4
--- /dev/null
+++ b/ktouch/keyboards/Makefile.am
@@ -0,0 +1,46 @@
+# adding keyboards
+keyboarddir = $(kde_datadir)/ktouch
+keyboard_DATA = \
+bg.keyboard \
+de.keyboard \
+de.keypad.keyboard \
+de.neo.keyboard \
+de.swiss.keyboard \
+dk.keyboard \
+en.dvorak.keyboard \
+en.keyboard \
+fr.a.keyboard \
+fr.keyboard \
+fr.swiss.keyboard \
+dvorak_fr.keyboard \
+hu.keyboard \
+he.keyboard \
+it.keyboard \
+nb.keyboard \
+sl.keyboard \
+pl.keyboard \
+sv.keyboard \
+tr.f.keyboard \
+tr.q.keyboard
+
+
+#sv.dvorak.keyboard \
+#sv.keyboard \
+#uk.basic.keyboard \
+#uk.typewriter.keyboard \
+#uk.winkeys.keyboard
+#ru.winkeys.keyboard \
+#ru.2.keyboard \
+#ru.3.keyboard \
+#ru.basic.keyboard \
+#ru.keyboard \
+#ru.typewriter.keyboard \
+#pt.br.keyboard \
+#pt.keyboard \
+#nn.keyboard \
+#la.keyboard \
+#hu.keyboard \
+#ee.keyboard \
+#fi.keyboard \
+#es.dvorak.keyboard \
+#es.keyboard
diff --git a/ktouch/keyboards/be.keyboard b/ktouch/keyboards/be.keyboard
new file mode 100644
index 00000000..3995e5fd
--- /dev/null
+++ b/ktouch/keyboards/be.keyboard
@@ -0,0 +1,150 @@
+####################################################
+# KTouch
+# Keybord layout file
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+####################################################
+#
+#
+# FingerKey: These keys are the keys where the fingers rest.
+#
+# Unicode KeyText x y
+FingerKey 113 Q 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 109 M 108 20
+#
+#
+# ControlKey: These are modifier or additional (unused) keys.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: These keys are the keys that are visible on the keyboard. To
+# get the character (unicod) you don't have to press anything else
+# but the key. The FingerKey unicode number tells the program
+# which finger has to be moved to press this key.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 178 ² 0 0 113
+NormalKey 38 & 10 0 113
+NormalKey 233 é 20 0 113
+NormalKey 34 " 30 0 115
+NormalKey 39 ' 40 0 100
+NormalKey 40 ( 50 0 102
+NormalKey 167 § 60 0 102
+NormalKey 232 è 70 0 106
+NormalKey 33 ! 80 0 106
+NormalKey 231 ç 90 0 107
+NormalKey 224 à 100 0 108
+NormalKey 41 ) 110 0 109
+NormalKey 45 - 120 0 109
+#
+NormalKey 97 A 15 10 113
+NormalKey 122 Z 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 109
+NormalKey 94 ^ 115 10 109
+NormalKey 36 $ 125 10 109
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 249 ù 118 20 109
+NormalKey 181 µ 128 20 109
+#
+NormalKey 60 < 13 30 113
+NormalKey 119 W 23 30 113
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 44 , 83 30 106
+NormalKey 59 ; 93 30 107
+NormalKey 58 : 103 30 108
+NormalKey 61 = 113 30 109
+#
+#
+# HiddenKey: These are actually not "hidden" keys as such, but the characters
+# that are obtained by pressing a key and a certain modifier key.
+# Define the character via its unicode and then also
+# the unicode for the base character on the key to be pressed.
+# Also define the character/key of the finger that needs to
+# press the key and the modifier key that needs to be highlighted.
+#
+# Unicode Target Finger Modifier
+#
+HiddenKey 65 97 113 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 109 258 #P
+HiddenKey 81 113 113 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 113 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 115 257 #Z
+HiddenKey 179 178 113 257 ³
+HiddenKey 49 38 113 257 1
+HiddenKey 50 233 113 257 2
+HiddenKey 51 34 115 257 3
+HiddenKey 52 39 100 257 4
+HiddenKey 53 40 102 257 5
+HiddenKey 54 167 102 257 6
+HiddenKey 55 232 106 258 7
+HiddenKey 56 33 106 258 8
+HiddenKey 57 231 107 258 9
+HiddenKey 58 224 108 258 0
+HiddenKey 176 41 109 258 °
+HiddenKey 95 45 109 258 _
+HiddenKey 163 181 109 258 £
+HiddenKey 42 36 109 258 *
+HiddenKey 37 249 109 258 %
+HiddenKey 62 60 113 258 >
+HiddenKey 63 44 106 258 ?
+HiddenKey 46 59 107 258 .
+HiddenKey 47 58 108 258 /
+HiddenKey 43 61 109 258 +
+#
+HiddenKey 64 233 113 264 @
+HiddenKey 92 60 113 264 \
+
diff --git a/ktouch/keyboards/bg.keyboard b/ktouch/keyboards/bg.keyboard
new file mode 100644
index 00000000..87a71a62
--- /dev/null
+++ b/ktouch/keyboards/bg.keyboard
@@ -0,0 +1,99 @@
+####################################################
+# KTouch
+# Keybord layout file
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 Ь 18 20
+FingerKey 115 Я 28 20
+FingerKey 100 А 38 20
+FingerKey 102 О 48 20
+FingerKey 106 Т 78 20
+FingerKey 107 Н 88 20
+FingerKey 108 В 98 20
+FingerKey 59 М 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+NormalKey 96 ( 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 95 - 110 0 59
+NormalKey 61 . 120 0 59
+NormalKey 92 ' 130 0 59
+#
+NormalKey 113 , 15 10 97
+NormalKey 119 У 25 10 115
+NormalKey 101 Е 35 10 100
+NormalKey 114 И 45 10 102
+NormalKey 116 Ш 55 10 102
+NormalKey 121 Щ 65 10 106
+NormalKey 117 К 75 10 106
+NormalKey 105 С 85 10 107
+NormalKey 111 Д 95 10 108
+NormalKey 112 З 105 10 59
+NormalKey 91 Ц 115 10 59
+NormalKey 93 ; 125 10 59
+#
+NormalKey 103 Ж 58 20 102
+NormalKey 104 Г 68 20 106
+NormalKey 39 Ч 118 20 59
+#
+NormalKey 122 Ю 23 30 97
+NormalKey 120 Й 33 30 115
+NormalKey 99 Ъ 43 30 100
+NormalKey 118 Э 53 30 102
+NormalKey 98 Ф 63 30 102
+NormalKey 110 Х 73 30 106
+NormalKey 109 П 83 30 106
+NormalKey 44 Р 93 30 107
+NormalKey 46 Л 103 30 108
+NormalKey 47 Б 113 30 59
+#
+HiddenKey 65 97 97 257 #Ь
+HiddenKey 66 98 102 257 #Ф
+HiddenKey 67 99 100 257 #Ъ
+HiddenKey 68 100 100 257 #А
+HiddenKey 69 101 100 257 #Е
+HiddenKey 70 102 102 257 #О
+HiddenKey 71 103 102 257 #Ж
+HiddenKey 72 104 106 258 #Г
+HiddenKey 73 105 107 258 #С
+HiddenKey 74 106 106 258 #Т
+HiddenKey 75 107 107 258 #Н
+HiddenKey 76 108 106 258 #В
+HiddenKey 77 109 106 258 #М
+HiddenKey 78 110 106 258 #Х
+HiddenKey 79 111 108 258 #Д
+HiddenKey 80 112 59 258 #З
+HiddenKey 81 113 97 257 #ы
+HiddenKey 82 114 102 257 #И
+HiddenKey 83 115 115 257 #Я
+HiddenKey 84 116 102 257 #Ш
+HiddenKey 85 117 106 258 #К
+HiddenKey 86 118 102 257 #Э
+HiddenKey 87 119 115 257 #У
+HiddenKey 88 120 115 257 #Й
+HiddenKey 89 121 106 258 #Щ
+HiddenKey 90 122 97 257 #Ю
diff --git a/ktouch/keyboards/de.keyboard b/ktouch/keyboards/de.keyboard
new file mode 100644
index 00000000..170fe821
--- /dev/null
+++ b/ktouch/keyboards/de.keyboard
@@ -0,0 +1,130 @@
+####################################################
+# KTouch
+# Keybord layout file for german keybord layout
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 Ö 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Strg 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Strg 0 40 15 10
+ControlKey 32 Leertaste 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+
+NormalKey 94 ^ 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 223 ß 110 0 246
+NormalKey 180 ´ 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 122 Z 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 252 Ü 115 10 246
+NormalKey 43 + 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 228 Ä 118 20 246
+NormalKey 35 # 128 20 246
+
+NormalKey 60 < 13 30 97
+NormalKey 121 Y 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 246 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 97 258 #Y
+HiddenKey 90 122 106 258 #Z
+HiddenKey 62 60 97 258 #>
+HiddenKey 196 228 246 257 #Ä
+HiddenKey 214 246 246 257 #Ö
+HiddenKey 220 252 246 257 #Ü
+HiddenKey 176 94 97 258 #°
+HiddenKey 33 49 97 258 #!
+HiddenKey 34 50 97 258 #"
+HiddenKey 167 51 115 258 #§
+HiddenKey 36 52 100 258 #$
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 102 258 #&
+HiddenKey 47 55 106 257 #/
+HiddenKey 40 56 106 257 #(
+HiddenKey 41 57 107 257 #)
+HiddenKey 61 48 108 257 #=
+HiddenKey 63 223 246 257 #?
+HiddenKey 96 180 246 257 #`
+HiddenKey 59 44 107 257 #;
+HiddenKey 58 46 108 257 #:
+HiddenKey 95 45 246 257 #_
+HiddenKey 42 43 246 257 #*
+HiddenKey 39 35 246 257 #'
+HiddenKey 92 223 246 264 #\
+HiddenKey 124 60 97 264 #|
+HiddenKey 64 113 97 264 #@
+
+
+
+
+
diff --git a/ktouch/keyboards/de.keypad.keyboard b/ktouch/keyboards/de.keypad.keyboard
new file mode 100644
index 00000000..3cef7b85
--- /dev/null
+++ b/ktouch/keyboards/de.keypad.keyboard
@@ -0,0 +1,31 @@
+#######################################################
+# KTouch
+# Keyboard Layout file for number on german keyboards
+# created by simon schaak <simonDOTschaakATgmxDOTde>
+#######################################################
+# N / * - #
+# 7 8 9 + #
+# 4 5 6 + # My Keyboard
+# 1 2 3 E #
+# 000 , E #
+#######################################################
+#
+FingerKey 52 4 00 20
+FingerKey 53 5 10 20
+FingerKey 54 6 20 20
+FingerKey 43 + 30 10 8 18
+FingerKey 48 0 00 40 18 8
+
+ControlKey 00 Num 00 00 10 10
+ControlKey 13 Enter 30 30 10 20
+
+NormalKey 47 / 10 00 53
+NormalKey 42 * 20 00 54
+NormalKey 45 - 30 00 43
+NormalKey 55 7 00 10 52
+NormalKey 56 8 10 10 53
+NormalKey 57 9 20 10 54
+NormalKey 49 1 00 30 52
+NormalKey 50 2 10 30 53
+NormalKey 51 3 20 30 54
+NormalKey 44 , 20 40 54
diff --git a/ktouch/keyboards/de.neo.keyboard b/ktouch/keyboards/de.neo.keyboard
new file mode 100644
index 00000000..9f2c883e
--- /dev/null
+++ b/ktouch/keyboards/de.neo.keyboard
@@ -0,0 +1,100 @@
+####################################################
+# KTouch
+# Keybord layout file
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 117 U 18 20
+FingerKey 105 I 28 20
+FingerKey 97 A 38 20
+FingerKey 101 E 48 20
+FingerKey 110 N 78 20
+FingerKey 114 R 88 20
+FingerKey 116 T 98 20
+FingerKey 100 D 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+NormalKey 94 ^ 0 0 117
+NormalKey 49 1 10 0 117
+NormalKey 50 2 20 0 117
+NormalKey 51 3 30 0 105
+NormalKey 52 4 40 0 97
+NormalKey 53 5 50 0 101
+NormalKey 54 6 60 0 101
+NormalKey 55 7 70 0 110
+NormalKey 56 8 80 0 110
+NormalKey 57 9 90 0 114
+NormalKey 48 0 100 0 116
+NormalKey 45 - 110 0 100
+NormalKey 39 ' 120 0 100
+#
+NormalKey 113 Q 15 10 117
+NormalKey 118 V 25 10 105
+NormalKey 108 L 35 10 97
+NormalKey 99 C 45 10 101
+NormalKey 119 W 55 10 101
+NormalKey 107 K 65 10 110
+NormalKey 104 H 75 10 110
+NormalKey 103 G 85 10 114
+NormalKey 102 F 95 10 116
+NormalKey 106 J 105 10 100
+NormalKey 223 ß 115 10 100
+NormalKey 43 + 125 10 100
+#
+NormalKey 111 O 58 20 101
+NormalKey 115 S 68 20 110
+NormalKey 121 Y 118 20 100
+NormalKey 35 # 128 20 100
+#
+NormalKey 122 < 13 30 117
+NormalKey 246 Ö 23 30 117
+NormalKey 252 Ü 33 30 105
+NormalKey 228 Ä 43 30 97
+NormalKey 112 P 53 30 101
+NormalKey 122 Z 63 30 101
+NormalKey 98 B 73 30 110
+NormalKey 109 M 83 30 110
+NormalKey 44 , 93 30 114
+NormalKey 46 . 103 30 116
+NormalKey 120 X 113 30 100
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 110 257 #B
+HiddenKey 67 99 101 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 116 257 #F
+HiddenKey 71 103 114 257 #G
+HiddenKey 72 104 110 258 #H
+HiddenKey 73 105 105 258 #I
+HiddenKey 74 106 100 258 #J
+HiddenKey 75 107 110 258 #K
+HiddenKey 76 108 97 258 #L
+HiddenKey 77 109 110 258 #M
+HiddenKey 78 110 110 258 #N
+HiddenKey 79 111 101 258 #O
+HiddenKey 80 112 101 258 #P
+HiddenKey 81 113 117 257 #Q
+HiddenKey 82 114 114 257 #R
+HiddenKey 83 115 110 257 #S
+HiddenKey 84 116 116 257 #T
+HiddenKey 85 117 117 258 #U
+HiddenKey 86 118 105 257 #V
+HiddenKey 87 119 101 257 #W
+HiddenKey 88 120 100 257 #X
+HiddenKey 89 121 100 258 #Y
+HiddenKey 90 122 101 257 #Z
diff --git a/ktouch/keyboards/de.swiss.keyboard b/ktouch/keyboards/de.swiss.keyboard
new file mode 100644
index 00000000..95c494db
--- /dev/null
+++ b/ktouch/keyboards/de.swiss.keyboard
@@ -0,0 +1,130 @@
+####################################################
+# KTouch
+# Keybord layout file for german kaybord layout
+# Adaptiert für schweizedeutsche Tastatur 17.9.04 Hansueli Eggimann
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 Ö 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Strg 0 40 15 10
+ControlKey 32 Leertaste 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+NormalKey 167 § 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 39 ' 110 0 246
+NormalKey 94 ^ 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 122 Z 65 10 106
+#
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 252 Ü 115 10 246
+NormalKey 168 ¨ 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 228 Ä 118 20 246
+NormalKey 36 $ 128 20 246
+NormalKey 60 < 13 30 97
+NormalKey 121 Y 23 30 97
+#
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 257 #H
+HiddenKey 73 105 107 257 #I
+HiddenKey 74 106 106 257 #J
+HiddenKey 75 107 107 257 #K
+HiddenKey 76 108 108 257 #L
+HiddenKey 77 109 106 257 #M
+HiddenKey 78 110 106 257 #N
+HiddenKey 79 111 108 257 #O
+HiddenKey 80 112 246 257 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 257 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 97 258 #Y
+HiddenKey 90 122 106 257 #Z
+HiddenKey 62 60 97 258 #>
+HiddenKey 196 228 246 259 #Ä
+HiddenKey 214 246 246 259 #Ö
+HiddenKey 220 252 246 259 #Ü
+HiddenKey 224 228 246 257 #à
+HiddenKey 233 246 246 257 #é
+HiddenKey 232 252 246 257 #è
+HiddenKey 176 167 97 258 #°
+HiddenKey 43 49 97 258 #+
+HiddenKey 34 50 97 258 #"
+HiddenKey 42 51 115 258 #*
+HiddenKey 231 52 100 258 #ç
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 102 258 #&
+HiddenKey 47 55 106 257 #/
+HiddenKey 41 57 107 257 #)
+HiddenKey 40 56 106 257 #(
+HiddenKey 61 48 108 257 #=
+HiddenKey 63 39 246 257 #?
+HiddenKey 96 94 246 257 #`
+HiddenKey 59 44 107 257 #;
+HiddenKey 58 46 108 257 #:
+HiddenKey 95 45 246 257 #_
+HiddenKey 33 168 246 257 #!
+HiddenKey 163 36 246 257 #£
+HiddenKey 92 60 97 264 #\
+HiddenKey 124 49 97 264 #|
+HiddenKey 64 50 97 264 #@
diff --git a/ktouch/keyboards/dk.keyboard b/ktouch/keyboards/dk.keyboard
new file mode 100644
index 00000000..7b781aa8
--- /dev/null
+++ b/ktouch/keyboards/dk.keyboard
@@ -0,0 +1,104 @@
+####################################################
+# KTouch
+# Keybord layout file for Danish kaybord
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 230 Æ 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+ControlKey 13 Enter 138 10 12 20 10
+
+NormalKey 124 ½ 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 43 + 110 0 230
+NormalKey 180 ' 120 0 230
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 230
+NormalKey 229 Å 115 10 230
+NormalKey 168 " 125 10 230
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 248 Ø 118 20 230
+NormalKey 39 ' 128 20 230
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 230
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 238 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
+#
+HiddenKey 216 39 230 258 #Æ
+HiddenKey 198 230 230 258 #Ø
+HiddenKey 197 91 230 258 #Å
diff --git a/ktouch/keyboards/dvorak_fr.keyboard b/ktouch/keyboards/dvorak_fr.keyboard
new file mode 100644
index 00000000..6b90ed3e
--- /dev/null
+++ b/ktouch/keyboards/dvorak_fr.keyboard
@@ -0,0 +1,131 @@
+# -*- coding: utf-8; -*-
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+# Matthieu MOY, December 7th 2004
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 111 O 18 20
+FingerKey 97 A 28 20
+FingerKey 117 U 38 20
+FingerKey 101 E 48 20
+FingerKey 115 S 78 20
+FingerKey 116 T 88 20
+FingerKey 110 N 98 20
+FingerKey 100 D 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Ascii KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 95 _ 0 0 111
+NormalKey 61 = 10 0 111
+NormalKey 47 / 20 0 111
+NormalKey 45 - 30 0 97
+NormalKey 232 è 40 0 117
+NormalKey 92 \ 50 0 101
+NormalKey 94 ^ 60 0 101
+NormalKey 55 ( 70 0 115
+NormalKey 56 ` 80 0 115
+NormalKey 40 ) 90 0 116
+NormalKey 34 " 100 0 110
+NormalKey 91 [ 110 0 100
+NormalKey 93 ] 120 0 100
+#
+NormalKey 58 : 15 10 111
+NormalKey 39 ' 25 10 97
+NormalKey 233 é 35 10 117
+NormalKey 103 G 45 10 101
+NormalKey 46 . 55 10 101
+NormalKey 104 H 65 10 115
+NormalKey 118 V 75 10 115
+NormalKey 99 C 85 10 116
+NormalKey 109 M 95 10 110
+NormalKey 107 K 105 10 115
+NormalKey 122 Z 115 10 100
+NormalKey 34 " 125 10 100
+NormalKey 126 ~ 128 20 100
+#
+NormalKey 98 B 58 20 101
+NormalKey 102 F 68 20 115
+NormalKey 119 W 118 20 100
+#
+NormalKey 224 à 13 30 111
+NormalKey 124 | 23 30 111
+NormalKey 113 Q 33 30 97
+NormalKey 44 , 43 30 117
+NormalKey 105 I 53 30 101
+NormalKey 121 Y 63 30 101
+NormalKey 120 X 73 30 115
+NormalKey 114 R 83 30 115
+NormalKey 108 L 93 30 116
+NormalKey 112 P 103 30 110
+NormalKey 106 J 113 30 100
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Control
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 101 257 #B
+HiddenKey 67 99 116 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 115 257 #F
+HiddenKey 71 103 101 257 #G
+HiddenKey 72 104 104 258 #H
+HiddenKey 73 105 101 258 #I
+HiddenKey 74 106 108 258 #J
+HiddenKey 75 107 100 258 #K
+HiddenKey 76 108 116 258 #L
+HiddenKey 77 109 110 258 #M
+HiddenKey 78 110 110 258 #N
+HiddenKey 79 111 111 258 #O
+HiddenKey 80 112 110 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 115 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 116 257 #T
+HiddenKey 85 117 117 258 #U
+HiddenKey 86 118 115 257 #V
+HiddenKey 87 119 100 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 101 258 #Y
+HiddenKey 90 122 100 257 #Z
+
+HiddenKey 34 38 100 258 #&
+HiddenKey 57 231 111 257 #ç
diff --git a/ktouch/keyboards/ee.keyboard b/ktouch/keyboards/ee.keyboard
new file mode 100644
index 00000000..bd2a880e
--- /dev/null
+++ b/ktouch/keyboards/ee.keyboard
@@ -0,0 +1,124 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 Ö 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basically be all the numbers and the lowercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 21 ! 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 246
+NormalKey 43 + 110 0 246
+NormalKey 180 ' 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 252 Ü 115 10 246
+NormalKey 245 Õ 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 39 Ä 118 20 246
+#
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 246 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 257 #Z
diff --git a/ktouch/keyboards/en.dvorak.keyboard b/ktouch/keyboards/en.dvorak.keyboard
new file mode 100644
index 00000000..d191f544
--- /dev/null
+++ b/ktouch/keyboards/en.dvorak.keyboard
@@ -0,0 +1,99 @@
+####################################################
+# KTouch
+# Keybord layout file
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 111 O 28 20
+FingerKey 101 E 38 20
+FingerKey 117 U 48 20
+FingerKey 104 H 78 20
+FingerKey 116 T 88 20
+FingerKey 110 N 98 20
+FingerKey 115 S 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+NormalKey 96 ` 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 111
+NormalKey 52 4 40 0 101
+NormalKey 53 5 50 0 117
+NormalKey 54 6 60 0 117
+NormalKey 55 7 70 0 104
+NormalKey 56 8 80 0 104
+NormalKey 57 9 90 0 116
+NormalKey 48 0 100 0 110
+NormalKey 91 [ 110 0 115
+NormalKey 93 ] 120 0 115
+#
+NormalKey 39 ' 15 10 97
+NormalKey 44 , 25 10 111
+NormalKey 46 . 35 10 101
+NormalKey 112 P 45 10 117
+NormalKey 121 Y 55 10 117
+NormalKey 102 F 65 10 104
+NormalKey 103 G 75 10 104
+NormalKey 99 C 85 10 116
+NormalKey 114 R 95 10 110
+NormalKey 108 L 105 10 115
+NormalKey 47 / 115 10 115
+NormalKey 61 = 125 10 115
+NormalKey 92 \ 135 10 115
+#
+NormalKey 105 I 58 20 117
+NormalKey 100 D 68 20 104
+NormalKey 45 - 118 20 115
+#
+NormalKey 59 ; 23 30 97
+NormalKey 113 Q 33 30 111
+NormalKey 106 J 43 30 101
+NormalKey 107 K 53 30 117
+NormalKey 120 X 63 30 117
+NormalKey 98 B 73 30 104
+NormalKey 109 M 83 30 104
+NormalKey 119 W 93 30 116
+NormalKey 118 V 103 30 110
+NormalKey 122 Z 113 30 115
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 104 258 #B
+HiddenKey 67 99 116 258 #C
+HiddenKey 68 100 104 258 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 104 258 #F
+HiddenKey 71 103 104 258 #G
+HiddenKey 72 104 104 258 #H
+HiddenKey 73 105 117 257 #I
+HiddenKey 74 106 101 257 #J
+HiddenKey 75 107 117 257 #K
+HiddenKey 76 108 115 258 #L
+HiddenKey 77 109 104 258 #M
+HiddenKey 78 110 110 258 #N
+HiddenKey 79 111 111 257 #O
+HiddenKey 80 112 117 257 #P
+HiddenKey 81 113 111 257 #Q
+HiddenKey 82 114 110 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 116 258 #T
+HiddenKey 85 117 117 257 #U
+HiddenKey 86 118 110 258 #V
+HiddenKey 87 119 116 258 #W
+HiddenKey 88 120 117 257 #X
+HiddenKey 89 121 117 257 #Y
+HiddenKey 90 122 115 258 #Z
diff --git a/ktouch/keyboards/en.keyboard b/ktouch/keyboards/en.keyboard
new file mode 100644
index 00000000..c0e9f2d1
--- /dev/null
+++ b/ktouch/keyboards/en.keyboard
@@ -0,0 +1,124 @@
+####################################################
+# KTouch
+# Keybord layout file
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+####################################################
+#
+#
+# FingerKey: These keys are the keys where the fingers rest.
+#
+# Unicode KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 59 ; 108 20
+#
+#
+# ControlKey: These are modifier or additional (unused) keys.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: These keys are the keys that are visible on the keyboard. To
+# get the character (unicod) you don't have to press anything else
+# but the key. The FingerKey unicode number tells the program
+# which finger has to be moved to press this key.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 96 ` 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 95 - 110 0 59
+NormalKey 61 = 120 0 59
+NormalKey 92 \ 130 0 59
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 59
+NormalKey 91 [ 115 10 59
+NormalKey 93 ] 125 10 59
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 39 ' 118 20 59
+#
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 47 / 113 30 59
+#
+#
+# HiddenKey: These are actually not "hidden" keys as such, but the characters
+# that are obtained by pressing a key and a certain modifier key.
+# Define the character via its unicode and then also
+# the unicode for the base character on the key to be pressed.
+# Also define the character/key of the finger that needs to
+# press the key and the modifier key that needs to be highlighted.
+#
+# Unicode Target Finger Modifier
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 59 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 257 #Z
diff --git a/ktouch/keyboards/es.dvorak.keyboard b/ktouch/keyboards/es.dvorak.keyboard
new file mode 100644
index 00000000..2dd84046
--- /dev/null
+++ b/ktouch/keyboards/es.dvorak.keyboard
@@ -0,0 +1,149 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Ascii KeyText x y
+FingerKey 97 A 18 20
+FingerKey 111 O 28 20
+FingerKey 101 E 38 20
+FingerKey 117 U 48 20
+FingerKey 114 R 78 20
+FingerKey 116 T 88 20
+FingerKey 110 N 98 20
+FingerKey 115 S 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. These keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lowercase
+# letters. For this class you have to indicate
+# which finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 186 º 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 111
+NormalKey 51 3 30 0 101
+NormalKey 52 4 40 0 117
+NormalKey 53 5 50 0 117
+NormalKey 54 6 60 0 114
+NormalKey 55 7 70 0 114
+NormalKey 56 8 80 0 116
+NormalKey 57 9 90 0 116
+NormalKey 48 0 100 0 110
+NormalKey 39 ' 110 0 115
+NormalKey 161 ¡ 120 0 115
+#
+NormalKey 46 . 15 10 97
+NormalKey 44 , 25 10 111
+NormalKey 241 Ñ 35 10 101
+NormalKey 112 P 45 10 117
+NormalKey 121 Y 55 10 117
+NormalKey 102 F 65 10 114
+NormalKey 103 G 75 10 114
+NormalKey 99 C 85 10 116
+NormalKey 104 H 95 10 110
+NormalKey 108 L 105 10 115
+NormalKey 96 (`) 115 10 115
+NormalKey 43 + 125 10 115
+#
+NormalKey 105 I 58 20 117
+NormalKey 100 D 68 20 114
+NormalKey 180 (') 118 20 115
+NormalKey 231 Ç 128 20 115
+#
+NormalKey 60 < 13 30 97
+NormalKey 45 - 23 30 97
+NormalKey 113 Q 33 30 111
+NormalKey 106 J 43 30 101
+NormalKey 107 K 53 30 117
+NormalKey 120 X 63 30 117
+NormalKey 98 B 73 30 114
+NormalKey 109 M 83 30 114
+NormalKey 119 W 93 30 116
+NormalKey 118 V 103 30 110
+NormalKey 122 Z 113 30 115
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Control
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 114 257 #B
+HiddenKey 67 99 116 257 #C
+HiddenKey 68 100 114 257 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 114 257 #F
+HiddenKey 71 103 114 257 #G
+HiddenKey 72 104 110 258 #H
+HiddenKey 73 105 117 258 #I
+HiddenKey 74 106 101 258 #J
+HiddenKey 75 107 117 258 #K
+HiddenKey 76 108 115 258 #L
+HiddenKey 77 109 114 258 #M
+HiddenKey 78 110 110 258 #N
+HiddenKey 209 241 101 257 #Ñ
+HiddenKey 165 164 110 257 #N
+HiddenKey 79 111 111 258 #O
+HiddenKey 80 112 117 258 #P
+HiddenKey 81 113 111 257 #Q
+HiddenKey 82 114 114 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 116 257 #T
+HiddenKey 85 117 117 258 #U
+HiddenKey 86 118 110 257 #V
+HiddenKey 87 119 116 257 #W
+HiddenKey 88 120 117 257 #X
+HiddenKey 89 121 117 258 #Y
+HiddenKey 90 122 115 257 #Z
+HiddenKey 170 186 97 257 #ª
+HiddenKey 33 49 97 257 #!
+HiddenKey 34 50 111 257 #"
+HiddenKey 183 51 101 257 #·
+HiddenKey 36 52 117 257 #$
+HiddenKey 37 53 117 257 #%
+HiddenKey 38 54 114 257 #&
+HiddenKey 47 55 114 258 #/
+HiddenKey 40 56 116 258 #(
+HiddenKey 41 57 116 258 #)
+HiddenKey 61 48 110 258 #=
+HiddenKey 63 39 115 258 #?
+HiddenKey 191 161 115 258 #¿
+HiddenKey 58 46 97 257 #:
+HiddenKey 59 44 111 257 #;
+HiddenKey 136 96 115 258 #(^)
+HiddenKey 42 43 115 258 #*
+HiddenKey 168 180 115 258 #(")
+HiddenKey 199 231 115 258 #Ç
+HiddenKey 62 60 97 257 #>
+HiddenKey 95 45 97 257 #_
diff --git a/ktouch/keyboards/es.keyboard b/ktouch/keyboards/es.keyboard
new file mode 100644
index 00000000..5211488e
--- /dev/null
+++ b/ktouch/keyboards/es.keyboard
@@ -0,0 +1,154 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 241 Ñ 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Espacio 30 40 90 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basically be all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 186 º 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 39 ' 110 0 241
+NormalKey 161 ¡ 120 0 241
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 241
+NormalKey 96 ` 115 10 241
+NormalKey 43 + 125 10 241
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 180 ' 118 20 241
+NormalKey 231 ç 128 20 241
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 115
+NormalKey 120 X 33 30 100
+NormalKey 99 C 43 30 102
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 106
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 107
+NormalKey 44 , 93 30 108
+NormalKey 46 . 103 30 241
+NormalKey 45 - 113 30 241
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basicly
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 106 257 #B
+HiddenKey 67 99 102 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 107 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 242 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 100 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 115 257 #Z
+#
+HiddenKey 59 44 108 258 #;
+HiddenKey 58 46 241 258 #:
+HiddenKey 95 45 241 258 #_
+HiddenKey 209 241 241 258 #Ñ
+HiddenKey 168 180 241 258 #(Dieresis)
+HiddenKey 199 231 241 258 #Ç
+HiddenKey 94 96 241 258 #^
+HiddenKey 42 43 241 258 #*
+HiddenKey 47 55 106 258 #/
+HiddenKey 40 56 106 258 #(
+HiddenKey 41 57 107 258 #)
+HiddenKey 61 48 108 258 #=
+HiddenKey 63 39 241 258 #?
+HiddenKey 191 161 241 258 #¿
+HiddenKey 62 60 97 257 #>
+HiddenKey 170 186 97 257 #ª
+HiddenKey 33 49 97 257 #!
+HiddenKey 34 50 97 257 #"
+HiddenKey 183 51 115 257 #·
+HiddenKey 36 52 100 257 #$
+HiddenKey 37 53 102 257 #%
+HiddenKey 38 54 102 257 #&
+#
+HiddenKey 92 186 97 264 #\
+HiddenKey 91 231 241 264 #[
+HiddenKey 93 43 241 264 #]
+
diff --git a/ktouch/keyboards/fi.keyboard b/ktouch/keyboards/fi.keyboard
new file mode 100644
index 00000000..9edcd996
--- /dev/null
+++ b/ktouch/keyboards/fi.keyboard
@@ -0,0 +1,124 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 Ö 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basically be all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 167 § 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 246
+NormalKey 43 + 110 0 246
+NormalKey 180 ' 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 229 Å 115 10 246
+NormalKey 168 " 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 39 Ä 118 20 246
+#
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 246 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 257 #Z
diff --git a/ktouch/keyboards/fr.a.keyboard b/ktouch/keyboards/fr.a.keyboard
new file mode 100644
index 00000000..d18e4cfb
--- /dev/null
+++ b/ktouch/keyboards/fr.a.keyboard
@@ -0,0 +1,126 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 113 Q 18 20 #old code is 97(a) 113 is (q)
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 109 M 108 20
+##
+##
+## ControllKey: This class will represent all the
+## controll keys that you are using. Theys keys
+## will be used later when you want to use uppercase.
+##
+## Assci KeyText x y Width Height
+##
+ControlKey 8 <- 130 0 20 10
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 258 Shift 123 30 17 10
+ControlKey 264 Alt_Gr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 Caps_L 0 20 18 10
+##
+##
+## NormalKey: This class represent all the
+## normal keys where you don't need to press
+## anything else then just one key. That would
+## basicly bee all the numbers and the lovercase
+## letters. For this class you have to indicate
+## withc finger key you are going to use.
+##
+## Assci KeyText x y FingerKey
+#NormalKey 178 0 0 113
+NormalKey 38 & 10 0 113
+NormalKey 233 ? 20 0 115 #always "on"
+NormalKey 34 " 30 0 100
+NormalKey 39 ' 40 0 102
+NormalKey 40 ( 50 0 102
+NormalKey 45 - 60 0 102
+NormalKey 232 ? 70 0 106
+NormalKey 95 _ 80 0 107
+NormalKey 231 ? 90 0 108 #always "on"
+NormalKey 224 ? 100 0 109
+NormalKey 41 ) 110 0 109
+NormalKey 61 = 120 0 109
+#NormalKey 92 130 0 109
+#NormalKey 8 <- 140 0 109
+#
+NormalKey 97 A 15 10 113
+NormalKey 122 Z 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 109
+NormalKey 94 ^ 115 10 109
+NormalKey 36 $ 125 10 109
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+#NormalKey 249 118 20 109
+NormalKey 60 < 13 30 113
+NormalKey 119 W 23 30 113
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 44 , 83 30 106
+NormalKey 59 ; 93 30 107
+NormalKey 58 : 103 30 108
+NormalKey 33 ! 113 30 109
+NormalKey 42 * 140 30 109
+##
+##
+## HiddenKey: This is all the keys that
+## you cant see. That means that you have
+## to use an controll key to get them. Basicly
+## this is all the uppercase letters.
+##
+## Ascii Target Finger Control
+##
+#HiddenKey 65 97 97 258 #A
+#HiddenKey 66 98 102 258 #B
+#HiddenKey 67 99 100 258 #C
+#HiddenKey 68 100 100 258 #D
+#HiddenKey 69 101 100 258 #E
+#HiddenKey 70 102 102 258 #F
+#HiddenKey 71 103 102 258 #G
+#HiddenKey 72 104 106 258 #H
+#HiddenKey 73 105 107 258 #I
+#HiddenKey 74 106 106 258 #J
+#HiddenKey 75 107 107 258 #K
+#HiddenKey 76 108 106 258 #L
+#HiddenKey 77 109 106 258 #M
+#HiddenKey 78 110 106 258 #N
+#HiddenKey 79 111 108 258 #O
+#HiddenKey 80 112 59 258 #P
+#HiddenKey 81 113 97 258 #Q
+#HiddenKey 82 114 102 258 #R
+#HiddenKey 83 115 115 258 #S
+#HiddenKey 84 116 102 258 #T
+#HiddenKey 85 117 106 258 #U
+#HiddenKey 86 118 102 258 #V
+#HiddenKey 87 119 115 258 #W
+#HiddenKey 88 120 115 258 #X
+#HiddenKey 89 121 106 258 #Y
+#HiddenKey 90 122 97 258 #Z
diff --git a/ktouch/keyboards/fr.keyboard b/ktouch/keyboards/fr.keyboard
new file mode 100644
index 00000000..edfcf537
--- /dev/null
+++ b/ktouch/keyboards/fr.keyboard
@@ -0,0 +1,157 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 113 Q 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 109 M 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 178 ² 0 0 113
+NormalKey 38 & 10 0 113
+NormalKey 233 é 20 0 115
+NormalKey 34 " 30 0 100
+NormalKey 39 ' 40 0 102
+NormalKey 40 ( 50 0 102
+NormalKey 45 - 60 0 106
+NormalKey 232 è 70 0 106
+NormalKey 95 _ 80 0 107
+NormalKey 231 ç 90 0 108
+NormalKey 224 à 100 0 109
+NormalKey 41 ) 110 0 109
+NormalKey 61 = 120 0 109
+#
+NormalKey 97 A 15 10 113
+NormalKey 122 Z 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+#
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 109
+NormalKey 94 ^ 115 10 109
+NormalKey 36 $ 125 10 109
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 249 ù 118 20 109
+NormalKey 42 * 128 20 109
+#
+NormalKey 60 < 13 30 113
+NormalKey 119 W 23 30 113
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 44 , 83 30 106
+NormalKey 59 ; 93 30 107
+NormalKey 58 : 103 30 108
+NormalKey 33 ! 113 30 109
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basicly
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 49 38 113 258 #&
+HiddenKey 50 233 115 258 #é
+HiddenKey 51 34 100 258 #"
+HiddenKey 52 39 102 258 #'
+HiddenKey 53 40 102 258 #(
+HiddenKey 54 45 106 257 #-
+HiddenKey 55 232 106 257 #è
+HiddenKey 56 95 107 257 #_
+HiddenKey 57 231 108 257 #ç
+HiddenKey 48 224 109 257 #à
+HiddenKey 176 41 109 257 #)
+HiddenKey 43 61 109 257 #=
+#
+HiddenKey 126 233 115 264 #é
+HiddenKey 35 34 100 264 #"
+HiddenKey 123 39 102 264 #'
+HiddenKey 91 40 102 264 #(
+HiddenKey 124 45 106 264 #-
+HiddenKey 96 232 106 264 #è
+HiddenKey 92 95 107 264 #_
+HiddenKey 64 224 109 264 #à
+HiddenKey 93 41 109 264 #)
+HiddenKey 125 61 109 264 #=
+#
+HiddenKey 63 44 106 257 #,
+HiddenKey 46 59 107 257 #;
+HiddenKey 47 58 108 257 #:
+HiddenKey 167 33 109 257 #!
+HiddenKey 62 60 113 258 #<
+#
+HiddenKey 65 97 113 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 257 #H
+HiddenKey 73 105 107 257 #I
+HiddenKey 74 106 106 257 #J
+HiddenKey 75 107 107 257 #K
+HiddenKey 76 108 106 257 #L
+HiddenKey 77 109 109 257 #M
+HiddenKey 78 110 106 257 #N
+HiddenKey 79 111 108 257 #O
+HiddenKey 80 112 109 257 #P
+HiddenKey 81 113 113 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 257 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 113 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 257 #Y
+HiddenKey 90 122 115 258 #Z \ No newline at end of file
diff --git a/ktouch/keyboards/fr.swiss.keyboard b/ktouch/keyboards/fr.swiss.keyboard
new file mode 100644
index 00000000..ba89c072
--- /dev/null
+++ b/ktouch/keyboards/fr.swiss.keyboard
@@ -0,0 +1,135 @@
+####################################################
+# KTouch
+# Keybord layout file for swiss french keybord layout
+####################################################
+#
+# Assci KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 é 108 20
+#
+# Assci KeyText x y Width Hight
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 20 12 10
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 Alt_Gr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 Caps_L 0 20 18 10
+ControlKey 8 <- 130 0 20 10
+
+# Assci KeyText x y FingerKey
+#
+NormalKey 94 § 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 246
+NormalKey 223 ' 110 0 246
+NormalKey 180 ^ 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 122 Z 65 10 106
+#
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 252 è 115 10 246
+NormalKey 43 ¨ 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 228 à 118 20 246
+NormalKey 35 $ 128 20 246
+NormalKey 60 < 13 30 97
+NormalKey 121 Y 23 30 97
+#
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+#
+# Ascii Target Finger Contorll
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 246 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 97 258 #Y
+HiddenKey 90 122 106 258 #Z
+HiddenKey 62 60 97 258 #>
+HiddenKey 196 228 246 257 #Ä
+HiddenKey 214 246 246 257 #Ö
+HiddenKey 220 252 246 257 #Ü
+HiddenKey 167 51 100 258 #§
+HiddenKey 176 94 97 258 #°
+HiddenKey 34 50 115 258 #"
+HiddenKey 33 49 97 258 #!
+HiddenKey 36 52 102 258 #$
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 106 258 #&
+HiddenKey 47 55 106 257 #/
+HiddenKey 41 57 108 257 #)
+HiddenKey 40 56 107 257 #(
+HiddenKey 61 48 246 257 #=
+HiddenKey 63 223 246 257 #?
+HiddenKey 96 180 246 257 #`
+HiddenKey 59 44 107 257 #;
+HiddenKey 58 46 108 257 #:
+HiddenKey 95 45 246 257 #_
+HiddenKey 42 43 246 257 #*
+HiddenKey 39 35 246 257 #'
+HiddenKey 92 223 246 264 #\
+HiddenKey 124 60 97 264 #|
+HiddenKey 64 113 97 264 #@
+
+
+
+
+
diff --git a/ktouch/keyboards/he.keyboard b/ktouch/keyboards/he.keyboard
new file mode 100644
index 00000000..e03f5bd1
--- /dev/null
+++ b/ktouch/keyboards/he.keyboard
@@ -0,0 +1,149 @@
+####################################################
+# KTouch
+# Keybord layout file for Hebrew
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# UNICODE KeyText x y
+FingerKey 1513 ש 18 20
+FingerKey 1491 ד 28 20
+FingerKey 1490 ג 38 20
+FingerKey 1499 כ 48 20
+FingerKey 1495 ח 78 20
+FingerKey 1500 ל 88 20
+FingerKey 1498 ך 98 20
+FingerKey 1507 ף 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# UNICODE KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 Alt 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# UNICODE KeyText x y FingerKey
+#
+NormalKey 59 ; 0 0 1513
+NormalKey 49 1 10 0 1513
+NormalKey 50 2 20 0 1491
+NormalKey 51 3 30 0 1490
+NormalKey 52 4 40 0 1499
+NormalKey 53 5 50 0 1499
+NormalKey 54 6 60 0 1495
+NormalKey 55 7 70 0 1495
+NormalKey 56 8 80 0 1500
+NormalKey 57 9 90 0 1498
+NormalKey 48 0 100 0 1507
+NormalKey 95 - 110 0 1507
+NormalKey 61 = 120 0 1507
+NormalKey 92 \ 130 0 1507
+NormalKey 8 <- 140 0 1507
+#
+NormalKey 47 / 15 10 1513
+NormalKey 39 ' 25 10 1491
+NormalKey 1511 ק 35 10 1490
+NormalKey 1512 ר 45 10 1499
+NormalKey 1488 א 55 10 1499
+NormalKey 1496 ט 65 10 1495
+NormalKey 1493 ו 75 10 1495
+NormalKey 1503 ן 85 10 1500
+NormalKey 1501 ם 95 10 1498
+NormalKey 1508 פ 105 10 1507
+NormalKey 91 [ 115 10 1507
+NormalKey 93 ] 125 10 1507
+#
+NormalKey 1506 ע 58 20 1499
+NormalKey 1497 י 68 20 1495
+NormalKey 44 , 118 20 1507
+#
+NormalKey 1494 ז 23 30 1513
+NormalKey 1505 ס 33 30 1491
+NormalKey 1489 ב 43 30 1490
+NormalKey 1492 ה 53 30 1499
+NormalKey 1504 נ 63 30 1499
+NormalKey 1502 מ 73 30 1495
+NormalKey 1510 צ 83 30 1495
+NormalKey 1514 ת 93 30 1500
+NormalKey 1509 ץ 103 30 1498
+NormalKey 47 . 113 30 1507
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# UNICODE Target Finger Contorll
+#
+HiddenKey 126 59 1513 257 #~
+HiddenKey 33 49 1513 257 #!
+HiddenKey 64 50 1491 257 #@
+HiddenKey 35 51 1490 257 ##
+HiddenKey 36 52 1499 257 #$
+HiddenKey 37 53 1499 257 #%
+HiddenKey 94 54 1495 258 #^
+HiddenKey 38 55 1495 258 #&
+HiddenKey 42 56 1500 258 #*
+HiddenKey 40 57 1498 258 #(
+HiddenKey 41 48 1507 258 #)
+HiddenKey 95 45 1507 258 #_
+HiddenKey 43 61 1507 258 #+
+HiddenKey 124 92 1507 258 #|
+#
+HiddenKey 81 47 1513 257 #Q
+HiddenKey 87 39 1491 257 #W
+HiddenKey 69 1511 1490 257 #E
+HiddenKey 82 1512 1499 257 #R
+HiddenKey 84 1488 1499 257 #T
+HiddenKey 89 1496 1495 258 #Y
+HiddenKey 85 1493 1495 258 #U
+HiddenKey 73 1503 1500 258 #I
+HiddenKey 79 1501 1498 258 #O
+HiddenKey 80 1508 1507 258 #P
+HiddenKey 123 91 1507 258 #{
+HiddenKey 125 93 1507 258 #}
+#
+HiddenKey 65 1513 1513 257 #A
+HiddenKey 83 1491 1491 257 #S
+HiddenKey 68 1490 1490 257 #D
+HiddenKey 70 1499 1499 257 #F
+HiddenKey 71 1506 1499 257 #G
+HiddenKey 72 1497 1495 258 #H
+HiddenKey 74 44 1495 258 #J
+HiddenKey 75 1495 1500 258 #K
+HiddenKey 76 1500 1498 258 #L
+HiddenKey 58 1498 1507 258 #:
+HiddenKey 34 1507 1507 258 #"
+#
+HiddenKey 90 1494 1513 257 #Z
+HiddenKey 88 1505 1491 257 #X
+HiddenKey 67 1489 1490 257 #C
+HiddenKey 86 1492 1499 257 #V
+HiddenKey 66 1504 1499 257 #B
+HiddenKey 78 1502 1495 258 #N
+HiddenKey 77 1510 1495 258 #M
+HiddenKey 60 1514 1500 258 #<
+HiddenKey 62 1509 1498 258 #>
+HiddenKey 63 47 1507 258 #?
diff --git a/ktouch/keyboards/hu.keyboard b/ktouch/keyboards/hu.keyboard
new file mode 100644
index 00000000..afd77ef1
--- /dev/null
+++ b/ktouch/keyboards/hu.keyboard
@@ -0,0 +1,177 @@
+####################################################
+# KTouch
+# Hungarian keybord layout file
+# Code=UTF-8
+####################################################
+#
+#
+# FingerKey: This category represents the base keys.
+#
+# Ascii KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 233 É 108 20
+#
+#
+# NormalKey: This category represent the normal keys exccluding the base keys.
+#
+# Ascii KeyText x y FingerKey
+#
+# numeric line
+NormalKey 48 0 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 246 Ö 100 0 246
+NormalKey 252 Ü 110 0 246
+NormalKey 243 Ó 120 0 246
+# upper line
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 122 Z 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 245 Ő 115 10 246
+NormalKey 250 Ú 125 10 246
+# base line (excluding the base keys)
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 225 Á 118 20 246
+NormalKey 251 Ű 128 20 246
+# lower line
+NormalKey 237 Í 13 30 97
+NormalKey 121 Y 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+#
+# ControlKey: This category represents the "gray" keys.
+#
+# Ascii KeyText x y Width Height
+#
+# numeric line
+ControlKey 8 BackSpace 130 0 20 10
+# upper line
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 20 12 10
+# base line
+ControlKey 259 CapsLock 0 20 18 10
+# lower line
+ControlKey 258 Shift 0 30 13 10
+ControlKey 257 Shift 123 30 27 10
+# control line
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+#
+#
+# HiddenKey: This category represents the key combinations.
+#
+# Ascii Target Finger Control
+#
+# shift + numeric line
+HiddenKey 167 48 97 257 #§
+HiddenKey 39 49 97 257 #'
+HiddenKey 34 50 115 257 #"
+HiddenKey 43 51 100 257 #+
+HiddenKey 33 52 102 257 #!
+HiddenKey 37 53 102 257 #%
+HiddenKey 47 54 106 257 #/
+HiddenKey 61 55 106 258 #=
+HiddenKey 40 56 107 258 #(
+HiddenKey 41 57 108 258 #)
+HiddenKey 214 246 233 258 #Ö
+HiddenKey 220 252 233 258 #Ü
+HiddenKey 211 243 233 258 #Ó
+# shift + upper line
+HiddenKey 81 113 97 257 #Q
+HiddenKey 87 119 115 257 #W
+HiddenKey 69 101 100 257 #E
+HiddenKey 82 114 102 257 #R
+HiddenKey 84 116 102 257 #T
+HiddenKey 90 122 106 257 #Z
+HiddenKey 85 117 106 258 #U
+HiddenKey 73 105 107 258 #I
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 233 258 #P
+HiddenKey 213 111 233 258 #Ő
+HiddenKey 218 112 223 258 #Ú
+# shift + base line
+HiddenKey 65 97 97 257 #A
+HiddenKey 83 115 115 257 #S
+HiddenKey 68 100 100 257 #D
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 201 233 233 258 #É
+HiddenKey 193 225 233 258 #Á
+HiddenKey 219 251 233 258 #Ű
+# shift + lower line
+HiddenKey 215 237 97 257 #Í
+HiddenKey 89 121 97 257 #Y
+HiddenKey 88 120 115 257 #X
+HiddenKey 67 99 100 257 #C
+HiddenKey 86 118 102 257 #V
+HiddenKey 66 98 102 257 #B
+HiddenKey 78 110 106 258 #N
+HiddenKey 77 109 106 258 #M
+HiddenKey 63 44 107 258 #?
+HiddenKey 58 46 108 258 #:
+HiddenKey 95 45 233 258 #_
+
+# alt + numeric line
+HiddenKey 126 49 97 264 #~
+HiddenKey 94 51 100 264 #^
+HiddenKey 96 55 106 264 #`
+# alt + upper line
+HiddenKey 92 113 97 264 #\
+HiddenKey 124 119 115 264 #|
+HiddenKey 247 111 233 264 #÷
+HiddenKey 215 112 223 264 #×
+# alt + base line
+HiddenKey 91 102 102 264 #[
+HiddenKey 93 103 102 264 #]
+HiddenKey 36 233 233 264 #$
+# alt + lower line
+HiddenKey 60 237 97 264 #<
+HiddenKey 62 121 97 264 #>
+HiddenKey 35 120 115 264 ##
+HiddenKey 38 99 100 264 #&
+HiddenKey 64 118 102 264 #@
+HiddenKey 123 98 102 264 #{
+HiddenKey 125 110 106 264 #}
+HiddenKey 59 44 107 264 #;
+HiddenKey 42 45 233 264 #*
+
+
+
+
+
diff --git a/ktouch/keyboards/it.keyboard b/ktouch/keyboards/it.keyboard
new file mode 100644
index 00000000..3f9c5828
--- /dev/null
+++ b/ktouch/keyboards/it.keyboard
@@ -0,0 +1,155 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 242 ò 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 Alt 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 259 Caps_L 0 20 18 10
+ControlKey 8 <- 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basically be all the numbers and the lowercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 92 \ 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 39 ' 110 0 242
+NormalKey 236 ì 120 0 242
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 242
+NormalKey 232 è 115 10 242
+NormalKey 43 + 125 10 242
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 224 à 118 20 242
+NormalKey 249 ù 128 20 242
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 115
+NormalKey 120 X 33 30 100
+NormalKey 99 C 43 30 102
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 106
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 107
+NormalKey 44 , 93 30 108
+NormalKey 46 . 103 30 242
+NormalKey 45 - 113 30 242
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 106 257 #B
+HiddenKey 67 99 102 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 107 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 242 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 100 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 115 257 #Z
+#
+HiddenKey 59 44 108 258 #;
+HiddenKey 58 46 242 258 #:
+HiddenKey 95 45 242 258 #_
+HiddenKey 231 242 242 258 #ç
+HiddenKey 176 224 242 258 #°
+HiddenKey 167 249 242 258 #§
+HiddenKey 233 232 242 258 #é
+HiddenKey 42 43 242 258 #*
+HiddenKey 47 55 106 258 #/
+HiddenKey 40 56 106 258 #(
+HiddenKey 41 57 107 258 #)
+HiddenKey 61 48 108 258 #=
+HiddenKey 63 39 242 258 #?
+HiddenKey 94 236 242 258 #^
+HiddenKey 62 60 97 257 #>
+HiddenKey 124 92 97 257 #|
+HiddenKey 33 49 97 257 #!
+HiddenKey 34 50 97 257 #"
+HiddenKey 163 51 115 257 #£
+HiddenKey 36 52 100 257 #$
+HiddenKey 37 53 102 257 #%
+HiddenKey 38 54 102 257 #&
+#
+HiddenKey 64 242 242 264 #@
+HiddenKey 35 224 242 264 ##
+HiddenKey 91 232 242 264 #[
+HiddenKey 93 43 242 264 #]
+
diff --git a/ktouch/keyboards/la.keyboard b/ktouch/keyboards/la.keyboard
new file mode 100644
index 00000000..55d6c6cd
--- /dev/null
+++ b/ktouch/keyboards/la.keyboard
@@ -0,0 +1,109 @@
+####################################################
+# KTouch
+# Keybord layout file for Latin keyboard
+####################################################
+#
+#
+# Assci KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 241 Ñ 108 20
+#
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 8 <- 130 0 20 10
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 20 12 10
+ControlKey 258 Shift 133 30 17 10
+ControlKey 264 Alt 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 23 10
+ControlKey 259 Caps_Lk 0 20 18 10
+#
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 124 | 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 241
+NormalKey 39 ' 110 0 241
+NormalKey 191 ¿ 120 0 241
+
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 241
+NormalKey 180 ' 115 10 241
+NormalKey 43 + 125 10 241
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 123 { 118 20 241
+NormalKey 125 } 128 20 241
+#
+NormalKey 60 < 23 30 97
+NormalKey 122 Z 33 30 97
+NormalKey 120 X 43 30 115
+NormalKey 99 C 53 30 100
+NormalKey 118 V 63 30 102
+NormalKey 98 B 73 30 102
+NormalKey 110 N 83 30 106
+NormalKey 109 M 93 30 106
+NormalKey 44 , 103 30 107
+NormalKey 46 . 113 30 108
+NormalKey 45 - 123 30 241
+#
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 241 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
diff --git a/ktouch/keyboards/nb.keyboard b/ktouch/keyboards/nb.keyboard
new file mode 100644
index 00000000..ca4f503d
--- /dev/null
+++ b/ktouch/keyboards/nb.keyboard
@@ -0,0 +1,190 @@
+####################################################
+# KTouch
+# Keybord layout file for Norwegian keyboard
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Made by Axel Bojer by manipulating the danish file
+# Edit this file with tabs set to 8 characters.
+# The Unicode characters are found in an extensive list
+# over html codes -- see http://www.fileformat.info/info/unicode/
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+# Unicode KeyChar x y
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 248 Ø 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 (Mellomrom) 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+ControlKey 13 Enter 138 10 12 20 10
+
+# Unicode KeyChar x y FingerKeyUnicode
+NormalKey 124 | 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 43 + 110 0 248
+NormalKey 92 \ 120 0 248
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 248
+NormalKey 229 Å 115 10 248
+NormalKey 168 ¨ 125 10 248
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 230 Æ 118 20 248
+NormalKey 39 ' 128 20 248
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 248
+#
+# Unicode FingerUnicode Comment
+# TargetUnicode ControllUnicode
+# Shift + letter keys
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 238 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
+#
+HiddenKey 198 230 248 258 #Æ
+HiddenKey 216 248 248 258 #Ø
+HiddenKey 197 229 248 258 #Å
+#
+# # # # # # # # # # # # # # # # #
+# Special characters with Shift #
+# # # # # # # # # # # # # # # # #
+#
+# Special characters: shift + keys on the number row
+#
+HiddenKey 167 124 97 258 #§
+HiddenKey 33 49 97 258 #!
+HiddenKey 34 50 97 258 #"
+HiddenKey 35 51 115 258 ##
+HiddenKey 164 52 100 258 #¤
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 102 258 #&
+HiddenKey 47 55 106 258 #/
+HiddenKey 40 56 106 258 #(
+HiddenKey 41 57 107 258 #)
+HiddenKey 61 48 108 258 #=
+HiddenKey 63 43 248 258 #?
+HiddenKey 96 92 248 258 #`
+#
+# Special characters: shift + leftover keys on other rows
+#
+HiddenKey 94 168 248 258 #^
+HiddenKey 42 39 248 258 #*
+HiddenKey 95 45 248 258 #_
+HiddenKey 58 46 108 258 #:
+HiddenKey 59 44 107 258 #;
+HiddenKey 62 60 97 258 #>
+#
+# # # # # # # # # # # # # # # # # #
+# Special characters with Alt Gr #
+# # # # # # # # # # # # # # # # # #
+#
+# Special characters: Alt Gr + keys on the number row
+HiddenKey 166 124 97 264 #¦
+HiddenKey 161 49 97 264 #¡
+HiddenKey 64 50 97 264 #@
+HiddenKey 163 51 115 264 #£
+HiddenKey 36 52 100 264 #$
+HiddenKey 189 53 102 264 #½
+HiddenKey 165 54 102 264 #¥
+HiddenKey 123 55 106 264 #{
+HiddenKey 91 56 106 264 #[
+HiddenKey 93 57 107 264 #]
+HiddenKey 125 48 108 264 #}
+HiddenKey 177 43 248 264 #±
+HiddenKey 180 92 248 264 #´
+#
+# Special characters: Alt Gr + character keys
+#
+HiddenKey 170 97 97 264 #ª
+HiddenKey 8221 98 102 264 #”
+HiddenKey 169 99 100 264 #©
+HiddenKey 240 100 100 264 #ð
+HiddenKey 8364 101 100 264 #€
+HiddenKey 273 102 102 264 #đ (f)
+HiddenKey 331 103 102 264 #ŋ
+HiddenKey 295 104 106 264 #ħ
+HiddenKey 8594 105 107 264 #→ Arrow right (i)
+HiddenKey 312 107 107 264 #ĸ
+HiddenKey 322 108 106 264 #ł
+HiddenKey 181 109 106 264 #µ (m)
+HiddenKey 174 114 102 264 #®
+HiddenKey 223 115 115 264 #ß
+HiddenKey 254 116 102 264 #þ (t)
+HiddenKey 8595 117 106 264 #↓ Arrow down (u)
+HiddenKey 8220 118 102 264 #“ (v)
+HiddenKey 187 120 115 264 #» (x)
+HiddenKey 8592 121 106 264 #← Arrow left (y)
+HiddenKey 171 122 97 264 #« (z)
+#
+# Special characters: Alt Gr + leftover keys on other rows
+#
+HiddenKey 126 168 248 264 #~
+HiddenKey 183 46 108 264 #· (.)
+HiddenKey 184 44 107 264 #¸ (,) \ No newline at end of file
diff --git a/ktouch/keyboards/nn.keyboard b/ktouch/keyboards/nn.keyboard
new file mode 100644
index 00000000..79e9675b
--- /dev/null
+++ b/ktouch/keyboards/nn.keyboard
@@ -0,0 +1,106 @@
+####################################################
+# KTouch
+# Keybord layout file for Norwegian kaybord
+####################################################
+#
+# Assci KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 230 Ø 108 20
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 Alt 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 Caps_L 0 20 18 10
+ControlKey 8 <- 130 0 20 10
+ControlKey 13 Enter 128 20 22 10
+
+# Assci KeyText x y FingerKey
+#
+NormalKey 124 | 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 230
+NormalKey 43 + 110 0 230
+NormalKey 92 \ 120 0 230
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 230
+NormalKey 91 Å 115 10 230
+NormalKey 93 ~ 125 10 230
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 39 Æ 118 20 230
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 47 / 113 30 230
+#
+#
+# Ascii Target Finger Contorll
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 230 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
+HiddenKey 216 39 230 258 #Æ
+HiddenKey 198 230 230 258 #ø
+HiddenKey 197 91 230 258 #Å
diff --git a/ktouch/keyboards/pl.keyboard b/ktouch/keyboards/pl.keyboard
new file mode 100644
index 00000000..8c5c3590
--- /dev/null
+++ b/ktouch/keyboards/pl.keyboard
@@ -0,0 +1,135 @@
+####################################################
+# KTouch
+# Keybord layout file for Polish (utf-8)
+# Mikolaj Machowski
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 59 ; 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+NormalKey 96 ` 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 59
+NormalKey 95 - 110 0 59
+NormalKey 61 = 120 0 59
+NormalKey 92 \ 130 0 59
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 59
+NormalKey 91 [ 115 10 59
+NormalKey 93 ] 125 10 59
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 39 ' 118 20 59
+#
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 47 / 113 30 59
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 59 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 257 #Z
+# Ascii Target Finger Control
+HiddenKey 126 96 97 257 #~
+HiddenKey 33 49 97 257 #!
+HiddenKey 64 50 97 257 #@
+HiddenKey 35 51 115 257 ##
+HiddenKey 36 52 100 257 #$
+HiddenKey 37 53 102 257 #%
+HiddenKey 94 54 102 257 #^
+HiddenKey 38 55 106 258 #&
+HiddenKey 42 56 106 258 #*
+HiddenKey 40 57 107 258 #(
+HiddenKey 41 48 108 258 #)
+HiddenKey 95 95 59 258 #_
+HiddenKey 43 61 59 258 #+
+HiddenKey 124 92 59 258 #|
+HiddenKey 123 91 59 258 #{
+HiddenKey 125 93 59 258 #}
+HiddenKey 34 39 59 258 #"
+HiddenKey 58 59 59 258 #:
+HiddenKey 60 44 107 258 #<
+HiddenKey 62 46 108 258 #>
+HiddenKey 63 47 59 258 #?
+
+# small pletters
+# Ascii Target Finger Control
+HiddenKey 261 97 97 264 #ą
+HiddenKey 263 99 100 264 #ć
+HiddenKey 281 101 100 264 #ę
+HiddenKey 322 108 108 264 #ł
+HiddenKey 324 110 106 264 #ń
+HiddenKey 243 111 108 264 #ó
+HiddenKey 347 115 115 264 #ś
+HiddenKey 380 122 97 264 #ż
+HiddenKey 378 120 115 264 #ź
+
diff --git a/ktouch/keyboards/pt.br.keyboard b/ktouch/keyboards/pt.br.keyboard
new file mode 100644
index 00000000..be9af86f
--- /dev/null
+++ b/ktouch/keyboards/pt.br.keyboard
@@ -0,0 +1,150 @@
+####################################################
+# KTouch
+# Keybord layout file for brazilian keyboard
+####################################################
+#
+#
+# FingerKey: Esta classe representa as teclas onde
+# os seus dedos deverão ficar descansando entre escritas.
+#
+#
+# Ascii KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 231 Ç 108 20
+#
+#
+# ControlKey: Esta classe irá representar todas as teclas
+# de controle que está usando. Estas teclas serão usadas
+# posteriormente quando você quiser usar as maiúsculas.
+#
+# Ascii KeyText x y Width Height
+#
+ControlKey 8 BackSpace 140 0 10 10
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 258 Shift 0 30 15 10
+ControlKey 257 Shift 125 30 25 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 32 Espaço 30 40 90 10
+ControlKey 264 AltG 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+#
+#
+# NormalKey: Esta classe representa todas as teclas
+# normais onde não precisa pressionar em mais nada
+# a não ser numa única tecla. Estes serão basicamente
+# todos os números e as letras minúsculas. Para esta classe
+# você terá que indicar qual a tecla de dedos que irá usar.
+#
+# Ascii KeyText x y FingerKey
+#
+NormalKey 39 ' 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 231
+NormalKey 45 - 110 0 231
+NormalKey 61 = 120 0 231
+NormalKey 93 ] 130 0 231
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 231
+NormalKey 180 ´ 115 10 231
+NormalKey 91 [ 125 10 231
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 126 ~ 118 20 231
+NormalKey 47 / 128 20 231
+#
+NormalKey 92 \ 15 30 97
+NormalKey 122 Z 25 30 97
+NormalKey 120 X 35 30 115
+NormalKey 99 C 45 30 100
+NormalKey 118 V 55 30 102
+NormalKey 98 B 65 30 102
+NormalKey 110 N 75 30 106
+NormalKey 109 M 85 30 106
+NormalKey 44 , 95 30 107
+NormalKey 46 . 105 30 108
+NormalKey 59 ; 115 30 231
+#
+#
+# HiddenKey: Estas s� as teclas que você não
+# poderá ver. Isto significa que você terá que
+# usar uma tecla de controle para usá-las.
+# Basicamente são todas as letras maiúsculas.
+#
+# Ascii Target Finger Control
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 231 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
+HiddenKey 34 39 97 258 #"
+HiddenKey 33 49 97 258 #!
+HiddenKey 64 50 115 258 #@
+HiddenKey 35 51 100 258 ##
+HiddenKey 36 52 102 258 #$
+HiddenKey 37 53 102 258 #%
+HiddenKey 168 54 106 258 #
+HiddenKey 38 55 106 258 #&
+HiddenKey 42 56 107 258 #*
+HiddenKey 40 57 108 258 #(
+HiddenKey 41 48 231 258 #)
+HiddenKey 95 45 231 258 #_
+HiddenKey 43 61 231 258 #+
+HiddenKey 125 93 231 258 #}
+HiddenKey 96 180 231 258 #`
+HiddenKey 123 91 231 258 #{
+HiddenKey 94 126 231 258 #^
+HiddenKey 63 47 231 258 #?
+HiddenKey 124 92 97 258 #|
+HiddenKey 60 44 107 258 #<
+HiddenKey 62 46 108 258 #>
+HiddenKey 58 59 231 258 #: \ No newline at end of file
diff --git a/ktouch/keyboards/pt.keyboard b/ktouch/keyboards/pt.keyboard
new file mode 100644
index 00000000..287c431d
--- /dev/null
+++ b/ktouch/keyboards/pt.keyboard
@@ -0,0 +1,109 @@
+####################################################
+# KTouch
+# Keybord layout file for portuguese keyboard
+####################################################
+#
+#
+# Assci KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 241 Ç 108 20
+#
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 8 <- 130 0 20 10
+ControlKey 260 Tab 0 10 15 10
+ControlKey 261 Enter 138 20 12 10
+ControlKey 258 Shift 133 30 17 10
+ControlKey 264 Alt 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 23 10
+ControlKey 259 Caps_Lk 0 20 18 10
+#
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 124 \ 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 241
+NormalKey 39 ' 110 0 241
+NormalKey 191 « 120 0 241
+
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 241
+NormalKey 180 + 115 10 241
+NormalKey 43 ' 125 10 241
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 123 º 118 20 241
+NormalKey 125 ~ 128 20 241
+#
+NormalKey 60 < 23 30 97
+NormalKey 122 Z 33 30 97
+NormalKey 120 X 43 30 115
+NormalKey 99 C 53 30 100
+NormalKey 118 V 63 30 102
+NormalKey 98 B 73 30 102
+NormalKey 110 N 83 30 106
+NormalKey 109 M 93 30 106
+NormalKey 44 , 103 30 107
+NormalKey 46 . 113 30 108
+NormalKey 45 - 123 30 241
+#
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 241 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 258 #Z
diff --git a/ktouch/keyboards/ru.2.keyboard b/ktouch/keyboards/ru.2.keyboard
new file mode 100644
index 00000000..a3cf2039
--- /dev/null
+++ b/ktouch/keyboards/ru.2.keyboard
@@ -0,0 +1,157 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 113 Ф 18 20
+FingerKey 115 Ы 28 20
+FingerKey 100 В 38 20
+FingerKey 102 А 48 20
+FingerKey 106 О 78 20
+FingerKey 107 Л 88 20
+FingerKey 108 Д 98 20
+FingerKey 109 Ж 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 ПРОБЕЛ 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 178 Ё 0 0 113
+NormalKey 38 1 10 0 113
+NormalKey 233 2 20 0 115
+NormalKey 34 3 30 0 100
+NormalKey 39 4 40 0 102
+NormalKey 40 5 50 0 102
+NormalKey 45 6 60 0 106
+NormalKey 232 7 70 0 106
+NormalKey 95 8 80 0 107
+NormalKey 231 9 90 0 108
+NormalKey 224 0 100 0 109
+NormalKey 41 - 110 0 109
+NormalKey 61 = 120 0 109
+#
+NormalKey 97 Й 15 10 113
+NormalKey 122 Ц 25 10 115
+NormalKey 101 У 35 10 100
+NormalKey 114 К 45 10 102
+NormalKey 116 Е 55 10 102
+#
+NormalKey 121 Н 65 10 106
+NormalKey 117 Г 75 10 106
+NormalKey 105 Ш 85 10 107
+NormalKey 111 Щ 95 10 108
+NormalKey 112 Щ 105 10 109
+NormalKey 94 З 115 10 109
+NormalKey 36 Х 125 10 109
+#
+NormalKey 103 П 58 20 102
+NormalKey 104 Р 68 20 106
+NormalKey 249 Э 118 20 109
+NormalKey 42 \ 128 20 109
+#
+NormalKey 60 / 13 30 113
+NormalKey 119 Я 23 30 113
+NormalKey 120 Ч 33 30 115
+NormalKey 99 С 43 30 100
+NormalKey 118 М 53 30 102
+NormalKey 98 И 63 30 102
+NormalKey 110 Т 73 30 106
+NormalKey 44 Ь 83 30 106
+NormalKey 59 Б 93 30 107
+NormalKey 58 Ю 103 30 108
+NormalKey 33 / 113 30 109
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basicly
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 49 38 113 258 #&
+HiddenKey 50 233 115 258 #é
+HiddenKey 51 34 100 258 #"
+HiddenKey 52 39 102 258 #'
+HiddenKey 53 40 102 258 #(
+HiddenKey 54 45 106 257 #-
+HiddenKey 55 232 106 257 #è
+HiddenKey 56 95 107 257 #_
+HiddenKey 57 231 108 257 #ç
+HiddenKey 48 224 109 257 #à
+HiddenKey 176 41 109 257 #)
+HiddenKey 43 61 109 257 #=
+#
+HiddenKey 126 233 115 264 #é
+HiddenKey 35 34 100 264 #"
+HiddenKey 123 39 102 264 #'
+HiddenKey 91 40 102 264 #(
+HiddenKey 124 45 106 264 #-
+HiddenKey 96 232 106 264 #è
+HiddenKey 92 95 107 264 #_
+HiddenKey 64 224 109 264 #à
+HiddenKey 93 41 109 264 #)
+HiddenKey 125 61 109 264 #=
+#
+HiddenKey 63 44 106 257 #,
+HiddenKey 46 59 107 257 #;
+HiddenKey 47 58 108 257 #:
+HiddenKey 167 33 109 257 #!
+HiddenKey 62 60 113 258 #<
+#
+HiddenKey 65 97 113 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 257 #H
+HiddenKey 73 105 107 257 #I
+HiddenKey 74 106 106 257 #J
+HiddenKey 75 107 107 257 #K
+HiddenKey 76 108 106 257 #L
+HiddenKey 77 109 109 257 #M
+HiddenKey 78 110 106 257 #N
+HiddenKey 79 111 108 257 #O
+HiddenKey 80 112 109 257 #P
+HiddenKey 81 113 113 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 257 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 113 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 106 257 #Y
+HiddenKey 90 122 113 258 #Z \ No newline at end of file
diff --git a/ktouch/keyboards/ru.3.keyboard b/ktouch/keyboards/ru.3.keyboard
new file mode 100644
index 00000000..24d925a1
--- /dev/null
+++ b/ktouch/keyboards/ru.3.keyboard
@@ -0,0 +1,149 @@
+####################################################
+# KTouch
+# Keybord layout file for Russian
+# Miha Ulanov (mulanov@mail.ru)
+# Code=UTF-8
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1099 Ы 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. These keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represents all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lowercase
+# letters. For this class you have to indicate
+# witch finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 1105 Ё 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1099
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 95 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 92 \ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1099
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1098 Ъ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1101 Э 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1099
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 46 . 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an control key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Control
+#
+HiddenKey 1040 1072 1072 257 #А
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1042 1074 1074 257 #В
+HiddenKey 1043 1075 1086 258 #Г
+HiddenKey 1044 1076 1076 258 #Д
+HiddenKey 1045 1077 1072 257 #Е
+HiddenKey 1025 1105 1092 257 #Ё
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1047 1079 1078 258 #З
+HiddenKey 1048 1080 1072 257 #И
+HiddenKey 1049 1081 1092 257 #Й
+HiddenKey 1050 1082 1072 257 #К
+HiddenKey 1051 1083 1083 258 #Л
+HiddenKey 1052 1084 1072 257 #М
+HiddenKey 1053 1085 1086 258 #Н
+HiddenKey 1054 1086 1086 258 #О
+HiddenKey 1055 1087 1072 257 #П
+HiddenKey 1056 1088 1086 258 #Р
+HiddenKey 1057 1089 1074 257 #С
+HiddenKey 1058 1090 1086 258 #Т
+HiddenKey 1059 1091 1074 257 #У
+HiddenKey 1060 1092 1092 257 #Ф
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1062 1094 1099 257 #Ц
+HiddenKey 1063 1095 1099 257 #Ч
+HiddenKey 1064 1096 1083 258 #Ш
+HiddenKey 1065 1097 1076 258 #Щ
+HiddenKey 1066 1098 1078 258 #Ъ
+HiddenKey 1067 1099 1099 257 #Ы
+HiddenKey 1068 1100 1086 258 #Ь
+HiddenKey 1069 1101 1078 258 #Э
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 1071 1103 1092 257 #Я
+
+HiddenKey 44 46 1078 258 #,
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1099 257 #"
+HiddenKey 8470 51 1074 257 #№
+HiddenKey 59 52 1072 257 #;
+HiddenKey 37 53 1072 257 #%
+HiddenKey 44 54 1086 258 #:
+HiddenKey 63 55 1086 258 #?
+HiddenKey 42 56 1083 258 #*
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 47 92 1078 258 #/
diff --git a/ktouch/keyboards/ru.basic.keyboard b/ktouch/keyboards/ru.basic.keyboard
new file mode 100644
index 00000000..df3cfb77
--- /dev/null
+++ b/ktouch/keyboards/ru.basic.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Russian basic keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1099 Ы 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 1105 Ё 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1099
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 92 \ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1099
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1098 Ъ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1101 Э 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1099
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 47 / 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1067 1099 1099 257 #Ы S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1069 1101 1078 258 #Э
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1099 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 63 47 1078 258 #?
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1099 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1066 1098 1078 258 #Ъ
+HiddenKey 1025 1105 1092 257 #Ё
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1099 257 #"
+HiddenKey 35 51 1074 257 ##
+HiddenKey 42 52 1072 257 #*
+HiddenKey 58 53 1072 257 #:
+HiddenKey 44 54 1086 258 #,
+HiddenKey 46 55 1086 258 #.
+HiddenKey 59 56 1083 258 #;
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 124 92 1078 258 #|
diff --git a/ktouch/keyboards/ru.keyboard b/ktouch/keyboards/ru.keyboard
new file mode 100644
index 00000000..651addf8
--- /dev/null
+++ b/ktouch/keyboards/ru.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Russian Windows keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1099 Ы 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 1105 Ё 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1099
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 92 \ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1099
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1098 Ъ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1101 Э 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1099
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 46 . 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1067 1099 1099 257 #Ы S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1069 1101 1078 258 #Э
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1099 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 44 46 1078 258 #,
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1099 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1066 1098 1078 258 #Ъ
+HiddenKey 1025 1105 1092 257 #Ё
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1099 257 #"
+HiddenKey 8470 51 1074 257 #
+HiddenKey 59 52 1072 257 #;
+HiddenKey 37 53 1072 257 #%
+HiddenKey 58 54 1086 258 #:
+HiddenKey 63 55 1086 258 #?
+HiddenKey 42 56 1083 258 #*
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 47 92 1078 258 #/
diff --git a/ktouch/keyboards/ru.typewriter.keyboard b/ktouch/keyboards/ru.typewriter.keyboard
new file mode 100644
index 00000000..67f16032
--- /dev/null
+++ b/ktouch/keyboards/ru.typewriter.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Russian typewriter keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1099 Ы 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 39 ' 0 0 1092
+NormalKey 33 ! 10 0 1092
+NormalKey 8470 № 20 0 1099
+NormalKey 47 / 30 0 1074
+NormalKey 59 ; 40 0 1072
+NormalKey 58 : 50 0 1072
+NormalKey 44 , 60 0 1086
+NormalKey 46 . 70 0 1086
+NormalKey 95 _ 80 0 1083
+NormalKey 63 ? 90 0 1076
+NormalKey 37 % 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 40 ( 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1099
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1098 Ъ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1101 Э 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1099
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 1105 Ё 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1067 1099 1099 257 #Ы S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1069 1101 1078 258 #Э
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1099 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 1025 1105 1078 258 #ё
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1099 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1066 1098 1078 258 #Ъ
+HiddenKey 34 39 1092 257 #"
+HiddenKey 49 33 1092 257 #1
+HiddenKey 50 8470 1099 257 #2
+HiddenKey 51 47 1074 257 #3
+HiddenKey 52 59 1072 257 #4
+HiddenKey 53 58 1072 257 #5
+HiddenKey 54 44 1086 258 #6
+HiddenKey 55 46 1086 258 #7
+HiddenKey 56 95 1083 258 #8
+HiddenKey 57 63 1076 258 #9
+HiddenKey 48 37 1078 258 #0
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 41 40 1078 258 #)
diff --git a/ktouch/keyboards/ru.winkeys.keyboard b/ktouch/keyboards/ru.winkeys.keyboard
new file mode 100644
index 00000000..5d412f99
--- /dev/null
+++ b/ktouch/keyboards/ru.winkeys.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Russian winkeys keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1099 Ы 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 1105 Ё 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1099
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 92 \ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1099
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1098 Ъ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1101 Э 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1099
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 46 . 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1067 1099 1099 257 #Ы S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1069 1101 1078 258 #Э
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1099 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 44 46 1078 258 #,
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1099 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1066 1098 1078 258 #Ъ
+HiddenKey 1025 1105 1092 257 #Ё
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1099 257 #"
+HiddenKey 8470 51 1074 257 #num
+HiddenKey 59 52 1072 257 #;
+HiddenKey 37 53 1072 257 #%
+HiddenKey 58 54 1086 258 #:
+HiddenKey 63 55 1086 258 #?
+HiddenKey 42 56 1083 258 #*
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 47 92 1078 258 #/
diff --git a/ktouch/keyboards/sl.keyboard b/ktouch/keyboards/sl.keyboard
new file mode 100644
index 00000000..2f482f39
--- /dev/null
+++ b/ktouch/keyboards/sl.keyboard
@@ -0,0 +1,175 @@
+####################################################
+# KTouch
+# Keybord layout file for slovenian keybord layout
+# Code=UTF-8
+####################################################
+#
+# Assci KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 269 Č 108 20
+#
+# Assci KeyText x y Width Hight
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 | 128 20 22 10
+ControlKey 13 Enter 135 10 15 20
+ControlKey 258 Shift 123 30 17 10
+ControlKey 0 Win 120 40 15 10
+ControlKey 0 WinM 105 40 15 10
+ControlKey 264 AltGr 90 40 15 10
+ControlKey 0 Ctrl 135 40 15 10 #265
+ControlKey 0 Alt 30 40 15 10 #263
+ControlKey 0 Ctrl 0 40 15 10 #262
+ControlKey 0 Win 15 40 15 10
+ControlKey 32 Preslednica 45 40 45 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+
+# Assci KeyText x y FingerKey
+#
+NormalKey 184 ¸ 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 115
+NormalKey 51 3 30 0 100
+NormalKey 52 4 40 0 102
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 106
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 107
+NormalKey 57 9 90 0 108
+NormalKey 48 0 100 0 269
+NormalKey 39 ' 110 0 269
+NormalKey 43 + 120 0 269
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 122 Z 65 10 106
+#
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 269
+NormalKey 353 Š 115 10 269
+NormalKey 273 Đ 125 10 269
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 263 Ć 118 20 269
+NormalKey 60 < 13 30 97
+NormalKey 121 Y 23 30 97
+#
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 269
+NormalKey 382 Ž 140 30 269
+#
+#
+# Ascii Target Finger Control
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+
+HiddenKey 268 269 269 257 #Č
+
+HiddenKey 262 263 269 257 #Ć
+
+HiddenKey 68 100 100 258 #D
+
+HiddenKey 272 273 269 257 #Đ
+
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 257 #H
+HiddenKey 73 105 107 257 #I
+HiddenKey 74 106 106 257 #J
+HiddenKey 75 107 107 257 #K
+HiddenKey 76 108 108 257 #L
+HiddenKey 77 109 106 257 #M
+HiddenKey 78 110 106 257 #N
+HiddenKey 79 111 108 257 #O
+HiddenKey 80 112 269 257 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+
+HiddenKey 352 353 269 257 #Š
+
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 257 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 97 258 #Y
+HiddenKey 90 122 106 257 #Z
+
+HiddenKey 381 382 269 257 #Ž
+
+HiddenKey 62 60 97 258 #>
+
+#HiddenKey 196 228 269 257 #Ä
+#HiddenKey 214 246 269 257 #Ö
+#HiddenKey 220 252 269 257 #Ü
+#HiddenKey 167 51 100 258 #§
+
+HiddenKey 33 49 97 258 #!
+HiddenKey 34 50 115 258 #"
+HiddenKey 35 51 100 258 ##
+HiddenKey 36 52 102 258 #$
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 106 257 #&
+HiddenKey 47 55 106 257 #/
+HiddenKey 41 57 108 257 #)
+HiddenKey 40 56 107 257 #(
+HiddenKey 61 48 269 257 #=
+HiddenKey 63 39 269 257 #?
+
+#HiddenKey 96 180 269 257 #`
+
+HiddenKey 59 44 107 257 #;
+HiddenKey 58 46 108 257 #:
+HiddenKey 95 45 269 257 #_
+HiddenKey 42 43 269 257 #*
+#HiddenKey 39 35 269 257 #'
+
+#HiddenKey 92 223 269 264 #\
+#HiddenKey 124 60 97 264 #|
+#HiddenKey 64 113 97 264 #@
+
+# Ascii Target Finger Control
+HiddenKey 126 49 97 264 #~
+HiddenKey 176 53 102 264 #°
+HiddenKey 96 55 106 264 #`
+HiddenKey 92 113 97 264 #\
+HiddenKey 124 119 115 264 #|
+HiddenKey 247 353 269 264 #÷
+HiddenKey 215 273 269 264 #×
+HiddenKey 91 102 102 264 #[
+HiddenKey 93 103 102 264 #]
+#HiddenKey 179 107 107 264 #ł
+#HiddenKey 179 108 108 264 #ł
+HiddenKey 223 263 269 264 #ß
+HiddenKey 64 118 102 264 #@
+
+HiddenKey 123 98 102 264 #{
+HiddenKey 125 110 106 264 #}
+
+HiddenKey 167 109 106 264 #§
+HiddenKey 164 382 269 264 #¤
diff --git a/ktouch/keyboards/sv.dvorak.keyboard b/ktouch/keyboards/sv.dvorak.keyboard
new file mode 100644
index 00000000..acb0acab
--- /dev/null
+++ b/ktouch/keyboards/sv.dvorak.keyboard
@@ -0,0 +1,107 @@
+####################################################
+# KTouch
+# Swedish Dvorak Keybord layout file
+####################################################
+#
+# Ascii KeyText x y
+#
+FingerKey 97 A 18 20
+FingerKey 111 O 28 20
+FingerKey 101 E 38 20
+FingerKey 117 U 48 20
+FingerKey 104 H 78 20
+FingerKey 116 T 88 20
+FingerKey 110 N 98 20
+FingerKey 115 S 108 20
+#
+# Ascii KeyText x y Width Hight
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 20 12 10
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 130 0 20 10
+
+# Ascii KeyText x y FingerKey
+#
+NormalKey 167 § 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 111
+NormalKey 51 3 30 0 101
+NormalKey 52 4 40 0 117
+NormalKey 53 5 50 0 117
+NormalKey 54 6 60 0 104
+NormalKey 55 7 70 0 104
+NormalKey 56 8 80 0 116
+NormalKey 57 9 90 0 110
+NormalKey 48 0 100 0 115
+NormalKey 223 + 110 0 115
+NormalKey 180 ´ 120 0 115
+#
+NormalKey 246 Ö 15 10 97
+NormalKey 229 Å 25 10 111
+NormalKey 239 Ä 35 10 101
+NormalKey 112 P 45 10 117
+NormalKey 121 Y 55 10 117
+NormalKey 102 F 65 10 104
+#
+NormalKey 103 G 75 10 104
+NormalKey 99 C 85 10 116
+NormalKey 114 R 95 10 110
+NormalKey 108 L 105 10 115
+NormalKey 113 Q 115 10 115
+NormalKey 168 ¨ 125 10 115
+#
+NormalKey 105 I 58 20 117
+NormalKey 100 D 68 20 104
+NormalKey 45 - 118 20 115
+NormalKey 60 < 128 20 115
+NormalKey 39 ' 13 30 97
+NormalKey 44 , 23 30 97
+#
+NormalKey 46 . 33 30 111
+NormalKey 106 J 43 30 100
+NormalKey 107 K 53 30 102
+NormalKey 120 X 63 30 102
+NormalKey 98 B 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 119 W 93 30 107
+NormalKey 118 V 103 30 108
+NormalKey 122 Z 113 30 115
+#
+#
+# Ascii Target Finger Contorll
+
+
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 104 257 #B
+HiddenKey 67 99 116 257 #C
+HiddenKey 68 100 104 257 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 104 257 #F
+HiddenKey 71 103 104 257 #G
+HiddenKey 72 104 104 258 #H
+HiddenKey 73 105 117 258 #I
+HiddenKey 74 106 101 258 #J
+HiddenKey 75 107 117 258 #K
+HiddenKey 76 108 115 258 #L
+HiddenKey 77 109 104 258 #M
+HiddenKey 78 110 110 258 #N
+HiddenKey 79 111 111 258 #O
+HiddenKey 80 112 117 258 #P
+HiddenKey 81 113 115 258 #Q
+HiddenKey 82 114 110 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 116 257 #T
+HiddenKey 85 117 117 258 #U
+HiddenKey 86 118 110 257 #V
+HiddenKey 87 119 116 257 #W
+HiddenKey 88 120 117 257 #X
+HiddenKey 89 121 117 258 #Y
+HiddenKey 90 122 115 257 #Z
diff --git a/ktouch/keyboards/sv.keyboard b/ktouch/keyboards/sv.keyboard
new file mode 100644
index 00000000..597a315d
--- /dev/null
+++ b/ktouch/keyboards/sv.keyboard
@@ -0,0 +1,128 @@
+####################################################
+# KTouch
+# Keybord layout file for swedish keybord layout
+# Encoding: UTF-8 (save as UTF-8 from editor)
+# Edit this file with tabs set to 8 characters.
+#
+# Refer to file en.keyboard for details.
+####################################################
+#
+FingerKey 97 A 18 20
+FingerKey 115 S 28 20
+FingerKey 100 D 38 20
+FingerKey 102 F 48 20
+FingerKey 106 J 78 20
+FingerKey 107 K 88 20
+FingerKey 108 L 98 20
+FingerKey 246 Ö 108 20
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 258 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Strg 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Strg 0 40 15 10
+ControlKey 32 Mellanslag 30 40 90 10
+ControlKey 257 Shift 0 30 13 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 Bakslag 130 0 20 10
+#
+NormalKey 167 § 0 0 97
+NormalKey 49 1 10 0 97
+NormalKey 50 2 20 0 97
+NormalKey 51 3 30 0 115
+NormalKey 52 4 40 0 100
+NormalKey 53 5 50 0 102
+NormalKey 54 6 60 0 102
+NormalKey 55 7 70 0 106
+NormalKey 56 8 80 0 106
+NormalKey 57 9 90 0 107
+NormalKey 48 0 100 0 108
+NormalKey 43 + 110 0 246
+NormalKey 180 ´ 120 0 246
+#
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 246
+NormalKey 91 Å 115 10 246
+NormalKey 168 " 125 10 246
+#
+NormalKey 103 G 58 20 102
+NormalKey 104 H 68 20 106
+NormalKey 228 Ä 118 20 246
+NormalKey 39 ' 128 20 246
+#
+NormalKey 60 < 13 30 97
+NormalKey 122 Z 23 30 97
+NormalKey 120 X 33 30 115
+NormalKey 99 C 43 30 100
+NormalKey 118 V 53 30 102
+NormalKey 98 B 63 30 102
+NormalKey 110 N 73 30 106
+NormalKey 109 M 83 30 106
+NormalKey 44 , 93 30 107
+NormalKey 46 . 103 30 108
+NormalKey 45 - 113 30 246
+#
+HiddenKey 65 97 97 258 #A
+HiddenKey 66 98 102 258 #B
+HiddenKey 67 99 100 258 #C
+HiddenKey 68 100 100 258 #D
+HiddenKey 69 101 100 258 #E
+HiddenKey 70 102 102 258 #F
+HiddenKey 71 103 102 258 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 246 258 #P
+HiddenKey 81 113 97 258 #Q
+HiddenKey 82 114 102 258 #R
+HiddenKey 83 115 115 258 #S
+HiddenKey 84 116 102 258 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 258 #V
+HiddenKey 87 119 115 258 #W
+HiddenKey 88 120 115 258 #X
+HiddenKey 89 121 97 258 #Y
+HiddenKey 90 122 106 258 #Z
+HiddenKey 62 60 97 258 #>
+HiddenKey 196 228 246 257 #Ä
+HiddenKey 214 246 246 257 #Ö
+HiddenKey 197 91 230 258 #Å
+HiddenKey 189 167 97 258 #½
+HiddenKey 33 49 97 258 #!
+HiddenKey 34 50 97 258 #"
+HiddenKey 37 53 102 258 #%
+HiddenKey 38 54 102 258 #&
+HiddenKey 47 55 106 257 #/
+HiddenKey 40 56 106 257 #(
+HiddenKey 41 57 107 257 #)
+HiddenKey 61 48 108 257 #=
+HiddenKey 63 223 246 257 #?
+HiddenKey 96 180 246 257 #`
+HiddenKey 59 44 107 257 #;
+HiddenKey 58 46 108 257 #:
+HiddenKey 95 45 246 257 #_
+HiddenKey 42 39 246 257 #*
+HiddenKey 92 223 246 264 #\
+HiddenKey 124 60 97 264 #|
+HiddenKey 64 50 97 264 #@
+HiddenKey 36 52 100 264 #$
+HiddenKey 181 109 106 264 #µ
+# The following three keys don't work for now
+#Hiddenkey 94 168 246 257 #^
+#Hiddenkey 164 52 100 258 #¤
+#Hiddenkey 126 168 246 264 #~
diff --git a/ktouch/keyboards/tr.f.keyboard b/ktouch/keyboards/tr.f.keyboard
new file mode 100644
index 00000000..92c08944
--- /dev/null
+++ b/ktouch/keyboards/tr.f.keyboard
@@ -0,0 +1,192 @@
+####################################################
+# KTouch
+# Turkish F Keybord layout file
+####################################################
+# This file distributed without any expressed or implied warranty
+# Written by Nilgün Belma Bugüner <nilgun at belgeler dot org>, 2005
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Ascii KeyText x y
+FingerKey 117 U 18 20
+FingerKey 105 İ 28 20
+FingerKey 101 E 38 20
+FingerKey 97 A 48 20
+FingerKey 107 K 78 20
+FingerKey 109 M 88 20
+FingerKey 108 L 98 20
+FingerKey 121 Y 108 20
+#
+#
+# ControllKey: This class will represent all the
+# controll keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Ascii KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 258 Shift 0 30 13 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 32 Boşluk 30 40 90 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 8 GeriSil 130 0 20 10
+ControlKey 13 Enter 138 10 12 20
+ControlKey 257 Shift 123 30 27 10
+
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Ascii KeyText x y FingerKey
+#
+NormalKey 252 Ü 58 20 97
+NormalKey 116 T 68 20 107
+NormalKey 351 Ş 118 20 121
+NormalKey 120 X 128 20 121
+#
+NormalKey 43 + 0 0 117
+NormalKey 49 1 10 0 117
+NormalKey 50 2 20 0 105
+NormalKey 51 3 30 0 105
+NormalKey 52 4 40 0 101
+NormalKey 53 5 50 0 97
+NormalKey 54 6 60 0 107
+NormalKey 55 7 70 0 107
+NormalKey 56 8 80 0 109
+NormalKey 57 9 90 0 109
+NormalKey 48 0 100 0 108
+NormalKey 47 / 110 0 121
+NormalKey 45 - 120 0 121
+#
+NormalKey 102 F 15 10 117
+NormalKey 103 G 25 10 105
+NormalKey 287 Ğ 35 10 101
+NormalKey 305 I 45 10 97
+NormalKey 111 O 55 10 97
+NormalKey 100 D 65 10 107
+NormalKey 114 R 75 10 107
+NormalKey 110 N 85 10 109
+NormalKey 104 H 95 10 108
+NormalKey 112 P 105 10 121
+NormalKey 113 Q 115 10 121
+NormalKey 119 W 125 10 121
+NormalKey 252 Ü 58 20 97
+NormalKey 116 T 68 20 107
+NormalKey 254 Ş 118 20 121
+NormalKey 120 X 128 20 121
+#
+NormalKey 60 < 13 30 117
+NormalKey 106 J 23 30 117
+NormalKey 246 Ö 33 30 105
+NormalKey 118 V 43 30 101
+NormalKey 99 C 53 30 97
+NormalKey 231 Ç 63 30 97
+NormalKey 122 Z 73 30 107
+NormalKey 115 S 83 30 107
+NormalKey 98 B 93 30 109
+NormalKey 46 . 103 30 108
+NormalKey 44 , 113 30 121
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basicly
+# this is all the uppercase letters.
+#
+# Modified Small Finger Modifier
+#
+HiddenKey 33 49 117 257 #!
+HiddenKey 34 50 105 257 #"
+HiddenKey 35 51 105 264 ##
+HiddenKey 36 52 101 257 #$
+HiddenKey 37 53 97 257 #%
+HiddenKey 38 54 107 258 #&
+HiddenKey 39 55 107 258 #'
+HiddenKey 40 56 109 258 #(
+HiddenKey 41 57 109 258 #)
+HiddenKey 42 43 117 257 #*
+HiddenKey 58 46 108 258 #:
+HiddenKey 59 44 121 258 #;
+HiddenKey 61 48 108 258 #=
+HiddenKey 62 60 117 257 #>
+HiddenKey 63 47 121 258 #?
+HiddenKey 64 102 117 264 #@
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 109 258 #B
+HiddenKey 67 99 97 257 #C
+HiddenKey 68 100 107 258 #D
+HiddenKey 69 101 101 257 #E
+HiddenKey 70 102 117 257 #F
+HiddenKey 71 103 105 257 #G
+HiddenKey 72 104 108 258 #H
+HiddenKey 73 305 97 257 #I
+HiddenKey 74 106 117 257 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 108 258 #L
+HiddenKey 77 109 109 258 #M
+HiddenKey 78 110 109 258 #N
+HiddenKey 79 111 97 257 #O
+HiddenKey 80 112 121 258 #P
+HiddenKey 81 113 121 258 #Q
+HiddenKey 82 114 107 258 #R
+HiddenKey 83 115 107 258 #S
+HiddenKey 84 116 107 258 #T
+HiddenKey 85 117 117 257 #U
+HiddenKey 86 118 101 257 #V
+HiddenKey 87 119 121 258 #W
+HiddenKey 88 120 121 258 #X
+HiddenKey 89 121 121 258 #Y
+HiddenKey 90 122 107 258 #Z
+HiddenKey 91 56 109 264 #[
+HiddenKey 92 47 121 264 #\
+HiddenKey 93 57 109 264 #]
+HiddenKey 94 51 105 257 #^
+HiddenKey 95 45 121 258 #_
+HiddenKey 96 120 121 264 #`
+HiddenKey 123 55 107 264 #{
+HiddenKey 124 60 117 264 #|
+HiddenKey 125 48 108 264 #}
+HiddenKey 126 119 121 264 #~
+HiddenKey 162 99 97 264 #¢
+HiddenKey 163 112 121 264 #£
+HiddenKey 165 100 107 264 #¥
+HiddenKey 167 115 107 264 #§
+HiddenKey 171 106 117 264 #«
+HiddenKey 172 43 117 264 #¬
+HiddenKey 174 114 107 264 #®
+HiddenKey 176 104 108 264 #°
+HiddenKey 178 50 105 264 #²
+HiddenKey 180 121 121 264 #´
+HiddenKey 181 109 109 264 #µ
+HiddenKey 182 305 97 264 #¶
+HiddenKey 183 43 121 264 #·
+HiddenKey 185 49 117 264 #¹
+HiddenKey 187 246 105 264 #»
+HiddenKey 188 52 101 264 #¼
+HiddenKey 189 53 97 264 #½
+HiddenKey 190 54 107 264 #¾
+HiddenKey 199 231 97 257 #Ç
+HiddenKey 214 246 105 257 #Ö
+HiddenKey 215 98 109 264 #×
+HiddenKey 220 252 97 258 #Ü
+HiddenKey 226 97 97 264 #â
+HiddenKey 238 105 105 264 #î
+HiddenKey 244 111 97 264 #ô
+HiddenKey 247 46 108 264 #÷
+HiddenKey 251 117 117 264 #û
+HiddenKey 286 287 101 257 #Ğ
+HiddenKey 304 105 105 257 #İ
+HiddenKey 350 351 121 258 #Ş
+HiddenKey 8220 118 101 264 #“
+HiddenKey 8221 231 97 264 #”
+HiddenKey 8364 101 101 264 #€
+HiddenKey 8482 116 107 264 #™
diff --git a/ktouch/keyboards/tr.q.keyboard b/ktouch/keyboards/tr.q.keyboard
new file mode 100644
index 00000000..2fb7e1c2
--- /dev/null
+++ b/ktouch/keyboards/tr.q.keyboard
@@ -0,0 +1,125 @@
+####################################################
+# KTouch
+# Keybord layout file
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Assci KeyText x y
+FingerKey 97 A 13 20
+FingerKey 115 S 23 20
+FingerKey 100 D 33 20
+FingerKey 102 F 43 20
+FingerKey 106 J 73 20
+FingerKey 107 K 83 20
+FingerKey 108 L 93 20
+FingerKey 59 Ş 103 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Assci KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 133 20 17 10
+ControlKey 257 Shift 128 30 22 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Space 30 40 90 10
+ControlKey 258 Shift 0 30 18 10
+ControlKey 259 CapsLock 0 20 13 10
+ControlKey 8 BackSpace 130 0 20 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Assci KeyText x y FingerKey
+#
+NormalKey 96 " 0 0 97
+NormalKey 49 1! 10 0 97
+NormalKey 50 2' 20 0 115
+NormalKey 51 3^ 30 0 100
+NormalKey 52 4+ 40 0 102
+NormalKey 53 5% 50 0 102
+NormalKey 54 6& 60 0 106
+NormalKey 55 7/ 70 0 106
+NormalKey 56 8( 80 0 107
+NormalKey 57 9) 90 0 108
+NormalKey 48 0= 100 0 59
+NormalKey 95 *? 110 0 59
+NormalKey 61 -_ 120 0 59
+
+NormalKey 113 Q 15 10 97
+NormalKey 119 W 25 10 115
+NormalKey 101 E 35 10 100
+NormalKey 114 R 45 10 102
+NormalKey 116 T 55 10 102
+NormalKey 121 Y 65 10 106
+NormalKey 117 U 75 10 106
+NormalKey 105 I 85 10 107
+NormalKey 111 O 95 10 108
+NormalKey 112 P 105 10 59
+NormalKey 91 Ğ 115 10 59
+NormalKey 93 Ü~ 125 10 59
+#
+NormalKey 103 G 53 20 102
+NormalKey 104 H 63 20 106
+NormalKey 39 İ 113 20 59
+NormalKey 48 ,;` 123 20 36
+NormalKey 94 <|> 18 30 97
+NormalKey 122 Z 28 30 102
+NormalKey 120 X 38 30 115
+NormalKey 99 C 48 30 100
+NormalKey 118 V 58 30 102
+NormalKey 98 B 68 30 102
+NormalKey 110 N 78 30 106
+NormalKey 109 M 88 30 106
+NormalKey 44 Ö 98 30 107
+NormalKey 46 Ç 108 30 108
+NormalKey 47 .: 118 30 59
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Ascii Target Finger Contorll
+#
+HiddenKey 65 97 97 257 #A
+HiddenKey 66 98 102 257 #B
+HiddenKey 67 99 100 257 #C
+HiddenKey 68 100 100 257 #D
+HiddenKey 69 101 100 257 #E
+HiddenKey 70 102 102 257 #F
+HiddenKey 71 103 102 257 #G
+HiddenKey 72 104 106 258 #H
+HiddenKey 73 105 107 258 #I
+HiddenKey 74 106 106 258 #J
+HiddenKey 75 107 107 258 #K
+HiddenKey 76 108 106 258 #L
+HiddenKey 77 109 106 258 #M
+HiddenKey 78 110 106 258 #N
+HiddenKey 79 111 108 258 #O
+HiddenKey 80 112 59 258 #P
+HiddenKey 81 113 97 257 #Q
+HiddenKey 82 114 102 257 #R
+HiddenKey 83 115 115 257 #S
+HiddenKey 84 116 102 257 #T
+HiddenKey 85 117 106 258 #U
+HiddenKey 86 118 102 257 #V
+HiddenKey 87 119 115 257 #W
+HiddenKey 88 120 115 257 #X
+HiddenKey 89 121 106 258 #Y
+HiddenKey 90 122 97 257 #Z
diff --git a/ktouch/keyboards/uk.basic.keyboard b/ktouch/keyboards/uk.basic.keyboard
new file mode 100644
index 00000000..6ea507c4
--- /dev/null
+++ b/ktouch/keyboards/uk.basic.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Ukrainian basic keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1110 І 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 39 ' 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1110
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 1169 Ґ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1110
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1111 Ї 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1108 Є 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1110
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 47 / 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1030 1110 1110 257 #І S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1028 1108 1078 258 #Є
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1110 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 63 47 1078 258 #?
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1110 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1031 1111 1078 258 #Ї
+HiddenKey 126 39 1092 257 #~
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1110 257 #"
+HiddenKey 35 51 1074 257 ##
+HiddenKey 42 52 1072 257 #*
+HiddenKey 58 53 1072 257 #:
+HiddenKey 44 54 1086 258 #,
+HiddenKey 46 55 1086 258 #.
+HiddenKey 59 56 1083 258 #;
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 1168 1169 1078 258 #Ґ
diff --git a/ktouch/keyboards/uk.typewriter.keyboard b/ktouch/keyboards/uk.typewriter.keyboard
new file mode 100644
index 00000000..129ac807
--- /dev/null
+++ b/ktouch/keyboards/uk.typewriter.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Ukrainian typewriter keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1080 И 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 39 ' 0 0 1092
+NormalKey 33 ! 10 0 1092
+NormalKey 8470 № 20 0 1080
+NormalKey 47 / 30 0 1074
+NormalKey 59 ; 40 0 1072
+NormalKey 58 : 50 0 1072
+NormalKey 44 , 60 0 1086
+NormalKey 46 . 70 0 1086
+NormalKey 95 _ 80 0 1083
+NormalKey 63 ? 90 0 1076
+NormalKey 37 % 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 40 ( 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1080
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1169 Ґ 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1108 Є 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1080
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1110 І 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 1111 Ї 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1048 1080 1080 257 #И S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1028 1108 1078 258 #Є
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1080 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1030 1110 1072 257 #І B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 1031 1111 1078 258 #Ї
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1080 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1168 1169 1078 258 #Ґ
+HiddenKey 34 39 1092 257 #"
+HiddenKey 49 33 1092 257 #1
+HiddenKey 50 8470 1080 257 #2
+HiddenKey 51 47 1074 257 #3
+HiddenKey 52 59 1072 257 #4
+HiddenKey 53 58 1072 257 #5
+HiddenKey 54 44 1086 258 #6
+HiddenKey 55 46 1086 258 #7
+HiddenKey 56 95 1083 258 #8
+HiddenKey 57 63 1076 258 #9
+HiddenKey 48 37 1078 258 #0
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 41 40 1078 258 #)
diff --git a/ktouch/keyboards/uk.winkeys.keyboard b/ktouch/keyboards/uk.winkeys.keyboard
new file mode 100644
index 00000000..d378df30
--- /dev/null
+++ b/ktouch/keyboards/uk.winkeys.keyboard
@@ -0,0 +1,149 @@
+####################################################
+#
+# Ukrainian winkeys keyboard layout file for KTouch.
+#
+# Created by Alexander Pravdin <aledin@mail.ru>.
+#
+####################################################
+#
+#
+# FingerKey: This class represents the keys where
+# your fingers shold rest between typing.
+#
+# Unicode KeyText x y
+FingerKey 1092 Ф 18 20
+FingerKey 1110 І 28 20
+FingerKey 1074 В 38 20
+FingerKey 1072 А 48 20
+FingerKey 1086 О 78 20
+FingerKey 1083 Л 88 20
+FingerKey 1076 Д 98 20
+FingerKey 1078 Ж 108 20
+#
+#
+# ControlKey: This class will represent all the
+# control keys that you are using. Theys keys
+# will be used later when you want to use uppercase.
+#
+# Unicode KeyText x y Width Height
+#
+ControlKey 260 Tab 0 10 15 10
+ControlKey 13 Enter 128 20 22 10
+ControlKey 257 Shift 123 30 27 10
+ControlKey 264 AltGr 120 40 15 10
+ControlKey 265 Ctrl 135 40 15 10
+ControlKey 263 Alt 15 40 15 10
+ControlKey 262 Ctrl 0 40 15 10
+ControlKey 32 Пробел 30 40 90 10
+ControlKey 258 Shift 0 30 23 10
+ControlKey 259 CapsLock 0 20 18 10
+ControlKey 8 BackSpace 140 0 10 10
+#
+#
+# NormalKey: This class represent all the
+# normal keys where you don't need to press
+# anything else then just one key. That would
+# basicly bee all the numbers and the lovercase
+# letters. For this class you have to indicate
+# withc finger key you are going to use.
+#
+# Unicode KeyText x y FingerKey
+#
+NormalKey 39 ' 0 0 1092
+NormalKey 49 1 10 0 1092
+NormalKey 50 2 20 0 1110
+NormalKey 51 3 30 0 1074
+NormalKey 52 4 40 0 1072
+NormalKey 53 5 50 0 1072
+NormalKey 54 6 60 0 1086
+NormalKey 55 7 70 0 1086
+NormalKey 56 8 80 0 1083
+NormalKey 57 9 90 0 1076
+NormalKey 48 0 100 0 1078
+NormalKey 45 - 110 0 1078
+NormalKey 61 = 120 0 1078
+NormalKey 1169 Ґ 130 0 1078
+#
+NormalKey 1081 Й 15 10 1092
+NormalKey 1094 Ц 25 10 1110
+NormalKey 1091 У 35 10 1074
+NormalKey 1082 К 45 10 1072
+NormalKey 1077 Е 55 10 1072
+NormalKey 1085 Н 65 10 1086
+NormalKey 1075 Г 75 10 1086
+NormalKey 1096 Ш 85 10 1083
+NormalKey 1097 Щ 95 10 1076
+NormalKey 1079 З 105 10 1078
+NormalKey 1093 Х 115 10 1078
+NormalKey 1111 Ї 125 10 1078
+#
+NormalKey 1087 П 58 20 1072
+NormalKey 1088 Р 68 20 1086
+NormalKey 1108 Є 118 20 1078
+#
+NormalKey 1103 Я 23 30 1092
+NormalKey 1095 Ч 33 30 1110
+NormalKey 1089 С 43 30 1074
+NormalKey 1084 М 53 30 1072
+NormalKey 1080 И 63 30 1072
+NormalKey 1090 Т 73 30 1086
+NormalKey 1100 Ь 83 30 1086
+NormalKey 1073 Б 93 30 1083
+NormalKey 1102 Ю 103 30 1076
+NormalKey 46 . 113 30 1078
+#
+#
+# HiddenKey: This is all the keys that
+# you cant see. That means that you have
+# to use an controll key to get them. Basically
+# this is all the uppercase letters.
+#
+# Unicode Target Finger Contorll
+#
+HiddenKey 1060 1092 1092 257 #Ф A
+HiddenKey 1030 1110 1110 257 #І S
+HiddenKey 1042 1074 1074 257 #В D
+HiddenKey 1040 1072 1072 257 #А F
+HiddenKey 1055 1087 1072 257 #П G
+HiddenKey 1056 1088 1086 258 #Р H
+HiddenKey 1054 1086 1086 258 #О J
+HiddenKey 1051 1083 1083 258 #Л K
+HiddenKey 1044 1076 1076 258 #Д L
+HiddenKey 1046 1078 1078 258 #Ж
+HiddenKey 1028 1108 1078 258 #Є
+HiddenKey 1071 1103 1092 257 #Я Z
+HiddenKey 1063 1095 1110 257 #Ч X
+HiddenKey 1057 1089 1074 257 #С C
+HiddenKey 1052 1084 1072 257 #М V
+HiddenKey 1048 1080 1072 257 #И B
+HiddenKey 1058 1090 1086 258 #Т N
+HiddenKey 1068 1100 1086 258 #Ь M
+HiddenKey 1041 1073 1083 258 #Б
+HiddenKey 1070 1102 1076 258 #Ю
+HiddenKey 44 46 1078 258 #,
+HiddenKey 1049 1081 1092 257 #Й Q
+HiddenKey 1062 1094 1110 257 #Ц W
+HiddenKey 1059 1091 1074 257 #У E
+HiddenKey 1050 1082 1072 257 #К R
+HiddenKey 1045 1077 1072 257 #Е T
+HiddenKey 1053 1085 1086 258 #Н Y
+HiddenKey 1043 1075 1086 258 #Г U
+HiddenKey 1064 1096 1083 258 #Ш I
+HiddenKey 1065 1097 1076 258 #Щ O
+HiddenKey 1047 1079 1078 258 #З P
+HiddenKey 1061 1093 1078 258 #Х
+HiddenKey 1031 1111 1078 258 #Ї
+HiddenKey 126 39 1092 257 #~
+HiddenKey 33 49 1092 257 #!
+HiddenKey 34 50 1110 257 #"
+HiddenKey 8470 51 1074 257 #num
+HiddenKey 59 52 1072 257 #;
+HiddenKey 37 53 1072 257 #%
+HiddenKey 58 54 1086 258 #:
+HiddenKey 63 55 1086 258 #?
+HiddenKey 42 56 1083 258 #*
+HiddenKey 40 57 1076 258 #(
+HiddenKey 41 48 1078 258 #)
+HiddenKey 95 45 1078 258 #_
+HiddenKey 43 61 1078 258 #+
+HiddenKey 1168 1169 1078 258 #Ґ
diff --git a/ktouch/ktouch.desktop b/ktouch/ktouch.desktop
new file mode 100644
index 00000000..83860bd6
--- /dev/null
+++ b/ktouch/ktouch.desktop
@@ -0,0 +1,82 @@
+# KDE Config File
+[Desktop Entry]
+Type=Application
+Exec=ktouch -caption "%c" %i %m
+Icon=ktouch
+DocPath=ktouch/index.html
+GenericName=Touch Typing Tutor
+GenericName[af]=Raak-tik Afrigter
+GenericName[ar]=معلم الطباعة
+GenericName[be]=Настаўнік "сляпога" метаду набору тэксту
+GenericName[bg]=Самоучител за бързо писане
+GenericName[bn]=টাচ টাইপিং প্রশিক্ষক
+GenericName[ca]=Tutor de mecanografia
+GenericName[cs]=Výuka psaní na stroji
+GenericName[csb]=Ùczbòwnik bezwidowegò pisaniô
+GenericName[cy]=Athro Cyffyrdd-Deipio
+GenericName[da]=Blindskriftsøvelser
+GenericName[de]=Schreibmaschinenkurs
+GenericName[el]=Εκμάθηση χρήσης πληκτρολογίου
+GenericName[eo]=Tajpada intruisto
+GenericName[es]=Tutor para mecanografía
+GenericName[et]=Klaviatuuri treening
+GenericName[eu]=Mekanografia tutorea
+GenericName[fa]=مهارت تحریر آموختار
+GenericName[fi]=Näppäimistökirjoituksen ohjaaja
+GenericName[fr]=Logiciel d'apprentissage de la frappe au clavier
+GenericName[gl]=Titor de Mecanografía
+GenericName[he]=לימוד הדפסה עיוורת
+GenericName[hi]=टच टाइपिंग ट्यूटर
+GenericName[hr]=Obuka u tipkanju na slijepo
+GenericName[hu]=Gépelésoktató
+GenericName[is]=Vélritunarkennsla
+GenericName[it]=Istruttore di dattilografia
+GenericName[ja]=タッチタイプの練習
+GenericName[ka]="ბრმა" ბეჭდვის შესწავლა
+GenericName[km]=កម្មវិធី​បង្រៀន​វាយ​ដោយ​ការ​ប៉ះ
+GenericName[lt]=Aklo spausdinimo mokytojas
+GenericName[lv]=Ātrakstīšanas Skolotājs
+GenericName[mk]=Учител за пишување на машина
+GenericName[mn]=Бичгийн машины зааварлагч
+GenericName[ms]=Tutor Menaip Touch
+GenericName[nb]=Øving i touch-metoden
+GenericName[nds]=Schriefmaschien öven
+GenericName[ne]=टच टाइपिङ प्रशिक्षक
+GenericName[nl]=Typcursus
+GenericName[nn]=Tastaturøving
+GenericName[nso]=Mofahlosi yo a Tlanyago ka Kgwatho
+GenericName[pl]=Nauczyciel bezwrokowego pisania
+GenericName[pt]=Aprender Escrita Dactilográfica
+GenericName[pt_BR]=Tutor de digitação
+GenericName[ru]=Самоучитель печати «вслепую»
+GenericName[se]=Boallobeavdehárjehallan
+GenericName[sk]=Výuka písania na stroji
+GenericName[sl]=Učenje tipkanja
+GenericName[sr]=Тутор за слепо куцање
+GenericName[sr@Latn]=Tutor za slepo kucanje
+GenericName[sv]=Maskinskrivningsträning
+GenericName[ta]=தொடு-தட்டச்சு ஆசிரியர்
+GenericName[tg]=Машқ Барои Чоп Кардан
+GenericName[tr]=10 Parmak Öğretmeni
+GenericName[uk]=Вчитель комп'ютерного набору
+GenericName[ven]=Mugudisi wau thaipa hau tou fara
+GenericName[vi]=Trình dạy Gõ Bàn phím
+GenericName[xh]=Umbuyekisi wokufundiweyo Obamba Echwetheza
+GenericName[zh_CN]=打字教程
+GenericName[zh_TW]=觸摸輸入輔助教學
+GenericName[zu]=Umfundisi Wokuthinta Ukuthayipha
+Terminal=false
+Name=KTouch
+Name[af]=K-aanraak
+Name[ar]=اللمس ك
+Name[bn]=কে-টাচ
+Name[cy]=KCyffwrdd
+Name[hi]=के-टच
+Name[hr]=KDodir
+Name[is]=KVélritun
+Name[mn]=KМэдрэхүй
+Name[ne]=केडीई टच
+Name[sv]=Ktouch
+Name[ta]=கேடச்
+Name[ven]=KFara
+Categories=Qt;KDE;Education;
diff --git a/ktouch/ktouch.lsm b/ktouch/ktouch.lsm
new file mode 100644
index 00000000..ab0235d1
--- /dev/null
+++ b/ktouch/ktouch.lsm
@@ -0,0 +1,19 @@
+Begin3
+Title: KTouch
+Version: 1.5
+Entered-date: 14-June-2005
+Description: A education program to learn to touch-type. It provieds
+ a training text, and shows the user how to place their
+ fingers on the keyboard. It also shows the user which finger
+ to move to press the next key. It automatically adjusts to
+ different levels depending on the speed. It has support
+ for different keyboard layouts(languages).
+Keywords: touch typing education training
+Author: haavard@users.sourceforge.net (Haavard Froeiland)
+Maintained-by: ghorwin@users.sourceforge.net (Andreas Nicolai)
+Primary-site: ktouch.sourceforge.net
+Home-page: http://KTouch.sourceforge.net
+Original-site:
+Platforms: Linux and other Unices running KDE 3.4
+Copying-policy: GNU Public License
+End
diff --git a/ktouch/sounds/Makefile.am b/ktouch/sounds/Makefile.am
new file mode 100644
index 00000000..bc1baa96
--- /dev/null
+++ b/ktouch/sounds/Makefile.am
@@ -0,0 +1,2 @@
+sounddir = $(kde_datadir)/ktouch
+sound_DATA = up.wav down.wav typewriter.wav
diff --git a/ktouch/sounds/down.wav b/ktouch/sounds/down.wav
new file mode 100644
index 00000000..1e5d0d06
--- /dev/null
+++ b/ktouch/sounds/down.wav
Binary files differ
diff --git a/ktouch/sounds/typewriter.wav b/ktouch/sounds/typewriter.wav
new file mode 100644
index 00000000..299e65c8
--- /dev/null
+++ b/ktouch/sounds/typewriter.wav
Binary files differ
diff --git a/ktouch/sounds/up.wav b/ktouch/sounds/up.wav
new file mode 100644
index 00000000..6fb9319c
--- /dev/null
+++ b/ktouch/sounds/up.wav
Binary files differ
diff --git a/ktouch/src/Makefile.am b/ktouch/src/Makefile.am
new file mode 100644
index 00000000..2eda3b2e
--- /dev/null
+++ b/ktouch/src/Makefile.am
@@ -0,0 +1,62 @@
+# this 10 paths are KDE specific. Use them:
+# kde_htmldir Where your docs should go to. (contains lang subdirs)
+# kde_appsdir Where your application file (.kdelnk) should go to.
+# kde_icondir Where your icon should go to.
+# kde_sounddir Where system sounds should go to.
+# kde_datadir Where you install application data. (Use a subdir)
+# kde_locale Where translation files should go to.(contains lang subdirs)
+# kde_cgidir Where cgi-bin executables should go to.
+# kde_confdir Where config files should go to.
+# kde_mimedir Where mimetypes should go to.
+# kde_toolbardir Where general toolbar icons should go to.
+# kde_wallpaperdir Where general wallpapers should go to.
+
+# set the include path for X, qt and KDE
+INCLUDES = $(all_includes) -I$(top_srcdir)
+
+# claim, which subdirectories you want to install
+# if you don't have subdirectories, comment it
+# SUBDIRS =
+
+# these are the headers for your project
+noinst_HEADERS = ktouchchartwidget.h ktouchcolorscheme.h ktouchdefaults.h \
+ ktouch.h ktouchkeyboardeditor.h ktouchkeyboard.h ktouchkeyboardwidget.h \
+ ktouchkeyconnector.h ktouchkey.h ktouchkeys.h ktouchlectureeditor.h ktouchlecture.h \
+ ktouchleveldata.h ktouchopenrequest.h ktouchslideline.h ktouchstatisticsdata.h \
+ ktouchstatistics.h ktouchstatus.h ktouchtrainer.h ktouchutils.h ktouchcoloreditor.h
+
+# let automoc handle all of the meta source files (moc)
+ktouch_METASOURCES = AUTO
+
+messages: rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/ktouch.pot
+
+
+#########################################################################
+# APPLICATION SECTION
+#########################################################################
+# this is the program that gets installed. it's name is used for all
+# of the other Makefile.am variables
+bin_PROGRAMS = ktouch
+
+# the application source, library search path, and link libraries
+ktouch_SOURCES = ktouchchartwidget.cpp ktouchcoloreditor_dlg.ui \
+ ktouchcolorscheme.cpp ktouch.cpp ktouchdefaults.cpp ktouchkeyboardwidget.cpp \
+ ktouchkeyconnector.cpp ktouchkey.cpp ktouchkeys.cpp ktouchlecture.cpp ktouchlectureeditor.cpp \
+ ktouchlectureeditor_dlg.ui ktouchleveldata.cpp ktouchopenrequest.cpp ktouchopenrequest_dlg.ui \
+ ktouchprefcolorslayout.ui ktouchprefgenerallayout.ui ktouchprefkeyboardlayout.ui \
+ ktouchpreftraininglayout.ui ktouchslideline.cpp ktouchstatistics.cpp ktouchstatisticsdata.cpp \
+ ktouchstatistics_dlg.ui ktouchstatus.cpp ktouchstatuslayout.ui ktouchtrainer.cpp \
+ ktouchutils.cpp main.cpp prefs.kcfgc ktouchcoloreditor.cpp
+
+# the library search path.
+ktouch_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+
+# the libraries to link against. Be aware of the order. First the libraries,
+# that depend on the following ones.
+ktouch_LDADD = ../../libkdeedu/kdeeduplot/libkdeeduplot.la $(LIB_KIO)
+
+rcdir = $(kde_datadir)/ktouch
+rc_DATA = ktouchui.rc
+kde_kcfg_DATA = ktouch.kcfg
+
diff --git a/ktouch/src/ktouch.cpp b/ktouch/src/ktouch.cpp
new file mode 100644
index 00000000..231bc402
--- /dev/null
+++ b/ktouch/src/ktouch.cpp
@@ -0,0 +1,878 @@
+/***************************************************************************
+ * ktouch.cpp *
+ * ---------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouch.h"
+#include "ktouch.moc"
+
+// Standard files
+#include <algorithm>
+
+// QT Header
+#include <qvbox.h>
+#include <qsignalmapper.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+//#include <qimevent.h>
+
+// KDE Header
+#include <klocale.h>
+#include <kstatusbar.h>
+#include <kfiledialog.h>
+#include <kaction.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kpopupmenu.h>
+#include <kconfigdialog.h>
+#include <kaction.h>
+#include <kcombobox.h>
+#include <kfontrequester.h>
+#include <knuminput.h>
+
+// Own header files
+#include "ktouchlecture.h"
+#include "ktouchlectureeditor.h"
+#include "ktouchstatus.h"
+#include "ktouchslideline.h"
+#include "ktouchkeyboardwidget.h"
+#include "ktouchcoloreditor.h"
+#include "ktouchtrainer.h"
+#include "ktouchstatistics.h"
+#include "ktouchprefgenerallayout.h"
+#include "ktouchpreftraininglayout.h"
+#include "ktouchprefkeyboardlayout.h"
+#include "ktouchprefcolorslayout.h"
+#include "ktouchutils.h"
+#include "prefs.h"
+#include "ktouchcolorscheme.h"
+
+KTouch * KTouchPtr = NULL;
+
+KTouch::KTouch()
+ : KMainWindow( 0, "KTouch" ),
+ m_statusWidget(NULL),
+ m_keyboardWidget(NULL),
+ m_trainer(NULL)
+{
+ setFocusPolicy(StrongFocus);
+ setInputMethodEnabled(true);
+
+ // Set global KTouchPtr to the main KTouch Object
+ KTouchPtr = this;
+ // General initialization of the program, common for all start modes
+ init();
+ // Setup our actions and connections
+ setupActions();
+ // create the GUI reading the ui.rc file
+ if (!initialGeometrySet())
+ resize( QSize(700, 510).expandedTo(minimumSizeHint()));
+ setupGUI(ToolBar | Keys | StatusBar | Create);
+ setAutoSaveSettings();
+ // Read user statistics
+ KURL stat_file = KGlobal::dirs()->findResource("data", "ktouch/statistics.xml");
+ //kdDebug() << "[KTouch::KTouch] readings statistics from file '" << stat_file << "'" << endl;
+ if (!m_stats.read(this, stat_file))
+ m_stats.clear(); // if we can't read it, start with empty statistics
+
+ // Init a training session
+ initTrainingSession();
+
+ // If session was restored, the function readProperties() was already called
+ if (kapp->isRestored()) {
+ kdDebug() << "[KTouch::KTouch] restoring session..." << endl;
+ /// \todo Rewrite all the session management stuff.
+ /// For now we just do the same as for the standard startup.
+ }
+// else {
+ //kdDebug() << "[KTouch::KTouch] starting standard training..." << endl;
+ // A note about safety: In this function there are a lot of things that might go
+ // wrong. What happens if the training file can't be found? What if the
+ // file cannot be opened or is corrupt? Whatever happens, the function loadXML()
+ // ensures, that there is at least the default mini-level in the lecture
+ // so that the training won't crash.
+
+ // Load statistics data from statistics-file
+
+ // Reload the last used training file.
+ if (Prefs::currentLectureFile().isNull() ||
+ !m_lecture.loadXML(this, Prefs::currentLectureFile() ))
+ {
+ Prefs::setCurrentLectureFile(QString::null);
+ m_defaultLectureAction->setCurrentItem(-1);
+ }
+ else {
+ updateFontFromLecture();
+ // adjust check marks in quick-select menus
+ updateLectureActionCheck();
+ //kdDebug() << "[KTouch::KTouch] lecture file = " << Prefs::currentLectureFile() << endl;
+ }
+
+ // Adjust check mark for the keyboard file
+ updateKeyboardActionCheck();
+ // If the user doesn't want to restart with his old level, start from 0 (level 1)
+ if (!Prefs::rememberLevel()) m_trainer->m_level = 0;
+ else m_trainer->m_level = Prefs::currentTrainingLevel();
+ // now let's start the training in the current level
+ m_trainer->startTraining(true);
+// }
+}
+// ----------------------------------------------------------------------------
+
+// Free memory of objects that are not owned by the main KTouch object
+KTouch::~KTouch() {
+ delete m_trainer;
+ m_trainer = NULL;
+}
+// ----------------------------------------------------------------------------
+
+KTouchLectureStats& KTouch::getCurrentLectureStats() {
+// kdDebug() << "[KTouch::getCurrentLectureStats] " << endl;
+ KURL lectureURL = Prefs::currentLectureFile();
+ if (lectureURL.url().isEmpty()) lectureURL = "default";
+// kdDebug() << " lectureURL = '" << lectureURL << "'" << endl;
+ KTouchLectureStats& stat = m_stats.m_lectureStats[lectureURL];
+ // add additional info to the statistics
+ if (stat.m_lectureURL.isEmpty())
+ stat.m_lectureURL = lectureURL;
+ if (stat.m_lectureTitle.isEmpty())
+ stat.m_lectureTitle = m_lecture.m_title;
+ return stat;
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::clearStatistics() {
+ m_stats.clear();
+}
+// ----------------------------------------------------------------------------
+
+// ********************
+// *** Public slots ***
+// ********************
+
+void KTouch::applyPreferences() {
+ // This applies a new color scheme for the keyboard and also updates all other
+ // changes for the keyboard widget
+ changeColor(Prefs::currentColorScheme());
+ m_slideLineWidget->applyPreferences();
+ m_statusWidget->applyPreferences();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::keyPressEvent(QKeyEvent *keyEvent) {
+ if (keyEvent->text().isEmpty()) return;
+
+ // if we the training session is paused, continue training now
+ if (m_trainer->m_trainingPaused) {
+ m_trainingPause->setEnabled(true);
+ m_trainer->continueTraining();
+ }
+ if (keyEvent->text().length() > 1) {
+ kdDebug() << "[KTouch::keyPressEvent] text = '" << keyEvent->text() << "'" << endl;
+ }
+ QChar key = keyEvent->text().at(0); // get first unicode character
+ // HACK : manually filter out known dead keys
+// bool has_dead_key = true;
+ switch (key.unicode()) {
+ case 94 : m_lastDeadKey = QChar(uint(94)); break;
+ case 176 : m_lastDeadKey = QChar(uint(176)); break;
+ case 180 : m_lastDeadKey = QChar(uint(180)); break;
+ case 96 : m_lastDeadKey = QChar(uint(96)); break;
+ case 126 : m_lastDeadKey = QChar(uint(126)); break;
+ default : m_lastDeadKey = QChar(uint(0));
+ }
+ if (m_lastDeadKey != QChar(uint(0)) && key == m_lastDeadKey) {
+// kdDebug() << "Got dead key = " << m_lastDeadKey << endl;
+ //keyEvent->accept();
+// return;
+ }
+
+ if (key.isPrint())
+ m_trainer->keyPressed(key);
+ else if (key==QChar(8))
+ m_trainer->backspacePressed();
+ else if (key==QChar(13))
+ m_trainer->enterPressed();
+ else
+ return; // unrecognised char -> don't accept it! Maybe the key is for somebody else?
+ keyEvent->accept();
+}
+// ----------------------------------------------------------------------------
+
+
+void KTouch::imEndEvent ( QIMEvent * e ){
+ m_trainer->keyPressed(e->text().at(0));
+ e->accept();
+}
+
+
+void KTouch::configOverrideLectureFontToggled(bool on) {
+ if (on) {
+ m_pageGeneral->fontTextLabel->setEnabled(true);
+ m_pageGeneral->kcfg_Font->setEnabled(true);
+ }
+ else {
+ m_pageGeneral->fontTextLabel->setEnabled(false);
+ m_pageGeneral->kcfg_Font->setEnabled(false);
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::configOverrideKeyboardFontToggled(bool on) {
+ if (on) {
+ m_pageKeyboard->textLabel1->setEnabled(true);
+ m_pageKeyboard->kcfg_KeyboardFont->setEnabled(true);
+ }
+ else {
+ m_pageKeyboard->textLabel1->setEnabled(false);
+ m_pageKeyboard->kcfg_KeyboardFont->setEnabled(false);
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::configAutoLevelChangeToggled(bool on) {
+ if (on) {
+ m_pageTraining->l1->setEnabled(true);
+ m_pageTraining->l2->setEnabled(true);
+ m_pageTraining->l3->setEnabled(true);
+ m_pageTraining->l4->setEnabled(true);
+ m_pageTraining->l5->setEnabled(true);
+ m_pageTraining->l6->setEnabled(true);
+ m_pageTraining->l7->setEnabled(true);
+ m_pageTraining->l8->setEnabled(true);
+ m_pageTraining->l9->setEnabled(true);
+ m_pageTraining->l10->setEnabled(true);
+ m_pageTraining->kcfg_UpSpeedLimit->setEnabled(true);
+ m_pageTraining->kcfg_UpCorrectLimit->setEnabled(true);
+ m_pageTraining->kcfg_DownSpeedLimit->setEnabled(true);
+ m_pageTraining->kcfg_DownCorrectLimit->setEnabled(true);
+ m_pageTraining->kcfg_DisableManualLevelChange->setEnabled(true);
+ }
+ else {
+ m_pageTraining->l1->setEnabled(false);
+ m_pageTraining->l2->setEnabled(false);
+ m_pageTraining->l3->setEnabled(false);
+ m_pageTraining->l4->setEnabled(false);
+ m_pageTraining->l5->setEnabled(false);
+ m_pageTraining->l6->setEnabled(false);
+ m_pageTraining->l7->setEnabled(false);
+ m_pageTraining->l8->setEnabled(false);
+ m_pageTraining->l9->setEnabled(false);
+ m_pageTraining->l10->setEnabled(false);
+ m_pageTraining->kcfg_UpSpeedLimit->setEnabled(false);
+ m_pageTraining->kcfg_UpCorrectLimit->setEnabled(false);
+ m_pageTraining->kcfg_DownSpeedLimit->setEnabled(false);
+ m_pageTraining->kcfg_DownCorrectLimit->setEnabled(false);
+ m_pageTraining->kcfg_DisableManualLevelChange->setEnabled(false);
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::configCommonColorsToggled(bool on) {
+ m_pageColors->colorsGroup->setEnabled(on);
+}
+// ----------------------------------------------------------------------------
+
+// The action File->Open lecture...
+void KTouch::fileOpenLecture() {
+ trainingPause();
+ KURL tmp = KFileDialog::getOpenURL(QString::null, QString::null, this, i18n("Select Training Lecture File") );
+ if (!tmp.isEmpty()) {
+ // first store training statistics
+ m_trainer->storeTrainingStatistics();
+ Prefs::setCurrentLectureFile(tmp.url());
+ m_lecture.loadXML(this, Prefs::currentLectureFile() );
+ updateFontFromLecture();
+ // adjust check marks in quick-select menus
+ updateLectureActionCheck();
+ }
+ // restart training session from level 1 here...
+ m_trainer->startTraining(false);
+ m_trainingPause->setEnabled(true);
+}
+// ----------------------------------------------------------------------------
+
+// The action File->Edit lecture...
+void KTouch::fileEditLecture() {
+ trainingPause();
+ m_trainer->storeTrainingStatistics();
+ // Create and execute editor
+ KTouchLectureEditor dlg(this);
+ dlg.startEditor( Prefs::currentLectureFile() );
+ // Reload lecture in case it was modified
+ m_lecture.loadXML(this, Prefs::currentLectureFile() );
+ updateFontFromLecture();
+ // adjust check marks in quick-select menus
+ updateLectureActionCheck();
+ // restart training session here (keep level)...
+ m_trainer->startTraining(true);
+ m_trainingPause->setEnabled(true);
+}
+// ----------------------------------------------------------------------------
+
+// The action File->Edit colors...
+void KTouch::fileEditColors() {
+ trainingPause();
+ // Create a copy of the currently editable color schemes.
+ QValueList<KTouchColorScheme> tmp_list;
+ int default_schemes = 0;
+ for (QValueVector<KTouchColorScheme>::const_iterator it = KTouchColorScheme::m_colorSchemes.constBegin();
+ it != KTouchColorScheme::m_colorSchemes.constEnd(); ++it)
+ {
+ if (!it->m_default) tmp_list.append(*it);
+ else ++default_schemes;
+ }
+
+ KTouchColorEditor dlg(this); // Create editor
+ // start editor
+ int selected;
+ dlg.startEditor( tmp_list, Prefs::currentColorScheme() - default_schemes, selected);
+ KTouchColorScheme::createDefaults();
+ for (QValueList<KTouchColorScheme>::const_iterator it = tmp_list.constBegin();
+ it != tmp_list.constEnd(); ++it)
+ {
+ KTouchColorScheme::m_colorSchemes.append(*it);
+ }
+ // update the quick select menu
+ QStringList schemes_list;
+ for (unsigned int i=0; i<KTouchColorScheme::m_colorSchemes.count(); ++i)
+ schemes_list.append(KTouchColorScheme::m_colorSchemes[i].m_name);
+ m_keyboardColorAction->setItems(schemes_list);
+ int index = selected + default_schemes;
+ if (index >=0 && index < static_cast<int>(KTouchColorScheme::m_colorSchemes.count())) {
+ Prefs::setCurrentColorScheme(index);
+ }
+ else {
+ Prefs::setCurrentColorScheme(1); // fall back on default in case active was deleted
+ }
+ m_keyboardColorAction->setCurrentItem(Prefs::currentColorScheme());
+ applyPreferences();
+}
+// ----------------------------------------------------------------------------
+
+// The action File->Edit keyboard...
+void KTouch::fileEditKeyboard() {
+ trainingPause();
+ // Create and execute editor
+// KTouchKeyboardEditor dlg(this);
+// dlg.startEditor( Prefs::currentKeyboardFile() );
+ // Reload lecture in case it was modified
+ //m_keyboard.loadXML(this, Prefs::currentKeyboardFile() );
+ //updateFontFromLecture();
+ // adjust check marks in quick-select menus
+ //updateKeyboardActionCheck();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::fileQuit() {
+ kapp->quit();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::trainingNewSession() {
+ trainingPause();
+ int result = KMessageBox::questionYesNoCancel(this,
+ i18n("Would you like to keep the current level for the new training session?"),
+ i18n("Start New Training Session"),i18n("Keep Current Level"),i18n("Do Not Keep"));
+ if (result == KMessageBox::Cancel) return;
+ // store the statistics obtained so far in the trainer object
+ m_trainer->storeTrainingStatistics();
+ // start new training session here
+ m_trainer->startTraining(result == KMessageBox::Yes);
+ m_trainingPause->setEnabled(true);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::trainingPause() {
+ m_trainingPause->setEnabled(false);
+ m_trainer->pauseTraining();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::trainingStatistics() {
+ trainingPause();
+ KTouchStatistics dlg(this);
+ // TODO : this is somewhat messy: we have to get the words in the
+ // current line (since they are not stored in the current
+ // level and session stats, because the student may delete
+ // the whole line again) and add them manually to copies
+ // of the currents stats
+ KTouchSessionStats kss = m_trainer->m_sessionStats;
+ KTouchLevelStats kls = m_trainer->m_levelStats;
+ kss.m_words += m_trainer->wordsInCurrentLine();
+ kls.m_words += m_trainer->wordsInCurrentLine();
+ // by calling getCurrentLectureStats we ensure that there is
+ // data for the current lecture present for the dialog to function
+ // properly
+ getCurrentLectureStats();
+ dlg.run(Prefs::currentLectureFile(), m_stats, kls, kss);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::optionsPreferences() {
+ trainingPause();
+ if ( KConfigDialog::showDialog( "settings" ) ) return;
+ // KConfigDialog didn't find an instance of this dialog, so lets create it :
+ KConfigDialog* dialog = new KConfigDialog( this, "settings", Prefs::self() );
+ m_pageGeneral = new KTouchPrefGeneralLayout(0, "General");
+ dialog->addPage(m_pageGeneral, i18n("General Options"), "style");
+ m_pageTraining = new KTouchPrefTrainingLayout(0, "Training");
+ dialog->addPage(m_pageTraining, i18n("Training Options"), "kalarm");
+ m_pageKeyboard = new KTouchPrefKeyboardLayout(0, "Keyboard");
+ dialog->addPage(m_pageKeyboard, i18n("Keyboard Settings"), "keyboard_layout");
+ m_pageColors = new KTouchPrefColorsLayout(0, "Colors");
+ dialog->addPage(m_pageColors, i18n("Color Settings"), "package_graphics");
+ connect(dialog, SIGNAL(settingsChanged()), this, SLOT(applyPreferences()));
+ // TODO : Connect some other buttons/check boxes of the dialog
+ connect(m_pageGeneral->kcfg_OverrideLectureFont, SIGNAL(toggled(bool)),
+ this, SLOT(configOverrideLectureFontToggled(bool)));
+ connect(m_pageKeyboard->kcfg_OverrideKeyboardFont, SIGNAL(toggled(bool)),
+ this, SLOT(configOverrideKeyboardFontToggled(bool)));
+ connect(m_pageTraining->kcfg_AutoLevelChange, SIGNAL(toggled(bool)),
+ this, SLOT(configAutoLevelChangeToggled(bool)));
+ connect(m_pageColors->kcfg_CommonTypingLineColors, SIGNAL(toggled(bool)),
+ this, SLOT(configCommonColorsToggled(bool)));
+ // call the functions to enable/disable controls depending on settings
+ configOverrideLectureFontToggled(Prefs::overrideLectureFont());
+ configOverrideKeyboardFontToggled(Prefs::overrideKeyboardFont());
+ configAutoLevelChangeToggled(Prefs::autoLevelChange());
+ configCommonColorsToggled(Prefs::commonTypingLineColors());
+ dialog->show();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::changeStatusbarMessage(const QString& text) {
+ statusBar()->message(text);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::changeStatusbarStats(unsigned int level_correct, unsigned int level_total, unsigned int level_words,
+ unsigned int session_correct, unsigned int session_total, unsigned int session_words)
+{
+ statusBar()->changeItem(i18n( "Level: Correct/Total chars: %1/%2 Words: %3")
+ .arg(level_correct).arg(level_total).arg(level_words), 1);
+ statusBar()->changeItem(i18n( "Session: Correct/Total chars: %1/%2 Words: %3")
+ .arg(session_correct).arg(session_total).arg(session_words), 2);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::changeKeyboard(int num) {
+ if (static_cast<unsigned int>(num)>=m_keyboardFiles.count()) return;
+ Prefs::setCurrentKeyboardFile( m_keyboardFiles[num] );
+// kdDebug() << "[KTouch::changeKeyboard] new keyboard layout = " << Prefs::currentKeyboardFile() << endl;
+ m_keyboardLayoutAction->setCurrentItem(num);
+ // call Apply-Preferenzes in "noisy"-mode, pop up an error if the chosen layout file is corrupt
+ m_keyboardWidget->applyPreferences(this, false);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::changeColor(int num) {
+ if (static_cast<unsigned int>(num)>=KTouchColorScheme::m_colorSchemes.count()) return;
+ Prefs::setCurrentColorScheme(num);
+ m_keyboardWidget->applyPreferences(this, false);
+ m_slideLineWidget->applyPreferences();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::changeLecture(int num) {
+ if (static_cast<unsigned int>(num)>=m_lectureFiles.count()) return;
+ trainingPause();
+ KTouchLecture l;
+ QString fileName = m_lectureFiles[num];
+ if (!l.loadXML(this, KURL::fromPathOrURL(fileName))) {
+ KMessageBox::sorry(0, i18n("Could not find/open the lecture file '%1'.").arg(fileName) );
+ m_defaultLectureAction->setCurrentItem(-1);
+ }
+ else {
+ // store the statistics obtained so far in the trainer object
+ m_trainer->storeTrainingStatistics();
+ // set new lecture as current
+ Prefs::setCurrentLectureFile( fileName );
+ m_lecture = l;
+ updateFontFromLecture();
+ m_defaultLectureAction->setCurrentItem(num);
+ // now let's start the training in the first level of the training lecture
+ m_trainer->startTraining(false);
+ m_trainingPause->setEnabled(true);
+ }
+}
+// ----------------------------------------------------------------------------
+
+
+// *********************************
+// *** Protected member function ***
+// *********************************
+
+bool KTouch::queryExit() {
+ // store config data
+ Prefs::setCurrentTrainingLevel( m_trainer->m_level );
+ Prefs::writeConfig();
+ // update and save statistics
+ m_trainer->storeTrainingStatistics();
+ KURL stat_file = KGlobal::dirs()->saveLocation("data","ktouch", true) + "statistics.xml";
+ //kdDebug() << "[KTouch::queryExit] Writing statistics to file: '" << stat_file << "'" << endl;
+ m_stats.write(this, stat_file);
+ KURL color_file = KGlobal::dirs()->saveLocation("data","ktouch", true) + "color_schemes.xml";
+ KTouchColorScheme::writeList(this, color_file);
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::resizeEvent(QResizeEvent * event) {
+ changeStatusbarStats(m_trainer->m_levelStats.m_correctChars, m_trainer->m_levelStats.m_totalChars, m_trainer->m_levelStats.m_words,
+ m_trainer->m_sessionStats.m_correctChars, m_trainer->m_sessionStats.m_totalChars, m_trainer->m_sessionStats.m_words);
+ KMainWindow::resizeEvent(event);
+}
+// ----------------------------------------------------------------------------
+
+
+// *******************************
+// *** Private member function ***
+// *******************************
+
+// Will be called when this app is restored due to session management.
+// This function only stored the temperary data of the last session. All permanent
+// settings should be handled by the KTouchConfiguration object.
+void KTouch::readProperties(KConfig *config) {
+ kdDebug() << "[KTouch::readProperties] Reading session data..." << endl;
+ // TODO : Session management rewrite
+ config->setGroup("TrainingState");
+
+/*
+ // The application is about to be restored due to session management.
+ // Let's read all the stuff that was set when the application was terminated (during KDE logout).
+ QString session = config->readEntry("Session");
+ if (!session.isEmpty())
+ m_trainer->m_session = KTouchTrainingSession(session);
+ m_trainer->m_level = config->readNumEntry("Level", 0);
+ m_trainer->m_line = config->readNumEntry("Line", 0);
+ m_currentLectureFile = config->readPathEntry("Lecture");
+ m_trainer->readSessionHistory(); // read session history (excluding currently active session)
+ // update the trainer object
+ m_trainer->m_teacherText = m_lecture.level(m_trainer->m_level).line(m_trainer->m_line);
+ m_trainer->m_studentText = config->readEntry("StudentText");
+ m_trainer->continueTraining();
+ changeStatusbarMessage( i18n("Restarting training session: Waiting for first keypress...") );
+ // update the slide line widget
+ m_slideLineWidget->setNewText(m_trainer->m_teacherText, m_trainer->m_studentText);
+ // update all the other widgets
+ m_trainer->updateWidgets();
+ // Read training state
+ config->setGroup("TrainingState");
+ m_currentLectureURL = config->readPathEntry("LectureURL");
+ m_trainer->m_level = config->readNumEntry("Level", 0);
+*/
+}
+// ----------------------------------------------------------------------------
+
+// Will be called when the app should save its state for session management purposes.
+void KTouch::saveProperties(KConfig *config) {
+ kdDebug() << "[KTouch::saveProperties] Saving session data..." << endl;
+ // We are going down because of session management (most likely because of
+ // KDE logout). Let's save the current status so that we can restore it
+ // next logon.
+
+ // TODO : Session management rewrite
+/*
+ config->setGroup("TrainingState");
+ // first write the current lecture URL and the training position
+ config->writePathEntry("Lecture", m_currentLectureURL.url());
+ config->writeEntry("Level", m_trainer->m_level);
+ config->writeEntry("Line", m_trainer->m_line);
+ config->writeEntry("StudentText", m_trainer->m_studentText);
+ config->writeEntry("Session", m_trainer->m_session.asString() );
+ // store the session history so far
+ m_trainer->writeSessionHistory();
+
+ config->setGroup("TrainingState");
+ config->writePathEntry("LectureURL", m_currentLectureURL.url());
+ config->writeEntry("Level", m_trainer->m_level);
+ // during normal shutdown we finish the session and add it to the session history
+ m_trainer->m_sessionHistory.append( m_trainer->m_session );
+ m_trainer->writeSessionHistory();
+*/
+}
+// ----------------------------------------------------------------------------
+
+// Initialises the program during a normal startup
+void KTouch::init() {
+ //kdDebug() << "[KTouch::init] populating file lists..." << endl;
+ updateFileLists(); // create lists with default lecture/keyboard/examination files/colour scheme files
+ //kdDebug() << "[KTouch::init] " << m_lectureFiles.count() << " lectures available" << endl;
+ //kdDebug() << "[KTouch::init] " << m_keyboardFiles.count() << " keyboard layouts available" << endl;
+ //kdDebug() << "[KTouch::init] " << m_examinationFiles.count() << " examination files available" << endl;
+
+ if (Prefs::currentLectureFile() == "default") {
+ Prefs::setCurrentLectureFile(QString::null);
+// /// \todo look up a lecture in the language of the KDE locale
+/* QString default_lecture = "default";
+ if (m_lectureFiles.count() > 0) default_lecture = m_lectureFiles[0];
+ Prefs::setCurrentLectureFile( default_lecture );
+*/
+ }
+
+ // if keyboard layout (loaded by Prefs is not available (e.g. the
+ // layout file has been deleted) switch to default keyboard
+ if (m_keyboardFiles.contains(Prefs::currentKeyboardFile() )==0) {
+ QString default_keyboard;
+ // determine locale
+ QString lang = KGlobal::locale()->language();
+ QString fname = lang + ".keyboard";
+ // try to find keyboard with current locale
+ QStringList::const_iterator it = m_keyboardFiles.constBegin();
+ while (it != m_keyboardFiles.constEnd() && (*it).find(fname) == -1) ++it;
+ if (it == m_keyboardFiles.constEnd()) {
+ fname = lang.left(2) + ".keyboard";
+ // try to find more general version
+ it = m_keyboardFiles.constBegin();
+ while (it != m_keyboardFiles.constEnd() && (*it).find(fname) == -1) ++it;
+ }
+
+ if (it != m_keyboardFiles.constEnd())
+ default_keyboard = *it;
+ else
+ default_keyboard = "number.keyboard";
+ Prefs::setCurrentKeyboardFile ( default_keyboard );
+ }
+
+ // create some default colour schemes
+ KTouchColorScheme::createDefaults();
+ // read additional color schemes
+ KURL color_file = KGlobal::dirs()->findResource("data", "ktouch/color_schemes.xml");
+ KTouchColorScheme::readList(this, color_file);
+}
+// ----------------------------------------------------------------------------
+
+// Creates the layout and GUI setup for a practice session
+void KTouch::initTrainingSession() {
+ //kdDebug() << "[KTouch::initTrainingSession] setting up layouts and widgets for new training session..." << endl;
+ // Build the training area. The status widget has a fixed vertical size, the slide line and the
+ // keyboard grow according to their vertical stretch factors (see last argument in the constructors
+ // of QSizePolicy)
+ QVBox * mainLayout = new QVBox( this );
+ m_statusWidget = new KTouchStatus( mainLayout );
+ m_slideLineWidget = new KTouchSlideLine( mainLayout );
+ m_slideLineWidget->setSizePolicy( QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding, 0, 1) );
+ m_keyboardWidget = new KTouchKeyboardWidget( mainLayout );
+ m_keyboardWidget->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding, 0, 3) );
+ setCentralWidget(mainLayout);
+ // apply the settings to the widgets
+ m_slideLineWidget->applyPreferences();
+ m_keyboardWidget->applyPreferences(this, true); // set preferences silently here
+
+ // create our trainer, the master object for the training stuff...
+ if (m_trainer != NULL) delete m_trainer;
+ m_trainer = new KTouchTrainer(m_statusWidget, m_slideLineWidget, m_keyboardWidget, &m_lecture);
+
+ // Setup status bar
+ statusBar()->show();
+ statusBar()->insertItem("Level", 1, 0, true);
+ statusBar()->insertItem("Session", 2, 0, true);
+}
+// ----------------------------------------------------------------------------
+
+// Creates the (standard) actions and entries in the menu.
+void KTouch::setupActions() {
+ // *** File menu ***
+ new KAction(i18n("&Open lecture..."), "open_lecture", 0,
+ this, SLOT(fileOpenLecture()), actionCollection(), "file_openlecture");
+ new KAction(i18n("&Edit lecture..."), "edit_lecture", 0,
+ this, SLOT(fileEditLecture()), actionCollection(), "file_editlecture");
+ new KAction(i18n("&Edit color scheme..."), "edit_colors", 0,
+ this, SLOT(fileEditColors()), actionCollection(), "file_editcolors");
+// new KAction(i18n("&Edit Keyboard..."), "edit_keyboard", 0,
+// this, SLOT(fileEditKeyboard()), actionCollection(), "file_editkeyboard");
+ KStdAction::quit(this, SLOT(fileQuit()), actionCollection());
+
+ // *** Training menu ***
+ new KAction(i18n("&Start New Session"), "launch", 0,
+ this, SLOT(trainingNewSession()), actionCollection(), "training_newsession");
+ m_trainingPause = new KAction(i18n("&Pause Session"), "player_pause", 0,
+ this, SLOT(trainingPause()), actionCollection(), "training_pause");
+ new KAction(i18n("&Lecture Statistics"), "kalarm", 0,
+ this, SLOT(trainingStatistics()), actionCollection(), "training_stats");
+
+ // Setup menu entries for the training lectures
+ m_defaultLectureAction = new KSelectAction(i18n("Default &Lectures"), 0, this, 0, actionCollection(), "default_lectures");
+ m_defaultLectureAction->setMenuAccelsEnabled(false);
+ m_defaultLectureAction->setItems(m_lectureTitles);
+ m_defaultLectureAction->setCurrentItem(0);
+ connect (m_defaultLectureAction, SIGNAL(activated(int)), this, SLOT(changeLecture(int)));
+
+ // *** Settings menu ***
+ KStdAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
+ // Setup menu entries for keyboard layouts
+ m_keyboardLayoutAction= new KSelectAction(i18n("&Keyboard Layouts"), 0, this, 0, actionCollection(), "keyboard_layouts");
+ m_keyboardLayoutAction->setMenuAccelsEnabled(false);
+ m_keyboardLayoutAction->setItems(m_keyboardTitles);
+ connect (m_keyboardLayoutAction, SIGNAL(activated(int)), this, SLOT(changeKeyboard(int)));
+
+ // Setup menu entries for colour schemes
+ m_keyboardColorAction = new KSelectAction(i18n("&Color Schemes"), 0, this, 0, actionCollection(), "keyboard_schemes");
+ QStringList schemes_list;
+ for (unsigned int i=0; i<KTouchColorScheme::m_colorSchemes.count(); ++i)
+ schemes_list.append(KTouchColorScheme::m_colorSchemes[i].m_name);
+ m_keyboardColorAction->setMenuAccelsEnabled(false);
+ m_keyboardColorAction->setItems(schemes_list);
+ if (static_cast<unsigned int>(Prefs::currentColorScheme()) >= schemes_list.count())
+ Prefs::setCurrentColorScheme(1);
+ m_keyboardColorAction->setCurrentItem(Prefs::currentColorScheme());
+ connect (m_keyboardColorAction, SIGNAL(activated(int)), this, SLOT(changeColor(int)));
+}
+// ----------------------------------------------------------------------------
+
+// This function updates the font used in the sliding line of a font suggestions was
+// made for the current lecture.
+void KTouch::updateFontFromLecture() {
+ // if the lecture requires a font, try this
+ if (!m_lecture.m_fontSuggestions.isEmpty()) {
+ QFont f;
+ // TODO : if multiple font suggestions are given, try one after another until a
+ // suggested font is found
+ if (f.fromString(m_lecture.m_fontSuggestions)) m_slideLineWidget->setFont(f);
+ else if (f.fromString("Monospace")) m_slideLineWidget->setFont(f);
+ }
+}
+// ----------------------------------------------------------------------------
+
+// This function populates the file lists with the installed training, keyboard and
+// examination files.
+void KTouch::updateFileLists() {
+ KStandardDirs *dirs = KGlobal::dirs();
+
+ // first search for all installed keyboard files
+ // TODO : search in i18n() directories
+ m_keyboardFiles = dirs->findAllResources("data","ktouch/*.keyboard");
+
+ // remove the number layout, since this is the necessary default layout and will be
+ // added anyway
+ QStringList::iterator it = m_keyboardFiles.find("number.keyboard");
+ if (it!=m_keyboardFiles.end()) m_keyboardFiles.remove(it);
+
+ m_keyboardTitles.clear();
+ for (QStringList::const_iterator cit = m_keyboardFiles.constBegin();
+ cit != m_keyboardFiles.constEnd(); ++cit)
+ {
+ // extract titles from keyboard files and store them in the
+ // m_keyboardTitles string list
+
+ // get the filename alone
+ QString fname = KURL(*cit).fileName();
+ // get the filename without the .keyboard
+ fname.truncate(fname.length() - 9);
+ // get everything in front of the first .
+ QString lang_iso = fname.section('.',0,0);
+ // get language description of file names
+ QString lang_name = KGlobal::locale()->twoAlphaToLanguageName(lang_iso);
+// kdDebug() << fname << " | " << lang_iso << " | " << lang_name << endl;
+ if (lang_name.isEmpty())
+ lang_name = KGlobal::locale()->twoAlphaToCountryName(lang_iso);
+ if (!lang_name.isEmpty())
+ lang_name += " (" + fname + ")";
+ else
+ lang_name = fname;
+ m_keyboardTitles.append( lang_name );
+// kdDebug() << m_keyboardTitles.back() << endl;
+ }
+
+ // now sort the files and titles accordingly
+ sort_lists(m_keyboardTitles, m_keyboardFiles);
+ // and add the number keypad to the front
+ m_keyboardFiles.push_front("number.keyboard");
+ m_keyboardTitles.push_front(i18n("Keypad/Number block"));
+
+ // Now lets find the lecture files.
+ // TODO : search in i18n() directories
+ QStringList lectureFiles = dirs->findAllResources("data","ktouch/*.ktouch.xml");
+ // Now extract the titles of the lecture files and populate the string lists used in the program
+ m_lectureFiles.clear();
+ m_lectureTitles.clear();
+ if (!lectureFiles.isEmpty()) {
+ // extract the prefixes
+ for (QStringList::iterator it=lectureFiles.begin(); it!=lectureFiles.end(); ++it) {
+ KURL url(*it);
+ KTouchLecture l;
+ // only add lecture if we can actually load it
+ if (l.loadXML(this, url)) {
+ // since we could read the lecture, we remember the URL
+ m_lectureFiles.push_back(*it);
+ // store the title of the lecture
+ if (l.m_title.isEmpty())
+ m_lectureTitles.push_back(i18n("untitled lecture") + " - (" + url.fileName() + ")");
+ else
+ m_lectureTitles.push_back(l.m_title);
+ }
+ }
+ sort_lists(m_lectureTitles, m_lectureFiles);
+ }
+
+ // Now find predefined files with colour schemes
+ QStringList colour_schemes = dirs->findAllResources("data","ktouch/*.colour_scheme");
+ // TODO : read in colour schemes and populate QValueList<KTouchColorScheme>
+}
+// ----------------------------------------------------------------------------
+
+
+void KTouch::updateLectureActionCheck() {
+ int num = 0;
+ QStringList::iterator it = m_lectureFiles.begin();
+ QString fname = Prefs::currentLectureFile();
+ while (it != m_lectureFiles.end() && (*it).find(fname) == -1) {
+ ++it;
+ ++num;
+ }
+ if (it == m_lectureFiles.end()) m_defaultLectureAction->setCurrentItem(-1);
+ else m_defaultLectureAction->setCurrentItem(num);
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::updateKeyboardActionCheck() {
+ int num = 0;
+ QStringList::iterator it = m_keyboardFiles.begin();
+ QString fname = Prefs::currentKeyboardFile();
+ while (it != m_keyboardFiles.end() && (*it).find(fname) == -1) {
+ ++it;
+ ++num;
+ }
+ if (it == m_keyboardFiles.end()) m_keyboardLayoutAction->setCurrentItem(-1);
+ else m_keyboardLayoutAction->setCurrentItem(num);
+}
+// ----------------------------------------------------------------------------
+
+/*
+void KTouch::imStartEvent(QIMEvent *e) {
+ kdDebug() << "[KTouch::imStartEvent] text = '" << e->text() << "'" << endl;
+ e->accept();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::imComposeEvent(QIMEvent *e) {
+ kdDebug() << "[KTouch::imComposeEvent] text = '" << e->text() << "'" << endl;
+ e->accept();
+}
+// ----------------------------------------------------------------------------
+
+void KTouch::imEndEvent(QIMEvent *e) {
+ kdDebug() << "[KTouch::imEndEvent] text = '" << e->text() << "'" << endl;
+ if (!e->text().isEmpty()) {
+ if (e->text() == "^") {
+ QKeyEvent *ev = new QKeyEvent (QEvent::KeyPress,
+ Qt::Key_AsciiCircum, '^', 0,
+ QString("^"));
+ keyPressEvent(ev);
+ delete ev;
+ }
+ }
+ e->accept();
+}
+// ----------------------------------------------------------------------------
+*/
diff --git a/ktouch/src/ktouch.h b/ktouch/src/ktouch.h
new file mode 100644
index 00000000..9ebdcfc8
--- /dev/null
+++ b/ktouch/src/ktouch.h
@@ -0,0 +1,184 @@
+/***************************************************************************
+ * ktouch.h *
+ * -------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCH_H
+#define KTOUCH_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qcolor.h>
+#include <qstringlist.h>
+#include <qvaluevector.h>
+
+#include <kmainwindow.h>
+#include <kapplication.h>
+#include <kurl.h>
+
+class QLabel;
+class KToggleAction;
+class KActionMenu;
+class KSelectAction;
+
+class KTouchStatus;
+class KTouchSlideLine;
+class KTouchKeyboardWidget;
+class KTouchTrainer;
+
+class KTouchPrefTrainingLayout;
+class KTouchPrefKeyboardLayout;
+class KTouchPrefGeneralLayout;
+class KTouchPrefColorsLayout;
+
+#include "ktouchlecture.h"
+#include "ktouchstatisticsdata.h"
+
+/// This is the main window of KTouch.
+///
+/// It handles the lecture, training data, status and all other widgets that are
+/// needed to get the program running. Since all special tasks are delegated to the
+/// appropriate widgets and classes, the remaining code in KTouch is basically the
+/// startup and KAction stuff.<p>
+/// A word about dialogs. All dialogs in this program are not created by default.
+/// Instead they are created "on first use". This
+/// saves memory (because we don't need them always) and the startup speed increases.<p>
+/// One central function - the keyPressEvent() - is responsable for getting the actual
+/// typed char. It delegates the character to the trainer
+/// (KTouchTrainer), which will then process it. So the heavy work lies in the trainer
+/// object and all the widgets.
+class KTouch : public KMainWindow {
+ Q_OBJECT
+ public:
+ /// Constructor, creates the KTouch proggy.
+ KTouch();
+ /// Destructor, releases memory of KTouch trainer.
+ ~KTouch();
+
+ /// Returns the available lecture files
+ const QStringList& lectureFiles() const { return m_lectureFiles; }
+ /// Returns the statistics object for the current lecture (as reference)
+ KTouchLectureStats& getCurrentLectureStats();
+ /// Clears the statistics data.
+ void clearStatistics();
+ /// Updates the status bar text.
+ void changeStatusbarMessage(const QString& text);
+ /// Updates the status bar statistics.
+ void changeStatusbarStats(unsigned int level_correct, unsigned int level_total, unsigned int level_words,
+ unsigned int session_correct, unsigned int session_total, unsigned int session_words);
+
+ public slots:
+ /// Will be called when the "Apply"-button has been pressed in the preferences
+ /// dialog or when the user accepted the changes using the "OK"-button.
+ void applyPreferences();
+
+ /// Called from the configuration dialog.
+ void configOverrideLectureFontToggled(bool on);
+ /// Called from the configuration dialog.
+ void configOverrideKeyboardFontToggled(bool on);
+ /// Called from the configuration dialog.
+ void configAutoLevelChangeToggled(bool on);
+ /// Called from the configuration dialog.
+ void configCommonColorsToggled(bool on);
+
+ void fileOpenLecture(); ///< The action File->Open lecture...
+ void fileEditLecture(); ///< The action File->Edit lecture...
+ void fileEditColors(); ///< The action File->Edit colors...
+ void fileEditKeyboard(); ///< The action File->Edit keyboard...
+ void fileQuit(); ///< The action File->Quit
+ void trainingNewSession(); ///< The action Training->Start new training session...
+ void trainingPause(); ///< The action Training->Pause training
+ void trainingStatistics(); ///< The action Training->Show training statistics...
+ void optionsPreferences(); ///< The action Settings->Configure KTouch...
+
+ /// Quick-changes the keyboard layout (called from menu).
+ void changeKeyboard(int num);
+ /// Quick-changes the colour scheme used on the keyboard (called from menu).
+ void changeColor(int num);
+ /// Quick-changes the current training lecture file (called from menu).
+ void changeLecture(int num);
+
+ protected:
+ /// Reimplementated to save preferences and
+ bool queryExit();
+ /// Some layout fixes here...
+ void resizeEvent(QResizeEvent *);
+ /// Accepts a typed char.
+ void keyPressEvent(QKeyEvent *keyEvent);
+
+ void imEndEvent (QIMEvent *e);
+
+ private:
+ // *** BEGIN - Session management ***
+ /// Will be called when this app is restored due to session management.
+ void readProperties(KConfig *config);
+ /// Will be called when the app should save its state for session management purposes.
+ void saveProperties(KConfig *config);
+ // *** END - Session management ***
+
+ /// Initialises the program during a normal startup
+ void init();
+ /// Creates the layout and GUI setup for a practice session
+ void initTrainingSession();
+ /// Creates the (standard) actions and entries in the menu.
+ void setupActions();
+ /// This function updates the font used in the sliding line of a font suggestions was
+ /// made for the current lecture.
+ /// Call this function whenever you have read a new lecture file to update
+ /// the slide line widget.
+ void updateFontFromLecture();
+ /// This function populates the file lists with the installed training, keyboard and
+ /// examination files.
+ void updateFileLists();
+ /// Updates the check mark in the lecture-quick-selection menu depending on the
+ /// lecture in Prefs::currentLectureFile().
+ void updateLectureActionCheck();
+ /// Updates the check mark in the keyboard-quick-selection menu depending on the
+ /// lecture in Prefs::currentKeyboardFile().
+ void updateKeyboardActionCheck();
+
+ // *** Public member variables ***
+ KAction *m_trainingPause; ///< Action for "pause training session".
+
+ KSelectAction *m_keyboardLayoutAction;
+ KSelectAction *m_keyboardColorAction;
+ KSelectAction *m_defaultLectureAction;
+
+ KTouchStatus *m_statusWidget; ///< Pointer to the status widget on top of the main widget.
+ KTouchSlideLine *m_slideLineWidget; ///< Pointer to the sliding line widget.
+ KTouchKeyboardWidget *m_keyboardWidget; ///< Pointer to the keyboard widget.
+ KTouchTrainer *m_trainer; ///< The training 'master' (runs the training).
+ KTouchLecture m_lecture; ///< The lecture data.
+
+ KTouchPrefGeneralLayout * m_pageGeneral; ///< The general configuration page.
+ KTouchPrefTrainingLayout * m_pageTraining; ///< The training configuration page.
+ KTouchPrefKeyboardLayout * m_pageKeyboard; ///< The keyboard configuration page.
+ KTouchPrefColorsLayout * m_pageColors; ///< The color scheme configuration page.
+
+ QStringList m_lectureFiles; ///< A list of all default lecture files.
+ QStringList m_lectureTitles; ///< A list of the titles of all default lecture files.
+
+ QStringList m_examinationFiles; ///< A list of all default examination files.
+ QStringList m_examinationTitles; ///< A list of the titles of all default examination files.
+
+ QStringList m_keyboardFiles; ///< A list of all default keyboard layout files.
+ QStringList m_keyboardTitles; ///< A list of the titles of all default keyboard layout files.
+
+ KTouchStatisticsData m_stats; ///< All user statistics are kept here.
+
+ QChar m_lastDeadKey; ///< Temporary storage of last dead key.
+};
+
+/// A global pointer to the main widget (actually only used to retrieve some data).
+extern KTouch * KTouchPtr;
+
+#endif // KTOUCH_H
diff --git a/ktouch/src/ktouch.kcfg b/ktouch/src/ktouch.kcfg
new file mode 100644
index 00000000..bf465639
--- /dev/null
+++ b/ktouch/src/ktouch.kcfg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="ktouchrc"/>
+ <group name="Colors" >
+ <entry type="Int" name="CurrentColorScheme" >
+ <label >The number of the current color scheme.</label>
+ <default >1</default>
+ </entry>
+ <entry type="Bool" name="CommonTypingLineColors" >
+ <label >Use the same typing line colors independent of color scheme.</label>
+ <default code="true" >false</default>
+ </entry>
+ <entry type="Color" name="TeacherBackgroundColor" >
+ <label >The background color for the teacher's line.</label>
+ <default >#bebeff</default>
+ </entry>
+ <entry type="Color" name="TeacherTextColor" >
+ <label >The text color for the teacher's line</label>
+ <default >#000032</default>
+ </entry>
+ <entry type="Color" name="StudentBackgroundColor" >
+ <label >The background color for the student's line.</label>
+ <default >#aoffao</default>
+ </entry>
+ <entry type="Color" name="StudentTextColor" >
+ <label >The text color for the student's line</label>
+ <default >#003200</default>
+ </entry>
+ <entry type="Bool" name="ColorOnError" >
+ <label >Whether to use a different background for wrong text or not.</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Color" name="ErrorBackgroundColor" >
+ <label >The background color for wrong text (students line).</label>
+ <default >#ac0000</default>
+ </entry>
+ <entry type="Color" name="ErrorTextColor" >
+ <label >The text color for wrong text (students line).</label>
+ <default >#ffffff</default>
+ </entry>
+ </group>
+ <group name="General" >
+ <entry type="Bool" name="BeepOnError" >
+ <label >Emit a beep on each typing error</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Bool" name="SoundOnLevel" >
+ <label >Play a sound on automatic level change</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Int" name="SlidingSpeed" >
+ <label >The sliding speed</label>
+ <default code="true" >5</default>
+ </entry>
+ <entry type="Int" name="MaxSlidingWidgetHeight" >
+ <label >The maximum height of the sliding widget</label>
+ <default code="true" >200</default>
+ </entry>
+ <entry type="Bool" name="OverrideLectureFont" >
+ <label >Override the default/predefined lecture fonts.</label>
+ <default code="true" >false</default>
+ </entry>
+ <entry type="Font" name="Font" >
+ <label >The font for the student and teacher lines</label>
+ <default code="true">QFont(&quot;Monospace&quot;)</default>
+ </entry>
+ <entry type="Path" name="CurrentLectureFile" >
+ <label >The currently loaded lecture file</label>
+ <default code="true">&quot;default&quot;</default>
+ </entry>
+ <entry type="Bool" name="Right2LeftTyping" >
+ <label >Whether we use right-to-left typing.</label>
+ <default code="true">false</default>
+ </entry>
+ </group>
+ <group name="Keyboard" >
+ <entry type="Bool" name="ShowAnimation" >
+ <label >Whether to use colors on the keys or not.</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Bool" name="HideKeyboard" >
+ <label >Whether to hide the keyboard display.</label>
+ <default code="true" >false</default>
+ </entry>
+ <entry type="Bool" name="OverrideKeyboardFont" >
+ <label >Whether to override the default/predefined keyboard fonts.</label>
+ <default code="true" >false</default>
+ </entry>
+ <entry type="Font" name="KeyboardFont" >
+ <label >The font for the keys on the keyboard</label>
+ <default >KGlobalSettings::generalFont()</default>
+ </entry>
+ <entry type="Path" name="CurrentKeyboardFile" >
+ <label >The currently loaded keyboard file</label>
+ <default >&quot;number.keyboard&quot;</default>
+ </entry>
+ </group>
+ <group name="Training" >
+ <entry type="Bool" name="AutoLevelChange" >
+ <label >Allow automatic level adjustments</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Bool" name="DisableManualLevelChange" >
+ <label >Disable manual level adjustments when auto-level change is enabled</label>
+ <default code="true" >false</default>
+ </entry>
+ <entry type="Bool" name="RememberLevel" >
+ <label >Remember the current level for the next KTouch start</label>
+ <default code="true" >true</default>
+ </entry>
+ <entry type="Int" name="CurrentTrainingLevel" >
+ <label >The current training level</label>
+ <default >0</default>
+ </entry>
+ <entry type="Int" name="UpSpeedLimit" >
+ <label >Number of chars per minute to increase a level</label>
+ <default >120</default>
+ </entry>
+ <entry type="Int" name="UpCorrectLimit" >
+ <label >Percentage of correctness to increase a level</label>
+ <default >85</default>
+ </entry>
+ <entry type="Int" name="DownSpeedLimit" >
+ <label >Number of chars per minute to decrease a level</label>
+ <default >60</default>
+ </entry>
+ <entry type="Int" name="DownCorrectLimit" >
+ <label >Percentage of correctness to decrease a level</label>
+ <default >60</default>
+ </entry>
+ </group>
+</kcfg>
diff --git a/ktouch/src/ktouchchartwidget.cpp b/ktouch/src/ktouchchartwidget.cpp
new file mode 100644
index 00000000..aba87f28
--- /dev/null
+++ b/ktouch/src/ktouchchartwidget.cpp
@@ -0,0 +1,36 @@
+/***************************************************************************
+ * ktouchchartwidget.cpp *
+ * --------------------- *
+ * Copyright (C) 2005 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchchartwidget.h"
+#include "ktouchchartwidget.moc"
+
+#include <qpainter.h>
+
+#include <klocale.h>
+
+#include <numeric> // for mathematical functions
+#include <cmath>
+
+KTouchChartWidget::KTouchChartWidget(QWidget* parent, const char *name)
+ : KPlotWidget(0.0, 1.0, 0.0, 1.0, parent, name)
+{
+ setShowGrid( false ); // no grid please
+ setBGColor( QColor( "white" ) );
+ setFGColor( QColor( "black" ) );
+ setLimits( 0.0, 120.0, 0.0, 240.0 );
+ setXAxisLabel( i18n( "Progress" ) );
+ setYAxisLabel( i18n( "Words per second" ) );
+}
+
+KTouchChartWidget::~KTouchChartWidget()
+{
+}
diff --git a/ktouch/src/ktouchchartwidget.h b/ktouch/src/ktouchchartwidget.h
new file mode 100644
index 00000000..223705b0
--- /dev/null
+++ b/ktouch/src/ktouchchartwidget.h
@@ -0,0 +1,34 @@
+/***************************************************************************
+ * ktouchchartwidget.h *
+ * ------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHCHARTWIDGET
+#define KTOUCHCHARTWIDGET
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <libkdeedu/kdeeduplot/kplotwidget.h>
+
+class KTouchTrainer;
+
+/// This is the chart widget and contains all chart drawing code.
+class KTouchChartWidget : public KPlotWidget {
+ Q_OBJECT
+ public:
+ /// Constructor.
+ KTouchChartWidget(QWidget* parent, const char *name=0);
+ /// Destructor.
+ ~KTouchChartWidget();
+};
+
+#endif // KTOUCHCHARTWIDGET
diff --git a/ktouch/src/ktouchcoloreditor.cpp b/ktouch/src/ktouchcoloreditor.cpp
new file mode 100644
index 00000000..1341366d
--- /dev/null
+++ b/ktouch/src/ktouchcoloreditor.cpp
@@ -0,0 +1,211 @@
+/***************************************************************************
+ * ktouchcoloreditor.cpp *
+ * --------------------- *
+ * Copyright (C) 20064 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchcoloreditor.h"
+#include "ktouchcoloreditor.moc"
+
+#include <qlistbox.h>
+#include <qgroupbox.h>
+
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+KTouchColorEditor::KTouchColorEditor(QWidget* parent, const char* name, bool modal, WFlags fl)
+: KTouchColorEditorDlg(parent,name, modal,fl)
+{
+}
+// ----------------------------------------------------------------------------
+
+KTouchColorEditor::~KTouchColorEditor()
+{
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::startEditor(QValueList<KTouchColorScheme>& schemes, int active, int & selected) {
+ m_schemes = schemes;
+ m_currentItem = QMAX(0, active);
+ updateListBox();
+
+ if (active >= 0) m_currentItem = active;
+ else m_currentItem = -1;
+
+ exec();
+
+ if (m_saveChanges) {
+ selected = m_currentItem;
+ schemes = m_schemes;
+ }
+ else {
+ selected = active;
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::colorSchemeChanged(QListBoxItem *) {
+// kdDebug() << "[KTouchColorEditor::colorSchemeChanged]" << endl;
+ int num = schemeListBox->currentItem();
+ if (num < 0 || num >= static_cast<int>(m_schemes.count())) {
+ updateControls(NULL);
+ return;
+ }
+ QValueList<KTouchColorScheme>::const_iterator it = m_schemes.begin();
+ while (--num >= 0) ++it;
+ updateControls(&(*it));
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::updateClicked() {
+ // first check that we have a valid color scheme selected
+ int num = schemeListBox->currentItem();
+ int old_num = num;
+ if (num < 0 || num >= static_cast<int>(m_schemes.count())) {
+ updateListBox();
+ return;
+ }
+ QValueList<KTouchColorScheme>::iterator it = m_schemes.begin();
+ while (--num >= 0) ++it;
+ (*it).m_name = nameEdit->text();
+ if ((*it).m_name.isEmpty())
+ (*it).m_name = i18n("New color scheme");
+ // slide line colors
+ (*it).m_teacherTextColor = teacherTextBtn->color();
+ (*it).m_teacherBackground = teacherBackBtn->color();
+ (*it).m_studentTextColor = studentTextBtn->color();
+ (*it).m_studentBackground = studentBackBtn->color();
+ (*it).m_errorTextColor = studentErrorTextBtn->color();
+ (*it).m_errorBackground = studentErrorBackBtn->color();
+ // keyboard colors
+ (*it).m_frame = keyFrameBtn->color();
+ (*it).m_text = keyTextBtn->color();
+ (*it).m_textH = keyTextHighBtn->color();
+ (*it).m_backgroundH = keyBackHighBtn->color();
+ (*it).m_cText = cTextBtn->color();
+ (*it).m_cBackground = cBackgroundBtn->color();
+ (*it).m_cTextH = cTextHighBtn->color();
+ (*it).m_cBackgroundH = cBackHighBtn->color();
+
+ (*it).m_background[0] = back1Btn->color();
+ (*it).m_background[1] = back2Btn->color();
+ (*it).m_background[2] = back3Btn->color();
+ (*it).m_background[3] = back4Btn->color();
+ (*it).m_background[4] = back5Btn->color();
+ (*it).m_background[5] = back6Btn->color();
+ (*it).m_background[6] = back7Btn->color();
+ (*it).m_background[7] = back8Btn->color();
+
+ updateListBox();
+ schemeListBox->setCurrentItem( QMIN(old_num, static_cast<int>(m_schemes.count())-1) );
+ colorSchemeChanged(NULL);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::removeBtnClicked() {
+ int num = schemeListBox->currentItem();
+ int old_num = num;
+ if (num >=0 && num < static_cast<int>(m_schemes.count())) {
+ QValueList<KTouchColorScheme>::iterator it = m_schemes.begin();
+ while (--num >= 0) ++it;
+ m_schemes.erase(it);
+ }
+ updateListBox();
+ schemeListBox->setCurrentItem( QMIN(old_num, static_cast<int>(m_schemes.count())-1) );
+ colorSchemeChanged(NULL);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::addBtnClicked() {
+ KTouchColorScheme s;
+ s.m_name = i18n("New color scheme");
+ m_schemes.append(s);
+ updateListBox();
+ schemeListBox->setCurrentItem( m_schemes.count() - 1 );
+ colorSchemeChanged(NULL);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::closeEvent( QCloseEvent* ce ) {
+ int result = KMessageBox::questionYesNoCancel(this,
+ i18n("Save modified color schemes?"));
+ switch (result) {
+ case KMessageBox::Cancel : m_saveChanges = false; ce->ignore(); return;
+ case KMessageBox::Yes :
+ m_currentItem = schemeListBox->currentItem();
+ updateClicked();
+ m_saveChanges = true; break;
+ default : m_saveChanges = false; break;
+ }
+ ce->accept();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::updateListBox() {
+// kdDebug() << "[KTouchColorEditor::updateListBox]" << endl;
+ schemeListBox->clear();
+ for (QValueList<KTouchColorScheme>::const_iterator it = m_schemes.constBegin();
+ it != m_schemes.constEnd(); ++it)
+ {
+ schemeListBox->insertItem( (*it).m_name );
+ }
+ if (m_schemes.isEmpty()) {
+ editGroupBox->setEnabled(false);
+ removeBtn->setEnabled(false);
+ }
+ else {
+ editGroupBox->setEnabled(true);
+ removeBtn->setEnabled(true);
+ // select the first one by default
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorEditor::updateControls(const KTouchColorScheme * cs) {
+// kdDebug() << "[KTouchColorEditor::updateControls]" << endl;
+ if (cs==NULL) {
+ // TODO : also set all colors back to defaults
+ editGroupBox->setEnabled(false);
+ return;
+ }
+ editGroupBox->setEnabled(true);
+ nameEdit->setText(cs->m_name);
+ // slide line colors
+ teacherTextBtn->setColor(cs->m_teacherTextColor);
+ teacherBackBtn->setColor(cs->m_teacherBackground);
+ studentTextBtn->setColor(cs->m_studentTextColor);
+ studentBackBtn->setColor(cs->m_studentBackground);
+ studentErrorTextBtn->setColor(cs->m_errorTextColor);
+ studentErrorBackBtn->setColor(cs->m_errorBackground);
+ // keyboard colors
+ keyFrameBtn->setColor(cs->m_frame);
+ keyTextBtn->setColor(cs->m_text);
+ keyTextHighBtn->setColor(cs->m_textH);
+ keyBackHighBtn->setColor(cs->m_backgroundH);
+ cTextBtn->setColor(cs->m_cText);
+ cBackgroundBtn->setColor(cs->m_cBackground);
+ cTextHighBtn->setColor(cs->m_cTextH);
+ cBackHighBtn->setColor(cs->m_cBackgroundH);
+
+ back1Btn->setColor(cs->m_background[0]);
+ back2Btn->setColor(cs->m_background[1]);
+ back3Btn->setColor(cs->m_background[2]);
+ back4Btn->setColor(cs->m_background[3]);
+ back5Btn->setColor(cs->m_background[4]);
+ back6Btn->setColor(cs->m_background[5]);
+ back7Btn->setColor(cs->m_background[6]);
+ back8Btn->setColor(cs->m_background[7]);
+}
+// ----------------------------------------------------------------------------
+
+
diff --git a/ktouch/src/ktouchcoloreditor.h b/ktouch/src/ktouchcoloreditor.h
new file mode 100644
index 00000000..3d5a0e11
--- /dev/null
+++ b/ktouch/src/ktouchcoloreditor.h
@@ -0,0 +1,65 @@
+/***************************************************************************
+ * ktouchcoloreditor.h *
+ * ------------------- *
+ * Copyright (C) 20064 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHCOLOREDITOR_H
+#define KTOUCHCOLOREDITOR_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ktouchcoloreditor_dlg.h"
+
+#include <qvaluelist.h>
+
+#include "ktouchcolorscheme.h"
+
+/// Implementation of the KTouch Color Scheme Editor.
+class KTouchColorEditor : public KTouchColorEditorDlg
+{
+ Q_OBJECT
+
+public:
+ /// Constructor
+ KTouchColorEditor(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ /// Destructor
+ ~KTouchColorEditor();
+
+ /// Use this function to run the dialog.
+ /// @param schemes List with user defined color schemes.
+ /// @param active Index with active color scheme (negative if predefined scheme is active).
+ /// @param selected Here the index of the currently selected scheme is stored.
+ void startEditor(QValueList<KTouchColorScheme>& schemes, int active, int & selected);
+
+public slots:
+ virtual void colorSchemeChanged(QListBoxItem * item);
+ virtual void updateClicked();
+ virtual void removeBtnClicked();
+ virtual void addBtnClicked();
+
+protected:
+ virtual void closeEvent( QCloseEvent* ce );
+
+private:
+ /// Updates the list box with values from m_schemes.
+ void updateListBox();
+ /// Updates the button controls with data from 'cs', unless NULL is passed, in which case
+ /// the controls are disabled (no-color-scheme-selected state).
+ void updateControls(const KTouchColorScheme * cs);
+
+ int m_currentItem;
+ QValueList<KTouchColorScheme> m_schemes;
+ bool m_saveChanges;
+};
+
+#endif // KTOUCHCOLOREDITOR_H
+
diff --git a/ktouch/src/ktouchcoloreditor_dlg.ui b/ktouch/src/ktouchcoloreditor_dlg.ui
new file mode 100644
index 00000000..d6c4a0a7
--- /dev/null
+++ b/ktouch/src/ktouchcoloreditor_dlg.ui
@@ -0,0 +1,824 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchColorEditorDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KTouchColorEditorDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>560</width>
+ <height>597</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Color Scheme Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>User defined color schemes</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>schemeListBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>addBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>removeBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>editGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Edit color scheme:</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>nameL</cstring>
+ </property>
+ <property name="text">
+ <string>Name of color scheme:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>nameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>updateBtn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Store data</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Slide line colors</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>teacherBackBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Teacher background</string>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>teacherTextBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Teacher text</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3_5</cstring>
+ </property>
+ <property name="text">
+ <string>Student text on error</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3_4</cstring>
+ </property>
+ <property name="text">
+ <string>Student background</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>studentBackBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>studentErrorBackBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Student text</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>studentTextBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>studentErrorTextBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel3_6</cstring>
+ </property>
+ <property name="text">
+ <string>Student background on error</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>keyboardColorsGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Keyboard colors</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout24</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer11_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="0" column="3">
+ <property name="name">
+ <cstring>spacer9_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>spacer19</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>layout22</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel3_9</cstring>
+ </property>
+ <property name="text">
+ <string>Highlighted text color</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel3_8</cstring>
+ </property>
+ <property name="text">
+ <string>Text color</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="4" column="1">
+ <property name="name">
+ <cstring>keyTextHighBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3_7</cstring>
+ </property>
+ <property name="text">
+ <string>Key frame</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Normal key colors:</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>keyFrameBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>keyTextBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="5" column="1">
+ <property name="name">
+ <cstring>keyBackHighBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel3_10</cstring>
+ </property>
+ <property name="text">
+ <string>Highlighted background</string>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="2">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3_7_2</cstring>
+ </property>
+ <property name="text">
+ <string>Text color</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>cBackgroundBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel3_9_2</cstring>
+ </property>
+ <property name="text">
+ <string>Highlighted text color</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="4" column="1">
+ <property name="name">
+ <cstring>cBackHighBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel3_10_2</cstring>
+ </property>
+ <property name="text">
+ <string>Highlighted background</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>cTextBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>cTextHighBtn</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Modifier/other keys:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3_8_2</cstring>
+ </property>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_11</cstring>
+ </property>
+ <property name="text">
+ <string>Background colors for normal keys:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout28</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back1Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back2Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back3Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back4Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back5Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back6Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back7Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>back8Btn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>addBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchColorEditorDlg</receiver>
+ <slot>addBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>removeBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchColorEditorDlg</receiver>
+ <slot>removeBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>schemeListBox</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>KTouchColorEditorDlg</receiver>
+ <slot>colorSchemeChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>updateBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchColorEditorDlg</receiver>
+ <slot>updateClicked()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>closeQuery()</slot>
+ <slot>addBtnClicked()</slot>
+ <slot>removeBtnClicked()</slot>
+ <slot>updateClicked()</slot>
+ <slot>colorSchemeChanged(QListBoxItem * item)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchcolorscheme.cpp b/ktouch/src/ktouchcolorscheme.cpp
new file mode 100644
index 00000000..0092fb07
--- /dev/null
+++ b/ktouch/src/ktouchcolorscheme.cpp
@@ -0,0 +1,309 @@
+/***************************************************************************
+ * ktouchcolorscheme.cpp *
+ * --------------------- *
+ * Copyright (C) 2003-2006 by Andreas Nicolai *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchcolorscheme.h"
+
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdom.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+
+#define WRITE_COLOR(z,x,y) e = doc.createElement(x); \
+ n = doc.createTextNode( (y).name() ); \
+ e.appendChild(n); \
+ z.appendChild(e);
+
+#define READ_COLOR(x,y) c = n.namedItem(x); \
+ if (!c.isNull()) y = QColor(c.firstChild().nodeValue());
+
+QValueVector<KTouchColorScheme> KTouchColorScheme::m_colorSchemes;
+
+void KTouchColorScheme::clear() {
+ // the default scheme is the classic one
+ m_teacherTextColor = QColor("#000032");
+ m_teacherBackground = QColor("#BEBEFF");
+ m_studentTextColor = QColor("#003200");
+ m_studentBackground = QColor("#9FFF9F");
+ m_errorTextColor = Qt::white;
+ m_errorBackground = QColor("#AC0000");
+
+ m_frame = Qt::black;
+ m_background[0] = QColor(255,238, 7); m_background[4] = QColor(247,138,247);
+ m_background[1] = QColor( 14,164,239); m_background[5] = QColor(158,255,155);
+ m_background[2] = QColor(158,255,155); m_background[6] = QColor( 14,164,239);
+ m_background[3] = QColor(252,138,138); m_background[7] = QColor(255,238, 7);
+ m_text = Qt::black;
+ m_backgroundH = Qt::darkBlue;
+ m_textH = Qt::white;
+ m_cBackground = Qt::gray;
+ m_cText = Qt::black;
+ m_cBackgroundH = Qt::white;
+ m_cTextH = Qt::black;
+
+ m_default = false;
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchColorScheme::read(const QDomNode& node) {
+// kdDebug() << "[KTouchColorScheme::read] " << endl;
+
+ QDomNode name = node.namedItem("Name");
+ if (name.isNull()) m_name = i18n("untitled color scheme");
+ else m_name = name.firstChild().nodeValue();
+
+// kdDebug() << " Reading scheme = " << m_name << endl;
+
+ QDomNode n = node.namedItem("LineColors");
+ if (!n.isNull()) {
+ QDomNode c;
+ READ_COLOR("TeacherTextColor", m_teacherTextColor);
+ READ_COLOR("TeacherBackground", m_teacherBackground);
+ READ_COLOR("StudentTextColor", m_studentTextColor);
+ READ_COLOR("StudentBackground", m_studentBackground);
+ READ_COLOR("ErrorTextColor", m_errorTextColor);
+ READ_COLOR("ErrorBackground", m_errorBackground);
+ }
+
+ n = node.namedItem("KeyboardColors");
+ if (!n.isNull()) {
+ QDomNode c;
+ READ_COLOR("KeyFrame", m_frame);
+ for (unsigned int i=0; i<8; ++i) {
+ READ_COLOR(QString("KeyBack_%1").arg(i), m_background[i]);
+ }
+ READ_COLOR("KeyText", m_text);
+ READ_COLOR("KeyBackHigh", m_backgroundH);
+ READ_COLOR("KeyTextHigh", m_textH);
+ READ_COLOR("KeyBackControl", m_cBackground);
+ READ_COLOR("KeyTextControl", m_cText);
+ READ_COLOR("KeyBackControlHigh", m_cBackgroundH);
+ READ_COLOR("KeyTextControlHigh", m_cTextH);
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorScheme::write(QDomDocument& doc, QDomElement& root) const {
+ //kdDebug() << "[KTouchColorScheme::write] " << endl;
+ QDomElement element = doc.createElement("KTouchColorScheme");
+ // append name of color scheme
+ QDomElement name = doc.createElement("Name");
+ QDomText name_text;
+ if (m_name.isEmpty()) name_text = doc.createTextNode( i18n("untitled color scheme") );
+ else name_text = doc.createTextNode(m_name);
+ name.appendChild(name_text);
+ element.appendChild(name);
+ // store slide line colors
+ QDomElement line_colors = doc.createElement("LineColors");
+ QDomElement e;
+ QDomText n;
+
+ WRITE_COLOR(line_colors, "TeacherTextColor", m_teacherTextColor);
+ WRITE_COLOR(line_colors, "TeacherBackground", m_teacherBackground);
+ WRITE_COLOR(line_colors, "StudentTextColor", m_studentTextColor);
+ WRITE_COLOR(line_colors, "StudentBackground", m_studentBackground);
+ WRITE_COLOR(line_colors, "ErrorTextColor", m_errorTextColor);
+ WRITE_COLOR(line_colors, "ErrorBackground", m_errorBackground);
+
+ element.appendChild(line_colors);
+ // done with slide line colors
+
+ // write key drawing colors
+ QDomElement key_colors = doc.createElement("KeyboardColors");
+
+ WRITE_COLOR(key_colors, "KeyFrame", m_frame);
+ for (unsigned int i=0; i<8; ++i) {
+ WRITE_COLOR(key_colors, QString("KeyBack_%1").arg(i), m_background[i]);
+ }
+ WRITE_COLOR(key_colors, "KeyText", m_text);
+ WRITE_COLOR(key_colors, "KeyBackHigh", m_backgroundH);
+ WRITE_COLOR(key_colors, "KeyTextHigh", m_textH);
+ WRITE_COLOR(key_colors, "KeyBackControl", m_cBackground);
+ WRITE_COLOR(key_colors, "KeyTextControl", m_cText);
+ WRITE_COLOR(key_colors, "KeyBackControlHigh", m_cBackgroundH);
+ WRITE_COLOR(key_colors, "KeyTextControlHigh", m_cTextH);
+
+ element.appendChild(key_colors);
+
+
+ root.appendChild(element);
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchColorScheme::readList(QWidget * window, const KURL& url) {
+ if (url.isEmpty()) return false;
+ //kdDebug() << "[KTouchColorScheme::readList] " << endl;
+ //kdDebug() << " url = '" << url.url() << "'" << endl;
+ QString tmp_file;
+ bool result = KIO::NetAccess::download(url, tmp_file, window);
+ if (result) {
+ // Ok, that was successful, try to parse the XML doc now
+ QFile infile(tmp_file);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ KIO::NetAccess::removeTempFile(tmp_file);
+ return false; // Bugger it... couldn't open it...
+ }
+ QDomDocument doc;
+ doc.setContent( &infile );
+ // read the document
+ QDomNodeList schemes = doc.elementsByTagName("KTouchColorScheme");
+ int num = schemes.count();
+ if (num > 0) {
+ //kdDebug() << " reading " << schemes.count() << " color maps..." << endl;
+ for (int i=0; i<num; ++i) {
+ KTouchColorScheme scheme;
+ if (scheme.read(schemes.item(i)))
+ m_colorSchemes.append(scheme);
+ }
+ }
+
+ }
+ KIO::NetAccess::removeTempFile(tmp_file);
+
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchColorScheme::writeList(QWidget * window, const KURL& url) {
+ // create the XML document and root node
+ QDomDocument doc;
+ QDomElement root = doc.createElement( "KTouchColorSchemeCollection" );
+ doc.appendChild(root);
+ // write all the non-default color schemes
+ for (QValueVector<KTouchColorScheme>::const_iterator it = m_colorSchemes.constBegin();
+ it != m_colorSchemes.constEnd(); ++it)
+ {
+ if (!it->m_default) it->write(doc, root);
+ }
+
+ // and save it
+ QString tmp_file;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmp_file=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ temp->setAutoDelete(true); // so we don't have to delete the file ourselves
+ tmp_file=temp->name();
+ }
+
+ QFile outfile(tmp_file);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ kdDebug() << "Error creating tmp file '"+tmp_file+"' for writing color map!" << endl;
+ return false;
+ }
+
+ QTextStream out( &outfile );
+ out << doc.toString();
+ outfile.close();
+ // if we have a temporary file, we still need to upload it
+ if (temp) {
+ KIO::NetAccess::upload(tmp_file, url, window);
+ delete temp;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchColorScheme::createDefaults() {
+ m_colorSchemes.clear();
+ KTouchColorScheme color;
+ color.m_default = true;
+
+ color.m_name = i18n("Black & White");
+ color.m_teacherTextColor = Qt::black;
+ color.m_teacherBackground = Qt::white;
+ color.m_studentTextColor = Qt::black;
+ color.m_studentBackground = Qt::white;
+ color.m_errorTextColor = Qt::white;
+ color.m_errorBackground = Qt::black;
+ color.m_frame = Qt::black;
+ for (int i=0; i<8; ++i)
+ color.m_background[i] = Qt::white;
+ color.m_text = Qt::black;
+ color.m_backgroundH = Qt::black;
+ color.m_textH = Qt::white;
+ color.m_cBackground = Qt::gray;
+ color.m_cText = Qt::black;
+ color.m_cBackgroundH = Qt::white;
+ color.m_cTextH = Qt::black;
+ m_colorSchemes.push_back(color);
+
+ color.m_name = i18n("Classic");
+ color.m_teacherTextColor = QColor("#000032");
+ color.m_teacherBackground = QColor("#BEBEFF");
+ color.m_studentTextColor = QColor("#003200");
+ color.m_studentBackground = QColor("#9FFF9F");
+ color.m_errorTextColor = Qt::white;
+ color.m_errorBackground = QColor("#AC0000");
+ color.m_frame = Qt::black;
+ color.m_background[0] = QColor(255,238, 7); color.m_background[4] = QColor(247,138,247);
+ color.m_background[1] = QColor( 14,164,239); color.m_background[5] = QColor(158,255,155);
+ color.m_background[2] = QColor(158,255,155); color.m_background[6] = QColor( 14,164,239);
+ color.m_background[3] = QColor(252,138,138); color.m_background[7] = QColor(255,238, 7);
+ color.m_text = Qt::black;
+ color.m_backgroundH = Qt::darkBlue;
+ color.m_textH = Qt::white;
+ color.m_cBackground = Qt::gray;
+ color.m_cText = Qt::black;
+ color.m_cBackgroundH = Qt::white;
+ color.m_cTextH = Qt::black;
+ m_colorSchemes.push_back(color);
+
+ color.m_name = i18n("Deep Blue");
+ color.m_teacherTextColor = Qt::white;
+ color.m_teacherBackground = QColor( 0, 39, 80);
+ color.m_studentTextColor = Qt::white;
+ color.m_studentBackground = QColor( 39, 59,127);
+ color.m_errorTextColor = QColor("#B5CFFF");
+ color.m_errorBackground = QColor("#640000");
+ color.m_frame = QColor(220,220,220);
+ color.m_background[0] = QColor( 0, 39, 80); color.m_background[4] = QColor( 24, 19, 72);
+ color.m_background[1] = QColor( 39, 59,127); color.m_background[5] = QColor( 8, 44,124);
+ color.m_background[2] = QColor( 4, 39, 53); color.m_background[6] = QColor( 10, 82,158);
+ color.m_background[3] = QColor( 40, 32,121); color.m_background[7] = QColor( 43, 60,124);
+ color.m_text = Qt::white;
+ color.m_backgroundH = QColor(125,180,255);
+ color.m_textH = Qt::darkBlue;
+ color.m_cBackground = Qt::black;
+ color.m_cText = Qt::white;
+ color.m_cBackgroundH = QColor(111,121,73);
+ color.m_cTextH = Qt::white;
+ m_colorSchemes.push_back(color);
+
+ color.m_name = i18n("Stripy");
+ color.m_teacherTextColor = Qt::white;
+ color.m_teacherBackground = QColor( 39, 70, 227);
+ color.m_studentTextColor = Qt::white;
+ color.m_studentBackground = QColor( 39, 70, 127);
+ color.m_errorTextColor = Qt::white;
+ color.m_errorBackground = Qt::darkGray;
+ color.m_frame = Qt::black;
+ for (int i=0; i<8; i=i+2)
+ color.m_background[i] = QColor( 39, 70, 127);
+ for (int i=1; i<8; i=i+2)
+ color.m_background[i] = Qt::darkGray;
+ color.m_text = Qt::black;
+ color.m_backgroundH = QColor( 39, 70, 227);
+ color.m_textH = Qt::white;
+ color.m_cBackground = Qt::gray;
+ color.m_cText = Qt::black;
+ color.m_cBackgroundH = QColor( 39, 70, 227);
+ color.m_cTextH = Qt::black;
+ m_colorSchemes.push_back(color);
+}
+// ----------------------------------------------------------------------------
+
diff --git a/ktouch/src/ktouchcolorscheme.h b/ktouch/src/ktouchcolorscheme.h
new file mode 100644
index 00000000..47e28813
--- /dev/null
+++ b/ktouch/src/ktouchcolorscheme.h
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * ktouchcolorscheme.h *
+ * ------------------- *
+ * Copyright (C) 2003 by Andreas Nicolai *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHCOLORSCHEME_H
+#define KTOUCHCOLORSCHEME_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qcolor.h>
+#include <qvaluevector.h>
+
+#include <kurl.h>
+
+class QDomDocument;
+class QDomElement;
+class QDomNode;
+
+/// Contains all colours of the colour scheme.
+///
+/// This is the colour scheme used for the slide line widget and the keyboard widget.
+class KTouchColorScheme {
+ public:
+ /// Default constructor.
+ KTouchColorScheme() { clear(); }
+ /// Creates the default colour scheme.
+ void clear();
+
+ /// Loads a color map (in XML format) from XML node (returns true if successful)
+ bool read(const QDomNode& node);
+ /// Saves a color map to XML document (returns true if successful).
+ void write(QDomDocument& doc, QDomElement& root) const;
+
+
+ QString m_name; ///< The name of the colour scheme.
+
+ QColor m_teacherTextColor; ///< The text colour for the teachers line.
+ QColor m_teacherBackground; ///< The background colour for the teachers line.
+ QColor m_studentTextColor; ///< The text colour for the students line.
+ QColor m_studentBackground; ///< The background colour for the students line.
+ QColor m_errorTextColor; ///< The text colour for wrong text (students line).
+ QColor m_errorBackground; ///< The background colour for wrong text (students line).
+
+ QColor m_frame; ///< The colour for the key frames.
+ QColor m_background[8]; ///< The background colour of the finger keys and the associated normal keys.
+ QColor m_text; ///< The colour for the text on the keys.
+ QColor m_backgroundH; ///< The background colour for highlighted (next) normal keys.
+ QColor m_textH; ///< The text/pen colour for highlighted (next) normal keys.
+ QColor m_cBackground; ///< The background colour for the control keys.
+ QColor m_cText; ///< The text/pen colour for the control keys.
+ QColor m_cBackgroundH; ///< The background colour for activated control keys.
+ QColor m_cTextH; ///< The text/pen colour for activated control keys.
+
+ bool m_default; ///< If true, this color map is marked as default and will not
+ /// be saved in the XML file.
+
+ // *** static member functions ***
+
+ /// Loads several color maps (in XML format) from file (returns true if successful)
+ /// and _adds_ them to the current color maps. This function shall be called
+ /// directly after createDefaultColorSchemes().
+ static bool readList(QWidget * window, const KURL& url);
+ /// Saves several color maps to file (returns true if successful).
+ /// Only non-default color maps are written to file.
+ static bool writeList(QWidget * window, const KURL& url);
+ /// Creates some default color schemes (erases m_colorSchemes before).
+ static void createDefaults();
+ /// Contains all color schemes available in the program.
+ static QValueVector<KTouchColorScheme> m_colorSchemes;
+};
+
+#endif // KTOUCHCOLORSCHEME_H
+
diff --git a/ktouch/src/ktouchdefaults.cpp b/ktouch/src/ktouchdefaults.cpp
new file mode 100644
index 00000000..ac95a98c
--- /dev/null
+++ b/ktouch/src/ktouchdefaults.cpp
@@ -0,0 +1,23 @@
+/***************************************************************************
+ * ktouchdefaults.cpp *
+ * ------------------ *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+ #include "ktouchdefaults.h"
+
+const unsigned int BEGINNER_SPEED = 60; // in characters per minute
+const unsigned int ADVANCED_SPEED = 120; // in characters per minute
+const unsigned int PROFESSIONAL_SPEED = 220; // in characters per minute
+
+// the margin between keyboard and widget frame
+const int KEYBOARD_MARGIN = 10;
+
+// milli seconds between updates of the speed LCD
+const int LCD_UPDATE_INTERVAL = 500;
diff --git a/ktouch/src/ktouchdefaults.h b/ktouch/src/ktouchdefaults.h
new file mode 100644
index 00000000..d66a1663
--- /dev/null
+++ b/ktouch/src/ktouchdefaults.h
@@ -0,0 +1,28 @@
+/***************************************************************************
+ * ktouchdefaults.h *
+ * ------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHDEFAULTS_H
+#define KTOUCHDEFAULTS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+extern const unsigned int BEGINNER_SPEED; ///< Speed for rating in characters per minute.
+extern const unsigned int ADVANCED_SPEED; ///< Speed for rating in characters per minute.
+extern const unsigned int PROFESSIONAL_SPEED; ///< Speed for rating in characters per minute.
+
+extern const int KEYBOARD_MARGIN; ///< The margin around the keybaord layout.
+
+extern const int LCD_UPDATE_INTERVAL; ///< Update interval for LCD display and statistics.
+
+#endif // KTOUCHDEFAULTS_H
diff --git a/ktouch/src/ktouchkey.cpp b/ktouch/src/ktouchkey.cpp
new file mode 100644
index 00000000..cb68b214
--- /dev/null
+++ b/ktouch/src/ktouchkey.cpp
@@ -0,0 +1,139 @@
+/***************************************************************************
+ * ktouchkey.cpp *
+ * ------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkey.h"
+#include <kdebug.h>
+#include <utility> // for std::min
+
+KTouchKey::KTouchKey(keytype_t type, int x, int y, int w, int h, QChar ch)
+ : m_type(type), m_x(x), m_y(y), m_w(w), m_h(h)
+{
+ m_chars[0].m_ch = ch;
+ m_chars[0].m_bold = true;
+ m_chars[0].m_pos = KTouchKeyChar::TOP_LEFT;
+}
+// ----------------------------------------------------------------------------
+
+KTouchKey::KTouchKey(int x, int y, int w, int h, QString text) :
+ m_x(x), m_y(y), m_w(w), m_h(h)
+{
+ m_type = OTHER;
+ m_chars[0].m_ch = 0;
+ m_chars[0].m_bold = true;
+ m_chars[0].m_pos = KTouchKeyChar::TOP_LEFT;
+ m_chars[0].m_text = text;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchKey::resize(double scale) {
+ m_xS = static_cast<int>(scale*m_x);
+ m_yS = static_cast<int>(scale*m_y);
+ m_wS = static_cast<int>(scale*m_w);
+ m_hS = static_cast<int>(scale*m_h);
+}
+// -----------------------------------------------------------------------------
+
+
+// Reads the key data from the DomElement
+bool KTouchKey::read(QDomNode node) {
+/*
+ if (node.isNull())
+ return false; // TODO : Error message
+ QString primaryCharText = node.firstChild().nodeValue();
+ if (primaryCharText.length() >= 1)
+ m_primaryChar = primaryCharText[0];
+ else
+ return false; // TODO : Error message
+ QDomNamedNodeMap nmap = node.attributes();
+ // Get height, widht, x and y
+ node = nmap.namedItem("Height");
+ if (node.isNull())
+ return false; // TODO : Error message
+ m_h = node.nodeValue().toInt();
+ node = nmap.namedItem("Width");
+ if (node.isNull())
+ return false; // TODO : Error message
+ m_w = node.nodeValue().toInt();
+ node = nmap.namedItem("X");
+ if (node.isNull())
+ return false; // TODO : Error message
+ m_x = node.nodeValue().toInt();
+ node = nmap.namedItem("Y");
+ if (node.isNull())
+ return false; // TODO : Error message
+ m_y = node.nodeValue().toInt();
+ // read type of key
+ node = nmap.namedItem("Type");
+ if (node.isNull())
+ return false; // TODO : Error message
+ QString typetext = node.nodeValue();
+ if (typetext=="NORMAL") m_type = NORMAL;
+ else if (typetext=="FINGER") m_type = FINGER;
+ else if (typetext=="ENTER") m_type = ENTER;
+ else if (typetext=="BACKSPACE") m_type = BACKSPACE;
+ else if (typetext=="SHIFT") m_type = SHIFT;
+ else if (typetext=="SPACE") m_type = SPACE;
+ else if (typetext=="OTHER") {
+ m_type = OTHER;
+ node = nmap.namedItem("OtherKeyText");
+ if (!node.isNull())
+ m_otherKeyText = node.nodeValue();
+ }
+ else
+ return false; // TODO : Error message
+ // read optional secondary character
+ node = nmap.namedItem("SecondaryChar");
+ QString charvalue;
+ if (!node.isNull())
+ charvalue = node.nodeValue();
+ if (charvalue.length() >= 1)
+ m_secondaryChar = charvalue[0];
+ else
+ m_secondaryChar = QChar(0);
+ kdDebug() << "H:" << m_h << " W:" << m_w << " X:" << m_x << " Y:" << m_y
+ << " Type:" << m_type << " SecondaryChar:" << m_secondaryChar
+ << "' PrimaryChar:" << m_primaryChar << "'" << endl;
+*/
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+// Writes the key data into the DomElement
+void KTouchKey::write(QDomDocument& doc, QDomElement& root) const {
+/*
+ QDomElement element = doc.createElement("KeyDefinition");
+ switch (m_type) {
+ case NORMAL : element.setAttribute("Type", "NORMAL"); break;
+ case FINGER : element.setAttribute("Type", "FINGER"); break;
+ case ENTER : element.setAttribute("Type", "ENTER"); break;
+ case BACKSPACE : element.setAttribute("Type", "BACKSPACE"); break;
+ case SHIFT : element.setAttribute("Type", "SHIFT"); break;
+ case SPACE : element.setAttribute("Type", "SPACE"); break;
+ case OTHER :
+ element.setAttribute("Type", "OTHER");
+ element.setAttribute("OtherKeyText", m_otherKeyText);
+ break;
+ }
+ QDomText charnode = doc.createTextNode(QString(m_primaryChar));
+ element.appendChild(charnode);
+// element.setAttribute("PrimaryChar", QString(m_primaryChar));
+ if (m_secondaryChar!=QChar(0))
+ element.setAttribute("SecondaryChar", QString(m_secondaryChar));
+ element.setAttribute("X", m_x);
+ element.setAttribute("Y", m_y);
+ element.setAttribute("Width", m_w);
+ element.setAttribute("Height", m_h);
+ root.appendChild(element);
+*/
+}
+// ----------------------------------------------------------------------------
+
diff --git a/ktouch/src/ktouchkey.h b/ktouch/src/ktouchkey.h
new file mode 100644
index 00000000..f27fd80f
--- /dev/null
+++ b/ktouch/src/ktouchkey.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ * ktouchkey.h *
+ * ----------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEY_H
+#define KTOUCHKEY_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qpainter.h>
+#include <qdom.h>
+
+/// This class contains information about one character on a key.
+class KTouchKeyChar {
+ public:
+ /// Position of the character on the key.
+ enum position_t {
+ TOP_LEFT,
+ TOP_RIGHT,
+ BOTTOM_LEFT,
+ BOTTOM_RIGHT
+ };
+
+ /// Constructor.
+ KTouchKeyChar() {}
+ /// Constructor.
+ KTouchKeyChar(QChar ch, position_t p, bool bold = false) :
+ m_ch(ch), m_pos(p), m_bold(bold) {}
+
+ QChar m_ch; ///< The character to draw.
+ position_t m_pos; ///< The position of the character.
+ bool m_bold; ///< Whether this is a bold character.
+
+ QString m_text; ///< The text to draw of m_ch == 0.
+};
+
+/// This class represents a key on the keyboard.
+/// The primary character is the identification character for the key and will
+/// be printed top left of the key (like normal character keys). If a secondary
+/// character is given (as for the keys containing numbers), the primary key will
+/// be printed bottom left and the secondary key will be printed top left.
+/// If m_secondaryChar is 0, no secondary character is given.
+class KTouchKey {
+ public:
+ enum keytype_t {
+ NORMAL,
+ FINGER,
+ ENTER,
+ BACKSPACE,
+ SHIFT,
+ SPACE,
+ OTHER
+ };
+
+ /// Default constructor
+ KTouchKey() : m_type(NORMAL), m_x(0), m_y(0), m_w(0), m_h(0) {}
+ /// Convenience constructor for a key with a single character (like before).
+ KTouchKey(keytype_t type, int x, int y, int w, int h, QChar ch);
+ /// Convenience constructor for a key with a text on it (type will be OTHER).
+ KTouchKey(int x, int y, int w, int h, QString text);
+
+ /// Resizes the key (this function will be obsolete soon)
+ void resize(double scale);
+
+ /// Reads the key data from the DomElement
+ bool read(QDomNode node);
+ /// Creates a new DomElement, writes the key data into it and appends it to the root object.
+ void write(QDomDocument& doc, QDomElement& root) const;
+
+ unsigned int m_number; ///< The number of the key.
+ keytype_t m_type; ///< The type of the key.
+ KTouchKeyChar m_chars[4]; ///< The key character information.
+ int m_x; ///< The x-coordinate of the top-left corner of the key.
+ int m_y; ///< The y-coordinate of the top-left corner of the key.
+ int m_w; ///< The width.
+ int m_h; ///< The height.
+
+ int m_xS; ///< The scaled x-coordinate of the top-left corner of the key.
+ int m_yS; ///< The scaled y-coordinate of the top-left corner of the key.
+ int m_wS; ///< The scaled width.
+ int m_hS; ///< The scaled height.
+
+};
+// ---------------------------------------------------------------------------------------
+
+#endif // KTOUCHKEYS_H
diff --git a/ktouch/src/ktouchkeyboard.cpp b/ktouch/src/ktouchkeyboard.cpp
new file mode 100644
index 00000000..a9650f9e
--- /dev/null
+++ b/ktouch/src/ktouchkeyboard.cpp
@@ -0,0 +1,658 @@
+/***************************************************************************
+ * ktouchkeyboard.cpp *
+ * ------------------ *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkeyboard.h"
+
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+#include <klocale.h>
+
+#include "prefs.h"
+
+// --------------------------------------------------------------------------
+
+// Clears the keyboard data
+void KTouchKeyboard::clear() {
+ m_keys.clear();
+ m_connectors.clear();
+ m_title = QString::null;
+ m_comment = QString::null;
+ m_language = QString::null;
+ m_fontSuggestions = QString::null;
+}
+// ----------------------------------------------------------------------------
+
+// Loads a keyboard layout (old format) from file (returns true if successful).
+bool KTouchKeyboard::load(QWidget * window, const KURL& url) {
+ // Ok, first download the contents as usual using the KIO lib
+ // File is only downloaded if not local, otherwise it's just opened
+ QString target;
+ bool result = false;
+ //kdDebug() << "[KTouchKeyboard::load] " << url << endl;
+ if (KIO::NetAccess::download(url, target, window)) {
+ // Ok, that was successful, store the lectureURL and read the file
+ QFile infile(target);
+ if ( !infile.open( IO_ReadOnly ) )
+ return false; // Bugger it... couldn't open it...
+ QTextStream in( &infile );
+ result = read(in);
+ };
+ KIO::NetAccess::removeTempFile(target);
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+// Loads a lecture (in XML format) from file (returns true if successful).
+bool KTouchKeyboard::loadXML(QWidget * window, const KURL& url) {
+ // Ok, first download the contents as usual using the KIO lib
+ // File is only downloaded if not local, otherwise it's just opened
+ QString target;
+ bool result = false;
+ if (KIO::NetAccess::download(url, target, window)) {
+ // Ok, that was successful, store the lectureURL and read the file
+ QFile infile(target);
+ if ( !infile.open( IO_ReadOnly ) )
+ return false; // Bugger it... couldn't open it...
+ QDomDocument doc;
+ doc.setContent( &infile );
+ result = read(doc);
+ }
+ KIO::NetAccess::removeTempFile(target);
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+// Saves the lecture data to file (returns true if successful).
+bool KTouchKeyboard::saveXML(QWidget * window, const KURL& url) const {
+ // create the XML document
+ QDomDocument doc;
+ write(doc);
+
+ // and save it
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ temp->setAutoDelete(true); // so we don't have to delete the file ourselves
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ // kdDebug() << "Error creating lecture file!" << endl;
+ return false;
+ };
+
+ QTextStream out( &outfile );
+ out << doc.toString();
+ outfile.close();
+ // if we have a temporary file, we still need to upload it
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ delete temp;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+// Loads keyboard data from file, preserved for compatibility
+bool KTouchKeyboard::read(QTextStream& in) {
+ in.setEncoding(QTextStream::UnicodeUTF8);
+ QString line;
+ clear(); // empty the keyboard
+ // now loop until end of file is reached
+ do {
+ // skip all empty lines or lines containing a comment (starting with '#')
+ do { line = in.readLine().stripWhiteSpace(); }
+ while (!line.isNull() && (line.isEmpty() || line[0]=='#'));
+ // Check if end of file encountered and if that is the case -> bail out at next while
+ if (line.isNull()) continue;
+
+ // 'line' should now contain a key specification
+ QTextStream lineStream(line, IO_ReadOnly);
+ QString keyType;
+ int keyAscII;
+ QString keyText;
+ int x(0), y(0), w(0), h(0);
+ lineStream >> keyType >> keyAscII;
+ if (keyType=="FingerKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ if (w==0 || h==0)
+ w=h=8; // default values for old keyboard files
+ KTouchKey key(KTouchKey::FINGER, keyText[0], 0, x+1, y+1, w, h);
+ m_keys.push_back(key);
+ KTouchKeyConnector keycon(keyText[0], keyText[0], 0, 0);
+ m_connectors.push_back(keycon);
+ kdDebug() << "[KTouchKeyboard::read] FingerKey '" << keyText[0] << "'" << endl;
+ }
+ else if (keyType=="ControlKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ KTouchKey key(KTouchKey::OTHER, 0, 0, x+1, y+1, w-2, h-2);
+ key.m_otherKeyText = keyText;
+ m_keys.push_back(key);
+ kdDebug() << "[KTouchKeyboard::read] ControlKey '" << keyText << "'" << endl;
+ }
+ else if (keyType=="NormalKey") {
+ int fingerCharCode;
+ lineStream >> keyText >> x >> y >> fingerCharCode;
+ w=h=8; // default values for old keyboard files
+ KTouchKey key(KTouchKey::NORMAL, keyText[0], 0, x+1, y+1, w, h);
+ m_keys.push_back(key);
+ KTouchKeyConnector keycon(keyText[0], keyText[0], fingerCharCode, 0);
+ m_connectors.push_back(keycon);
+ kdDebug() << "[KTouchKeyboard::read] NormalKey '" << keyText[0] << "' f = '"<< fingerCharCode<< "'" << endl;
+ } else if (keyType=="HiddenKey") {
+ int targetChar, fingerChar, controlChar;
+ lineStream >> targetChar >> fingerChar >> controlChar;
+ KTouchKeyConnector keycon(targetChar, targetChar, fingerChar, 0);
+ m_connectors.push_back(keycon);
+ }
+ else {
+ //errorMsg = i18n("Missing key type in line '%1'.").arg(line);
+ return false;
+ }
+ // calculate the maximum extent of the keyboard on the fly...
+ } while (!in.atEnd() && !line.isNull());
+
+ return (!m_keys.isEmpty()); // empty file means error
+}
+// ----------------------------------------------------------------------------
+
+// Loads keyboard data from file into an XML document
+bool KTouchKeyboard::read(const QDomDocument& doc) {
+ // clean current data
+ kdDebug() << "Reading new keyboard layout" << endl;
+ m_keys.clear();
+ m_connectors.clear();
+ m_title = QString::null;
+ // retrieve the title
+ QDomNodeList entries = doc.elementsByTagName("Title");
+ if (entries.count() >= 1) m_title = entries.item(0).firstChild().nodeValue();
+ else m_title = i18n("untitled keyboard layout");
+ kdDebug() << "Title: " << m_title << endl;
+ // retrieve the comment
+ entries = doc.elementsByTagName("Comment");
+ if (entries.count() >= 1)
+ m_comment = entries.item(0).firstChild().nodeValue();
+ // retrieve the font suggestion
+ entries = doc.elementsByTagName("FontSuggestions");
+ if (entries.count() >= 1)
+ m_fontSuggestions = entries.item(0).firstChild().nodeValue();
+ // retrieve the language id
+ entries = doc.elementsByTagName("Language");
+ if (entries.count() >= 1)
+ m_language = entries.item(0).firstChild().nodeValue();
+ // retrieve the key definitions
+ entries = doc.elementsByTagName("KeyDefinitions");
+ QDomNode node = entries.item(0).firstChild();
+ while (!node.isNull()) {
+ KTouchKey key;
+ if (key.read(node))
+ m_keys.push_back(key);
+ // TODO : Error message if reading failed
+ node = node.nextSibling();
+ }
+ // retrieve the key definitions
+ entries = doc.elementsByTagName("KeyConnections");
+ node = entries.item(0).firstChild();
+ while (!node.isNull()) {
+ KTouchKeyConnector keycon;
+ if (keycon.read(node))
+ m_connectors.push_back(keycon);
+ // TODO : Error message if reading failed
+ node = node.nextSibling();
+ }
+ if (!m_title.isEmpty())
+ return true; // if we could read a title, let's assume all is ok
+ else {
+ // Hmm, no levels in the file. So we create our default mini level and report an error.
+ createDefault();
+ return false;
+ };
+ return false;
+}
+// ----------------------------------------------------------------------------
+
+// Saves keyboard data in the XML document
+void KTouchKeyboard::write(QDomDocument& doc) const {
+ QDomElement root = doc.createElement( "KTouchKeyboard" );
+ doc.appendChild(root);
+ // Store title and ensure that the file contains a title!
+ QDomElement title = doc.createElement("Title");
+ QDomText titleText;
+ if (m_title.isEmpty()) titleText = doc.createTextNode( i18n("untitled keyboard layout") );
+ else titleText = doc.createTextNode(m_title);
+ title.appendChild(titleText);
+ root.appendChild(title);
+ // Store comment if given
+ if (!m_comment.isEmpty()) {
+ QDomElement e = doc.createElement("Comment");
+ QDomText t = doc.createTextNode(m_comment);
+ e.appendChild(t);
+ root.appendChild(e);
+ }
+ // Store font suggestion if given
+ if (!m_fontSuggestions.isEmpty()) {
+ QDomElement e = doc.createElement("FontSuggestions");
+ QDomText t = doc.createTextNode(m_fontSuggestions);
+ e.appendChild(t);
+ root.appendChild(e);
+ }
+ // Store language idif given
+ if (!m_language.isEmpty()) {
+ QDomElement e = doc.createElement("Language");
+ QDomText t = doc.createTextNode(m_language);
+ e.appendChild(t);
+ root.appendChild(e);
+ }
+ // Store keys
+ QDomElement keys = doc.createElement("KeyDefinitions");
+ root.appendChild(keys);
+ for (QValueVector<KTouchKey>::const_iterator it=m_keys.begin(); it!=m_keys.end(); ++it)
+ it->write(doc, keys);
+ // Store connectors
+ QDomElement conns = doc.createElement("KeyConnections");
+ root.appendChild(conns);
+ for (QValueVector<KTouchKeyConnector>::const_iterator it=m_connectors.begin(); it!=m_connectors.end(); ++it)
+ it->write(doc, conns);
+}
+// ----------------------------------------------------------------------------
+
+// Creates the default number keyboard.
+void KTouchKeyboard::createDefault() {
+ // let's create a default keyboard
+ const int keySpacing = 4;
+ const int keyHeight = 20;
+ const int keyWidth = 20;
+ const int col = keyWidth+keySpacing;
+ const int row = keyHeight+keySpacing;
+ // First let's create the visible layout.
+ // This means we have to create all keys that will be displayed.
+ // Note: purely decorative keys get a key character code of 0!
+ m_keys.clear();
+ m_keys.push_back( KTouchKey(KTouchKey::OTHER, 0, 0, 2*col+ 0, 0, keyWidth, keyHeight) );
+ m_keys.back().m_otherKeyText = i18n("Num-lock", "Num");
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '/', 0, 2*col+ col, 0, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '*', 0, 2*col+ 2*col, 0, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '-', 0, 2*col+ 3*col, 0, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '7', 0, 2*col+ 0, row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '8', 0, 2*col+ 1*col, row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '9', 0, 2*col+ 2*col, row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::FINGER, '4', 0, 2*col+ 0, 2*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::FINGER, '5', 0, 2*col+ 1*col, 2*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::FINGER, '6', 0, 2*col+ 2*col, 2*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '1', 0, 2*col+ 0, 3*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '2', 0, 2*col+ 1*col, 3*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '3', 0, 2*col+ 2*col, 3*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '0', 0, 2*col+ 0, 4*row, 2*keyWidth+keySpacing, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::NORMAL, '.', 0, 2*col+ 2*col, 4*row, keyWidth, keyHeight) );
+ m_keys.push_back( KTouchKey(KTouchKey::FINGER, '+', 0, 2*col+ 3*col, row, keyWidth, 2*keyHeight+keySpacing) );
+ m_keys.push_back( KTouchKey(KTouchKey::ENTER, 0, 0, 2*col+ 3*col, 3*row, keyWidth, 2*keyHeight+keySpacing) );
+ m_keys.push_back( KTouchKey(KTouchKey::BACKSPACE,0, 0, 2*col+ 5*col, 0, keyWidth, keyHeight) );
+
+ // now we need to create the connections between the characters that can be typed and the
+ // keys that need to be displayed on the keyboard
+ // The arguments to the constructor are: keychar, targetkey, fingerkey, controlkeyid
+
+ m_connectors.clear();
+ m_connectors.push_back( KTouchKeyConnector('/', '/','5', 0) );
+ m_connectors.push_back( KTouchKeyConnector('*', '*','6', 0) );
+ m_connectors.push_back( KTouchKeyConnector('-', '-','+', 0) );
+ m_connectors.push_back( KTouchKeyConnector('+', '+', 0, 0) );
+ m_connectors.push_back( KTouchKeyConnector('0', '0', 0, 0) );
+ m_connectors.push_back( KTouchKeyConnector('1', '1','4', 0) );
+ m_connectors.push_back( KTouchKeyConnector('2', '2','5', 0) );
+ m_connectors.push_back( KTouchKeyConnector('3', '3','6', 0) );
+ m_connectors.push_back( KTouchKeyConnector('4', '4', 0, 0) );
+ m_connectors.push_back( KTouchKeyConnector('5', '5', 0, 0) );
+ m_connectors.push_back( KTouchKeyConnector('6', '6', 0, 0) );
+ m_connectors.push_back( KTouchKeyConnector('7', '7','4', 0) );
+ m_connectors.push_back( KTouchKeyConnector('8', '8','5', 0) );
+ m_connectors.push_back( KTouchKeyConnector('9', '9','6', 0) );
+ m_connectors.push_back( KTouchKeyConnector('.', '.', '6', 0) );
+
+ m_title = "Number keypad";
+ m_comment = "Predefined keyboard layout";
+ m_language = QString::null;
+ // language does not apply to numbers... that's one of the nice things with math :-)
+ m_fontSuggestions = "Monospace";
+ m_width = 8*col;
+ m_height = 5*row;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchKeyboard::updateConnections() {
+ for (QValueVector<KTouchKeyConnector>::iterator it = m_connectors.begin(); it != m_connectors.end(); ++it)
+ (*it).updateConnections(m_keys);
+}
+// ----------------------------------------------------------------------------
+
+
+/*
+
+bool KTouchKeyboard::loadKeyboard(QWidget * window, const KURL& url, QString* errorMsg) {
+ QString target;
+ if (KIO::NetAccess::download(url, target, window)) {
+ QString msg;
+ bool result = readKeyboard(target, msg);
+ KIO::NetAccess::removeTempFile(target);
+ if (!result && errorMsg!=NULL)
+ *errorMsg = i18n("Could not read the keyboard layout file '%1'. ").arg(url.url()) + msg;
+ return result;
+ }
+ else {
+ if (errorMsg!=NULL)
+ *errorMsg = i18n("Could not download/open keyboard layout file from '%1'.").arg(url.url());
+ return false;
+ }
+}
+
+
+void KTouchKeyboard::saveKeyboard(QWidget * window, const KURL& url) {
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ return;
+ }
+
+ QTextStream out( &outfile );
+ out << "########################################## \n";
+ out << "# # \n";
+ out << "# Keyboard layout file for KTouch # \n";
+ out << "# # \n";
+ out << "########################################## \n";
+ out << "#\n";
+ out << endl;
+
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ switch (key->type()) {
+ case KTouchKey::FINGER_KEY : out << "FingerKey "; break;
+ case KTouchKey::NORMAL_KEY : out << "NormalKey "; break;
+ case KTouchKey::CONTROL_KEY : out << "ControlKey "; break;
+ default : out << "NormalKey "; break;
+ }
+ QRect rect=key->frame();
+ out << key->m_keyChar.unicode() << '\t' << key->m_keyText << '\t'
+ << rect.left() << '\t' << rect.top() << '\t' << rect.width() << '\t' << rect.height() << endl;
+ }
+
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ temp->unlink();
+ delete temp;
+ }
+}
+
+void KTouchKeyboard::applyPreferences(QWidget * window, bool silent) {
+ // let's check whether the keyboard layout has changed
+ if (KTouchConfig().m_currentKeyboardFile!=m_currentLayout) {
+ // if the layout is the number layout just create it and we're done
+ if (KTouchConfig().m_currentKeyboardFile=="number.keyboard") {
+ createDefaultKeyboard();
+ resizeEvent(NULL);
+ return;
+ }
+ // ok, let's load this layout
+ if (silent) {
+ // during initialisation we don't want to have a message box, that's why this is silent
+ if (!loadKeyboard(window, KURL::fromPathOrURL( KTouchConfig().m_currentKeyboardFile )))
+ createDefaultKeyboard();
+ else
+ m_currentLayout=KTouchConfig().m_currentKeyboardFile;
+ }
+ else {
+ QString errorMsg;
+ if (!loadKeyboard(window, KURL::fromPathOrURL( KTouchConfig().m_currentKeyboardFile ), &errorMsg)) {
+ KMessageBox::error( 0, i18n("Error reading the keyboard layout; the default number keypad will "
+ "be created instead. You can choose another keyboard layout in the preferences dialog."),
+ errorMsg);
+ createDefaultKeyboard();
+ }
+ else
+ m_currentLayout=KTouchConfig().m_currentKeyboardFile;
+ }
+ }
+
+ updateColours(); // we recreate the colour connections,
+ resizeEvent(NULL); // paint the keyboard
+ newKey(m_nextKey); // and finally display the "next to be pressed" key again
+}
+
+
+void KTouchKeyboard::newKey(const QChar& nextChar) {
+ QPainter painter(this);
+ painter.translate(m_shift, MARGIN);
+ // first clean the markings on all keys
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_isActive || key->m_isNextKey) {
+ key->m_isActive=key->m_isNextKey=false;
+ key->paint(painter);
+ }
+ }
+
+ if (Prefs::showAnimation()){ // only do this if we want to show animation.
+ // find the key in the key connector list
+ QValueList<KTouchKeyConnector>::iterator keyIt = m_connectorList.begin();
+ while (keyIt!=m_connectorList.end() && (*keyIt).m_keyChar!=nextChar) ++keyIt;
+ // if found mark the appropriate keys
+ if (keyIt!=m_connectorList.end()) {
+ QChar targetChar = (*keyIt).m_targetKeyChar;
+ QChar fingerChar = (*keyIt).m_fingerKeyChar;
+ QChar controlChar = (*keyIt).m_controlKeyChar;
+ // find the keys in the keylist
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_keyChar==QChar(0)) continue; // skip decorative keys
+ if (key->m_keyChar==targetChar) key->m_isNextKey=true;
+ else if (key->m_keyChar==fingerChar) key->m_isActive=true;
+ else if (key->m_keyChar==controlChar) key->m_isActive=true;
+ if (key->m_isActive || key->m_isNextKey)
+ key->paint(painter);
+ }
+ }
+ m_nextKey = nextChar;
+ }
+}
+
+
+void KTouchKeyboard::paintEvent(QPaintEvent *) {
+ QPainter painter(this);
+ painter.translate(m_shift, MARGIN);
+ // just print all visible keys
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next())
+ key->paint(painter);
+}
+
+
+void KTouchKeyboard::resizeEvent(QResizeEvent *) {
+ double hScale = static_cast<double>(width()-2*MARGIN)/m_keyboardWidth;
+ double vScale = static_cast<double>(height()-2*MARGIN)/m_keyboardHeight;
+ double scale = std::min(hScale, vScale);
+ m_shift = (width() - static_cast<int>(m_keyboardWidth*scale))/2;
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next())
+ key->resize(scale); // resize all keys
+ update(); // and finally redraw the keyboard
+}
+
+
+void KTouchKeyboard::createDefaultKeyboard() {
+ // let's create a default keyboard
+ const int keySpacing = 4;
+ const int keyHeight = 20;
+ const int keyWidth = 20;
+ const int col = keyWidth+keySpacing;
+ const int row = keyHeight+keySpacing;
+ // first let's create the "visible" keys, that means all keys that will be displayed
+ // Note: purely decorative keys get a key char code of 0!
+ m_keyList.clear();
+ m_keyList.append( new KTouchControlKey( 0, "Num", 0, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '/', "/", col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '*', "*", 2*col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '-', "-", 3*col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '1', "1", 0, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '2', "2", col, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '3', "3", 2*col, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '4', "4", 0, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '5', "5", col, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '6', "6", 2*col, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '7', "7", 0, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '8', "8", col, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '9', "9", 2*col, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '0', "0", 0, 4*row, 2*keyWidth+keySpacing, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '.', ".", 2*col, 4*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '+', "+", 3*col, row, keyWidth, 2*keyHeight+keySpacing) );
+ m_keyList.append( new KTouchControlKey(13, "Enter", 3*col, 3*row,keyWidth, 2*keyHeight+keySpacing) );
+ m_keyList.append( new KTouchControlKey(8, "BackSpace", 5*col, 0, 2*keyWidth+keySpacing, keyHeight) );
+ m_keyboardWidth = 7*col;
+ m_keyboardHeight = 5*row;
+ // now we need to create the connections between the characters that can be typed and the
+ // keys that need to be displayed on the keyboard
+ // The arguments to the constructor are: keychar, targetkey, fingerkey, controlkey
+ m_connectorList.clear();
+ m_connectorList.append( KTouchKeyConnector('/', '/', '5', 0) );
+ m_connectorList.append( KTouchKeyConnector('*', '*', '6', 0) );
+ m_connectorList.append( KTouchKeyConnector('-', '-', '+', 0) );
+ m_connectorList.append( KTouchKeyConnector('+', '+', 0, 0) );
+ m_connectorList.append( KTouchKeyConnector('.', '.', '6', 0) );
+ m_connectorList.append( KTouchKeyConnector('1', '1', '4', 0) );
+ m_connectorList.append( KTouchKeyConnector('2', '2', '5', 0) );
+ m_connectorList.append( KTouchKeyConnector('3', '3', '6', 0) );
+ m_connectorList.append( KTouchKeyConnector('4', '4', 0, 0) );
+ m_connectorList.append( KTouchKeyConnector('5', '5', 0, 0) );
+ m_connectorList.append( KTouchKeyConnector('6', '6', 0, 0) );
+ m_connectorList.append( KTouchKeyConnector('7', '7', '4', 0) );
+ m_connectorList.append( KTouchKeyConnector('8', '8', '5', 0) );
+ m_connectorList.append( KTouchKeyConnector('9', '9', '6', 0) );
+ m_connectorList.append( KTouchKeyConnector('0', '0', 0, 0) );
+ m_connectorList.append( KTouchKeyConnector( 8, 8, 0, 0) );
+ m_connectorList.append( KTouchKeyConnector( 13, 13, '+', 0) );
+ updateColours();
+ m_currentLayout="number";
+}
+
+
+bool KTouchKeyboard::readKeyboard(const QString& fileName, QString& errorMsg) {
+ QFile infile(fileName);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ errorMsg = i18n("Could not open file.");
+ return false;
+ }
+ QTextStream in( &infile );
+ in.setEncoding(QTextStream::UnicodeUTF8);
+ QString line;
+ m_keyList.clear(); // empty the keyboard
+ m_connectorList.clear(); // clear the connections
+ m_keyboardWidth=0;
+ m_keyboardHeight=0;
+ // now loop until end of file is reached
+ do {
+ // skip all empty lines or lines containing a comment (starting with '#')
+ do { line = in.readLine().stripWhiteSpace(); }
+ while (!line.isNull() && (line.isEmpty() || line[0]=='#'));
+ // Check if end of file encountered and if that is the case -> bail out at next while
+ if (line.isNull()) continue;
+
+ // 'line' should now contain a key specification
+ QTextStream lineStream(line, IO_ReadOnly);
+ QString keyType;
+ int keyAscII;
+ QString keyText;
+ int x(0), y(0), w(0), h(0);
+ lineStream >> keyType >> keyAscII;
+ if (keyType=="FingerKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ if (w==0 || h==0)
+ w=h=8; // default values for old keyboard files
+ m_keyList.append( new KTouchFingerKey(keyAscII, keyText, x+1, y+1, w, h) );
+ m_connectorList.append( KTouchKeyConnector(keyAscII, keyAscII, 0, 0) );
+ }
+ else if (keyType=="ControlKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ m_keyList.append( new KTouchControlKey(keyAscII, keyText, x+1, y+1, w-2, h-2) );
+ m_connectorList.append( KTouchKeyConnector(keyAscII, keyAscII, 0, 0) );
+ }
+ else if (keyType=="NormalKey") {
+ int fingerCharCode;
+ lineStream >> keyText >> x >> y >> fingerCharCode;
+ w=h=8; // default values for old keyboard files
+ // retrieve the finger key with the matching char
+ m_keyList.append( new KTouchNormalKey(keyAscII, keyText, x+1, y+1, w, h) );
+ m_connectorList.append( KTouchKeyConnector(keyAscII, keyAscII, fingerCharCode, 0) );
+ } else if (keyType=="HiddenKey") {
+ int targetChar, fingerChar, controlChar;
+ lineStream >> targetChar >> fingerChar >> controlChar;
+ m_connectorList.append( KTouchKeyConnector(keyAscII, targetChar, fingerChar, controlChar) );
+ }
+ else {
+ errorMsg = i18n("Missing key type in line '%1'.").arg(line);
+ return false;
+ }
+ // calculate the maximum extent of the keyboard on the fly...
+ m_keyboardWidth = std::max(m_keyboardWidth, x+w);
+ m_keyboardHeight = std::max(m_keyboardHeight, y+h);
+ } while (!in.atEnd() && !line.isNull());
+ updateColours();
+ return (!m_keyList.isEmpty()); // empty file means error
+}
+
+
+void KTouchKeyboard::updateColours() {
+ // loop over all key connections
+ for (QValueList<KTouchKeyConnector>::iterator it = m_connectorList.begin(); it!=m_connectorList.end(); ++it) {
+ QChar fingerChar = (*it).m_fingerKeyChar;
+ if (fingerChar == QChar(0)) continue;
+ QChar targetChar = (*it).m_targetKeyChar;
+ KTouchKey * self=NULL;
+ KTouchKey * colorSource=NULL;
+ // loop over all keys to find the key pointers
+ for (KTouchKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_keyChar==targetChar) self=key;
+ else if (key->m_keyChar==fingerChar) colorSource=key;
+ }
+ if (self && colorSource) {
+ if (self->type()!=KTouchKey::NORMAL_KEY)
+ continue;
+ KTouchNormalKey *nk = dynamic_cast<KTouchNormalKey*>(self);
+ if (colorSource->type()!=KTouchKey::FINGER_KEY) {
+ kdDebug() << "[KTouchKeyboard::updateColours] Colour source key '" << colorSource->m_keyText
+ << "' is not a finger key!" << endl;
+ if (nk) {
+ nk->m_colorIndex = 0;
+ }
+ continue;
+ }
+ if (nk) {
+ KTouchFingerKey *fk = dynamic_cast<KTouchFingerKey*>(colorSource);
+ if (fk) {
+ nk->m_colorIndex = fk->m_colorIndex;
+ }
+ }
+ }
+ }
+}
+
+*/
+
diff --git a/ktouch/src/ktouchkeyboard.h b/ktouch/src/ktouchkeyboard.h
new file mode 100644
index 00000000..88949537
--- /dev/null
+++ b/ktouch/src/ktouchkeyboard.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ * ktouchkeyboard.h *
+ * ---------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYBOARD_H
+#define KTOUCHKEYBOARD_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qvaluevector.h>
+
+#include "ktouchkeyconnector.h"
+#include "ktouchkey.h"
+
+class KURL;
+
+/// This class stores the keyboard layout and the connectivity between characters
+/// and the actual keys.
+class KTouchKeyboard {
+ public:
+ /// Default constructor, sets up the standard number keyboard.
+ KTouchKeyboard() { createDefault(); }
+ /// Clears the keyboard (resets all data)
+ void clear();
+ /// Loads a keyboard layout (old format) from file (returns true if successful).
+ bool load(QWidget * window, const KURL& url);
+ /// Loads a lecture (in XML format) from file (returns true if successful).
+ bool loadXML(QWidget * window, const KURL& url);
+ /// Saves the lecture data to file (returns true if successful).
+ bool saveXML(QWidget * window, const KURL& url) const;
+ /// Creates the default number keyboard.
+ void createDefault();
+ /// Updates the indices in the KTouchKeyConnector objects for faster access.
+ void updateConnections();
+
+ QValueVector<KTouchKey> m_keys; ///< Vector with key definitions.
+ QValueVector<KTouchKeyConnector> m_connectors; ///< Vector with connectivity data.
+
+ QString m_title; ///< Title of the keyboard (to appear in the menu).
+ QString m_comment; ///< Comments about the creator of the keyboard layout.
+ QString m_language; ///< Language ID of keyboard
+ QString m_fontSuggestions; ///< Suggestions of fonts to be used on the keys.
+
+ // These variables are recalculated after the keyboard was loaded.
+ int m_width; ///< The width of the keyboard (maximum of the sums of all keywidths in each line).
+ int m_height; ///< The height of the keyboard (sum of all key row heights).
+
+ private:
+ /// Loads keyboard data from file
+ bool read(QTextStream& in);
+ /// Loads keyboard data from file into an XML document
+ bool read(const QDomDocument& doc);
+ /// Saves keyboard data in the XML document
+ void write(QDomDocument& doc) const;
+};
+
+#endif // KTOUCHKEYBOARD_H
diff --git a/ktouch/src/ktouchkeyboardeditor.cpp b/ktouch/src/ktouchkeyboardeditor.cpp
new file mode 100644
index 00000000..c3aa93d2
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardeditor.cpp
@@ -0,0 +1,243 @@
+/***************************************************************************
+ * ktouchkeyboardeditor.cpp *
+ * ------------------------ *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * haavard@users.sourceforge.net, ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkeyboardeditor.h"
+#include "ktouchkeyboardeditor.moc"
+
+#include <qlabel.h>
+#include <qfont.h>
+
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <ksqueezedtextlabel.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <kfontdialog.h>
+#include <kdebug.h>
+
+#include <utility>
+
+#include "ktouch.h"
+#include "ktouchopenrequest.h"
+
+// **************************
+// ***** Public functions ***
+// **************************
+
+KTouchKeyboardEditor::KTouchKeyboardEditor(QWidget* parent, const char* name, bool modal, WFlags fl)
+ : KTouchKeyboardEditorDlg(parent,name, modal,fl)
+{
+}
+// -----------------------------------------------------------------------------
+
+bool KTouchKeyboardEditor::startEditor(const KURL& url) {
+ // call open request dialog and load a keyboard and start the dialogs event loop if
+ // the user did not cancel the open request dialog
+ if (openKeyboardFile(url)==QDialog::Accepted) {
+ exec();
+ return true;
+ }
+ else return false;
+}
+// -----------------------------------------------------------------------------
+
+
+// ************************
+// ***** Public slots *****
+// ************************
+
+
+void KTouchKeyboardEditor::fontBtnClicked() {
+ //kdDebug() << "Fontbutton clicked" << endl;
+ QFont f;
+ if (KFontDialog::getFont(f, false, this, true)==QDialog::Accepted) {
+ m_keyboard.m_fontSuggestions = f.toString();
+ // update font and keyboard display
+ titleEdit->setFont(f);
+ keyboardCommentEdit->setFont(f);
+ languageEdit->setFont(f);
+ update(); // trigger repaint of the keyboard.
+ setModified();
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchKeyboardEditor::openBtnClicked() {
+ saveModified(); // save if modified
+ openKeyboardFile("");
+}
+// -----------------------------------------------------------------------------
+
+void KTouchKeyboardEditor::saveBtnClicked() {
+ if (m_currentURL.isEmpty()) saveAsBtnClicked();
+ else {
+ transfer_from_dialog();
+ //m_keyboard.saveXML(this, m_currentURL);
+ setModified(false);
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchKeyboardEditor::saveAsBtnClicked() {
+ QString tmp = KFileDialog::getSaveFileName(QString::null,
+ i18n("*.keyboard.xml|KTouch Keyboard Files (*.keyboard.xml)\n*.*|All Files"), this, i18n("Save Keyboard Layout") );
+ if (!tmp.isEmpty()) {
+ transfer_from_dialog();
+ m_currentURL = tmp;
+ //m_keyboard.saveXML(this, m_currentURL);
+ setModified(false);
+ }
+}
+// -----------------------------------------------------------------------------
+
+/// Called when the "Add..." button was clicked
+void KTouchKeyboardEditor::addBtnClicked() {
+}
+// -----------------------------------------------------------------------------
+
+/// Called when the "Edit..." button was clicked
+void KTouchKeyboardEditor::editBtnClicked() {
+}
+// -----------------------------------------------------------------------------
+
+/// Called when the "Remove" button was clicked
+void KTouchKeyboardEditor::removeBtnClicked() {
+}
+// -----------------------------------------------------------------------------
+
+/// Called when the selection in the key list box has changed
+void KTouchKeyboardEditor::keySelectionChanged(QListBoxItem * item) {
+}
+// -----------------------------------------------------------------------------
+
+
+
+void KTouchKeyboardEditor::paintEvent(QPaintEvent *) {
+
+}
+// -----------------------------------------------------------------------------
+
+// ****************************
+// ***** Private functions ****
+// ****************************
+
+void KTouchKeyboardEditor::transfer_to_dialog() {
+ if (m_currentURL.isEmpty()) {
+ titleEdit->setText( i18n("untitled keyboard layout") );
+ keyboardCommentEdit->setText("");
+ }
+ else {
+ titleEdit->setText(m_keyboard.m_title);
+ keyboardCommentEdit->setText(m_keyboard.m_comment);
+ }
+ languageEdit->setText(m_keyboard.m_language);
+ kdDebug() << "Setting font '"<< m_keyboard.m_fontSuggestions <<"'" << endl;
+ if (!m_keyboard.m_fontSuggestions.isEmpty()) {
+ QFont f;
+ f.fromString(m_keyboard.m_fontSuggestions);
+ titleEdit->setFont(f);
+ keyboardCommentEdit->setFont(f);
+ languageEdit->setFont(f);
+ }
+ kdDebug() << "Adding key definitions to key list" << endl;
+ keyListBox->clear();
+ QValueVector<KTouchKey>::iterator it;
+ unsigned int min_x = 100000;
+ unsigned int max_x = 0;
+ unsigned int min_y = 100000;
+ unsigned int max_y = 0;
+ for( it = m_keyboard.m_keys.begin(); it != m_keyboard.m_keys.end(); ++it ) {
+ switch (it->m_type) {
+ case KTouchKey::NORMAL : keyListBox->insertItem("N '" + QString(it->m_primaryChar) + "'"); break;
+ case KTouchKey::FINGER : keyListBox->insertItem("F '" + QString(it->m_primaryChar) + "'"); break;
+ default : keyListBox->insertItem("O '" + it->m_otherKeyText + "'"); break;
+ }
+ min_x = std::min<unsigned int>(min_x, it->m_x);
+ max_x = std::max<unsigned int>(max_x, it->m_x+it->m_w);
+ min_y = std::min<unsigned int>(min_y, it->m_y);
+ max_y = std::max<unsigned int>(max_y, it->m_y+it->m_h);
+ }
+ dimensionsLabel->setText( i18n("Keyboard dimensions: %1 x %2").arg(max_x - min_x).arg(max_y - min_y) );
+}
+// -----------------------------------------------------------------------------
+
+void KTouchKeyboardEditor::transfer_from_dialog() {
+ m_keyboard.m_title = titleEdit->text();
+ if (m_keyboard.m_title.isEmpty()) m_keyboard.m_title = i18n("untitled keyboard layout");
+ m_keyboard.m_comment = keyboardCommentEdit->text();
+ m_keyboard.m_language = languageEdit->text();
+}
+// -----------------------------------------------------------------------------
+
+int KTouchKeyboardEditor::openKeyboardFile(const KURL& url) {
+ // First setup the open request dialog
+ KTouchOpenRequest dlg(this);
+ // Call the dialog
+ KURL new_url;
+ int result = dlg.requestFileToOpen(new_url,
+ i18n("Open keyboard file ..."),
+ i18n("Which keyboard file would you like to edit?"),
+ i18n("Edit current keyboard:"),
+ i18n("Open a default keyboard:"),
+ i18n("Open a keyboard file:"),
+ i18n("Create new keyboard!"),
+ url, KTouchPtr->lectureFiles(), i18n("<no keyboard files available>"));
+
+ if (result == QDialog::Accepted) {
+ // Ok, user confirmed the dialog, now lets get the url
+ m_currentURL = new_url;
+ // Try to load the keyboard, if that fails, we create a new keyboard instead
+ if (!m_currentURL.isEmpty() &&
+ !m_keyboard.load(this, m_currentURL) && !m_keyboard.loadXML(this, m_currentURL))
+ {
+ KMessageBox::sorry(this, i18n("Could not open the keyboard file, creating a new one instead!"));
+ m_currentURL = QString::null; // new keyboards haven't got a URL
+ m_keyboard.clear();
+ }
+ // If we have no URL, we create a new keyboard - can happen if either the user
+ // chose "new keyboard" or the chosen keyboard could not be opened
+ if (m_currentURL.isEmpty()) {
+ m_keyboard.clear();
+ setModified(true); // new keyboards are modified by default
+ }
+ else
+ setModified(false); // newly read keyboards are not modified in the begin
+ transfer_to_dialog(); // Update our editor with the keyboard data
+ return QDialog::Accepted;
+ }
+ else return QDialog::Rejected;
+}
+// -----------------------------------------------------------------------------
+
+void KTouchKeyboardEditor::setModified(bool flag) {
+ m_modified = flag;
+ if (!m_currentURL.isEmpty()) {
+ if (flag) this->setCaption("KTouch Keyboard Editor - " + m_currentURL.url() + i18n(" (modified)"));
+ else this->setCaption("KTouch Keyboard Editor - " + m_currentURL.url());
+ }
+ else
+ this->setCaption("KTouch Keyboard Editor - " + i18n("<unnamed keyboard file>"));
+}
+// -----------------------------------------------------------------------------
+
+bool KTouchKeyboardEditor::saveModified() {
+ if (!m_modified) return true;
+ // ok, ask the user to save the changes
+ int result = KMessageBox::questionYesNoCancel(this,
+ i18n("The keyboard has been changed. Do you want to save the changes?"),QString::null,KStdGuiItem::save(),KStdGuiItem::discard());
+ if (result == KMessageBox::Cancel) return false; // User aborted
+ if (result == KMessageBox::Yes) saveBtnClicked();
+ // if successfully saved the modified flag will be resetted in the saveBtnClicked() function
+ return true; // User acknowledged
+}
+// -----------------------------------------------------------------------------
diff --git a/ktouch/src/ktouchkeyboardeditor.h b/ktouch/src/ktouchkeyboardeditor.h
new file mode 100644
index 00000000..2c42a3a9
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardeditor.h
@@ -0,0 +1,113 @@
+/***************************************************************************
+ * ktouchkeyboardeditor.h *
+ * ---------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * haavard@users.sourceforge.net, ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYBOARDEDITOR_H
+#define KTOUCHKEYBOARDEDITOR_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ktouchkeyboardwidget.h"
+#include "ktouchkeyboardeditor_dlg.h"
+
+#include "ktouchkeyboard.h"
+
+#include <kurl.h>
+
+/// This is the KTouch keyboard editor dialog.
+///
+/// The keyboard edit dialog works like a standalone edit tool for editing keyboards.
+/// Upon opening of the dialog the 'open keyboard file' dialog box is shown where
+/// the user can either select a local keyboard file or load a keyboard file from
+/// somewhere. Then the user can edit the keyboard and save it (if desired under a
+/// different file name).
+/// The use of the editor is simple, just include ktouchkeyboardeditor.h and do
+/// @code
+/// KTouchKeyboardEditor dlg;
+/// bool ok = dlg.startEditor(current_keyboard);
+/// // current_keyboard should be the URL pointing to the current/default
+/// // keyboard or an empty URL
+/// @endcode
+/// @see startEditor() for details on the return value.
+class KTouchKeyboardEditor : public KTouchKeyboardEditorDlg {
+ Q_OBJECT
+
+ public:
+ /// Constructor.
+ KTouchKeyboardEditor(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ /// Default destructor.
+ ~KTouchKeyboardEditor() {}
+ /// Shows and executes the dialog (argument is the url to the default or
+ /// current keyboard file).
+ /// @return Returns 'true' if the dialog was properly executed (thus reloading
+ /// of the keyboard in KTouch is necessary) or 'false' if user canceled
+ /// the "Open request" dialog.
+ bool startEditor(const KURL& url);
+
+ public slots:
+ /// Called when the Font button was clicked.
+ virtual void fontBtnClicked();
+ /// Called when the Open button was clicked.
+ virtual void openBtnClicked();
+ /// Called when the Save button was clicked.
+ virtual void saveBtnClicked();
+ /// Called when the Save As button was clicked.
+ virtual void saveAsBtnClicked();
+ /// Called when the editor is closed.
+ virtual void closeQuery() { if (saveModified()) accept(); };
+ /// Called when the "Add..." button was clicked
+ virtual void addBtnClicked();
+ /// Called when the "Edit..." button was clicked
+ virtual void editBtnClicked();
+ /// Called when the "Remove" button was clicked
+ virtual void removeBtnClicked();
+ /// Called when the selection in the key list box has changed
+ virtual void keySelectionChanged(QListBoxItem * item);
+ /// Will be called whenever some changes are made.
+ void setModified() { setModified(true); }
+
+ protected slots:
+ /// Called when the editor is rejected (x clicked).
+ void reject() { closeQuery(); };
+
+
+ protected:
+ /// Draws the keyboard in the keyboardPreviewLabel.
+ void paintEvent(QPaintEvent *);
+
+ private:
+ /// Transfers data from the keyboard object to the dialog.
+ void transfer_to_dialog();
+ /// Transfers data from the dialog to the keyboard object.
+ void transfer_from_dialog();
+ /// Setups and opens the 'Open request dialog'. The url 'url' is used in the
+ /// open request dialog for the 'current' url selection. When the open request
+ /// dialog is closed the function attempts to load the keyboard or if that failes
+ /// creates a new, empty keyboard.
+ /// @return The function returns the return code from the open request dialog, so
+ /// that one can react on a "cancel" choice.
+ int openKeyboardFile(const KURL& url);
+ /// Changes the state of the lecture file (flag==true means modified).
+ void setModified(bool flag);
+ /// If the keyboard is modified the user is prompted to save it or throw away the changes.
+ /// If the user accepts the dialog the file is saved.
+ /// @return The function returns 'false' if the user aborted the save request, otherwise true.
+ bool saveModified();
+
+ KTouchKeyboard m_keyboard; ///< The keyboard data.
+ bool m_selecting; ///< Flag to prevent the selection slot from being selected twice.
+ bool m_modified; ///< Flag indicating whether the keyboard has been modified.
+ KURL m_currentURL; ///< URL of the current keyboard.
+};
+
+#endif // KTOUCHKEYBOARDEDITOR_H
diff --git a/ktouch/src/ktouchkeyboardeditor_dlg.ui b/ktouch/src/ktouchkeyboardeditor_dlg.ui
new file mode 100644
index 00000000..f6aa1009
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardeditor_dlg.ui
@@ -0,0 +1,406 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchKeyboardEditorDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KTouchKeyboardEditorDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>779</width>
+ <height>545</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Keyboard Layout Editor</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>fontButton</cstring>
+ </property>
+ <property name="text">
+ <string>Change Font...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>openButton</cstring>
+ </property>
+ <property name="text">
+ <string>Open...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>saveButton</cstring>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>saveAsButton</cstring>
+ </property>
+ <property name="text">
+ <string>Save As...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>quitButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Keyboard Layout</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>dimensionsLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Keyboard dimensions:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>keyboardPreviewLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>100</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Key Definitions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>keyListBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>addButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Add...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>editButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Edit...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>removeButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Key definition data:</string>
+ </property>
+ </widget>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>keyInfoText</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Keyboard Identification Data</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>titleLabel</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Keyboard title:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="2">
+ <property name="name">
+ <cstring>titleEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KTextEdit" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>keyboardCommentEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>70</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Comments:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Language id:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>languageEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>fontButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>fontBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>openButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>openBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>saveAsButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>saveAsBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>saveButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>saveBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>quitButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>closeQuery()</slot>
+ </connection>
+ <connection>
+ <sender>addButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>addBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>editButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>editBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>removeButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>removeBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>keyListBox</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>KTouchKeyboardEditorDlg</receiver>
+ <slot>keySelectionChanged(QListBoxItem*)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>openBtnClicked()</slot>
+ <slot>saveBtnClicked()</slot>
+ <slot>saveAsBtnClicked()</slot>
+ <slot>closeQuery()</slot>
+ <slot>fontBtnClicked()</slot>
+ <slot>addBtnClicked()</slot>
+ <slot>editBtnClicked()</slot>
+ <slot>removeBtnClicked()</slot>
+ <slot>keySelectionChanged(QListBoxItem*)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>ktextedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchkeyboardwidget.cpp b/ktouch/src/ktouchkeyboardwidget.cpp
new file mode 100644
index 00000000..6e92c99d
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardwidget.cpp
@@ -0,0 +1,532 @@
+/***************************************************************************
+ * ktouchkeyboardwidget.cpp *
+ * ------------------------ *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkeyboardwidget.h"
+#include "ktouchkeyboardwidget.moc"
+
+#include <algorithm>
+#include <set>
+
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <ktempfile.h>
+#include <klocale.h>
+#include <kio/netaccess.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+
+#include "prefs.h"
+#include "ktouchkeyconnector.h"
+
+// the margin between keyboard and widget frame
+const int MARGIN = 10;
+
+QMap<QChar, int> KTouchKeyboardWidget::m_keyCharMap;
+// --------------------------------------------------------------------------
+
+
+KTouchKeyboardWidget::KTouchKeyboardWidget(QWidget *parent)
+ : QWidget(parent), m_keyboardWidth(100), m_keyboardHeight(60), m_currentLayout(""),
+ m_hideKeyboard(false)
+{
+ setMinimumHeight(100); // when it's smaller you won't see anything
+ m_keyList.setAutoDelete(true); // the list is responsable for cleaning up
+}
+
+
+bool KTouchKeyboardWidget::loadKeyboard(QWidget * window, const KURL& url, QString* errorMsg) {
+ QString target;
+ if (KIO::NetAccess::download(url, target, window)) {
+ QString msg;
+ bool result = readKeyboard(target, msg);
+ KIO::NetAccess::removeTempFile(target);
+ if (!result && errorMsg!=NULL)
+ *errorMsg = i18n("Could not read the keyboard layout file '%1'. ").arg(url.url()) + msg;
+ return result;
+ }
+ else {
+ if (errorMsg!=NULL)
+ *errorMsg = i18n("Could not download/open keyboard layout file from '%1'.").arg(url.url());
+ return false;
+ }
+}
+
+
+void KTouchKeyboardWidget::saveKeyboard(QWidget * window, const KURL& url) {
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ return;
+ }
+
+ QTextStream out( &outfile );
+ out << "########################################## \n";
+ out << "# # \n";
+ out << "# Keyboard layout file for KTouch # \n";
+ out << "# # \n";
+ out << "########################################## \n";
+ out << "#\n";
+ out << endl;
+
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ switch (key->type()) {
+ case KTouchBaseKey::FINGER_KEY : out << "FingerKey "; break;
+ case KTouchBaseKey::NORMAL_KEY : out << "NormalKey "; break;
+ case KTouchBaseKey::CONTROL_KEY : out << "ControlKey "; break;
+ default : out << "NormalKey "; break;
+ }
+ QRect rect=key->frame();
+ out << key->m_keyChar.unicode() << '\t' << key->m_keyText << '\t'
+ << rect.left() << '\t' << rect.top() << '\t' << rect.width() << '\t' << rect.height() << endl;
+ }
+
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ temp->unlink();
+ delete temp;
+ }
+}
+
+void KTouchKeyboardWidget::applyPreferences(QWidget * window, bool silent) {
+ m_hideKeyboard = Prefs::hideKeyboard();
+ if (m_hideKeyboard)
+ setMaximumHeight(100);
+ else
+ setMaximumHeight(10000);
+ // let's check whether the keyboard layout has changed
+ if (Prefs::currentKeyboardFile() != m_currentLayout) {
+ // if the layout is the number layout just create it and we're done
+ //kdDebug() << "[KTouchKeyboardWidget::applyPreferences] keyboard = " << Prefs::currentKeyboardFile() << endl;
+ if (Prefs::currentKeyboardFile()=="number.keyboard") {
+ createDefaultKeyboard();
+ resizeEvent(NULL);
+ return;
+ }
+ // ok, let's load this layout
+ if (silent) {
+ // during initialisation we don't want to have a message box, that's why this is silent
+ if (!loadKeyboard(window, KURL::fromPathOrURL( Prefs::currentKeyboardFile() )))
+ createDefaultKeyboard();
+ else
+ m_currentLayout=Prefs::currentKeyboardFile();
+ }
+ else {
+ QString errorMsg;
+ if (!loadKeyboard(window, KURL::fromPathOrURL( Prefs::currentKeyboardFile() ), &errorMsg)) {
+ KMessageBox::error( 0, i18n("Error reading the keyboard layout; the default number keypad will "
+ "be created instead. You can choose another keyboard layout in the preferences dialog."),
+ errorMsg);
+ createDefaultKeyboard();
+ }
+ else
+ m_currentLayout=Prefs::currentKeyboardFile();
+ }
+ }
+ updateColours(); // we recreate the colour connections
+ // assign keyboard font to keys
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (Prefs::overrideKeyboardFont())
+ key->m_font = Prefs::keyboardFont();
+ else
+ key->m_font = Prefs::font();
+ }
+ // kdDebug() << "[KTouchKeyboard::applyPreferences] Assigned key font" << endl;
+ resizeEvent(NULL); // paint the keyboard
+ newKey(m_nextKey); // and finally display the "next to be pressed" key again
+}
+
+
+void KTouchKeyboardWidget::newKey(const QChar& nextChar) {
+ if (m_hideKeyboard) return;
+ QPainter painter(this);
+ painter.translate(m_shift, MARGIN);
+ // first clean the markings on all keys
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_isActive || key->m_isNextKey) {
+ key->m_isActive=key->m_isNextKey=false;
+ key->paint(painter);
+ }
+ }
+
+ if (Prefs::showAnimation()){ // only do this if we want to show animation.
+ // find the key in the key connector list
+ QValueList<KTouchKeyConnection>::iterator keyIt = m_connectorList.begin();
+ while (keyIt!=m_connectorList.end() && (*keyIt).m_keyChar!=nextChar) ++keyIt;
+ // if found mark the appropriate keys
+ if (keyIt!=m_connectorList.end()) {
+ QChar targetChar = (*keyIt).m_targetKeyChar;
+ QChar fingerChar = (*keyIt).m_fingerKeyChar;
+ QChar controlChar = (*keyIt).m_controlKeyChar;
+ // find the keys in the keylist
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_keyChar==QChar(0)) continue; // skip decorative keys
+ if (key->m_keyChar==targetChar) key->m_isNextKey=true;
+ else if (key->m_keyChar==fingerChar) key->m_isActive=true;
+ else if (key->m_keyChar==controlChar) key->m_isActive=true;
+ if (key->m_isActive || key->m_isNextKey)
+ key->paint(painter);
+ }
+ }
+ m_nextKey = nextChar;
+ }
+}
+
+
+void KTouchKeyboardWidget::paintEvent(QPaintEvent *) {
+ if (m_hideKeyboard) return;
+ QPainter p(this);
+ p.translate(m_shift, MARGIN);
+ // just print all visible keys
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next())
+ key->paint(p);
+
+/* // TODO : later
+
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::colorScheme()];
+ for (QValueVector<KTouchKey>::iterator it = m_keys.begin(); it != m_keys.end(); ++it) {
+ // determine colors
+ QColor textColor;
+ if (it->m_type == KTouchKey::NORMAL || it->m_type == KTouchKey::FINGER) {
+ if (is_next_key) {
+ // mark the key as "next"
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_textH;
+ }
+ else {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_text;
+ };
+ }
+ else {
+ p.setBrush( colorScheme.m_cBackground );
+ p.setPen( colorScheme.m_cText );
+ }
+
+ p.setPen(textColor);
+ p.fillRect(m_xS, m_xS, m_xS, m_xS, p.brush());
+ p.drawRect(m_xS, m_xS, m_xS, m_xS);
+
+ p.setFont( m_font );
+ p.drawText(it->m_xS, it->m_yS, it->m_wS, it->m_hS,
+ QPainter::AlignCenter, m_keyText);
+
+ }
+*/
+ // TODO : later copy pre-rendered and pre-scaled characters to screen
+}
+
+void KTouchKeyboardWidget::resizeEvent(QResizeEvent *) {
+ // kdDebug() << "[KTouchKeyboard::resizeEvent] Window = " << width() << "x" << height() << endl;
+ // kdDebug() << "[KTouchKeyboard::resizeEvent] Keyboard = " << m_keyboardWidth << "x" << m_keyboardHeight << endl;
+ double hScale = static_cast<double>(width()-2*MARGIN)/m_keyboardWidth;
+ double vScale = static_cast<double>(height()-2*MARGIN)/m_keyboardHeight;
+ double scale = std::max(1.0, std::min(hScale, vScale));
+ // kdDebug() << "[KTouchKeyboard::resizeEvent] using scale = " << scale << endl;
+ m_shift = (width() - static_cast<int>(m_keyboardWidth*scale))/2;
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next())
+ key->resize(scale); // resize all keys
+ for (QValueVector<KTouchKey>::iterator it = m_keys.begin(); it != m_keys.end(); ++it) {
+ it->resize(scale); // resize all keys
+ }
+ update(); // and finally redraw the keyboard
+}
+
+
+void KTouchKeyboardWidget::createDefaultKeyboard() {
+ // let's create a default keyboard
+ int keySpacing = 4;
+ int keyHeight = 20;
+ int keyWidth = 20;
+ int col = keyWidth+keySpacing;
+ int row = keyHeight+keySpacing;
+ // first let's create the "visible" keys, that means all keys that will be displayed
+ // Note: purely decorative keys get a key char code of 0!
+ m_keyList.clear();
+ m_keyList.append( new KTouchControlKey( 0, "Num", 0, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '/', "/", col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '*', "*", 2*col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '-', "-", 3*col, 0, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '7', "7", 0, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '8', "8", col, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '9', "9", 2*col, row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '4', "4", 0, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '5', "5", col, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '6', "6", 2*col, 2*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '1', "1", 0, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '2', "2", col, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '3', "3", 2*col, 3*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '0', "0", 0, 4*row, 2*keyWidth+keySpacing, keyHeight) );
+ m_keyList.append( new KTouchNormalKey( '.', ".", 2*col, 4*row, keyWidth, keyHeight) );
+ m_keyList.append( new KTouchFingerKey( '+', "+", 3*col, row, keyWidth, 2*keyHeight+keySpacing) );
+ m_keyList.append( new KTouchControlKey(13, "Enter", 3*col, 3*row,keyWidth, 2*keyHeight+keySpacing) );
+ m_keyList.append( new KTouchControlKey(8, "BackSpace", 5*col, 0, 2*keyWidth+keySpacing, keyHeight) );
+ m_keyboardWidth = 7*col;
+ m_keyboardHeight = 5*row;
+
+ // now we need to create the connections between the characters that can be typed and the
+ // keys that need to be displayed on the keyboard
+ // The arguments to the constructor are: keychar, targetkey, fingerkey, controlkey
+ m_connectorList.clear();
+ m_connectorList.append( KTouchKeyConnection('/', '/', '5', 0) );
+ m_connectorList.append( KTouchKeyConnection('*', '*', '6', 0) );
+ m_connectorList.append( KTouchKeyConnection('-', '-', '+', 0) );
+ m_connectorList.append( KTouchKeyConnection('+', '+', 0, 0) );
+ m_connectorList.append( KTouchKeyConnection('.', '.', '6', 0) );
+ m_connectorList.append( KTouchKeyConnection(',', '.', '6', 0) );
+ m_connectorList.append( KTouchKeyConnection('7', '7', '4', 0) );
+ m_connectorList.append( KTouchKeyConnection('8', '8', '5', 0) );
+ m_connectorList.append( KTouchKeyConnection('9', '9', '6', 0) );
+ m_connectorList.append( KTouchKeyConnection('4', '4', 0, 0) );
+ m_connectorList.append( KTouchKeyConnection('5', '5', 0, 0) );
+ m_connectorList.append( KTouchKeyConnection('6', '6', 0, 0) );
+ m_connectorList.append( KTouchKeyConnection('1', '1', '4', 0) );
+ m_connectorList.append( KTouchKeyConnection('2', '2', '5', 0) );
+ m_connectorList.append( KTouchKeyConnection('3', '3', '6', 0) );
+ m_connectorList.append( KTouchKeyConnection('0', '0', 0, 0) );
+ m_connectorList.append( KTouchKeyConnection( 8, 8, 0, 0) );
+ m_connectorList.append( KTouchKeyConnection( 13, 13, '+', 0) );
+ updateColours();
+ m_currentLayout="number.keyboard";
+
+ // create keyboard geometry for new keyboard data
+
+ int sp = 10;
+ int h = 50;
+ int w = 50;
+ col = w+sp;
+ row = h+sp;
+
+ m_keys.clear();
+ m_keys.append( KTouchKey( 0, 0, w, h, QString("Num")) ); // 0
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, col, 0, w, h, '/') ); // 1
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 2*col, 0, w, h, '*') ); // 2
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 3*col, 0, w, h, '-') ); // 3
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 0, row, w, h, '7') ); // 4
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, col, row, w, h, '8') ); // 5
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 2*col, row, w, h, '9') ); // 6
+ m_keys.append( KTouchKey(KTouchKey::FINGER, 0, 2*row, w, h, '4') ); // 7 ***
+ m_keys.append( KTouchKey(KTouchKey::FINGER, col, 2*row, w, h, '5') ); // 8 ***
+ m_keys.append( KTouchKey(KTouchKey::FINGER, 2*col, 2*row, w, h, '6') ); // 9 ***
+ m_keys.append( KTouchKey(KTouchKey::FINGER, 3*col, row, w, 2*h+sp, '+') ); // 10 ***
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 0, 3*row, w, h, '1') ); // 11
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, col, 3*row, w, h, '2') ); // 12
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 2*col, 3*row, w, h, '3') ); // 13
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 0, 4*row, 2*w+sp, h, '0') ); // 14
+ m_keys.append( KTouchKey(KTouchKey::NORMAL, 2*col, 4*row, w, h, '.') ); // 15
+ m_keys.append( KTouchKey(KTouchKey::ENTER, 3*col, 3*row, w, 2*h+sp, 0) ); // 16
+ m_keys.append( KTouchKey(KTouchKey::BACKSPACE, 5*col, 0, 2*w+sp, h, 0) ); // 17
+ // number the keys for reference
+ for (unsigned int i=0; i<m_keys.size(); ++i)
+ m_keys[i].m_number = i;
+ // create key connections
+ m_keyConnections.clear();
+ // KTouchKeyConnector(char, target, finger, modifier)
+ m_keyConnections.append( KTouchKeyConnector('/', 1, 8, 0) );
+ m_keyConnections.append( KTouchKeyConnector('*', 2, 9, 0) );
+ m_keyConnections.append( KTouchKeyConnector('-', 3, 10, 0) );
+ m_keyConnections.append( KTouchKeyConnector('7', 4, 7, 0) );
+ m_keyConnections.append( KTouchKeyConnector('8', 5, 8, 0) );
+ m_keyConnections.append( KTouchKeyConnector('9', 6, 9, 0) );
+ m_keyConnections.append( KTouchKeyConnector('4', 7, 7, 0) ); // ***
+ m_keyConnections.append( KTouchKeyConnector('5', 8, 8, 0) ); // ***
+ m_keyConnections.append( KTouchKeyConnector('6', 9, 9, 0) ); // ***
+ m_keyConnections.append( KTouchKeyConnector('+', 10, 10, 0) ); // ***
+ m_keyConnections.append( KTouchKeyConnector('1', 11, 7, 0) );
+ m_keyConnections.append( KTouchKeyConnector('2', 12, 8, 0) );
+ m_keyConnections.append( KTouchKeyConnector('3', 13, 9, 0) );
+ m_keyConnections.append( KTouchKeyConnector('0', 14, 7, 0) );
+ m_keyConnections.append( KTouchKeyConnector('.', 15, 9, 0) );
+ m_keyConnections.append( KTouchKeyConnector(QChar(13), 16, 10, 0) );
+ m_keyConnections.append( KTouchKeyConnector(QChar(8), 17, 0, 0) );
+}
+
+
+bool KTouchKeyboardWidget::readKeyboard(const QString& fileName, QString& errorMsg) {
+ QFile infile(fileName);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ errorMsg = i18n("Could not open file.");
+ return false;
+ }
+ QTextStream in( &infile );
+ in.setEncoding(QTextStream::UnicodeUTF8);
+ QString line;
+ m_keyList.clear(); // empty the keyboard
+ m_connectorList.clear(); // clear the connections
+ m_keyboardWidth=0;
+ m_keyboardHeight=0;
+ std::set<QChar> keys;
+ // now loop until end of file is reached
+ do {
+ // skip all empty lines or lines containing a comment (starting with '#')
+ do { line = in.readLine().stripWhiteSpace(); }
+ while (!line.isNull() && (line.isEmpty() || line[0]=='#'));
+ // Check if end of file encountered and if that is the case -> bail out at next while
+ if (line.isNull()) continue;
+
+ // 'line' should now contain a key specification
+ QTextStream lineStream(line, IO_ReadOnly);
+ QString keyType;
+ int keyAscII;
+ QString keyText;
+ int x(0), y(0), w(0), h(0);
+ lineStream >> keyType >> keyAscII;
+ if (keyType=="FingerKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ if (w==0 || h==0)
+ w=h=8; // default values for old keyboard files
+ m_keyList.append( new KTouchFingerKey(keyAscII, keyText, x+1, y+1, w, h) );
+ m_connectorList.append( KTouchKeyConnection(keyAscII, keyAscII, 0, 0) );
+// kdDebug() << "read : F : unicode = " << keyAscII << " char = " << QChar(keyAscII) << endl;
+ }
+ else if (keyType=="ControlKey") {
+ lineStream >> keyText >> x >> y >> w >> h;
+ m_keyList.append( new KTouchControlKey(keyAscII, keyText, x+1, y+1, w-2, h-2) );
+ m_connectorList.append( KTouchKeyConnection(keyAscII, keyAscII, 0, 0) );
+// kdDebug() << "read : C : unicode = " << keyAscII << " char = " << keyText << endl;
+ }
+ else if (keyType=="NormalKey") {
+ int fingerCharCode;
+ lineStream >> keyText >> x >> y >> fingerCharCode;
+ w=h=8; // default values for old keyboard files
+ // retrieve the finger key with the matching char
+ m_keyList.append( new KTouchNormalKey(keyAscII, keyText, x+1, y+1, w, h) );
+ m_connectorList.append( KTouchKeyConnection(keyAscII, keyAscII, fingerCharCode, 0) );
+// kdDebug() << "read : N : unicode = " << keyAscII << " char = " << QChar(keyAscII) << endl;
+ } else if (keyType=="HiddenKey") {
+ int targetChar, fingerChar, controlChar;
+ lineStream >> targetChar >> fingerChar >> controlChar;
+ m_connectorList.append( KTouchKeyConnection(keyAscII, targetChar, fingerChar, controlChar) );
+// kdDebug() << "read : H : unicode = " << keyAscII << " char = " << QChar(keyAscII) << " target = " << targetChar << " finger = " << fingerChar << " control = " << controlChar << endl;
+
+ }
+ else {
+ errorMsg = i18n("Missing key type in line '%1'.").arg(line);
+ return false;
+ }
+ if (keys.find(keyAscII)!=keys.end()) {
+ kdDebug() << "WARNING: Duplicate entry for char '"+keyText+"' with Unicode " << keyAscII << endl;
+ }
+ else
+ keys.insert(keyAscII);
+
+ keys.insert(keyAscII);
+
+
+ // calculate the maximum extent of the keyboard on the fly...
+ m_keyboardWidth = std::max(m_keyboardWidth, x+w);
+ m_keyboardHeight = std::max(m_keyboardHeight, y+h);
+ } while (!in.atEnd() && !line.isNull());
+// kdDebug() << "showing all unicode numbers in this file" << endl;
+/* for (std::set<QChar>::iterator it = keys.begin(); it != keys.end(); ++it)
+ kdDebug() << *it << endl;
+*/
+// kdDebug() << "num chars = " << keys.size() << endl;
+// kdDebug() << "num key connections = " << m_connectorList.size() << endl;
+
+ updateColours();
+ return (!m_keyList.isEmpty()); // empty file means error
+}
+
+
+void KTouchKeyboardWidget::updateColours() {
+// kdDebug() << "KTouchKeyboardWidget::updateColours()" << endl;
+ // old functionality : loop over all key connections
+ m_keyCharMap.clear();
+ unsigned int counter = 0;
+ for (QValueList<KTouchKeyConnection>::iterator it = m_connectorList.begin(); it!=m_connectorList.end(); ++it) {
+ // store finger and target characters
+ QChar fingerChar = (*it).m_fingerKeyChar;
+ QChar targetChar = (*it).m_targetKeyChar; // this is the _base_ character of the key that needs to be highlighted
+ QChar ch = (*it).m_keyChar;
+
+/* kdDebug() << "Key #"<<++counter<<": " << ch << "(" << ch.unicode() << ") "
+ << "target = " << targetChar << "(" << targetChar.unicode() << ") "
+ << "finger = " << fingerChar << "(" << fingerChar.unicode() << ")" << endl;
+*/
+ m_keyCharMap[ch] = -1;
+
+ if (fingerChar == QChar(0)) {
+// kdDebug() << "skipped char = " << targetChar << endl;
+ continue; // skips keys that don't have finger keys assigned
+ }
+
+ KTouchBaseKey * self=NULL;
+ KTouchBaseKey * colorSource=NULL;
+ // loop over all keys to find the key pointers
+ for (KTouchBaseKey * key = m_keyList.first(); key; key = m_keyList.next()) {
+ if (key->m_keyChar==targetChar) self=key;
+ else if (key->m_keyChar==fingerChar) colorSource=key;
+ }
+ // ok, by now we should have found a finger and target char pointer
+ if (self && colorSource) {
+// kdDebug() << "Key " << ++counter << " keychar = " << ch << " target = " << targetChar << " finger = " << fingerChar << endl;
+ // skip target keys that are actually control, finger or hidden keys
+ if (self->type()!=KTouchBaseKey::NORMAL_KEY) continue;
+ // try to downcast to get a normal key pointer
+ KTouchNormalKey *nk = dynamic_cast<KTouchNormalKey*>(self);
+ // skip if we couldn't downcast
+ if (!nk) {
+ kdDebug() << "Couldn't downcast to normal key for targer char = " << targetChar << endl;
+ continue;
+ }
+ // if our color source is not a valid finger key, skip with a warning
+ if (colorSource->type()!=KTouchBaseKey::FINGER_KEY) {
+ kdDebug() << "[KTouchKeyboard::updateColours] Colour source key '" << colorSource->m_keyText
+ << "' is not a finger key!" << endl;
+ continue;
+ }
+ // finally store the color code
+ KTouchFingerKey *fk = dynamic_cast<KTouchFingerKey*>(colorSource);
+ if (fk) {
+ nk->m_colorIndex = fk->m_colorIndex;
+ m_keyCharMap[ch] = fk->m_colorIndex;
+// kdDebug() << "char = " << targetChar << " index = " << fk->m_colorIndex << endl;
+ }
+ }
+ }
+// kdDebug() << "Colormap has " << m_keyCharMap.count() << " entries" << endl;
+
+/*
+ // new functionality
+ m_keyMap.clear();
+ m_colorMap.clear();
+ for (unsigned int i=0; i<m_keys.size(); ++i)
+ m_keyMap[i] = -1;
+ int c_index = 0;
+ for (QValueVector<KTouchKeyConnector>::iterator it = m_keyConnections.begin();
+ it!=m_keyConnections.end(); ++it)
+ {
+ if (it->m_targetKeyIndex == -1) continue;
+ int n = it->m_targetKeyIndex;
+ switch (m_keys[n].m_type) {
+ case KTouchKey::NORMAL : m_keyMap[n] = it->m_fingerKeyIndex; break;
+ case KTouchKey::FINGER : m_keyMap[n] = it->m_fingerKeyIndex;
+ m_colorMap[n] = c_index++;
+ c_index %= 8; break;
+ default : ;
+ }
+ }
+*/
+}
+
diff --git a/ktouch/src/ktouchkeyboardwidget.h b/ktouch/src/ktouchkeyboardwidget.h
new file mode 100644
index 00000000..9ba71d8f
--- /dev/null
+++ b/ktouch/src/ktouchkeyboardwidget.h
@@ -0,0 +1,98 @@
+/***************************************************************************
+ * ktouchkeyboardwidget.h *
+ * ---------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * haavard@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYBOARDWIDGET_H
+#define KTOUCHKEYBOARDWIDGET_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qwidget.h>
+#include <qvaluevector.h>
+#include <qmap.h>
+#include "ktouchkeys.h"
+
+#include "ktouchkey.h" // new class
+#include "ktouchkeyconnector.h" // new class
+
+class KURL;
+
+/** This is the keyboard widget at the bottom of the training screen.
+ * In addition to the painting functions this class has the member
+ * functions loadKeyboard() and saveKeyboard() which can read and write
+ * a keyboard layout from/into a file.<p>
+ * The keyboard is drawn in the paintEvent() member function. The
+ * resizing, that means the recalculation of m_shift is
+ * done in the resizeEvent() member function.<p>
+ * The state of keyboard and keys does not change while it is
+ * repainted or resized. Only when a new character has been typed
+ * and the newKey() slot is called the state changes (and thus the
+ * activated keys and finger key animations etc.)
+ */
+class KTouchKeyboardWidget : public QWidget {
+ Q_OBJECT
+ public:
+ /// Constructor
+ KTouchKeyboardWidget(QWidget *parent);
+ /// Reads a keyboard layout from the given URL.
+ /// The function returns 'true' when the reading was successful or 'false' if not. In this
+ /// case the optional parameter errorMsg contains the error message.
+ bool loadKeyboard(QWidget * window, const KURL& url, QString* errorMsg=NULL);
+ /// Saves the keyboard layout to the URL.
+ void saveKeyboard(QWidget * window, const KURL& url);
+ /// Applies preferences to the keyboard layout and the keys.
+ /// This means that the layout is basically recreated and if the layout type/language
+ /// changed it will be reloaded.
+ void applyPreferences(QWidget * window, bool silent);
+
+ public slots:
+ /// This function displays the next key (or key combination) the user has to press.
+ void newKey(const QChar& nextChar);
+
+ protected:
+ /// Draws the keyboard.
+ void paintEvent(QPaintEvent *);
+ /// Resizes (recalculates m_shift and m_scale) and redraws the keyboard.
+ void resizeEvent(QResizeEvent *);
+
+ private:
+ /// Does what the name says (create a default keyboard which is a number keypad).
+ /// This function is needed in case there no keyboard file could be found.
+ void createDefaultKeyboard();
+ /// Does the actual reading.
+ bool readKeyboard(const QString& fileName, QString& errorMsg);
+ /// Assigns the background colours to the normal keys, which have a finger key assigned.
+ void updateColours();
+
+ // *** new data storage classes ***
+ QValueVector<KTouchKey> m_keys; ///< The geometrical key data.
+ QValueVector<KTouchKeyConnector> m_keyConnections; ///< Contains the character - key associations.
+ QMap<unsigned int, int> m_keyMap; ///< Links target keys with finger keys: m_keyMap[target_key] = finger_key
+ QMap<unsigned int, unsigned int> m_colorMap; ///< Links finger keys with color indices: m_colorMap[finger_key] = color_index in color scheme
+
+ // *** old data storage classes ***
+ QPtrList<KTouchBaseKey> m_keyList; ///< The pointer list with base class pointers to the keys.
+ QValueList<KTouchKeyConnection> m_connectorList; ///< Contains the character - key associations.
+
+ static QMap<QChar, int> m_keyCharMap; ///< Links target keys with finger keys: m_keyCharMap[target_key_char] = color_index
+
+ int m_keyboardWidth; ///< The width of the keyboard (maximum of the sums of all keywidths in each line).
+ int m_keyboardHeight; ///< The height of the keyboard (sum of all key row heights).
+ double m_shift; ///< The horizontal shift for the keyboard.
+ QString m_currentLayout; ///< The name of the currently used layout.
+ QChar m_nextKey; ///< The next to be pressed character.
+
+ bool m_hideKeyboard; ///< If true, the keyboard won't be shown.
+};
+
+#endif // KTOUCHKEYBOARDWIDGET_H
diff --git a/ktouch/src/ktouchkeyconnector.cpp b/ktouch/src/ktouchkeyconnector.cpp
new file mode 100644
index 00000000..2546400f
--- /dev/null
+++ b/ktouch/src/ktouchkeyconnector.cpp
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * ktouchkeyconnetor.cpp *
+ * --------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkeyconnector.h"
+
+// Reads the key connector data from the DomElement
+bool KTouchKeyConnector::read(QDomNode node) {
+/* QDomNode newChars = in.namedItem("NewCharacters");
+ if (newChars.isNull()) m_newChars = i18n("basically all characters on the keyboard","abcdefghijklmnopqrstuvwxyz");
+ else m_newChars = newChars.firstChild().nodeValue();
+ QDomNode levelComment = in.namedItem("LevelComment");
+ if (!levelComment.isNull()) m_comment = levelComment.firstChild().nodeValue();
+ m_lines.clear();
+ QDomNode line = in.namedItem("Line");
+ while ( !line.isNull() ) {
+ m_lines.push_back( line.firstChild().nodeValue() );
+ line = line.nextSibling();
+ }
+ if (m_lines.empty()) {
+ createDefault();
+ return false;
+ }
+*/
+ return true;
+}
+
+// Creates a new DomElement, writes the key connector data into it and appends it to the root object.
+void KTouchKeyConnector::write(QDomDocument& doc, QDomElement& root) const {
+/* QDomElement element = doc.createElement("KeyConnector");
+ QDomText textnode = doc.createTextNode(QString(m_keyChar));
+ element.appendChild(textnode);
+ element.setAttribute("TargetKeyChar", QString(m_targetKeyChar));
+ if (m_fingerKeyChar != QChar(0))
+ element.setAttribute("FingerKeyChar", QString(m_fingerKeyChar));
+ if (!m_controlKeyId.isEmpty())
+ element.setAttribute("ControlKeyId", m_controlKeyId);
+ root.appendChild(element);
+*/
+}
+
diff --git a/ktouch/src/ktouchkeyconnector.h b/ktouch/src/ktouchkeyconnector.h
new file mode 100644
index 00000000..a8d20dea
--- /dev/null
+++ b/ktouch/src/ktouchkeyconnector.h
@@ -0,0 +1,48 @@
+/***************************************************************************
+ * ktouchkeyconnetor.h *
+ * ------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYCONNECTOR_H
+#define KTOUCHKEYCONNECTOR_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qdom.h>
+#include <qvaluevector.h>
+#include "ktouchkey.h"
+
+ /// The KTouchKeyConnector class contains the information about the character that has to
+ /// be pressed and the keys on the keyboard that should be highlighted.
+ /// It associates a character with a target key and optionally a finger and/or control key.
+class KTouchKeyConnector {
+ public:
+ KTouchKeyConnector() {}
+ /// Constructor
+ KTouchKeyConnector(QChar keyChar, unsigned int target_key, unsigned int finger_key,
+ unsigned int modifier_key)
+ : m_keyChar(keyChar), m_targetKeyIndex(target_key), m_fingerKeyIndex(finger_key),
+ m_modifierKeyIndex(modifier_key)
+ {}
+
+ /// Reads the key connector data from the DomElement
+ bool read(QDomNode node);
+ /// Creates a new DomElement, writes the key connector data into it and appends it to the root object.
+ void write(QDomDocument& doc, QDomElement& root) const;
+
+ QChar m_keyChar; ///< This is the character that has to be pressed to access this key.
+ int m_targetKeyIndex; ///< Index of the target key (-1 if none).
+ int m_fingerKeyIndex; ///< Index of the finger key (-1 if none).
+ int m_modifierKeyIndex; ///< Index of the modifier key (-1 if none).
+};
+
+#endif // KTOUCHKEYCONNECTOR_H
diff --git a/ktouch/src/ktouchkeys.cpp b/ktouch/src/ktouchkeys.cpp
new file mode 100644
index 00000000..c254682b
--- /dev/null
+++ b/ktouch/src/ktouchkeys.cpp
@@ -0,0 +1,223 @@
+/***************************************************************************
+ * ktouchkeys.cpp *
+ * -------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchkeys.h"
+#include <kdebug.h>
+#include <algorithm> // for std::min
+
+//#include "ktouch.h"
+#include "prefs.h"
+#include "ktouchcolorscheme.h"
+
+// Initialisation of static variables
+int KTouchFingerKey::m_fingerKeyCount = 0;
+// -----------------------------------------------------------------------------
+
+
+// ***** Implementation of class KTouchKey ****
+
+void KTouchBaseKey::paint(QPainter& p) const {
+ // We simply paint the key using the current brush and pen, so the derived classes
+ // will have to care about that
+ p.fillRect(m_xS, m_yS, m_wS, m_hS, p.brush());
+ p.drawRect(m_xS, m_yS, m_wS, m_hS);
+}
+
+void KTouchBaseKey::resize(double scale) {
+ m_xS = static_cast<int>(scale*m_x);
+ m_yS = static_cast<int>(scale*m_y);
+ m_wS = static_cast<int>(scale*m_w);
+ m_hS = static_cast<int>(scale*m_h);
+ // we set the font from the keyboard widget
+ m_font=Prefs::keyboardFont();
+ m_font.setPointSize( static_cast<int>(std::min(m_wS,m_hS)/m_font_scale) );
+}
+// -----------------------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchNormalKey ****
+
+KTouchNormalKey::KTouchNormalKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchBaseKey(keyChar, keyText, x, y, w, h), m_colorIndex(0)
+{
+ m_type = NORMAL_KEY;
+ m_font_scale =2;
+}
+
+void KTouchNormalKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ QColor textColor;
+ if (m_isNextKey) {
+ // mark the key as "next"
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_textH;
+ }
+ else {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_text;
+ };
+ KTouchBaseKey::paint(p); // call the parents paint() function
+ p.setPen(textColor);
+
+ p.setFont( m_font );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+}
+// --------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchFingerKey ****
+
+KTouchFingerKey::KTouchFingerKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchNormalKey(keyChar, keyText, x, y, w, h)
+{
+ m_colorIndex = m_fingerKeyCount++;
+ if (m_colorIndex>=8) {
+ kdDebug() << "[KTouchFingerKey::KTouchFingerKey] Number of finger keys = "
+ << m_colorIndex << "! Setting colour index to 0" << endl;
+ m_colorIndex=0;
+ };
+ m_type = FINGER_KEY;
+ m_font_scale =2;
+}
+
+void KTouchFingerKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ p.setFont( m_font );
+ if (m_isActive) {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p); // draw background and frame
+ p.setPen( QPen(colorScheme.m_frame,3) );
+ p.drawRect(m_xS+2, m_yS+2, m_wS-4, m_hS-4); // mark it as "active"
+ p.setPen( colorScheme.m_text );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ }
+ else if (m_isNextKey) {
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p);
+ p.setPen( colorScheme.m_textH );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ }
+ else {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p);
+ p.drawRoundRect(m_xS+2, m_yS+2, m_wS-4, m_hS-4);
+ p.setPen( colorScheme.m_text );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ };
+}
+// --------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchControlKey ****
+
+KTouchControlKey::KTouchControlKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchBaseKey(keyChar, keyText, x, y, w, h)
+{
+ m_type = CONTROL_KEY;
+ m_font_scale = 4;
+}
+
+void KTouchControlKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ p.setFont( m_font );
+ QColor textColor;
+ if (m_isActive) {
+ p.setBrush( colorScheme.m_cBackgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_cTextH;
+ }
+ else if (m_isNextKey) {
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_textH;
+ }
+ else {
+ p.setBrush( colorScheme.m_cBackground );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_cText;
+ };
+ KTouchBaseKey::paint(p);
+ p.setPen( textColor );
+ int h = std::min(m_wS, m_hS);
+ int ch = static_cast<int>(h*0.5); // the height for the special chars
+ if (m_keyText=="Shift") {
+ int x = m_xS+h/2;
+ int y = m_yS+m_hS/2;
+ p.moveTo(x-ch/2, y);
+ p.lineTo(x-ch/4, y);
+ p.lineTo(x-ch/4, y+ch/2);
+ p.lineTo(x+ch/4, y+ch/2);
+ p.lineTo(x+ch/4, y);
+ p.lineTo(x+ch/2, y);
+ p.lineTo(x, y-ch/2);
+ p.lineTo(x-ch/2, y);
+ }
+ else if (m_keyText=="CapsLock") {
+ int x = m_xS+h/2;
+ int y = m_yS+m_hS/2;
+ p.moveTo(x-ch/2, y);
+ p.lineTo(x-ch/4, y);
+ p.lineTo(x-ch/4, y-ch/2);
+ p.lineTo(x+ch/4, y-ch/2);
+ p.lineTo(x+ch/4, y);
+ p.lineTo(x+ch/2, y);
+ p.lineTo(x, y+ch/2);
+ p.lineTo(x-ch/2, y);
+ }
+ else if (m_keyText=="Tab") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xleft, y,xleft, y-ch/2);
+ p.drawLine(xleft, y-ch/4, xright, y-ch/4);
+ p.drawLine(xleft, y-ch/4, xleft+ch/2, y-static_cast<int>(ch*0.10));
+ p.drawLine(xleft, y-ch/4, xleft+ch/2, y-static_cast<int>(ch*0.40));
+ p.drawLine(xright, y, xright, y+ch/2);
+ p.drawLine(xleft, y+ch/4, xright, y+ch/4);
+ p.drawLine(xright, y+ch/4, xright-ch/2, y+static_cast<int>(ch*0.10));
+ p.drawLine(xright, y+ch/4, xright-ch/2, y+static_cast<int>(ch*0.40));
+
+ }
+ else if (m_keyText=="BackSpace") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xleft, y,xright, y);
+ p.drawLine(xleft, y, xleft+ch/2, y-static_cast<int>(ch*0.15));
+ p.drawLine(xleft, y, xleft+ch/2, y+static_cast<int>(ch*0.15));
+ }
+ else if (m_keyText=="Enter") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xright, y-ch/2,xright, y);
+ p.drawLine(xleft, y,xright, y);
+ p.drawLine(xleft, y, xleft+ch/3, y-static_cast<int>(ch*0.15));
+ p.drawLine(xleft, y, xleft+ch/3, y+static_cast<int>(ch*0.15));
+ }
+ else if (m_keyText=="AltGr") {
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter | QPainter::AlignVCenter, "Alt Gr");
+ }
+ else
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter | QPainter::AlignVCenter, m_keyText);
+}
+
+
+
diff --git a/ktouch/src/ktouchkeys.h b/ktouch/src/ktouchkeys.h
new file mode 100644
index 00000000..90d4222d
--- /dev/null
+++ b/ktouch/src/ktouchkeys.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ * ktouchkeys.h *
+ * ------------ *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHKEYS_H
+#define KTOUCHKEYS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qpainter.h>
+
+class KTouchFingerKey;
+class KTouchNormalKey;
+class KTouchControlKey;
+
+/** This is the base class for all keys (KTouchFingerKey, KTouchNormalKey and KTouchControlKey).
+ * Do not create instances of KTouchKey itself or you will get only blank keys. Note that the
+ * KTouchKey class hierarchy contains only the information for painting the keys. The connectivity
+ * is handled using the KTouchKeyConnector.
+ */
+class KTouchBaseKey {
+ public:
+ /// The possible types of the keys
+ enum KeyType { FINGER_KEY, NORMAL_KEY, CONTROL_KEY };
+
+ /// Constructor
+ KTouchBaseKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : m_keyChar(keyChar), m_keyText(keyText), m_isActive(false), m_isNextKey(false),
+ m_x(x), m_y(y), m_w(w), m_h(h), m_type(NORMAL_KEY) {}
+ /// Destructor.
+ virtual ~KTouchBaseKey() {}
+ /// Paints the basic key shape using the painter p.
+ virtual void paint(QPainter& p) const;
+ /// Recalculates the scaled position and size properties of the key.
+ void resize(double scale);
+ /// Returns the boundary frame of the key.
+ QRect frame() const { return QRect(m_x, m_y, m_w, m_h); }
+ /// Returns the key type.
+ KeyType type() const { return m_type; }
+
+ QChar m_keyChar; ///< The character that needs to be pressed to access this char.
+ QString m_keyText; ///< The text on the key (may be a single char only).
+ bool m_isActive; ///< Indicates whether the key is active (finger and control keys).
+ bool m_isNextKey; ///< Indicates whether this is the next to be pressed key (normal and finger keys).
+ QFont m_font;
+ float m_font_scale;
+
+ protected:
+ int m_x; ///< The x position of the key.
+ int m_y; ///< The y position of the key.
+ int m_w; ///< The width of the key.
+ int m_h; ///< The height of the key.
+
+ int m_xS; ///< The scaled x position of the key.
+ int m_yS; ///< The scaled y position of the key.
+ int m_wS; ///< The scaled width of the key.
+ int m_hS; ///< The scaled height of the key.
+
+ KeyType m_type; ///< Stores the type of the key (convenience for saving of the keyboard layout).
+};
+// ---------------------------------------------------------------------------------------
+
+
+
+/** This is a normal keyboard key with text.
+ * The background colour of the key will be taken from the current colour scheme using the
+ * colour index (this should be the same colour as used for the corresponding finger key).
+ */
+class KTouchNormalKey : public KTouchBaseKey {
+ public:
+ /// Constructor
+ KTouchNormalKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h);
+ /// Destructor
+ virtual ~KTouchNormalKey() {}
+ /// Extends the painting routine of KTouchKey (adds the text).
+ void paint(QPainter& p) const;
+ /// Indicates the colour index in the colour scheme, that has to be used for this key
+ /// and will be set in KTouchKeyboard::updateColors().
+ unsigned int m_colorIndex;
+};
+// ------------------------------------------------------------------------------------
+
+
+
+/** This is a key where a finger rests while not typing.
+ * The name is taken from the fact, that there is normally for each finger (not including the
+ * thumbs) a key on a keyboard where the finger rests while it is not "used". A finger key
+ * is basically a normal key with additional stuff in the painting routine to mark it as a
+ * finger key.
+ */
+class KTouchFingerKey : public KTouchNormalKey {
+ public:
+ /// Constructor
+ KTouchFingerKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h);
+ /// Destructor
+ ~KTouchFingerKey() { --m_fingerKeyCount; }
+ /// Extends the painting algoritm of KTouchNormalKey when marked.
+ void paint(QPainter& p) const;
+
+ private:
+ static int m_fingerKeyCount; ///< Contains the number of created finger keys (for colour generation).
+};
+// ------------------------------------------------------------------------------------
+
+
+
+/** This is a special or control key.
+ * This key acts as a modifier key to a normal key (for instance a shift key) and has a
+ * different shape and painting routine then the normal keys. Therefore it is directly
+ * derived from KTouchKey.
+ */
+class KTouchControlKey : public KTouchBaseKey {
+ public:
+ /// Constructor
+ KTouchControlKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h);
+ /// Extends the parents paint routine (draws the text or other fancy stuff).
+ void paint(QPainter& p) const;
+};
+// ------------------------------------------------------------------------------------
+
+
+/// This is the key connector which represents a key or key combination that can be pressed.
+ /// It associates a character with a target key and optionally a finger and/or control key.
+class KTouchKeyConnection {
+ public:
+ /// Default constructor
+ KTouchKeyConnection() : m_keyChar(0), m_targetKeyChar(0), m_fingerKeyChar(0), m_controlKeyChar(0) {}
+ /// Constructor provided for convenience.
+ KTouchKeyConnection(const QChar& keyChar, const QChar& targetKeyChar, const QChar& fingerKeyChar,
+ const QChar& controlKeyChar)
+ : m_keyChar(keyChar), m_targetKeyChar(targetKeyChar), m_fingerKeyChar(fingerKeyChar), m_controlKeyChar(controlKeyChar) {}
+
+ /// This is the character that has to be pressed to access this key.
+ QChar m_keyChar;
+
+ QChar m_targetKeyChar; ///< The target character (the key the user has to press).
+ QChar m_fingerKeyChar; ///< The finger key (where the used finger normally rests).
+ QChar m_controlKeyChar; ///< The modifier key the user has to press also (for example LeftShift).
+};
+
+#endif // KTOUCHKEYS_H
diff --git a/ktouch/src/ktouchlecture.cpp b/ktouch/src/ktouchlecture.cpp
new file mode 100644
index 00000000..70195977
--- /dev/null
+++ b/ktouch/src/ktouchlecture.cpp
@@ -0,0 +1,300 @@
+/***************************************************************************
+ * ktouchlecture.cpp *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchlecture.h"
+
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
+#include <qdom.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+
+bool KTouchLecture::load(QWidget * window, const KURL& url) {
+ // Ok, first download the contents as usual using the KIO lib
+ // File is only downloaded if not local, otherwise it's just opened
+ QString target;
+ bool result = false;
+ if (KIO::NetAccess::download(url, target, window)) {
+ // Ok, that was successful, store the lectureURL and read the file
+ QFile infile(target);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ KIO::NetAccess::removeTempFile(target);
+ return false; // Bugger it... couldn't open it...
+ }
+ QTextStream in( &infile );
+ result = readLecture(in);
+ };
+ KIO::NetAccess::removeTempFile(target);
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchLecture::loadXML(QWidget * window, const KURL& url) {
+ // Ok, first download the contents as usual using the KIO lib
+ // File is only downloaded if not local, otherwise it's just opened
+ QString target;
+ bool result = false;
+ if (KIO::NetAccess::download(url, target, window)) {
+ // Ok, that was successful, store the lectureURL and read the file
+ QFile infile(target);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ KIO::NetAccess::removeTempFile(target);
+ return false; // Bugger it... couldn't open it...
+ }
+ QDomDocument doc;
+ doc.setContent( &infile );
+ result = readLecture(doc);
+ }
+ KIO::NetAccess::removeTempFile(target);
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+
+bool KTouchLecture::saveXML(QWidget * window, const KURL& url) const {
+ // create the XML document
+ QDomDocument doc;
+ writeLecture(doc);
+
+ // and save it
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ temp->setAutoDelete(true); // so we don't have to delete the file ourselves
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ // kdDebug() << "Error creating lecture file!" << endl;
+ return false;
+ };
+
+ QTextStream out( &outfile );
+ out << doc.toString();
+ outfile.close();
+ // if we have a temporary file, we still need to upload it
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ delete temp;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLecture::createDefault() {
+ m_lectureData.clear(); // remove everything else
+ m_title = i18n("A default lecture...");
+ m_fontSuggestions = "Monospace";
+ KTouchLevelData miniLevel; // create the level which is by default a mini-level
+ m_lectureData.push_back( miniLevel );
+}
+// ----------------------------------------------------------------------------
+
+const KTouchLevelData& KTouchLecture::level(unsigned int levelNum) const {
+ if (levelNum>=m_lectureData.size())
+ levelNum=0;
+ return m_lectureData[levelNum];
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchLecture::readLecture(QTextStream& in) {
+ //kdDebug() << "[KTouchLecture::loadLecture] Reading lecture file '" << lectureURL.url() << "'!" << endl;
+ QString line;
+ // remove everything else
+ m_lectureData.clear();
+ // now loop until end of file is reached and break down the textfile into several strings containing the levels
+ QStringList slist;
+ QString current_level = QString::null; // used to store the current level data
+ line = in.readLine();
+ bool in_level = false;
+ while (!in.atEnd() && !line.isNull()) {
+ // only consider non-empty lines
+ if (!line.isEmpty()) {
+ // lecture title?
+ if (line.find("# Title:") == 0)
+ m_title = line.right(line.length() - 8).stripWhiteSpace();
+ else if (line[0]!='#' || line.find("# Comment:")!=-1) {
+ // ok, after all those comment lines, we finally found the beginn of a level
+ in_level = true;
+ current_level += line + '\n';
+ }
+ else if (in_level) {
+ // ok, a new comment found, if we were reading a level, store it
+ slist.append(current_level);
+ current_level = QString::null;
+ in_level = false;
+ }
+ }
+ line = in.readLine();
+ };
+ if (!current_level.isEmpty() && in_level)
+ slist.append(current_level);
+
+ //kdDebug() << "Levels read = " << slist.count() << endl;
+
+ // now read all the levels
+ for (QStringList::Iterator it = slist.begin(); it!=slist.end(); ++it) {
+ // create new level
+ KTouchLevelData level;
+ QTextStream t(&(*it), IO_ReadOnly);
+ // try to read it
+ if (!level.readLevel(t)) {
+ // uh oh, error while reading level data
+ createDefault();
+ return false;
+ };
+ // add it (object will be deleted by the list)
+ m_lectureData.push_back(level);
+ }
+
+ if (m_lectureData.size()>1)
+ return true; // all ok
+ else {
+ // Hmm, no levels in the file. So we create our default mini level and report an error.
+ createDefault();
+ return false;
+ };
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchLecture::readLecture(QDomDocument& doc) {
+ QString line;
+ m_lectureData.clear(); // clean current data
+ // retrieve the title
+ QDomNodeList entries = doc.elementsByTagName("Title");
+ if (entries.count() >= 1) m_title = entries.item(0).firstChild().nodeValue();
+ else m_title = i18n("untitled lecture");
+ // retrieve the comment
+ entries = doc.elementsByTagName("Comment");
+ if (entries.count() >= 1)
+ m_comment = entries.item(0).firstChild().nodeValue();
+ // retrieve the font suggestion
+ entries = doc.elementsByTagName("FontSuggestions");
+ if (entries.count() >= 1)
+ m_fontSuggestions = entries.item(0).firstChild().nodeValue();
+ // retrieve the levels
+ entries = doc.elementsByTagName("Level");
+ for (unsigned int i=0; i<entries.count(); ++i) {
+ KTouchLevelData level;
+ level.readLevel(entries.item(i));
+ m_lectureData.push_back(level);
+ }
+ if (m_lectureData.size()>0)
+ return true; // all ok
+ else {
+ // Hmm, no levels in the file. So we create our default mini level and report an error.
+ createDefault();
+ return false;
+ };
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLecture::writeLecture(QDomDocument& doc) const {
+ QDomElement root = doc.createElement( "KTouchLecture" );
+ doc.appendChild(root);
+ // Store title and ensure that the file contains a title!
+ QDomElement title = doc.createElement("Title");
+ QDomText titleText;
+ if (m_title.isEmpty()) titleText = doc.createTextNode( i18n("untitled lecture") );
+ else titleText = doc.createTextNode(m_title);
+ title.appendChild(titleText);
+ root.appendChild(title);
+ // Store comment if given
+ if (!m_comment.isEmpty()) {
+ QDomElement comment = doc.createElement("Comment");
+ QDomText commentText = doc.createTextNode(m_comment);
+ comment.appendChild(commentText);
+ root.appendChild(comment);
+ }
+ // Store font suggestion if given
+ if (!m_fontSuggestions.isEmpty()) {
+ QDomElement font = doc.createElement("FontSuggestions");
+ QDomText fontText = doc.createTextNode(m_fontSuggestions);
+ font.appendChild(fontText);
+ root.appendChild(font);
+ }
+ // Store levels
+ QDomElement levels = doc.createElement("Levels");
+ root.appendChild(levels);
+ for (QValueVector<KTouchLevelData>::const_iterator it=m_lectureData.begin();
+ it!=m_lectureData.end(); ++it)
+ {
+ it->writeLevel(doc, levels);
+ }
+}
+// ----------------------------------------------------------------------------
+
+
+
+// OLD and deprecated stuff
+
+/*
+bool KTouchLecture::save(QWidget * window, const KURL& url) const {
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ temp->setAutoDelete(true); // so we don't have to delete the file ourselves
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ // kdDebug() << "Error creating lecture file!" << endl;
+ return false;
+ };
+ QTextStream out( &outfile );
+ writeLecture(out);
+ // TODO : check stream status to see if save worked
+ outfile.close();
+ // if we have a temporary file, we still need to upload it
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ delete temp;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLecture::writeLecture(QTextStream& out) const {
+ out << "###################################### " << endl;
+ out << "# # " << endl;
+ out << "# Training lecture file for KTouch # " << endl;
+ out << "# # " << endl;
+ out << "###################################### " << endl << endl;
+ out << "# Title: " << m_title << endl;
+ out << endl;
+
+ int levelCounter=0;
+ for (QValueVector<KTouchLevelData>::const_iterator it=m_lectureData.begin(); it!=m_lectureData.end(); ++it) {
+ out << "################################" << endl;
+ out << "# Level: " << ++levelCounter << endl;
+ out << "# " << endl;
+ it->writeLevel(out);
+ };
+ out << endl;
+}
+// ----------------------------------------------------------------------------
+
+*/
diff --git a/ktouch/src/ktouchlecture.h b/ktouch/src/ktouchlecture.h
new file mode 100644
index 00000000..3c59ee08
--- /dev/null
+++ b/ktouch/src/ktouchlecture.h
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * ktouchlecture.h *
+ * --------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHLECTURE_H
+#define KTOUCHLECTURE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+class QWidget;
+class QDomDocument;
+class KURL;
+
+#include <qvaluevector.h>
+#include "ktouchleveldata.h"
+
+/// This class handles the lecture data and provides the lines to type.
+///
+/// It contains the level data (see KTouchLevelData). A lecture object
+/// contains <b>ALWAYS</b> at least one lecture.<p>
+/// The lecture data can be read and written using the member functions
+/// readLecture() and writeLecture().<p>
+/// During a training session the program will occasionally need a new
+/// line of text. You can retrieve the data of a certain level using
+/// the member function level() and then the line in this level (see
+/// KTouchLevelData).
+class KTouchLecture {
+ public:
+ /// Default Constructor
+ KTouchLecture() { createDefault(); }
+ /// Creates a default mini-lecture.
+ void createDefault();
+ /// Loads a lecture from file (returns true if successful).
+ bool load(QWidget * window, const KURL& url);
+ /// Loads a lecture (in XML format) from file (returns true if successful).
+ bool loadXML(QWidget * window, const KURL& url);
+ // /// Saves the lecture data to file (returns true if successful).
+ // bool save(QWidget * window, const KURL& url) const;
+ /// Saves the lecture data to file (returns true if successful).
+ bool saveXML(QWidget * window, const KURL& url) const;
+ /// Returns the number of levels in the lecture.
+ unsigned int levelCount() const { return m_lectureData.size(); }
+ /// Returns a reference to the data of the level.
+ /// If the level number is out of range the function will always return
+ /// the level 0.
+ const KTouchLevelData& level(unsigned int levelNum) const;
+ /// Returns the title of the lecture.
+ const QString& title() const { return m_title; }
+ /// Sets the title of the lecture.
+ void setTitle(const QString& title) { m_title = title; }
+
+ QString m_title; ///< The title of the lecture.
+ QString m_comment; ///< A comment.
+ QString m_fontSuggestions; ///< Font suggestions for this lecture.
+
+ private:
+ /// Loads a lecture from file
+ bool readLecture(QTextStream& in);
+ /// Loads a lecture from file into an XML document
+ bool readLecture(QDomDocument& doc);
+ /// Saves the lecture data to the current lecture URL
+ void writeLecture(QTextStream& out) const;
+ /// Saves the lecture data in the XML document
+ void writeLecture(QDomDocument& doc) const;
+
+ QValueVector<KTouchLevelData> m_lectureData; ///< The lecture data.
+
+ /// The editor should be able to handle the internal lecture data (it's for convenience actually).
+ friend class KTouchLectureEditor;
+};
+
+#endif // KTOUCHLECTURE_H
diff --git a/ktouch/src/ktouchlectureeditor.cpp b/ktouch/src/ktouchlectureeditor.cpp
new file mode 100644
index 00000000..ce433d8c
--- /dev/null
+++ b/ktouch/src/ktouchlectureeditor.cpp
@@ -0,0 +1,420 @@
+/***************************************************************************
+ * ktouchlectureeditor.cpp *
+ * ----------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+
+#include <qlabel.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <ksqueezedtextlabel.h>
+#include <kmessagebox.h>
+#include <kcombobox.h>
+#include <kfontdialog.h>
+#include <kfiledialog.h>
+
+#include <algorithm> // for std::swap
+
+#include "ktouchlectureeditor.h"
+#include "ktouchlectureeditor.moc"
+
+#include "ktouchlecture.h"
+#include "ktouchopenrequest.h"
+#include "ktouch.h"
+
+
+// **************************
+// ***** Public functions ***
+// **************************
+
+KTouchLectureEditor::KTouchLectureEditor(QWidget *parent, const char* name, bool modal, WFlags fl)
+ : KTouchLectureEditorDlg(parent, name, modal, fl)
+{
+ levelListView->setSorting(-1); // don't sort my level list view!
+
+ connect(levelListView, SIGNAL(selectionChanged(QListViewItem*)),this, SLOT(newSelection(QListViewItem*)) );
+ connect(newCharsEdit, SIGNAL(textChanged(const QString&)), this, SLOT(newCharsChanged(const QString&)) );
+ connect(newBtn, SIGNAL(clicked()), this, SLOT(newLevel()) );
+ connect(deleteBtn, SIGNAL(clicked()), this, SLOT(deleteLevel()) );
+ connect(upBtn, SIGNAL(clicked()), this, SLOT(moveUp()) );
+ connect(downBtn, SIGNAL(clicked()), this, SLOT(moveDown()) );
+
+ // make the connections for making the lecture modified
+ connect(titleEdit, SIGNAL(textChanged(const QString&)), this, SLOT(setModified()) );
+ connect(lectureCommentEdit, SIGNAL(textChanged()), this, SLOT(setModified()) );
+ connect(levelCommentEdit, SIGNAL(textChanged(const QString&)), this, SLOT(setModified()) );
+ connect(linesTextEdit, SIGNAL(textChanged()), this, SLOT(setModified()) );
+
+ // The font, open, save, saveas and close buttons are already connected
+}
+// -----------------------------------------------------------------------------
+
+bool KTouchLectureEditor::startEditor(const KURL& url) {
+ // call open request dialog and load a lecture, and start the dialogs event loop if
+ // the user did not cancel the open request dialog
+ if (openLectureFile(url)==QDialog::Accepted) {
+ exec();
+ return true;
+ }
+ else return false;
+}
+// -----------------------------------------------------------------------------
+
+
+// *************************
+// ***** Private slots *****
+// *************************
+
+void KTouchLectureEditor::fontBtnClicked() {
+ QFont f(m_lecture.m_fontSuggestions);
+ if (KFontDialog::getFont(f, false, this, true)==QDialog::Accepted) {
+ linesTextEdit->setFont(f);
+ lectureCommentEdit->setFont(f);
+ levelCommentEdit->setFont(f);
+ newCharsEdit->setFont(f);
+ titleEdit->setFont(f);
+ levelListView->setFont(f);
+ m_lecture.m_fontSuggestions = f.family();
+ setModified();
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::openBtnClicked() {
+ saveModified(); // save if modified
+ openLectureFile("");
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::saveBtnClicked() {
+ if (m_currentURL.isEmpty()) saveAsBtnClicked();
+ else {
+ transfer_from_dialog();
+ m_lecture.saveXML(this, m_currentURL);
+ setModified(false);
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::saveAsBtnClicked() {
+ QString tmp = KFileDialog::getSaveFileName(QString::null,
+ "*.ktouch.xml|KTouch Lecture Files(*.ktouch.xml)\n*.*|All Files", this, i18n("Save Training Lecture") );
+ if (!tmp.isEmpty()) {
+ transfer_from_dialog();
+ m_currentURL = tmp;
+ m_lecture.saveXML(this, m_currentURL);
+ setCaption(m_currentURL.url());
+ setModified(false);
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::newSelection(QListViewItem* item) {
+ if (m_selecting) return;
+ bool current_modified_flag = m_modified; // remember our current status
+ // first store the current level data
+ storeCurrentLevel();
+ // now we need to find the level which has been selected
+ QListViewItem *i = levelListView->firstChild();
+ unsigned int level=0;
+ while (i!=0 && i!=item) {
+ i = i->nextSibling();
+ ++level;
+ };
+ if (i!=0) {
+ m_currentItem = i;
+ m_level = level;
+ showCurrentLevel();
+ }
+ m_selecting = true; // prevent the selectionChanged() signal from interfering
+ levelListView->setSelected(m_currentItem, true);
+ m_selecting = false;
+
+ if (m_lecture.m_lectureData.size()==1) {
+ downBtn->setEnabled(false);
+ upBtn->setEnabled(false);
+ }
+ else {
+ if (m_level==m_lecture.m_lectureData.size()-1) downBtn->setEnabled(false);
+ else downBtn->setEnabled(true);
+ if (m_level==0) upBtn->setEnabled(false);
+ else upBtn->setEnabled(true);
+ };
+ setModified(current_modified_flag);
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::newCharsChanged(const QString& text) {
+ if (m_currentItem==0) return; // shouldn't happen, but a little bit of paranoia...
+ m_currentItem->setText(0, text);
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::newLevel() {
+ createNewLevel();
+ QListViewItem *newItem = new QListViewItem( levelListView,
+ levelListView->lastItem(), m_lecture.m_lectureData.back().m_newChars );
+ newSelection(newItem);
+ upBtn->setEnabled(true);
+ downBtn->setEnabled(false);
+ deleteBtn->setEnabled(true);
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::deleteLevel() {
+ // Open for discussion: Should there be a message box to confirm the delete?
+ if (m_level >= m_lecture.m_lectureData.size()) return; // paranoia check
+ m_selecting = true; // prevent the selectionChanged() signal from interfering
+ // first remove the item from the list view
+ delete m_currentItem;
+ // then remove the level data
+ QValueVector<KTouchLevelData>::iterator it=m_lecture.m_lectureData.begin();
+ std::advance(it, m_level);
+ m_lecture.m_lectureData.erase(it);
+ m_currentItem = levelListView->firstChild();
+ for (unsigned int i=0; i<m_level; ++i)
+ m_currentItem = m_currentItem->nextSibling();
+ levelListView->setSelected(m_currentItem, true);
+ showCurrentLevel();
+ m_selecting = false;
+ if (m_lecture.m_lectureData.size()==1)
+ deleteBtn->setEnabled(false);
+ if (m_level==m_lecture.m_lectureData.size()-1)
+ downBtn->setEnabled(false);
+ if (m_level==0)
+ upBtn->setEnabled(false);
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::moveUp() {
+ if (m_level==0) return;
+ m_selecting=true; // again, I don't want to process changeSelection() signals now
+ storeCurrentLevel();
+ QListViewItem *upperItem = m_currentItem->itemAbove();
+ std::swap(m_lecture.m_lectureData[m_level], m_lecture.m_lectureData[m_level-1]);
+ upperItem->setText(0, m_lecture.m_lectureData[m_level-1].m_newChars);
+ m_currentItem->setText(0, m_lecture.m_lectureData[m_level].m_newChars);
+ m_currentItem=upperItem;
+ --m_level;
+ levelListView->setSelected(m_currentItem, true);
+ showCurrentLevel();
+ m_selecting = false;
+ if (m_level==0)
+ upBtn->setEnabled(false);
+ downBtn->setEnabled(true);
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::moveDown() {
+ if (m_level>=m_lecture.m_lectureData.size()-1) return;
+ m_selecting=true; // again, I don't want to process changeSelection() signals now
+ storeCurrentLevel();
+ QListViewItem *lowerItem = m_currentItem->itemBelow();
+ std::swap(m_lecture.m_lectureData[m_level], m_lecture.m_lectureData[m_level+1]);
+ m_currentItem->setText(0, m_lecture.m_lectureData[m_level].m_newChars);
+ lowerItem->setText(0, m_lecture.m_lectureData[m_level+1].m_newChars);
+ m_currentItem=lowerItem;
+ ++m_level;
+ levelListView->setSelected(m_currentItem, true);
+ showCurrentLevel();
+ m_selecting = false;
+ if (m_level==m_lecture.m_lectureData.size()-1)
+ downBtn->setEnabled(false);
+ upBtn->setEnabled(true);
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+
+
+// ****************************
+// ***** Private functions ****
+// ****************************
+
+void KTouchLectureEditor::transfer_to_dialog() {
+ bool current_modified_flag = m_modified;
+ // set the title and the filename of the lecture
+ titleEdit->setText(m_lecture.title());
+ lectureCommentEdit->setText(m_lecture.m_comment);
+ if (m_currentURL.isEmpty()) setCaption(i18n("KTouch Lecture Editor - ") + i18n("<new unnamed lecture file>"));
+ else setCaption(i18n("KTouch Lecture Editor - ") + m_currentURL.fileName());
+ // copy the 'new char' strings of the lectures into the list view
+ levelListView->clear();
+ QValueVector<KTouchLevelData>::const_iterator it=m_lecture.m_lectureData.begin();
+ // add first item
+ QListViewItem *item=new QListViewItem( levelListView, (it++)->m_newChars );
+ // add all the others
+ for (;it!=m_lecture.m_lectureData.end(); ++it)
+ item = new QListViewItem( levelListView, item, it->m_newChars );
+ m_currentItem=levelListView->firstChild();
+ m_selecting = true; // prevent the selectionChanged() signal from interfering
+ levelListView->setSelected(m_currentItem, true);
+ m_selecting = false;
+ // open first lesson
+ m_level=0;
+ showCurrentLevel();
+ // set up the buttons
+ upBtn->setEnabled(false);
+ if (m_lecture.m_lectureData.size()>1) {
+ downBtn->setEnabled(true);
+ deleteBtn->setEnabled(true);
+ }
+ else {
+ downBtn->setEnabled(false);
+ deleteBtn->setEnabled(false);
+ }
+ // finally the font
+ if (!m_lecture.m_fontSuggestions.isEmpty()) {
+ QFont f("Monospace");
+ // TODO : multiple font suggestions
+ f.fromString(m_lecture.m_fontSuggestions);
+ linesTextEdit->setFont(f);
+ lectureCommentEdit->setFont(f);
+ levelCommentEdit->setFont(f);
+ newCharsEdit->setFont(f);
+ titleEdit->setFont(f);
+ levelListView->setFont(f);
+ }
+ setModified(current_modified_flag);
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::transfer_from_dialog() {
+ storeCurrentLevel();
+ m_lecture.m_title = titleEdit->text();
+ m_lecture.m_comment = lectureCommentEdit->text();
+ setModified();
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::showCurrentLevel() {
+ if (m_level >= m_lecture.m_lectureData.size()) return; // should not happen, but why running a risk here...
+ levelLabel->setText(i18n("Data of Level %1").arg(m_level+1) );
+ levelCommentEdit->setText(m_lecture.m_lectureData[m_level].m_comment);
+ newCharsEdit->setText(m_lecture.m_lectureData[m_level].m_newChars);
+ QString text;
+ for (QValueVector<QString>::const_iterator it=m_lecture.m_lectureData[m_level].m_lines.begin();
+ it!=m_lecture.m_lectureData[m_level].m_lines.end(); ++it)
+ {
+ text += *it + '\n';
+ }
+ linesTextEdit->setText(text);
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::storeCurrentLevel() {
+ if (m_level>=m_lecture.m_lectureData.size()) return; // should not happen, but ... better check one time too much...
+ m_lecture.m_lectureData[m_level].m_comment = levelCommentEdit->text();
+ m_lecture.m_lectureData[m_level].m_newChars = newCharsEdit->text();
+ m_lecture.m_lectureData[m_level].m_lines.clear();
+ QString text = linesTextEdit->text();
+ QStringList lines;
+ QString currentLine;
+ for (unsigned int i=0; i<text.length(); ++i) {
+ QChar c = text[i];
+ if (c=='\t') c=' '; // replace tabs with spaces
+ if (c=='\n') {
+ lines.append(currentLine);
+ currentLine = "";
+ }
+ else
+ currentLine += c;
+ };
+ lines.append(currentLine);
+ for (QStringList::const_iterator it=lines.begin(); it!=lines.end(); ++it) {
+ if ((*it).isEmpty()) continue;
+ m_lecture.m_lectureData[m_level].m_lines.push_back(*it);
+ }
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::createNewLevel() {
+ KTouchLevelData newLevel;
+ newLevel.m_newChars = i18n("abcdefghijklmnopqrstuvwxyz");
+ newLevel.m_comment = QString();
+ newLevel.m_lines.clear(); // remove the lines of the default mini level
+ newLevel.m_lines.push_back(i18n("Enter your lines here..."));
+ m_lecture.m_lectureData.push_back(newLevel);
+}
+// -----------------------------------------------------------------------------
+
+int KTouchLectureEditor::openLectureFile(const KURL& url) {
+ // First setup the open request dialog
+ KTouchOpenRequest dlg(this);
+ // Call the dialog
+ KURL new_url;
+ int result = dlg.requestFileToOpen(new_url,
+ i18n("Open Lecture File"),
+ i18n("Which Lecture File Would You Like to Edit?"),
+ i18n("Edit current lecture:"),
+ i18n("Open a default lecture:"),
+ i18n("Open a lecture file:"),
+ i18n("Create new lecture"),
+ url, KTouchPtr->lectureFiles(), i18n("<no lecture files available>"));
+
+ if (result == QDialog::Accepted) {
+ // Ok, user confirmed the dialog, now lets get the url
+ m_currentURL = new_url;
+ // Try to load the lecture, if that failes, we create a new lecture instead
+ m_lecture = KTouchLecture(); // empty the lecture
+ if (!m_currentURL.isEmpty()) {
+ // try to read old format first then XML format
+ if (!m_lecture.load(this, m_currentURL) && !m_lecture.loadXML(this, m_currentURL)) {
+ KMessageBox::sorry(this, i18n("Could not open the lecture file, creating a new one instead."));
+ m_currentURL = QString::null; // new lectures haven't got a URL
+ }
+ }
+ // If we have no URL, we create a new lecture - can happen if either the user
+ // chose "new lecture" or the chosen lecture could not be opened
+ if (m_currentURL.isEmpty()) {
+ m_lecture.createDefault();
+ m_modified = true; // new lectures are modified by default
+ }
+ else
+ m_modified = false; // newly read lectures are not modified in the begin
+ // Update our editor with the lecture data
+ transfer_to_dialog();
+ return QDialog::Accepted;
+ }
+ else return QDialog::Rejected;
+}
+// -----------------------------------------------------------------------------
+
+void KTouchLectureEditor::setModified(bool flag) {
+ m_modified = flag;
+ if (!m_currentURL.isEmpty()) {
+ if (flag) setCaption(i18n("KTouch Lecture Editor - ") + m_currentURL.fileName() + i18n(" (modified)"));
+ else setCaption(i18n("KTouch Lecture Editor - ") + m_currentURL.fileName());
+ }
+}
+// -----------------------------------------------------------------------------
+
+bool KTouchLectureEditor::saveModified() {
+ if (!m_modified) return true;
+ // ok, ask the user to save the changes
+ int result = KMessageBox::questionYesNoCancel(this,
+ i18n("The lecture has been changed. Do you want to save the changes?"),QString::null,KStdGuiItem::save(),KStdGuiItem::discard());
+ if (result == KMessageBox::Cancel) return false; // User aborted
+ if (result == KMessageBox::Yes) saveBtnClicked();
+ // if successfully saved the modified flag will be resetted in the saveBtnClicked() function
+ return true; // User acknowledged
+}
+// -----------------------------------------------------------------------------
diff --git a/ktouch/src/ktouchlectureeditor.h b/ktouch/src/ktouchlectureeditor.h
new file mode 100644
index 00000000..49850b6b
--- /dev/null
+++ b/ktouch/src/ktouchlectureeditor.h
@@ -0,0 +1,117 @@
+/***************************************************************************
+ * ktouchlectureeditor.h *
+ * --------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHLECTUREEDITOR_H
+#define KTOUCHLECTUREEDITOR_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qwidget.h>
+#include <qfont.h>
+#include <kurl.h>
+
+#include "ktouchlectureeditor_dlg.h"
+#include "ktouchlecture.h"
+
+/// This is the KTouch lecture editor dialog.
+///
+/// The lecture edit dialog works like a standalone edit tool for editing lectures.
+/// Upon opening of the dialog the 'open lecture' dialog box is shown where
+/// the user can either select a local training lecture or load a lecture file.
+/// Then the user can edit the lecture and save it (if desired under a different
+/// file name).
+/// The use of the editor is simple, just include ktouchlectureeditor.h and do
+/// @code
+/// KTouchLectureEditor dlg;
+/// bool ok = dlg.startEditor(current_lecture);
+/// // current_lecture should be the URL pointing to the current/default
+/// // lecture or an empty URL
+/// @endcode
+/// @see startEditor() for details on the return value.
+class KTouchLectureEditor : public KTouchLectureEditorDlg {
+ Q_OBJECT
+ public:
+ /// Constructor
+ KTouchLectureEditor(QWidget *parent, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+ /// Destructor
+ ~KTouchLectureEditor() {}
+ /// Shows and executes the dialog (argument is the url to the default or
+ /// current lecture file).
+ /// @return Returns 'true' if the dialog was properly executed (thus reloading
+ /// of the lecture in KTouch is necessary) or 'false' if user canceled
+ /// the "Open request" dialog.
+ bool startEditor(const KURL& url);
+
+ private slots:
+ /// Called when the Font button was clicked.
+ void fontBtnClicked();
+ /// Called when the Open button was clicked.
+ void openBtnClicked();
+ /// Called when the Save button was clicked.
+ void saveBtnClicked();
+ /// Called when the Save As button was clicked.
+ void saveAsBtnClicked();
+ /// Called when the editor is closed.
+ void closeQuery() { if (saveModified()) accept(); }
+ /// Called when the editor is rejected (x clicked).
+ void reject() { closeQuery(); }
+ /// Will be called whenever some changes are made.
+ void setModified() { setModified(true); }
+ /// Will be called whenever another level has been selected.
+ void newSelection(QListViewItem* item);
+ /// Will be called whenever the new chars description is changed.
+ void newCharsChanged(const QString& text);
+ /// Will be called when the "New Level" button has been clicked.
+ void newLevel();
+ /// Will be called when the "Delete Level" button has been clicked.
+ void deleteLevel();
+ /// Will be called when the "Move Level Up" button has been clicked.
+ void moveUp();
+ /// Will be called when the "Move Level Down" button has been clicked.
+ void moveDown();
+
+ private:
+ /// Transfers data from the lecture object to the dialog.
+ void transfer_to_dialog();
+ /// Transfers data from the dialog to the lecture object.
+ void transfer_from_dialog();
+ /// Fills the level user interface with data from the current level (stored in m_level).
+ void showCurrentLevel();
+ /// Copies the content of the user interface into the vector with the level data.
+ void storeCurrentLevel();
+ /// Creates a default level and appends it to the already existing levels.
+ void createNewLevel();
+ /// Setups and opens the 'Open request dialog'. The url 'url' is used in the
+ /// open request dialog for the 'current' url selection. When the open request
+ /// dialog is closed the function attempts to load the lecture or if that failes
+ /// creates a new lecture.
+ /// @return The function returns the return code from the open request dialog, so
+ /// that one can react on a "cancel" choice.
+ int openLectureFile(const KURL& url);
+ /// Changes the state of the lecture file (flag==true means modified).
+ void setModified(bool flag);
+ /// If the lecture is modified the user is prompted to save it or throw away the changes.
+ /// If the user accepts the dialog the file is saved.
+ /// @return The function returns 'false' if the user aborted the save request, otherwise true.
+ bool saveModified();
+
+ KTouchLecture m_lecture; ///< The currently used lecture.
+ unsigned int m_level; ///< The current level number.
+ QListViewItem *m_currentItem; ///< The currently selected item in the list view.
+ bool m_selecting; ///< Flag to prevent the selection slot from selecting twice.
+ bool m_modified; ///< Flag indicating whether the lecture has been modified.
+ KURL m_currentURL; ///< URL of the current lecture.
+};
+
+#endif
diff --git a/ktouch/src/ktouchlectureeditor_dlg.ui b/ktouch/src/ktouchlectureeditor_dlg.ui
new file mode 100644
index 00000000..a5008e97
--- /dev/null
+++ b/ktouch/src/ktouchlectureeditor_dlg.ui
@@ -0,0 +1,684 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchLectureEditorDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KTouchLectureEditorDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>722</width>
+ <height>557</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>KTouch Lecture Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Lecture Properties</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>titleLabel</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Title:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>titleEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Comment:</string>
+ </property>
+ </widget>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>lectureCommentEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>70</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Level Editor</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Levels</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>levelListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>upBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>35</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>downBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>35</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>newBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>35</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>deleteBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>35</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image3</pixmap>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>newCharsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QFrame" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>frame3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>commentLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Level comment (optional):</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>wordCountLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Words: </string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>charCountLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Characters: </string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Time needed (beg/adv/pro): </string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>levelLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Level Data of Level 10</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>New characters in this level:</string>
+ </property>
+ </widget>
+ <widget class="KTextEdit" row="6" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>linesTextEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ </font>
+ </property>
+ <property name="wordWrap">
+ <enum>NoWrap</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Level data:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>levelCommentEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout35</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>fontButton</cstring>
+ </property>
+ <property name="text">
+ <string>Change Font...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>248</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>openButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Open...</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>saveButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Save</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>saveAsButton</cstring>
+ </property>
+ <property name="text">
+ <string>Save &amp;As...</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>quitButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="577">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000020849444154789c6d933168db401885bf331aac9280ce68b087423234e0d225940eb5b7aeddba762bdd3276ee544a296d860e1dbb766b3b9466092493e44ddeaca2984a10810a16778198c810c37538db91dd080ef1dfbdefddbb3b7ea1120525e0435cc674fd2ef29e34d43e3dd0a2be5ed737e232be152e2e6154c0afb375f34dbd5089fa0f1e4dc075a03d8393290c3278b5a3c566524a6c824d583ae035c1ed40670bf0e0ed6fcc6d49844ad4cd99351440c701b66b77700edf7308cfe0e3e3f5248d259c6a281c98cd2d5c5d5bb8ba067917da1e3477e1e58f782d8903c025341de84c818eadddedf5ffd32e5c0ca178d4a3b5278c4a94a08406403a87b4b470a12bd8865151f12d837462eb42573cdf07b709cfbe185a7b2d83bf30381943af0d4ca0235d3887a3cce5f067c449e642b1989fc08b0730b3b989cbd81ec1db8230d7f4762451aa39cc25f171c8f04d1fbc2ba2b9cbc15c73bf2d198c35d54c02d0f5bb36c1d118763d4995c15126191e471606060777180ee134975439747dc9c57cf13c253641aa21cc345fa792e838227bf770f584c61884105c7cba62b4eff2644bc3dc26c05f18fc9dc2e752929e46641f6ee0200c84f5b026d57b83dc97e8bc5add01c618a31245fbf51f03ac461006a844118401c61813840180a9eb54a26e7aa1dfeb9bface9b5db7ac5bbdd64aa7422556bd1084815089124b78b3eb96755d870fff0082a93b063a293c500000000049454e44ae426082</data>
+ </image>
+ <image name="image1">
+ <data format="PNG" length="578">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000020949444154789c6d93bf6b535114c73faf54788106f24a0a2928b46085e71670493b555c74b45bfd0fba8a9338155deaa2b483601749478b5307c10c91a4102182a53c798546ac18a98ffbc4421244f83adcbc9797dabb1ceeb9dfeff79c7b7e389244e6c447b1430414218802fca20f117815ef3f5c10054c248e5ac75a6fc153961c44c11879e7c0da545c92de1d4b87a7d2cbb604a8d16c604283691a9439df438b5baf599c691a9bc1fc14cc4e41e5323c7c2b961697743e72ad036e093c170685a1b3089300ed085666c09b849b5761b02796169db43cf109944be0e52c6ff06df40d9b4101ba67c0252817a132076bbbbd516d0ae00e83767e427f98815ff4adc0fe1798cd0367e0e561a5048b7339b63f58710fc8e5ecfbfc0cfc3a19aa455881b800af0f803c74e33e78502ef5f18be0feed8ffc79d8da87eee76e5a0324a9fa495aaf4bd5f6b0dca717dbcda6b4b66d3b90742b6dd3dd9d9e96b7a56aab27fd910ebf9a31bb51efa9f258724b7e2a604203261cf5bab2252def49d596a49ea4636b37ebd2ea9654b8b13a46364d03c9d02422feb39eca2fa46acb48bfa58dba91ff482adcba3f464e788e090dc9ec7b0b7670ae3f07f70adc71a13380daaba7fc78f30000139ab15d9908a220bdc447b103d0b81d3bddf76d763ec2ee937b63e42cde2ffa3683ecd6651fa7af4da7a37c3e72829fc86eddf92d34a1711acd867351e4e4fe0f117aaa22d2d74c9d0000000049454e44ae426082</data>
+ </image>
+ <image name="image2">
+ <data format="PNG" length="611">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000022a49444154789c8d93b16bd47014c73f2957f0a4435352c881cb814b6ebba3d315070717fd0f1c0517ff8576ed50c4b15d6ab7ea22d4491d4a55903b07bd14844be42a0994e312da90940ecd0d85af4372d74aad383c783ff87ddffbf0def719e9208504b0c04f7ceaf36db931b46c70638f96dde0eafb341cf3d0a91b93ff46a7dbc1b11cfcc4c7b11cbac3508feeb7c873a856213bc93117ab7887110dbbc6bbef2ea7dfa07e6f6c389683910ed2a99804c6f3a66a7781592007aac0093007c4108dc14f3ca2c382646622f6131f2c70631766212fc55996c322847106166cbcdde6e3d7317e7cc0fb2fa18cbfcde01a4156120c8179887ec2f856cef687d7cc4c3a4f486a9f0cd832c8f3fc92c02c096ce8fe0a19cf819bf8506932e3580ee6de82daf1b248801a0054ab55d834303fdf860ceab6093138569df0d4a37da705173e680349b6d445d35c7691074cf3be37d2f9b1d47103a547d27eb7af9df59e48076959e47919a332f6253d9676910249a9d4f3241d4be7ae747e24adacbd149d6ee7b24880a49e244d8982a3543a93fa8391944a7d6f241d4bbd1f81566e26d82fe349417024e94cd2e04f9295b51dfdf70c8260249d49bd2b043bebbdc207e6de82a841d7ee18ed785944c033c1a6516c654960813784865538120b56b7b60b1f640f52a36b770cc772202ad61845193c15e1520a16847144c3022f8e4ac7865069de700b36605214bbd29121a5185a16ac6ebdba7e8d2fdeec8a4a132e0e702a4dfc8b03fef5fe0d7f23e504186855b00000000049454e44ae426082</data>
+ </image>
+ <image name="image3">
+ <data format="PNG" length="524">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000001d349444154789c7d93318b134118869f098bec86dc712ba3ec420a07b498c8155944305dea7476fe0e7f83a53f21ad9676dac5424861b1e97620ca45442e0b37ec0672b08704d66236b98460a619bedd79bf79be074614f3022cdc75c23ab529894c482d2412f6ebd58f29ea12a1a5060b4830d6d032d6407378344cb8780aa321f851c96898507a4b462fe0e299cfe7afd4dbf3c61ab4d488625e60ac417506757c895b151000374007b21cc25b6005137348d2da764a6deab24db82c2b78048b7c494fc2fb4f6326dfa6cc72734022f61d1c11948e803f6e9ffccc509e62fce5036fdfbc16470e0e08d61584b0cc4b8860fa2b437514a935684fef1cb4b4744522131082a02da082f02c8012e22884b660f0f239be0d187413661b173e7650d76e84b6a0bc71043c10004cbf5fe13f01739be13704481c01164750b16b123e6e837061b29a7e576156f0aadb8386e0d84100d5baba2701b2f9354460560bfa1118bb38e1a082e02cb8bf19e845319985442ab0a02375c241809b7d7f9d0b7a11647649d010fcdfc1ba991de06f0dbfebbd26b17b23913ae1e05cecc28bbc04098bab6bf7eda1700f2c3fe5a0a8ddcd165414ba5dc664f3dafdb3a0e5a1036fdbe9ddc7317d4f33db187c4f73b73127eb6dee1f6c922615d31032450000000049454e44ae426082</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>openButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>openBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>saveButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>saveBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>saveAsButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>saveAsBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>quitButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>closeQuery()</slot>
+ </connection>
+ <connection>
+ <sender>titleEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>levelCommentEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>newCharsEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>linesTextEdit</sender>
+ <signal>textChanged()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>fontButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchLectureEditorDlg</receiver>
+ <slot>fontBtnClicked()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>titleEdit</tabstop>
+ <tabstop>levelListView</tabstop>
+ <tabstop>upBtn</tabstop>
+ <tabstop>downBtn</tabstop>
+ <tabstop>newBtn</tabstop>
+ <tabstop>deleteBtn</tabstop>
+ <tabstop>levelCommentEdit</tabstop>
+ <tabstop>newCharsEdit</tabstop>
+ <tabstop>linesTextEdit</tabstop>
+ <tabstop>fontButton</tabstop>
+ <tabstop>openButton</tabstop>
+ <tabstop>saveButton</tabstop>
+ <tabstop>saveAsButton</tabstop>
+ <tabstop>quitButton</tabstop>
+</tabstops>
+<slots>
+ <slot>openBtnClicked()</slot>
+ <slot>saveBtnClicked()</slot>
+ <slot>saveAsBtnClicked()</slot>
+ <slot>closeQuery()</slot>
+ <slot>setModified()</slot>
+ <slot>fontBtnClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>ktextedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchleveldata.cpp b/ktouch/src/ktouchleveldata.cpp
new file mode 100644
index 00000000..c74c5d10
--- /dev/null
+++ b/ktouch/src/ktouchleveldata.cpp
@@ -0,0 +1,120 @@
+/***************************************************************************
+ * ktouchleveldata.cpp *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchleveldata.h"
+#include <qiodevice.h>
+#include <qdom.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qstringlist.h>
+
+const QString& KTouchLevelData::line(unsigned int lineNumber) const {
+ if (lineNumber>=m_lines.size())
+ lineNumber=0;
+ return m_lines[lineNumber];
+}
+
+void KTouchLevelData::createDefault() {
+ m_newChars = i18n("Quite a lot");
+ m_lines.clear();
+ QString text = i18n("This is a small default text. If you want\n"
+ "to start practicing touch typing, open\n"
+ "a lecture/training file from the main menu.\n"
+ "If you press enter after the next line you have\n"
+ "successfully completed the default lecture. Hurray!!!");
+ QStringList l( QStringList::split(QChar('\n'), text) );
+ for (QStringList::const_iterator it = l.constBegin(); it != l.constEnd(); ++it)
+ m_lines.push_back( *it );
+}
+
+bool KTouchLevelData::readLevel(QTextStream& in) {
+ QString line;
+ m_comment = m_newChars = QString::null;
+ m_lines.clear();
+ // now read all the lines of the level, until EOF or an empty line
+ line = in.readLine();
+ while (!line.isNull()) {
+ if (!line.isEmpty()) {
+ // Do we have a comment here? And if yes, is a keyword in the line?
+ if (line.find("# Comment:")==0)
+ m_comment = line.right(line.length() - 10).stripWhiteSpace();
+ else if (line[0]!='#') {
+ // the first line is the new characters line
+ if (m_newChars.isNull()) m_newChars = line;
+ else m_lines.push_back(line);
+ }
+ }
+ line = in.readLine();
+ };
+ if (m_lines.empty()) {
+ createDefault();
+ return false;
+ }
+ return true;
+}
+
+bool KTouchLevelData::readLevel(QDomNode in) {
+ QDomNode newChars = in.namedItem("NewCharacters");
+ if (newChars.isNull()) m_newChars = i18n("basically all characters on the keyboard","abcdefghijklmnopqrstuvwxyz");
+ else m_newChars = newChars.firstChild().nodeValue();
+ QDomNode levelComment = in.namedItem("LevelComment");
+ if (!levelComment.isNull()) m_comment = levelComment.firstChild().nodeValue();
+ m_lines.clear();
+ QDomNode line = in.namedItem("Line");
+ while ( !line.isNull() ) {
+ QString l = line.firstChild().nodeValue();
+ m_lines.push_back( l.stripWhiteSpace() );
+ line = line.nextSibling();
+ }
+ if (m_lines.empty()) {
+ createDefault();
+ return false;
+ }
+ return true;
+}
+
+void KTouchLevelData::writeLevel(QTextStream& out) const {
+ out << "# Comment: " << m_comment << endl; // comment line
+ out << m_newChars << endl; // new characters line
+ for (QValueVector<QString>::const_iterator it=m_lines.begin(); it!=m_lines.end(); ++it)
+ out << *it << endl;
+ out << endl;
+}
+
+void KTouchLevelData::writeLevel(QDomDocument& doc, QDomElement& root) const {
+ QDomElement level = doc.createElement("Level");
+ root.appendChild(level);
+ // comment (optional)
+ if (!m_comment.isEmpty()) {
+ QDomElement comment = doc.createElement("LevelComment");
+ QDomText commentText = doc.createTextNode(m_comment);
+ comment.appendChild(commentText);
+ level.appendChild(comment);
+ }
+ // new characters (must have that)
+ QDomElement newchars = doc.createElement("NewCharacters");
+ QDomText newcharsText;
+ if (m_newChars.isEmpty())
+ newcharsText = doc.createTextNode(i18n("basically all characters on the keyboard","abcdefghijklmnopqrstuvwxyz"));
+ else
+ newcharsText = doc.createTextNode(m_newChars);
+ newchars.appendChild(newcharsText);
+ level.appendChild(newchars);
+ // the lines
+ for (QValueVector<QString>::const_iterator it=m_lines.begin(); it!=m_lines.end(); ++it) {
+ QDomElement line = doc.createElement("Line");
+ QDomText lineText = doc.createTextNode(*it);
+ line.appendChild(lineText);
+ level.appendChild(line);
+ }
+}
+
diff --git a/ktouch/src/ktouchleveldata.h b/ktouch/src/ktouchleveldata.h
new file mode 100644
index 00000000..8055824d
--- /dev/null
+++ b/ktouch/src/ktouchleveldata.h
@@ -0,0 +1,80 @@
+/***************************************************************************
+ * ktouchleveldata.h *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHLEVELDATA_H
+#define KTOUCHLEVELDATA_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qstring.h>
+#include <qtextstream.h>
+#include <qvaluevector.h>
+#include <qdom.h>
+
+class QDomDocument;
+class QDomElement;
+
+/// This class contains the data of one level in a lecture and provides
+/// access to the lines of that level.
+///
+/// A lecture (KTouchLecture) typically contains multiple levels. Each
+/// level contains a level description, a string with the
+/// newly introduced characters and several lines of training text.
+/// There is ALWAYS at least one line of training text in the level!<p>
+/// During a training session you might want to retrieve a certain line of
+/// the level. You can use the member function line(lineNumber) to get a
+/// line of the level.
+/// The member function count() returns the number of lines in this level.
+class KTouchLevelData {
+ public:
+ /// Default constructor, creates a default level.
+ KTouchLevelData() { createDefault(); }
+ /// Constructor for creating a new level.
+ KTouchLevelData(const QString& comment, const QString& newChars)
+ : m_comment(comment), m_newChars(newChars) { createDefault(); }
+ /// Returns the level description (comment).
+ const QString& comment() const { return m_comment; }
+ /// Returns the new characters string.
+ const QString& newChars() const { return m_newChars; }
+ /// Returns the line with number 'lineNumber' (0 means first line).
+ ///
+ /// If the line number is out of range, the first line will be returned.
+ const QString& line(unsigned int lineNumber) const;
+ /// Returns the number of lines.
+ unsigned int count() const { return m_lines.size(); }
+
+ private:
+ /// Creates a default level.
+ void createDefault();
+ /// Reads a level from the input stream.
+ /// @return Returns 'true', when a level could be read successfully, or 'false' otherwise.
+ bool readLevel(QTextStream& in);
+ /// Reads a level from a XML Dom Node.
+ /// @return Returns 'true', when a level could be read successfully, or 'false' otherwise.
+ bool readLevel(QDomNode in);
+ /// Writes the level data into the output stream.
+ void writeLevel(QTextStream& out) const;
+ /// Writes the level data into the output stream.
+ void writeLevel(QDomDocument& doc, QDomElement& root) const;
+
+ QString m_comment; ///< A comment for the level.
+ QString m_newChars; ///< Contains the newly introduced characters in this level.
+ QValueVector<QString> m_lines; ///< The lines of the level.
+
+ // so I don't have to allow access to read/write function to everybody :-)
+ friend class KTouchLecture;
+ friend class KTouchLectureEditor;
+};
+
+#endif // KTOUCHLEVELDATA_H
diff --git a/ktouch/src/ktouchopenrequest.cpp b/ktouch/src/ktouchopenrequest.cpp
new file mode 100644
index 00000000..d4bc875b
--- /dev/null
+++ b/ktouch/src/ktouchopenrequest.cpp
@@ -0,0 +1,121 @@
+/***************************************************************************
+ * ktouchopenrequest.cpp *
+ * --------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include <qradiobutton.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+
+#include <kpushbutton.h>
+#include <klineedit.h>
+#include <kcombobox.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <ksqueezedtextlabel.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+
+#include "ktouchopenrequest.h"
+#include "ktouchopenrequest.moc"
+
+KTouchOpenRequest::KTouchOpenRequest(QWidget* parent, const char* name, bool modal, WFlags fl)
+: KTouchOpenRequestDlg(parent,name, modal,fl)
+{
+}
+
+int KTouchOpenRequest::requestFileToOpen(KURL& url, const QString& caption, const QString& title,
+ const QString& currentText, const QString& defaultText, const QString& openText,
+ const QString& newText, KURL current_url, QStringList defaultList, QString emptyListText)
+{
+ setCaption(caption);
+ openChoiceGroup->setTitle(title);
+ currentRadioBtn->setText(currentText);
+ presetRadioBtn->setText(defaultText);
+ openFileRadioBtn->setText(openText);
+ newRadioBtn->setText(newText);
+ // Fill in current lecture URL or disable if not available
+ if (current_url.isEmpty()) {
+ currentLabel->setText("");
+ currentRadioBtn->setEnabled(false);
+ newRadioBtn->setChecked(true);
+ }
+ else {
+ currentLabel->setText(current_url.url());
+ currentRadioBtn->setEnabled(true);
+ currentRadioBtn->setChecked(true);
+ };
+ // Fill preset combo with lecture files from the configuration object
+ presetCombo->clear();
+ if (defaultList.isEmpty()) {
+ if (emptyListText.isEmpty()) presetCombo->insertItem(i18n("<no default files available>"));
+ else presetCombo->insertItem(emptyListText);
+ presetRadioBtn->setEnabled(false);
+ }
+ else {
+ for (QStringList::Iterator it = defaultList.begin(); it != defaultList.end(); ++it )
+ presetCombo->insertItem(*it);
+ presetRadioBtn->setEnabled(true);
+ }
+ presetCombo->setCurrentItem(0);
+ radioBtnChanged();
+
+ // Finally executre the dialog
+ int result = exec();
+ url = m_url;
+ return result;
+}
+
+void KTouchOpenRequest::okBtnClicked() {
+ if (currentRadioBtn->isChecked())
+ m_url = currentLabel->text();
+ if (presetRadioBtn->isChecked())
+ m_url = presetCombo->currentText();
+ if (newRadioBtn->isChecked())
+ m_url = QString::null;
+ if (openFileRadioBtn->isChecked()) {
+ if (openFileEdit->text().isEmpty()) {
+ KMessageBox::error(this, i18n("Please select or enter a file name."));
+ return;
+ }
+ KURL tmp = openFileEdit->text();
+ if (!tmp.isValid()) {
+ KMessageBox::error(this, i18n("The URL seems to be malformed; please correct it."));
+ return;
+ }
+ m_url = tmp;
+ };
+ QDialog::accept();
+}
+
+
+void KTouchOpenRequest::radioBtnChanged() {
+ if (currentRadioBtn->isChecked()) currentLabel->setEnabled(true);
+ else currentLabel->setEnabled(false);
+ if (presetRadioBtn->isChecked()) presetCombo->setEnabled(true);
+ else presetCombo->setEnabled(false);
+ if (openFileRadioBtn->isChecked()) {
+ openFileEdit->setEnabled(true);
+ browseBtn->setEnabled(true);
+ }
+ else {
+ openFileEdit->setEnabled(false);
+ browseBtn->setEnabled(false);
+ }
+}
+
+
+void KTouchOpenRequest::browseBtnClicked() {
+ KURL tmp = KFileDialog::getOpenURL(QString::null, QString::null, this, i18n("Select Training Lecture File") );
+ if (!tmp.isEmpty())
+ openFileEdit->setText(tmp.url());
+}
+
+
diff --git a/ktouch/src/ktouchopenrequest.h b/ktouch/src/ktouchopenrequest.h
new file mode 100644
index 00000000..5c7d78a3
--- /dev/null
+++ b/ktouch/src/ktouchopenrequest.h
@@ -0,0 +1,81 @@
+/***************************************************************************
+ * ktouchopenrequest.h *
+ * ------------------- *
+ * Copyright (C) 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHOPENREQUEST_H
+#define KTOUCHOPENREQUEST_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ktouchopenrequest_dlg.h"
+
+#include <kurl.h>
+#include <qstringlist.h>
+
+/// Dialog for selecting a file to open.
+///
+/// This dialog is a costumizable dialog and is to be used for all editors.
+/// It offers the choice between a default (current) file, a prepared selection of
+/// files, choosing an arbitrary file from somewhere or creating a new file.
+/// Before using the dialog you have to set it up. You can do this using the
+/// all-in-one function requestFileToOpen() or manually by setting the
+/// different widgets yourself. Usually the first proposal will be best, as
+/// in the following example:
+/// @code
+/// KTouchOpenRequest dlg;
+/// KURL url;
+/// // current_lecture must hold the URL to the current/default lecture or ""
+/// // default_lectures must be a QStringList with the default lecture files.
+/// int result = dlg.requestFileToOpen(url, i18n("Open a lecture file"),
+/// i18n("Which lecture would you like to open?"), i18n("Current lecture:"),
+/// i18n("Open a default lecture:"), i18n("Open a lecture file:"),
+/// i18n("Create a new lecture!"), current_lecture,
+/// default_lectures, i18n("<no lecture files available>"));
+///
+/// if (result==QDialog::Accepted) {
+/// doSomethingFancyWith(url);
+/// }
+/// @endcode
+/// If you don't use the function and execute the dialog manually, the chosen
+/// url is stored in the member variable m_url (if the dialog was accepted by
+/// the user).
+///
+class KTouchOpenRequest : public KTouchOpenRequestDlg {
+ Q_OBJECT
+
+ public:
+ /// Default constructor.
+ KTouchOpenRequest(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ /// Default destructor.
+ ~KTouchOpenRequest() {}
+ /// Sets up the dialog and runs it.
+ /// @return Returns the dialogs return code, QDialog::Accepted or QDialog::Rejected.
+ int requestFileToOpen(KURL& url, const QString& caption, const QString& title, const QString& currentText,
+ const QString& defaultText, const QString& openText, const QString& newText,
+ KURL current_url = QString::null, QStringList defaultList = QStringList(), QString emptyListText = QString::null);
+
+ /// After the dialog has been accepted the URL chosen by the user is stored herein.
+ KURL m_url;
+
+ public slots:
+ /// Called when user selects Ok (used to check whether the URL is well formed).
+ void okBtnClicked();
+ /// Called when user switches to another radiobutton.
+ void radioBtnChanged();
+ /// Called when the user clicks on the "Browse" button and opens the file select dialog.
+ void browseBtnClicked();
+
+};
+
+#endif
+
diff --git a/ktouch/src/ktouchopenrequest_dlg.ui b/ktouch/src/ktouchopenrequest_dlg.ui
new file mode 100644
index 00000000..38ff057e
--- /dev/null
+++ b/ktouch/src/ktouchopenrequest_dlg.ui
@@ -0,0 +1,289 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>KTouchOpenRequestDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KTouchOpenRequestDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>436</width>
+ <height>236</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Open Something in Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>openChoiceGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Select File to Open</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>currentRadioBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Current something</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>presetRadioBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Preset something:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>presetCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="4" column="0">
+ <property name="name">
+ <cstring>newRadioBtn</cstring>
+ </property>
+ <property name="text">
+ <string>New something</string>
+ </property>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="5" column="0">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>openFileEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>browseBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="KSqueezedTextLabel" row="0" column="1">
+ <property name="name">
+ <cstring>currentLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Current something file</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="2" column="0">
+ <property name="name">
+ <cstring>openFileRadioBtn</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Open file:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>okBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelBtn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>okBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>okBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>cancelBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>currentRadioBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>radioBtnChanged()</slot>
+ </connection>
+ <connection>
+ <sender>presetRadioBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>radioBtnChanged()</slot>
+ </connection>
+ <connection>
+ <sender>openFileRadioBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>radioBtnChanged()</slot>
+ </connection>
+ <connection>
+ <sender>newRadioBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>radioBtnChanged()</slot>
+ </connection>
+ <connection>
+ <sender>browseBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KTouchOpenRequestDlg</receiver>
+ <slot>browseBtnClicked()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>currentRadioBtn</tabstop>
+ <tabstop>presetRadioBtn</tabstop>
+ <tabstop>presetCombo</tabstop>
+ <tabstop>openFileRadioBtn</tabstop>
+ <tabstop>browseBtn</tabstop>
+ <tabstop>newRadioBtn</tabstop>
+ <tabstop>okBtn</tabstop>
+ <tabstop>cancelBtn</tabstop>
+</tabstops>
+<slots>
+ <slot>okBtnClicked()</slot>
+ <slot>radioBtnChanged()</slot>
+ <slot>browseBtnClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>ksqueezedtextlabel.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchprefcolorslayout.ui b/ktouch/src/ktouchprefcolorslayout.ui
new file mode 100644
index 00000000..5b475da0
--- /dev/null
+++ b/ktouch/src/ktouchprefcolorslayout.ui
@@ -0,0 +1,516 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchPrefColorsLayout</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KTouchPrefColorsLayout</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>467</width>
+ <height>375</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Color Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Color Scheme</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Select color scheme:</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Black &amp; White</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Classic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Deep Blue</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stripy</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>kcfg_CurrentColorScheme</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Color scheme for displaying the keyboard</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>You can choose here the color scheme for displaying the keyboard. &lt;i&gt;Black &amp; White&lt;/i&gt; will display all keyboard letters black on white, &lt;i&gt;Classic&lt;/i&gt; will colorize the same color for each finger, &lt;i&gt;Deep Blue&lt;/i&gt; will display the keyboard in different deep blue colors and &lt;i&gt;Stripy&lt;/i&gt; will alternate blue and gray for letters corresponding to same finger.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_CommonTypingLineColors</cstring>
+ </property>
+ <property name="text">
+ <string>Use common typing line colors independent of color scheme</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>colorsGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Typing Line Colors</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KColorButton" row="0" column="7">
+ <property name="name">
+ <cstring>kcfg_TeacherBackgroundColor</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>The background for the teacher's line</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>You can change here the background color for the teacher's line (the line of letters you have to type.)</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Typing line</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="4">
+ <property name="name">
+ <cstring>kcfg_TeacherTextColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>The color for the teacher's line</string>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="0" column="5">
+ <property name="name">
+ <cstring>spacer11_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KColorButton" row="1" column="4">
+ <property name="name">
+ <cstring>kcfg_StudentTextColor</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change the text color for the student line</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here you can change the color of the text you type in the student line.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="6">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Background:</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="7">
+ <property name="name">
+ <cstring>kcfg_StudentBackgroundColor</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>textLabel1_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Text:</string>
+ </property>
+ </widget>
+ <spacer row="1" column="5">
+ <property name="name">
+ <cstring>spacer5_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Text:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Teacher's line</string>
+ </property>
+ </widget>
+ <spacer row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer16_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>34</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="6">
+ <property name="name">
+ <cstring>textLabel1_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Background:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ColorOnError</cstring>
+ </property>
+ <property name="text">
+ <string>Use different color on error in typing line</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>If checked this shows your error using the colors below on the typing line</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>140</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>errorTextLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Text:</string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>kcfg_ErrorTextColor</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>170</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose the text color for error in typing line</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>When you have checked 'Use different color on error in the typing line', you can then choose a color for the text of errors. You make an error when you type a wrong letter in the student line. This is a way to make your errors more visible.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>errorBackgroundLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Background:</string>
+ </property>
+ </widget>
+ <widget class="KColorButton">
+ <property name="name">
+ <cstring>kcfg_ErrorBackgroundColor</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>175</red>
+ <green>0</green>
+ <blue>55</blue>
+ </color>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose the background color for error in typing line</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>When you have checked 'Use different color on error in the typing line', you can then choose a color for the background of errors. You make an error when you type a wrong letter in the student line. This is a way to make your errors more visible.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer17</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>kcfg_TeacherTextColor</tabstop>
+ <tabstop>kcfg_TeacherBackgroundColor</tabstop>
+ <tabstop>kcfg_StudentTextColor</tabstop>
+ <tabstop>kcfg_StudentBackgroundColor</tabstop>
+ <tabstop>kcfg_ColorOnError</tabstop>
+ <tabstop>kcfg_ErrorTextColor</tabstop>
+ <tabstop>kcfg_ErrorBackgroundColor</tabstop>
+ <tabstop>kcfg_CurrentColorScheme</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchprefgenerallayout.ui b/ktouch/src/ktouchprefgenerallayout.ui
new file mode 100644
index 00000000..b62a5e81
--- /dev/null
+++ b/ktouch/src/ktouchprefgenerallayout.ui
@@ -0,0 +1,341 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchPrefGeneralLayout</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KTouchPrefGeneralLayout</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>485</width>
+ <height>351</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>General Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>Sound</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_BeepOnError</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Beep on error</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Emit a beep on each typing error</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If checked (default) this will emit a beep each time you make a typing error.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_SoundOnLevel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Sound on automatic level change</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Play a sound when the level automatically changes.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this is checked (default) a sound will be played each time you automatically change of level.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Text Line Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>20: Fast</string>
+ </property>
+ </widget>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>227</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QSlider" row="0" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>kcfg_SlidingSpeed</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="maxValue">
+ <number>20</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="tickInterval">
+ <number>1</number>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Slow: 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sliding speed:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Maximum height of sliding line widget:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>kcfg_MaxSlidingWidgetHeight</cstring>
+ </property>
+ <property name="maxValue">
+ <number>1000</number>
+ </property>
+ <property name="minValue">
+ <number>50</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>in pixels</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>fontTextLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Font for displayed/typed text:</string>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>114</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KFontRequester" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>kcfg_Font</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ <pointsize>13</pointsize>
+ </font>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change the font for the student and teacher lines</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This button will display a font dialog where you can change the font for the student and the teacher lines. When you leave the font dialog, the new font is previewed in the line below and only applied when you click the Apply button below.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>kcfg_OverrideLectureFont</cstring>
+ </property>
+ <property name="text">
+ <string>Override lecture font</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>If you want to override the font of the training lecture check this box and set your own font.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Most lectures suggest a font to use. This is necessary for not so common languages where characters may be displayed in a strange way and distort the sliding line. If you check this button you can choose your own font and override the lecture font.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kfontrequester.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchprefkeyboardlayout.ui b/ktouch/src/ktouchprefkeyboardlayout.ui
new file mode 100644
index 00000000..34851276
--- /dev/null
+++ b/ktouch/src/ktouchprefkeyboardlayout.ui
@@ -0,0 +1,142 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchPrefKeyboardLayout</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KTouchPrefKeyboardLayout</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>498</width>
+ <height>249</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Keyboard Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ShowAnimation</cstring>
+ </property>
+ <property name="text">
+ <string>Highlight &amp;keys on keyboard</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Show on the keyboards the keys you have to type</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This highlights on the keyboard the key you have to type next. It is easier to type when this is checked.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_HideKeyboard</cstring>
+ </property>
+ <property name="text">
+ <string>Hide keyboard</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_OverrideKeyboardFont</cstring>
+ </property>
+ <property name="text">
+ <string>Override keyboard fonts</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>If checked you can specify your own keyboard font instead of the predefined one of the keyboard layout.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Every keyboard layout may specify its own font. If the predefined font of a certain keyboard layout does not work or you would like to have your own, check this button. You may then choose your own font that will be used to draw the characters on the keys.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Font for keys on keyboard:</string>
+ </property>
+ </widget>
+ <widget class="KFontRequester">
+ <property name="name">
+ <cstring>kcfg_KeyboardFont</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<slots>
+ <slot>fontChooseBtnClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kfontrequester.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchpreftraininglayout.ui b/ktouch/src/ktouchpreftraininglayout.ui
new file mode 100644
index 00000000..19fe985c
--- /dev/null
+++ b/ktouch/src/ktouchpreftraininglayout.ui
@@ -0,0 +1,331 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchPrefTrainingLayout</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KTouchPrefTrainingLayout</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>472</width>
+ <height>354</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Training Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Level Up/Down Limits</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_AutoLevelChange</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;utomatic level adjustment</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>l3</cstring>
+ </property>
+ <property name="text">
+ <string>Correctness:</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>kcfg_UpSpeedLimit</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>l2</cstring>
+ </property>
+ <property name="text">
+ <string>Typing speed:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="3">
+ <property name="name">
+ <cstring>l5</cstring>
+ </property>
+ <property name="text">
+ <string>%</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>l1</cstring>
+ </property>
+ <property name="text">
+ <string>Limits to increase a level</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>kcfg_UpCorrectLimit</cstring>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>l4</cstring>
+ </property>
+ <property name="text">
+ <string>chars/minute</string>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>l6</cstring>
+ </property>
+ <property name="text">
+ <string>Limits to decrease a level</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="3">
+ <property name="name">
+ <cstring>l10</cstring>
+ </property>
+ <property name="text">
+ <string>%</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>kcfg_DownCorrectLimit</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>kcfg_DownSpeedLimit</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>l7</cstring>
+ </property>
+ <property name="text">
+ <string>Typing speed:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>l9</cstring>
+ </property>
+ <property name="text">
+ <string>chars/minute</string>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer11_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer12_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>l8</cstring>
+ </property>
+ <property name="text">
+ <string>Correctness:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_DisableManualLevelChange</cstring>
+ </property>
+ <property name="text">
+ <string>Disable manual level change buttons</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox7</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_RememberLevel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remember level for next program start</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer17</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchslideline.cpp b/ktouch/src/ktouchslideline.cpp
new file mode 100644
index 00000000..aa245b4b
--- /dev/null
+++ b/ktouch/src/ktouchslideline.cpp
@@ -0,0 +1,577 @@
+/***************************************************************************
+ * ktouchslideline.h *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2006 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchslideline.h"
+#include "ktouchslideline.moc"
+
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <kdebug.h>
+
+#include <cmath>
+#include <algorithm>
+
+#include "prefs.h"
+#include "ktouchcolorscheme.h"
+
+// uncomment the following define to enable extended debugging
+//#define SLIDE_LINE_DEBUGGING
+
+
+// --- don't touch the lines below ---
+#ifdef SLIDE_LINE_DEBUGGING
+
+#define DRAW_TEACHER_CURSOR
+#define KD_DEBUG(x) kdDebug() << x
+
+#else // SLIDE_LINE_DEBUGGING
+
+#define KD_DEBUG(x) ;
+
+#endif // SLIDE_LINE_DEBUGGING
+// --- don't touch the lines above ---
+
+
+KTouchSlideLine::KTouchSlideLine(QWidget *parent)
+ : QWidget( parent ),
+ m_teacherPixmap(NULL),
+ m_studentPixmap(NULL),
+ m_slideTimer(this),
+ m_cursorVisible(false),
+ m_cursorTimer(this)
+{
+ // set widget defaults (note: teacher and student text is empty after creation)
+ setMinimumHeight(50);
+ setMaximumHeight(150);
+ // NOTE : the maximum widget height is adjusted again in applyPreferences()
+
+ setCursorTimerEnabled(true);
+
+ m_marginCursor = 0;
+ m_cursorRangeLen = 0;
+ m_slideLineHeight = 0;
+
+ m_xCharWidth = 0;
+ m_spaceCharWidth = 0;
+ m_cursorHeight = 0;
+
+ m_teacherTextLen = 0;
+ m_correctTextLen = 0;
+ m_studentTextLen = 0;
+ m_xCursorTeacher = 0;
+ m_xCursorStudent = 0;
+ m_yCursorStudent = 0;
+
+ // the x frame coordinates initially to zero
+ m_xFrameTeacher = 0;
+ m_xFrameTeacherCurrent = 0;
+ m_xFrameStudent = 0;
+ m_xFrameStudentCurrent = 0;
+
+ connect( &m_cursorTimer, SIGNAL(timeout()), this, SLOT(toggleCursor()) );
+ connect( &m_slideTimer, SIGNAL(timeout()), this, SLOT(slide()) );
+}
+// ----------------------------------------------------------------------------
+
+KTouchSlideLine::~KTouchSlideLine() {
+ delete m_teacherPixmap;
+ delete m_studentPixmap;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::applyPreferences() {
+ KD_DEBUG( "[KTouchSlideLine::applyPreferences]" << endl );
+
+ // set maximum widget height (also determines maximum font size)
+ setMaximumHeight(Prefs::maxSlidingWidgetHeight());
+
+ // set font face of we override the lecture font
+ if (Prefs::overrideLectureFont())
+ setFont(Prefs::font());
+ else
+ updateSlidingLines();
+
+ // Note: The function setFont() in turn calls resizeFont() and through that
+ // the whole widget gets updated.
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::setNewText(const QString& teacher_text, const QString& student_text) {
+ KD_DEBUG( "[KTouchSlideLine::setNewText]" << endl );
+
+ m_teacherText=teacher_text;
+ m_studentText=student_text;
+ KD_DEBUG( " m_teacherText = '" << m_teacherText << "'" << endl );
+ KD_DEBUG( " m_studentText = '" << m_studentText << "'" << endl );
+
+ updateSlidingLines();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::setStudentText(const QString& text) {
+ KD_DEBUG( "[KTouchSlideLine::setStudentText]" << endl );
+ m_studentText=text;
+ updateStudentLine();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::setFont(const QFont& font) {
+ KD_DEBUG( "[KTouchSlideLine::setFont]" << endl );
+ // set the font for the slide line, unless the configuration overrides it
+ if (Prefs::overrideLectureFont()) m_font = Prefs::font();
+ else m_font = font;
+
+ // set point size of the font
+ resizeFont();
+ // Note: this function also takes care of updating the lines
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchSlideLine::canAddCharacter(const QString& new_student_text) {
+ QFontMetrics fontMetrics( m_font );
+ int new_text_len = textLen(fontMetrics, new_student_text);
+ int allowed_student_length = m_studentPixmap->width() - 2*m_marginCursor;
+ return (new_text_len <= allowed_student_length);
+}
+// ----------------------------------------------------------------------------
+
+
+// *** Public slots ***
+
+void KTouchSlideLine::setCursorTimerEnabled(bool on) {
+ if (on) m_cursorTimer.start(600);
+ else m_cursorTimer.stop();
+ m_cursorVisible=false;
+ drawCursor();
+}
+// ----------------------------------------------------------------------------
+
+
+// *** Private slots ***
+
+void KTouchSlideLine::toggleCursor() {
+ m_cursorVisible=!m_cursorVisible;
+ drawCursor();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::slide() {
+ KD_DEBUG( "[KTouchSlideLine::slide]" << endl );
+ if (m_studentPixmap==NULL || m_teacherPixmap==NULL) return;
+ // calculate new x positions depending on slide speed
+ double speed = 1.0 + 0.2*Prefs::slidingSpeed();
+
+ KD_DEBUG( " speed = " << speed << endl );
+
+ // Teacher's line
+ double dx_teacher = m_xFrameTeacher - m_xFrameTeacherCurrent;
+ if (fabs(dx_teacher) < 1.0) { // if we are already close enough, don't slide anylonger
+ m_xFrameTeacherCurrent = m_xFrameTeacher;
+ dx_teacher = 0;
+ }
+ else {
+ double dx_teacher_new = dx_teacher/speed;
+ m_xFrameTeacherCurrent += dx_teacher_new;
+ }
+ int int_xFrameTeacherCurrent = static_cast<int>(ceil(m_xFrameTeacherCurrent));
+ KD_DEBUG( " m_xFrameTeacher = " << m_xFrameTeacher << " current = "
+ << int_xFrameTeacherCurrent << " (" << m_xFrameTeacherCurrent << ")" << endl );
+ if (!Prefs::right2LeftTyping()) {
+ bitBlt(this, m_marginHorWidget, m_marginVerWidget,
+ m_teacherPixmap, int_xFrameTeacherCurrent, 0, m_slideLineWidth, m_slideLineHeight);
+ }
+ else {
+ }
+
+ // Student's line
+ double dx_student = m_xFrameStudent - m_xFrameStudentCurrent;
+ if (fabs(dx_student) < 1.0) { // if we are already close enough, don't slide anylonger
+ m_xFrameStudentCurrent = m_xFrameStudent;
+ dx_student = 0;
+ }
+ else {
+ double dx_student_new = dx_student/speed;
+ m_xFrameStudentCurrent += dx_student_new;
+ }
+ // NOTE : use ceil() to always round up the value, otherwise we get a funny "jumping"
+ // curser effect
+ int int_xFrameStudentCurrent = static_cast<int>(ceil(m_xFrameStudentCurrent));
+ KD_DEBUG( " m_xFrameStudent = " << m_xFrameStudent << " current = "
+ << int_xFrameStudentCurrent << " (" << m_xFrameStudentCurrent << ")" << endl );
+ if (!Prefs::right2LeftTyping()) {
+ bitBlt(this, m_marginHorWidget, m_marginVerWidget + m_slideLineHeight + m_slideLineDist,
+ m_studentPixmap, int_xFrameStudentCurrent, 0, m_slideLineWidth, m_slideLineHeight);
+ }
+ else {
+ }
+
+ // restart slide timer if necessary
+ if (dx_teacher != 0 || dx_student != 0)
+ m_slideTimer.start(100, true); // start singleshot timer to slide again
+ drawCursor();
+}
+// ----------------------------------------------------------------------------
+
+
+// *** Protected member functions (event implementation) ***
+
+void KTouchSlideLine::paintEvent(QPaintEvent*) {
+ KD_DEBUG( "[KTouchSlideLine::paintEvent]" << endl );
+ if (m_studentPixmap==NULL || m_teacherPixmap==NULL)
+ updateSlidingLines();
+ else
+ slide();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::resizeEvent ( QResizeEvent * ) {
+ KD_DEBUG( "[KTouchSlideLine::resizeEvent]" << endl );
+ // required input member variables: none
+
+ // when the widget is resized, the whole geometry is invalidated, so we do:
+ // 1. recalculate and store the geometry of the sliding lines
+ // 2. resize the font
+ // 3. recreate the sliding lines (this is done from the resizeFont() function
+
+ // TODO : make these values depending on widget size
+ m_marginVerWidget = 10;
+ m_slideLineDist = 5;
+ m_marginCursor = 20;
+ m_slideLineHeight = (height() - 2*m_marginVerWidget - m_slideLineDist)/2;
+
+ KD_DEBUG( " m_slideLineDist = " << m_slideLineDist << endl );
+ KD_DEBUG( " m_slideLineHeight = " << m_slideLineHeight << endl );
+ KD_DEBUG( " m_marginCursor = " << m_marginCursor << endl );
+
+ // now resize the font
+ resizeFont();
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** Private member functions (event implementation)
+
+int KTouchSlideLine::textLen(const QFontMetrics& fontMetrics, const QString& text) {
+ //KD_DEBUG( "[KTouchSlideLine::textLen]" << endl;
+
+ // required input member variables: m_xCharWidth
+
+ // add an x to the string and subtract the width of the single x afterwards,
+ // so that in case of "blablabla " still the correct size is returned
+ int w;
+ if (!Prefs::right2LeftTyping())
+ w = fontMetrics.boundingRect(text + "x").width() - m_xCharWidth;
+ else
+ w = fontMetrics.boundingRect("x" + text).width() - m_xCharWidth;
+ return w;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::resizeFont() {
+ KD_DEBUG( "[KTouchSlideLine::resizeFont]" << endl );
+ if (m_slideLineHeight == 0) return; // can happen during startup
+
+ // required input member variables: m_slideLineHeight
+
+ // TODO : add support for fixed/overridden font size
+
+ // this formula sets the font height to 65% of the line height
+ m_font.setPointSize(static_cast<int>(m_slideLineHeight*0.65));
+ // set the cursor height
+ m_cursorHeight = static_cast<int>(m_slideLineHeight*0.65);
+ KD_DEBUG( " m_cursorHeight = " << m_cursorHeight << endl );
+ // calculate the margin between the top of the student line and the top of the cursor.
+ int y_line_margin = (m_slideLineHeight - m_cursorHeight)/2;
+ // set the y coordinate of the cursor
+ m_yCursorStudent = height() - m_marginVerWidget - m_slideLineHeight + y_line_margin;
+ KD_DEBUG( " m_yCursorStudent = " << m_yCursorStudent << endl );
+ // get font infos
+ QFontMetrics fontMetrics( m_font );
+ // width of a single x character
+ m_xCharWidth = fontMetrics.boundingRect("x").width();
+ // width of a single space character
+ m_spaceCharWidth = fontMetrics.boundingRect("x x").width() - fontMetrics.boundingRect("x x").width();
+ // update slide lines
+ updateSlidingLines();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::drawCursor() {
+ // required input member variables: m_xCursorStudent, m_yCursorStudent, m_cursorHeight
+ // m_xCursorTeacher
+ // m_marginHorWidget, m_slideLineDist, m_slideLineHeight
+ // m_xFrameTeacher, m_xFrameTeacherCurrent,
+ // m_xFrameStudent, m_xFrameStudentCurrent,
+
+ QPainter p(this);
+
+#ifdef DRAW_TEACHER_CURSOR
+ QColor col_tt = Prefs::commonTypingLineColors() ?
+ Prefs::teacherTextColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_teacherTextColor;
+ QColor col_tb = Prefs::commonTypingLineColors() ?
+ Prefs::teacherBackgroundColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_teacherBackground;
+
+ if (m_cursorVisible) p.setPen( col_tt );
+ else p.setPen( col_tb );
+
+ int dx_teacher = static_cast<int>(m_xFrameTeacher - m_xFrameTeacherCurrent);
+ int cursor_x_teacher = m_marginHorWidget + m_xCursorTeacher + dx_teacher;
+
+ // don't draw cursor if outside frame
+ if (cursor_x_teacher > m_marginHorWidget && cursor_x_teacher < width() - m_marginHorWidget) {
+ p.drawLine(cursor_x_teacher, m_yCursorStudent - m_slideLineDist - m_slideLineHeight,
+ cursor_x_teacher, m_yCursorStudent + m_cursorHeight - m_slideLineDist - m_slideLineHeight);
+ }
+#endif
+
+
+ if (m_cursorVisible) p.setPen( m_cursorColor );
+ else p.setPen( m_cursorBackground );
+
+ int dx_student = static_cast<int>(m_xFrameStudent - m_xFrameStudentCurrent);
+ int cursor_x_student = m_marginHorWidget + m_xCursorStudent + dx_student;
+
+ // don't draw cursor if outside frame
+ if (cursor_x_student > m_marginHorWidget && cursor_x_student < width() - m_marginHorWidget) {
+// KD_DEBUG( " cursor_x_student = " << cursor_x_student << endl );
+ p.drawLine(cursor_x_student, m_yCursorStudent,
+ cursor_x_student, m_yCursorStudent + m_cursorHeight);
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::drawEnterChar(QPainter *painter, int cursorPos, int y, int enterWidth) {
+ // required input member variables: none
+
+ int gap = std::min(2,static_cast<int>(0.2*enterWidth));
+ int enterHeight = static_cast<int>(0.4*enterWidth);
+ int arrowSize = static_cast<int>(enterWidth/4.0); // mind the difference between 4 and 4.0
+ painter->drawLine(cursorPos+enterWidth, y, cursorPos+enterWidth, y-enterHeight); // vertical line
+ painter->drawLine(cursorPos+gap, y, cursorPos+enterWidth, y); // arrow
+ painter->drawLine(cursorPos+gap, y, cursorPos+gap+arrowSize, y+arrowSize); // arrow
+ painter->drawLine(cursorPos+gap, y, cursorPos+gap+arrowSize, y-arrowSize); // arrow
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::updateSlidingLines() {
+ KD_DEBUG( "[KTouchSlideLine::updateSlidingLines]" << endl );
+
+ // required input member variables: m_teacherText, m_studentText, m_marginCursor, m_cursorRangeLen
+ // m_slideLineHeight, m_xCharWidth
+
+ // check that input variables are ok, some of this stuff can happen during startup,
+ // but we MUST NOT allow these variables here
+ if (m_teacherText.isEmpty()) return;
+ if (m_slideLineHeight == 0) return;
+
+ // first update some variables
+ QFontMetrics fontMetrics( m_font );
+ m_teacherTextLen = textLen(fontMetrics, m_teacherText);
+ KD_DEBUG( " m_teacherTextLen = " << m_teacherTextLen << endl );
+
+ // assume long text first and calculate variables for maximum slide line size
+ m_marginHorWidget = 30; // TODO : make dependent of widget width
+ m_slideLineWidth = width() - 2*m_marginHorWidget;
+ m_cursorRangeLen = m_slideLineWidth - 2*m_marginCursor;
+
+ // adjust m_marginCursor and m_cursorRangeLen if text is smaller then available widget width
+ if (m_teacherTextLen < m_cursorRangeLen) {
+ KD_DEBUG( " --> short text, correcting variables" << endl );
+ m_cursorRangeLen = m_teacherTextLen;
+ m_slideLineWidth = m_cursorRangeLen + 2*m_marginCursor;
+ m_marginHorWidget = (width() - m_slideLineWidth)/2;
+ }
+ KD_DEBUG( " m_cursorRangeLen = " << m_cursorRangeLen << endl );
+ KD_DEBUG( " m_slideLineWidth = " << m_slideLineWidth << endl );
+ KD_DEBUG( " m_marginHorWidget = " << m_marginHorWidget << endl );
+
+ // delete old pixmaps because we have to change their sizes anyway
+ delete m_teacherPixmap;
+ m_teacherPixmap = NULL; // just a precaution
+ delete m_studentPixmap;
+ m_studentPixmap = NULL; // just a precaution
+
+ // create the teacher pixmap
+ int w = 2*m_marginCursor + m_teacherTextLen; // TODO : add size of enter character
+ int h = m_slideLineHeight;
+ m_teacherPixmap = new QPixmap(w,h);
+ KD_DEBUG( " m_teacherPixmap = " << w << " x " << h << endl );
+
+ // draw the teacher pixmap text
+ QPainter painter;
+ painter.begin (m_teacherPixmap, this);
+ painter.setFont( m_font );
+
+ QColor col_tt = Prefs::commonTypingLineColors() ?
+ Prefs::teacherTextColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_teacherTextColor;
+ QColor col_tb = Prefs::commonTypingLineColors() ?
+ Prefs::teacherBackgroundColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_teacherBackground;
+
+ painter.fillRect( m_teacherPixmap->rect(), QBrush(col_tb) );
+ painter.setPen( col_tt );
+ // create a rectangle for the text drawing
+ QRect textRect(m_marginCursor, 0, w-2*m_marginCursor, h);
+ // left aligned
+ if (!Prefs::right2LeftTyping()) {
+ painter.drawText(textRect, QPainter::AlignLeft | QPainter::AlignVCenter, m_teacherText);
+ // TODO : draw enter char after the text
+ }
+ // right aligned, e.g. for Hebrew text
+ else {
+ painter.drawText(textRect, QPainter::AlignRight | QPainter::AlignVCenter, m_teacherText);
+ // TODO : draw enter character at left of text
+ }
+ painter.end();
+ // done with the teachers text which will not change so quickly again
+
+ // create student line pixmap thats slightly longer than the teacher's pixmap
+ m_studentPixmap = new QPixmap(w+100,h);
+ KD_DEBUG( " m_studentPixmap = " << w+100 << " x " << h << endl );
+
+ // update (draw) student line and calculate coordinates needed for sliding
+ repaint(true); // trigger a paint event to erase the background
+ updateStudentLine();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSlideLine::updateStudentLine() {
+ KD_DEBUG( "[KTouchSlideLine::updateStudentLine]" << endl );
+ if (m_teacherPixmap == NULL || m_studentPixmap == NULL) return;
+
+ // required input member variables: m_teacherText, m_studentText, m_marginCursor, m_cursorRangeLen
+ // m_slideLineHeight, m_xCharWidth, m_teacherTextLen
+
+ if (m_teacherTextLen == 0) return;
+
+ QFontMetrics fontMetrics( m_font );
+ m_studentTextLen = textLen(fontMetrics, m_studentText);
+ KD_DEBUG( " m_studentTextLen = " << m_studentTextLen << endl );
+
+ // we now need to find out, how much of the students text was typed correctly
+ int teacherLen = m_teacherText.length();
+ int studentLen = m_studentText.length();
+
+ unsigned int min_len = QMIN(teacherLen, studentLen);
+
+ QString correctText;
+ if (!Prefs::right2LeftTyping()) {
+ // for text typed from left to right
+ for (unsigned int i=0; i<min_len; ++i) {
+ if (m_teacherText[i] == m_studentText[i]) correctText += m_teacherText[i];
+ else break;
+ }
+ }
+ else {
+ // for text typed from right to left
+ for (unsigned int i=min_len; i>0; --i) {
+ if (m_teacherText[i-1] == m_studentText[i-1]) correctText = m_teacherText[i] + correctText;
+ else break;
+ }
+ }
+
+ bool error = (correctText.length() != min_len);
+ KD_DEBUG( " error in text? = " << error << endl );
+ KD_DEBUG( " correctText = '" << correctText << "'" << endl );
+ m_correctTextLen = textLen(fontMetrics, correctText);
+ KD_DEBUG( " m_correctTextLen = " << m_correctTextLen << endl );
+
+ // *** Teacher slide line ***
+
+ // adjust some of the coordinates
+ // NOTE: use ceil to get consistent rounding
+ m_xCursorTeacher = static_cast<int>(m_marginCursor + ceil(double(m_correctTextLen)/m_teacherTextLen * m_cursorRangeLen));
+ KD_DEBUG( " m_xCursorTeacher = " << m_xCursorTeacher << endl );
+
+ // TODO : transform coordinates when Prefs::right2LeftTyping() is true
+
+ // find the coordinates of the current position in the Teacher's pixmap
+ m_xCursorTPixmap = m_marginCursor + m_correctTextLen;
+ KD_DEBUG( " m_xCursorTPixmap = " << m_xCursorTPixmap << endl );
+
+ // find the left x coordinates of the frame to be copied from the teacher pixmap, but first store the shift.
+ m_xFrameTeacher = m_xCursorTPixmap - m_xCursorTeacher;
+ KD_DEBUG( " m_xFrameTeacher = " << m_xFrameTeacher << endl );
+
+
+ // *** Student slide line ***
+
+ // make sure our student text length is < then allowed length
+ int allowed_student_length = m_studentPixmap->width() - 2*m_marginCursor;
+ if (m_studentTextLen > allowed_student_length) {
+ KD_DEBUG( " WARNING : m_studentTextLen ("<< m_studentTextLen <<") > allowed_student_length ("<< allowed_student_length <<")" << endl );
+ m_studentTextLen = allowed_student_length;
+ }
+
+ // adjust some of the coordinates
+ if (m_studentTextLen > m_teacherTextLen)
+ m_xCursorStudent = m_marginCursor + m_cursorRangeLen;
+ else
+ m_xCursorStudent = static_cast<int>(m_marginCursor + ceil(double(m_studentTextLen)/m_teacherTextLen * m_cursorRangeLen));
+ KD_DEBUG( " m_xCursorStudent = " << m_xCursorStudent << endl );
+
+ // find the coordinates of the current position in the Students's pixmap
+ m_xCursorSPixmap = m_marginCursor + m_studentTextLen;
+
+ // find the left x coordinates of the frame to be copied from the teacher pixmap, but first store the shift.
+ m_xFrameStudent = m_xCursorSPixmap - m_xCursorStudent;
+ KD_DEBUG( " m_xFrameTeacher = " << m_xFrameStudent << endl );
+
+ // now let's draw the students pixmap
+ QPainter painter;
+ painter.begin (m_studentPixmap, this);
+ if (Prefs::colorOnError()) {
+ // draw the student line depending on the colour settings
+ if (error) {
+ // determine colors depending on preferences settings
+ m_cursorBackground = Prefs::commonTypingLineColors() ? Prefs::errorBackgroundColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_errorBackground;
+ m_cursorColor = Prefs::commonTypingLineColors() ? Prefs::errorTextColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_errorTextColor;
+ }
+ else {
+ // determine colors depending on preferences settings
+ m_cursorBackground = Prefs::commonTypingLineColors() ? Prefs::studentBackgroundColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_studentBackground;
+ m_cursorColor = Prefs::commonTypingLineColors() ? Prefs::studentTextColor() :
+ KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()].m_studentTextColor;
+ }
+ painter.fillRect (m_studentPixmap->rect(), QBrush(m_cursorBackground));
+ painter.setPen( m_cursorColor );
+ }
+ else {
+ // use always student text colors
+ m_cursorColor = Prefs::studentTextColor();
+ painter.setPen( m_cursorColor );
+ m_cursorBackground = Prefs::studentBackgroundColor();
+ painter.fillRect( m_studentPixmap->rect(), QBrush(m_cursorBackground) );
+ }
+ // draw the text
+ painter.setFont( m_font );
+ QRect textRect(m_marginCursor, 0, m_studentPixmap->width()-2*m_marginCursor, m_studentPixmap->height());
+ if (Prefs::right2LeftTyping())
+ painter.drawText(textRect, QPainter::AlignRight | QPainter::AlignVCenter, m_studentText);
+ else
+ painter.drawText(textRect, QPainter::AlignLeft | QPainter::AlignVCenter, m_studentText);
+ painter.end();
+ // done painting the students line
+
+ // turn on cursor blinking
+ m_cursorVisible = true;
+ m_cursorTimer.start(800);
+
+ slide(); // start the sliding
+}
diff --git a/ktouch/src/ktouchslideline.h b/ktouch/src/ktouchslideline.h
new file mode 100644
index 00000000..bb6f7a1e
--- /dev/null
+++ b/ktouch/src/ktouchslideline.h
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * ktouchslideline.h *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2006 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHSLIDELINE_H
+#define KTOUCHSLIDELINE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qwidget.h>
+#include <qtimer.h>
+class QPixmap;
+class QPainter;
+
+/// This widget just displays the sliding text.
+///
+/// KTouchSlideLine is a fire-and-forget widget, so you don't have to care about any
+/// drawing details. After the initial setup (setting the font, colours etc.) you simple
+/// need to call setNewText() when the teacher text changes or setStudentText() when
+/// only the student line has changed. Everything else (including the
+/// choice of the background colour) is done by the widget.
+///
+/// Please refer to the documentation 'sliding_line_widget.pdf' in the doc folder.
+class KTouchSlideLine : public QWidget {
+ Q_OBJECT
+ public:
+ /// Constructor
+ KTouchSlideLine(QWidget *parent);
+ /// Destructor, free memory allocated for the line pixmap.
+ ~KTouchSlideLine();
+ /// Applies the preferences (font and colours).
+ /// This function calls setFont() which in turn results in a complete update
+ /// of the widget and its sliding lines.
+ /// @see setFont()
+ void applyPreferences();
+ /// Sets the teacher and student text (usually called when a new line is started).
+ /// This function calls updateSlidingLines().
+ /// @see updateSlidingLines()
+ void setNewText(const QString& teacher_text, const QString& student_text);
+ /// Sets the student text (called whenever the student string changes).
+ /// This function calls updateStudentLine().
+ /// @see updateStudentLine()
+ void setStudentText(const QString& text);
+ /// Changes the font of the slide line widget and updates everything else.
+ /// This function is called when the font is changed. It updates the size
+ /// of the sliding lines and the font size accordingly. Then it updates
+ /// the widget.
+ /// This function calls resizeFont().
+ /// @see resizeFont()
+ void setFont(const QFont& font);
+
+ /// Returns true when the character can be added without problems.
+ /// This function checks if the new possibly wrong student line
+ /// would still fit into the student line pixmap and returns
+ /// false if not.
+ bool canAddCharacter(const QString& new_student_text);
+
+ public slots:
+ /// Starts or stops the cursor blinking timer.
+ void setCursorTimerEnabled(bool on);
+
+ private slots:
+ /// Turns the cursor on or off (this function triggered by the cursor timer).
+ void toggleCursor();
+ /// Slides the lines into position (this function is triggered by the sliding timer).
+ void slide();
+
+ protected:
+ /// Simply updates the widget.
+ /// This function calls updateSlidingLines() if necessary, otherwise just slide().
+ /// @see updateSlidingLines()
+ /// @see slide()
+ void paintEvent( QPaintEvent * );
+ /// Will be called when the widget is resized.
+ /// This event will first recalculate the geometry of the sliding lines.
+ /// Then the font size will be updated and through that, the sliding lines will be
+ /// updated.
+ void resizeEvent ( QResizeEvent * );
+
+ private:
+ /// Calculates the correct text length (in pixels) taking trailing spaces into account
+ int textLen(const QFontMetrics& fontMetrics, const QString& text);
+ /// Will recalculate the font size and related variables depending on the height of the widget.
+ /// This function calls updateSlidingLines().
+ /// @see updateSlidingLines()
+ void resizeFont();
+ /// Just draws the cursor (if visible)
+ void drawCursor();
+ /// Draws the "enter" character at the given position (y is the y-position of the arrow).
+ void drawEnterChar(QPainter *painter, int cursorPos, int y, int enterWidth);
+ /// Recreates the student and teacher pixmaps and updates all related variables.
+ /// In this function the teacher pixmap is drawn it will not be modified until the next
+ /// call of updateSlidingLines(). This function also calls updateStudentLine().
+ /// @see updateStudentLine()
+ void updateSlidingLines();
+ /// Redraws the student line alone and updates all related variables.
+ void updateStudentLine();
+
+ QFont m_font; ///< The font for the sliding lines.
+ QString m_teacherText; ///< The teachers text.
+ QString m_studentText; ///< The students text.
+ QPixmap *m_teacherPixmap; ///< Pixmap used to draw the teacher sliding line, created in updateSlidingLines().
+ QPixmap *m_studentPixmap; ///< Pixmap used to draw the student sliding line, created in updateSlidingLines().
+
+ QTimer m_slideTimer; ///< This is the timer for the sliding of the lines.
+
+ bool m_cursorVisible; ///< Flag which indicates the current state of the cursor.
+ QTimer m_cursorTimer; ///< This is the cursor on/off timer.
+ QColor m_cursorColor; ///< Defines the colour of the cursor (when turned on).
+ QColor m_cursorBackground; ///< Defines the background colour of the cursor (when turned off).
+
+ // variables depending on size of widget, will be updated in resizeEvent()
+ int m_marginVerWidget; ///< Vertical margin between widget boundary and sliding line in pixels.
+ int m_slideLineDist; ///< Vertical distance between sliding lines in pixels.
+ int m_slideLineHeight; ///< Height of a sliding line in pixels.
+ int m_marginCursor; ///< The margin for cursor movement (minimum distance from left and right ends of slide line boundaries).
+
+ // variables depending on font face and size, will be updated in the resizeFont() function
+ int m_xCharWidth; ///< The width (in pixel) of a small x (used to calculate space width and other stuff).
+ int m_spaceCharWidth; ///< The width of a space character (in pixel).
+ int m_cursorHeight; ///< Height of the cursor.
+ int m_yCursorStudent; ///< Cursor top y coordinate (from top of visible area) in the student line.
+
+ // newly defined variables, will be updated on the setNewText() and partially in setStudentText()
+ int m_marginHorWidget; ///< Horizontal margin between widget boundary and sliding line in pixels.
+ int m_slideLineWidth; ///< The length of the sliding line in pixels.
+ int m_cursorRangeLen; ///< Length (in pixel) that the cursor can move between left and right margin.
+
+ int m_teacherTextLen; ///< The total length of the teacher line (in pixel) WITHOUT enter character.
+ int m_correctTextLen; ///< The length of correctly typed text so far (in pixel).
+ int m_studentTextLen; ///< The total length of text typed (potentially wrong) in the student line (in pixel).
+
+ int m_xCursorTeacher; ///< Cursor position (from left side of visible area) in the teacher line.
+ int m_xCursorTPixmap; ///< Current cursor position in the teacher pixmap (from left in pixels).
+ int m_xCursorStudent; ///< Cursor position (from left side of visible area) in the student line.
+ int m_xCursorSPixmap; ///< Current cursor position in the student pixmap (from left in pixels).
+
+
+ int m_xFrameTeacher; ///< The final X-position (position after slide is done) for the copy-frame in the teachers pixmap.
+ double m_xFrameTeacherCurrent; ///< The current X-position (position after slide is done) for the copy-frame in the teachers pixmap.
+
+ int m_xFrameStudent; ///< The final X-position (position after slide is done) for the copy-frame in the students pixmap.
+ double m_xFrameStudentCurrent; ///< The current X-position (position after slide is done) for the copy-frame in the students pixmap.
+};
+
+#endif // KTOUCHSLIDELINE_H
diff --git a/ktouch/src/ktouchstatistics.cpp b/ktouch/src/ktouchstatistics.cpp
new file mode 100644
index 00000000..97b1d45c
--- /dev/null
+++ b/ktouch/src/ktouchstatistics.cpp
@@ -0,0 +1,475 @@
+/***************************************************************************
+ * ktouchstatistics.cpp *
+ * -------------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchstatistics.h"
+#include "ktouchstatistics.moc"
+
+#include <list>
+#include <vector>
+#include <utility>
+
+#include <qprogressbar.h>
+#include <qlcdnumber.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <kurl.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <ktabwidget.h>
+
+#include "ktouch.h"
+#include "ktouchchartwidget.h"
+
+KTouchStatistics::KTouchStatistics(QWidget* parent)
+ : KTouchStatisticsDlg(parent)
+{
+ sessionsRadio->setChecked(true);
+ WPMRadio->setChecked(true);
+ eventRadio->setChecked(true);
+ connect(closeButton, SIGNAL(clicked()), this, SLOT(accept()) );
+ connect(lectureCombo, SIGNAL(activated(int)), this, SLOT(lectureActivated(int)) );
+ connect(clearButton, SIGNAL(clicked()), this, SLOT(clearHistory()) );
+ // connect the radio buttons with the chart update function
+ connect(buttonGroup1, SIGNAL(clicked(int)), this, SLOT(updateChartTab()) );
+ connect(buttonGroup2, SIGNAL(clicked(int)), this, SLOT(updateChartTab()) );
+ connect(buttonGroup3, SIGNAL(clicked(int)), this, SLOT(updateChartTab()) );
+
+ // TODO : temporarily remove detailed stats page and deactivate options
+ levelsRadio->setEnabled(false);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatistics::run(const KURL& currentLecture, const KTouchStatisticsData& stats,
+ const KTouchLevelStats& currLevelStats,
+ const KTouchSessionStats& currSessionStats)
+{
+// kdDebug() << "[KTouchStatistics::run]" << endl;
+// kdDebug() << " currentLecture = '" << currentLecture << "'" << endl;
+
+ // fill lecture combo with data
+ // loop over all lecturestatistics
+ lectureCombo->clear();
+ QMapConstIterator<KURL, KTouchLectureStats> it = stats.m_lectureStats.begin();
+ m_currentIndex = 0;
+ while (it != stats.m_lectureStats.end()) {
+ QString t = it.data().m_lectureTitle;
+ // if current lecture, remember index and adjust text
+ if (it.key() == currentLecture ||
+ currentLecture.isEmpty() && it.key().url()=="default")
+ {
+ m_currentIndex = lectureCombo->count();
+ if (t == "default") t = i18n("Default level...");
+ lectureLabel1->setText(t);
+ lectureLabel2->setText(t);
+ t = i18n("***current*** ") + t;
+ }
+ lectureCombo->insertItem(t);
+ ++it;
+ }
+ if (lectureCombo->count()==0) {
+ // this shouldn't happen if the dialog is run with proper data
+ KMessageBox::information(this, i18n("No statistics data available yet!"));
+ return;
+ }
+
+ // remember stats
+ m_allStats = stats;
+ m_currLevelStats = currLevelStats;
+ m_currSessionStats = currSessionStats;
+ // modify current lecture entry
+ lectureCombo->setCurrentItem(m_currentIndex);
+ lectureActivated(m_currentIndex);
+ m_lectureIndex = m_currentIndex;
+
+ // update the current tabs with current session/level data
+ updateCurrentSessionTab();
+ updateCurrentLevelTab();
+ // set current session as current tab
+ tabWidget->showPage(currentTab);
+ exec();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatistics::lectureActivated(int index) {
+ if (m_allStats.m_lectureStats.count()==0) {
+ // TODO : Reset all tabs to "empty" look
+ m_lectureIndex = 0;
+ return;
+ }
+ if (index >= static_cast<int>(m_allStats.m_lectureStats.count())) {
+ kdDebug() << "Lecture index out of range: " << index << " >= " << m_allStats.m_lectureStats.count() << endl;
+ return;
+ }
+ m_lectureIndex = index;
+ //kdDebug() << "Lecture stats changed: " << it.data().m_lectureTitle << endl;
+ // update the tabs
+ updateChartTab();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatistics::clearHistory() {
+ if (KMessageBox::warningContinueCancel(this, i18n("Erase all statistics data for the current user?"),QString::null,KStdGuiItem::del())
+ == KMessageBox::Continue)
+ {
+ KTouchPtr->clearStatistics(); // clear statistics data in KTouch
+ // clear and reset local copy
+ m_allStats.clear();
+ QString s = lectureCombo->text(m_currentIndex);
+ lectureCombo->clear();
+ lectureCombo->insertItem(s);
+ m_currentIndex = 0;
+ lectureCombo->setCurrentItem(m_currentIndex);
+ lectureActivated(m_currentIndex);
+ updateChartTab();
+ }
+}
+// ----------------------------------------------------------------------------
+
+
+void KTouchStatistics::updateCurrentSessionTab() {
+ // session/level/info
+ QString levelnums;
+ int last_level = -2;
+ int levels_count = 0;
+ std::set<unsigned int>::iterator last_it = m_currSessionStats.m_levelNums.end();
+ --last_it;
+ for (std::set<unsigned int>::iterator it = m_currSessionStats.m_levelNums.begin();
+ it != m_currSessionStats.m_levelNums.end(); ++it)
+ {
+ // do we have a level number that is not a subsequent level of the
+ // previous?
+
+ if ((static_cast<unsigned int>(last_level + 1) != *it) ||
+ (it == last_it))
+ {
+ if (it != m_currSessionStats.m_levelNums.begin()) {
+ if (levels_count > 1) levelnums += "...";
+ else levelnums += ",";
+ }
+ levels_count = 0;
+ levelnums += QString("%1").arg(*it+1);
+
+ }
+ else {
+ ++levels_count; // increase level count
+ }
+ last_level = *it;
+ }
+ levelLabel1->setText(levelnums);
+ // general stats group
+ elapsedTimeLCD->display(static_cast<int>(m_currSessionStats.m_elapsedTime));
+ totalCharsLCD->display(static_cast<int>(m_currSessionStats.m_totalChars) );
+ wrongCharsLCD->display(static_cast<int>(m_currSessionStats.m_totalChars-m_currSessionStats.m_correctChars) );
+ wordsLCD->display(static_cast<int>(m_currSessionStats.m_words) );
+ // typing rate group
+ if (m_currSessionStats.m_elapsedTime == 0) {
+ charSpeedLCD->display(0);
+ wordSpeedLCD->display(0);
+ }
+ else {
+ charSpeedLCD->display(static_cast<int>(m_currSessionStats.m_correctChars/m_currSessionStats.m_elapsedTime*60.0) );
+ wordSpeedLCD->display(static_cast<int>(m_currSessionStats.m_words/m_currSessionStats.m_elapsedTime*60.0) );
+ }
+ // accuracy
+ correctnessBar->setProgress(static_cast<int>(
+ (100.0*m_currSessionStats.m_correctChars)/m_currSessionStats.m_totalChars) );
+ // create sorted list of missed characters
+ std::list<KTouchCharStats> charList( m_currSessionStats.m_charStats.begin(), m_currSessionStats.m_charStats.end());
+ charList.sort(higher_miss_hit_ratio);
+
+ std::list<KTouchCharStats>::const_iterator it=charList.begin();
+ unsigned int i=0;
+ for (; i<8 && it!=charList.end(); ++i, ++it) {
+ if (it->missHitRatio()==0)
+ break; // stop listing keys when their hit-miss-ration is zero
+ switch (i) {
+ case 0 : charLabel1->setText( it->m_char ); charProgress1->setEnabled(true);
+ charProgress1->setProgress( it->missHitRatio() ); break;
+ case 1 : charLabel2->setText( it->m_char ); charProgress2->setEnabled(true);
+ charProgress2->setProgress( it->missHitRatio() ); break;
+ case 2 : charLabel3->setText( it->m_char ); charProgress3->setEnabled(true);
+ charProgress3->setProgress( it->missHitRatio() ); break;
+ case 3 : charLabel4->setText( it->m_char ); charProgress4->setEnabled(true);
+ charProgress4->setProgress( it->missHitRatio() ); break;
+ case 4 : charLabel5->setText( it->m_char ); charProgress5->setEnabled(true);
+ charProgress5->setProgress( it->missHitRatio() ); break;
+ case 5 : charLabel6->setText( it->m_char ); charProgress6->setEnabled(true);
+ charProgress6->setProgress( it->missHitRatio() ); break;
+ case 6 : charLabel7->setText( it->m_char ); charProgress7->setEnabled(true);
+ charProgress7->setProgress( it->missHitRatio() ); break;
+ case 7 : charLabel8->setText( it->m_char ); charProgress8->setEnabled(true);
+ charProgress8->setProgress( it->missHitRatio() ); break;
+ }
+ }
+ // set remaining char labels and progress bars to zero
+ for(; i<8; ++i) {
+ switch (i) {
+ case 0 : charLabel1->setText(" "); charProgress1->setProgress(0); charProgress1->setEnabled(false); break;
+ case 1 : charLabel2->setText(" "); charProgress2->setProgress(0); charProgress2->setEnabled(false); break;
+ case 2 : charLabel3->setText(" "); charProgress3->setProgress(0); charProgress3->setEnabled(false); break;
+ case 3 : charLabel4->setText(" "); charProgress4->setProgress(0); charProgress4->setEnabled(false); break;
+ case 4 : charLabel5->setText(" "); charProgress5->setProgress(0); charProgress5->setEnabled(false); break;
+ case 5 : charLabel6->setText(" "); charProgress6->setProgress(0); charProgress6->setEnabled(false); break;
+ case 6 : charLabel7->setText(" "); charProgress7->setProgress(0); charProgress7->setEnabled(false); break;
+ case 7 : charLabel8->setText(" "); charProgress8->setProgress(0); charProgress8->setEnabled(false); break;
+ }
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatistics::updateCurrentLevelTab() {
+ // level info
+ levelLabel2->setText( QString("%1").arg(m_currLevelStats.m_levelNum+1) );
+ // general stats group
+ elapsedTimeLCDLevel->display(static_cast<int>(m_currLevelStats.m_elapsedTime));
+ totalCharsLCDLevel->display(static_cast<int>(m_currLevelStats.m_totalChars) );
+ wrongCharsLCDLevel->display(static_cast<int>(m_currLevelStats.m_totalChars-m_currLevelStats.m_correctChars) );
+ wordsLCDLevel->display(static_cast<int>(m_currLevelStats.m_words) );
+ // typing rate group
+ if (m_currLevelStats.m_elapsedTime == 0) {
+ charSpeedLCDLevel->display(0);
+ wordSpeedLCDLevel->display(0);
+ }
+ else {
+ charSpeedLCDLevel->display(static_cast<int>(m_currLevelStats.m_correctChars/m_currLevelStats.m_elapsedTime*60.0) );
+ wordSpeedLCDLevel->display(static_cast<int>(m_currLevelStats.m_words/m_currLevelStats.m_elapsedTime*60.0) );
+ }
+ // accuracy
+ correctnessBarLevel->setProgress(static_cast<int>(
+ (100.0*m_currLevelStats.m_correctChars)/m_currLevelStats.m_totalChars) );
+ // create sorted list of missed characters
+ std::list<KTouchCharStats> charList( m_currLevelStats.m_charStats.begin(), m_currLevelStats.m_charStats.end());
+ charList.sort(higher_miss_hit_ratio);
+
+ std::list<KTouchCharStats>::const_iterator it=charList.begin();
+ unsigned int i=0;
+ for (; i<8 && it!=charList.end(); ++i, ++it) {
+ if (it->missHitRatio()==0)
+ break; // stop listing keys when their hit-miss-ration is zero
+ switch (i) {
+ case 0 : charLabel1Level->setText( it->m_char ); charProgress1->setEnabled(true);
+ charProgress1Level->setProgress( it->missHitRatio() ); break;
+ case 1 : charLabel2Level->setText( it->m_char ); charProgress2->setEnabled(true);
+ charProgress2Level->setProgress( it->missHitRatio() ); break;
+ case 2 : charLabel3Level->setText( it->m_char ); charProgress3->setEnabled(true);
+ charProgress3Level->setProgress( it->missHitRatio() ); break;
+ case 3 : charLabel4Level->setText( it->m_char ); charProgress4->setEnabled(true);
+ charProgress4Level->setProgress( it->missHitRatio() ); break;
+ case 4 : charLabel5Level->setText( it->m_char ); charProgress5->setEnabled(true);
+ charProgress5Level->setProgress( it->missHitRatio() ); break;
+ case 5 : charLabel6Level->setText( it->m_char ); charProgress6->setEnabled(true);
+ charProgress6Level->setProgress( it->missHitRatio() ); break;
+ case 6 : charLabel7Level->setText( it->m_char ); charProgress7->setEnabled(true);
+ charProgress7Level->setProgress( it->missHitRatio() ); break;
+ case 7 : charLabel8Level->setText( it->m_char ); charProgress8->setEnabled(true);
+ charProgress8Level->setProgress( it->missHitRatio() ); break;
+ }
+ }
+ // set remaining char labels and progress bars to zero
+ for(; i<8; ++i) {
+ switch (i) {
+ case 0 : charLabel1Level->setText(" "); charProgress1Level->setProgress(0); charProgress1Level->setEnabled(false); break;
+ case 1 : charLabel2Level->setText(" "); charProgress2Level->setProgress(0); charProgress2Level->setEnabled(false); break;
+ case 2 : charLabel3Level->setText(" "); charProgress3Level->setProgress(0); charProgress3Level->setEnabled(false); break;
+ case 3 : charLabel4Level->setText(" "); charProgress4Level->setProgress(0); charProgress4Level->setEnabled(false); break;
+ case 4 : charLabel5Level->setText(" "); charProgress5Level->setProgress(0); charProgress5Level->setEnabled(false); break;
+ case 5 : charLabel6Level->setText(" "); charProgress6Level->setProgress(0); charProgress6Level->setEnabled(false); break;
+ case 6 : charLabel7Level->setText(" "); charProgress7Level->setProgress(0); charProgress7Level->setEnabled(false); break;
+ case 7 : charLabel8Level->setText(" "); charProgress8Level->setProgress(0); charProgress8Level->setEnabled(false); break;
+ }
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatistics::updateChartTab() {
+ // remove all current chart objects
+ chartWidget->clearObjectList();
+ // if no lecture data is available, return
+ if (m_allStats.m_lectureStats.count()==0 || m_lectureIndex >= m_allStats.m_lectureStats.count()) return;
+ // what kind of chart is required?
+ if (levelsRadio->isChecked()) {
+ // TODO : nothing yet
+ }
+ else {
+ // find correct lecture index
+ QMapConstIterator<KURL, KTouchLectureStats> it = m_allStats.m_lectureStats.begin();
+ int index = m_lectureIndex;
+ while (index-- > 0) ++it;
+ std::vector< std::pair<double, double> > data;
+ QString caption = "Session data";
+ switch (buttonGroup2->selectedId()) {
+ case 0 : // words per minute
+ // loop over all session data entries in *it and store words per minute data
+ for (QValueVector<KTouchSessionStats>::const_iterator session_it = (*it).m_sessionStats.begin();
+ session_it != (*it).m_sessionStats.end(); ++session_it)
+ {
+ double t = (*session_it).m_elapsedTime;
+ double wpm = (t == 0) ? 0 : (*session_it).m_words/t*60.0;
+ double tp = (*session_it).m_timeRecorded.toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, wpm) );
+ }
+ // add current session if selected lecture matches
+ if (m_currentIndex == m_lectureIndex &&
+ m_currSessionStats.m_elapsedTime != 0)
+ {
+ double t = m_currSessionStats.m_elapsedTime;
+ double wpm = m_currSessionStats.m_words/t*60.0;
+ double tp = QDateTime::currentDateTime().toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, wpm) );
+ }
+ chartWidget->LeftAxis.setLabel( i18n("Words per minute") );
+ chartWidget->LeftAxis.setLabelFormat(0, 'f', 0);
+ break;
+
+
+ case 1 : // chars per minute
+ // loop over all session data entries in *it and store chars per minute data
+ for (QValueVector<KTouchSessionStats>::const_iterator session_it = (*it).m_sessionStats.begin();
+ session_it != (*it).m_sessionStats.end(); ++session_it)
+ {
+ double t = (*session_it).m_elapsedTime;
+ double cpm = (t == 0) ? 0 : (*session_it).m_correctChars/t*60.0;
+ double tp = (*session_it).m_timeRecorded.toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, cpm) );
+ }
+ // add current session
+ if (m_currentIndex == m_lectureIndex &&
+ m_currSessionStats.m_elapsedTime != 0)
+ {
+ double t = m_currSessionStats.m_elapsedTime;
+ double cpm = m_currSessionStats.m_correctChars/t*60.0;
+ double tp = QDateTime::currentDateTime().toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, cpm) );
+ }
+ chartWidget->LeftAxis.setLabel( i18n("Characters per minute") );
+ chartWidget->LeftAxis.setLabelFormat(0, 'f', 0);
+ break;
+
+
+ case 2 : // correctness
+ // loop over all session data entries in *it and store correctness data
+ for (QValueVector<KTouchSessionStats>::const_iterator session_it = (*it).m_sessionStats.begin();
+ session_it != (*it).m_sessionStats.end(); ++session_it)
+ {
+ double tc = (*session_it).m_totalChars;
+ double corr = (tc == 0) ? 0 : (*session_it).m_correctChars/tc;
+ double tp = (*session_it).m_timeRecorded.toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, corr) );
+ }
+ // add current session
+ if (m_currentIndex == m_lectureIndex &&
+ m_currSessionStats.m_totalChars != 0)
+ {
+ double tc = m_currSessionStats.m_totalChars;
+ double corr = m_currSessionStats.m_correctChars/tc;
+ double tp = QDateTime::currentDateTime().toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, corr) );
+ }
+ chartWidget->LeftAxis.setLabel( i18n("Correctness") );
+ chartWidget->LeftAxis.setLabelFormat(0, 'g', 1);
+ break;
+
+
+ case 3 : // skill
+ // loop over all session data entries in *it and store correctness data
+ for (QValueVector<KTouchSessionStats>::const_iterator session_it = (*it).m_sessionStats.begin();
+ session_it != (*it).m_sessionStats.end(); ++session_it)
+ {
+ double tc = (*session_it).m_totalChars;
+ double corr = (tc == 0) ? 0 : (*session_it).m_correctChars/tc;
+ double t = (*session_it).m_elapsedTime;
+ double cpm = (t == 0) ? 0 : (*session_it).m_correctChars/t*60.0;
+ double skill = corr*cpm;
+ double tp = (*session_it).m_timeRecorded.toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, skill) );
+ }
+ // add current session
+ if (m_currentIndex == m_lectureIndex &&
+ m_currSessionStats.m_totalChars != 0 &&
+ m_currSessionStats.m_elapsedTime != 0)
+ {
+ double tc = m_currSessionStats.m_totalChars;
+ double corr = m_currSessionStats.m_correctChars/tc;
+ double t = m_currSessionStats.m_elapsedTime;
+ double cpm = m_currSessionStats.m_correctChars/t*60.0;
+ double skill = corr*cpm;
+ double tp = QDateTime::currentDateTime().toTime_t()/(3600.0*24);
+ data.push_back(std::make_pair(tp, skill) );
+ }
+ chartWidget->LeftAxis.setLabel( i18n("Skill") );
+ chartWidget->LeftAxis.setLabelFormat(0, 'f', 0);
+ break;
+
+ default : return;
+ }
+ // Create plot object for session statistics
+ KPlotObject * ob;
+ if (data.size() <= 1) return;
+ ob = new KPlotObject(caption, "red", KPlotObject::CURVE, 2, KPlotObject::SOLID);
+
+ // Add some random points to the plot object
+ double min_x = 1e20;
+ double max_x = -1;
+ double max_y = -1;
+ for (unsigned int i=0; i<data.size(); ++i) {
+ double x;
+ if (timeRadio->isChecked()) {
+ x = data[i].first - data[0].first;
+ chartWidget->BottomAxis.setLabel( i18n( "Time since first practice session in days" ));
+ }
+ else {
+ x = i+1;
+ chartWidget->BottomAxis.setLabel( i18n( "Sessions" ));
+ }
+ ob->addPoint( DPoint(x, data[i].second) );
+ min_x = std::min(x, min_x);
+ max_x = std::max(x, max_x);
+ max_y = std::max(data[i].second, max_y);
+ }
+ if (max_y == 0) max_y = 1;
+ max_y *= 1.1;
+ chartWidget->setLimits( min_x, max_x, -0.1*max_y, max_y );
+// kdDebug() << min_x << " " << max_x << " " << max_y << endl;
+ // Add plot object to chart
+ chartWidget->addObject(ob);
+ }
+}
+// ----------------------------------------------------------------------------
+
+/*
+
+void KTouchStatistics::updateChartTab() {
+ if (m_trainer->m_sessionHistory.size()<2) {
+ chartTypeButtonGroup->setEnabled(false);
+ chartWidget->setEraseColor( Qt::gray );
+ }
+ else {
+ chartTypeButtonGroup->setEnabled(true);
+ chartWidget->setEraseColor( Qt::white );
+ };
+ if (charSpeedButton->isChecked())
+ chartWidget->setChartType( KTouchChartWidget::CharsPerMinute );
+ else if (wordSpeedButton->isChecked())
+ chartWidget->setChartType( KTouchChartWidget::WordsPerMinute );
+ else if (accuracyButton->isChecked())
+ chartWidget->setChartType( KTouchChartWidget::Accuracy );
+ else if (timeButton->isChecked())
+ chartWidget->setChartType( KTouchChartWidget::ElapsedTime );
+}
+// ----------------------------------------------------------------------------
+
+*/
diff --git a/ktouch/src/ktouchstatistics.h b/ktouch/src/ktouchstatistics.h
new file mode 100644
index 00000000..549dfc3c
--- /dev/null
+++ b/ktouch/src/ktouchstatistics.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * ktouchstatistics.h *
+ * ------------------ *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHSTATISTICS_H
+#define KTOUCHSTATISTICS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ktouchstatistics_dlg.h"
+#include "ktouchstatisticsdata.h"
+
+class QShowEvent;
+class KTouch;
+class KURL;
+
+/// Implementation of the statistics widget
+class KTouchStatistics : public KTouchStatisticsDlg {
+ Q_OBJECT
+ public:
+ /// Constructor, takes a pointer to the trainer object.
+ KTouchStatistics(QWidget* parent);
+
+ /// Fills the statistics dialog with data and executes it.
+ void run(const KURL& currentLecture, const KTouchStatisticsData& stats,
+ const KTouchLevelStats& currLevelStats,
+ const KTouchSessionStats& currSessionStats);
+
+ public slots:
+ /// Called whenever the lecture is changed.
+ void lectureActivated(int index);
+ /// Clears the statistics data.
+ void clearHistory();
+ /// Updates the chart with current lecture and settings
+ void updateChartTab();
+
+ private:
+ /// Updates the data in the current tab, using the data stored in m_currSessionStats.
+ void updateCurrentSessionTab();
+ /// Updates the data in the current tab, using the data stored in m_currLevelStats.
+ void updateCurrentLevelTab();
+
+ unsigned int m_currentIndex; ///< Index in lecture combo of the current lecture.
+ unsigned int m_lectureIndex; ///< Index of currently selected lecture.
+ KTouchStatisticsData m_allStats; ///< Contains all lecture statistics.
+ KTouchLevelStats m_currLevelStats; ///< Contains current level stats (not yet stored in allStats).
+ KTouchSessionStats m_currSessionStats; ///< Contains current session stats (not yet stored in allStats).
+};
+
+#endif // KTOUCHSTATISTICS_H
diff --git a/ktouch/src/ktouchstatistics_dlg.ui b/ktouch/src/ktouchstatistics_dlg.ui
new file mode 100644
index 00000000..761fd908
--- /dev/null
+++ b/ktouch/src/ktouchstatistics_dlg.ui
@@ -0,0 +1,1287 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchStatisticsDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KTouchStatisticsDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>606</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Training Statistics</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>currentTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Current Training Session</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>currentTitleLabel</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>20</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Current Training Session Statistics</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel4_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Levels in this session:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>levelLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>levelLabel1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Lecture:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>lectureLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>lectureLabel1</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout28</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>General Statistics</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Words typed:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Mistyped characters:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Time (seconds) elapsed:</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="0" column="1">
+ <property name="name">
+ <cstring>elapsedTimeLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This shows the number of seconds you have typed in this training session.</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="1" column="1">
+ <property name="name">
+ <cstring>totalCharsLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The number of characters (correct and wrong) that you have typed so far.</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="2" column="1">
+ <property name="name">
+ <cstring>wrongCharsLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Shows how many wrong characters you did type.</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="3" column="1">
+ <property name="name">
+ <cstring>wordsLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The number of words typed so far.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Characters typed:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox7</cstring>
+ </property>
+ <property name="title">
+ <string>Character Statistics (characters you need to focus on)</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here the characters are listed that you have missed during the typing test. The percentage shows the ratio of how often a key was missed versus how often the key was pressed in total. Large numbers indicate that the key was missed a lot.</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame" row="0" column="2" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>frame4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>VLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="0" column="1">
+ <property name="name">
+ <cstring>charProgress1</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="0" column="4">
+ <property name="name">
+ <cstring>charProgress5</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>charLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>a:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>charLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>e:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>charLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>b:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="1" column="4">
+ <property name="name">
+ <cstring>charProgress6</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>charLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>f:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="1" column="1">
+ <property name="name">
+ <cstring>charProgress2</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="2" column="1">
+ <property name="name">
+ <cstring>charProgress3</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="3">
+ <property name="name">
+ <cstring>charLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>g:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>charLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>c:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="2" column="4">
+ <property name="name">
+ <cstring>charProgress7</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="3" column="4">
+ <property name="name">
+ <cstring>charProgress8</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="3" column="1">
+ <property name="name">
+ <cstring>charProgress4</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="3">
+ <property name="name">
+ <cstring>charLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>h:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>charLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>d:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Typing Rate</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Characters per minute:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Words per minute:</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="0" column="1">
+ <property name="name">
+ <cstring>charSpeedLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The number of correct characters you typed per minute.</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="1" column="1">
+ <property name="name">
+ <cstring>wordSpeedLCD</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The number of words you typed per minute.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>Accuracy</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QProgressBar" row="0" column="0">
+ <property name="name">
+ <cstring>correctnessBar</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The ratio of correctly typed characters versus total number of characters typed.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>currentLevelTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Current Level Statistics</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>currentTitleLabel_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>20</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Current Level Statistics</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>lectureLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>lectureLabel2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel4_3</cstring>
+ </property>
+ <property name="text">
+ <string>Level:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Lecture:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>levelLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>levelLabel2</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout28_2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox4_2</cstring>
+ </property>
+ <property name="title">
+ <string>General Statistics</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Words typed:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Mistyped characters:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Time (seconds) elapsed:</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="0" column="1">
+ <property name="name">
+ <cstring>elapsedTimeLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="1" column="1">
+ <property name="name">
+ <cstring>totalCharsLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="2" column="1">
+ <property name="name">
+ <cstring>wrongCharsLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="3" column="1">
+ <property name="name">
+ <cstring>wordsLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Characters typed:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox7_2</cstring>
+ </property>
+ <property name="title">
+ <string>Character Statistics (characters you need to focus on)</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here the characters are listed that you have missed during the typing test. The percentage shows the ratio of how often a key was missed versus how often the key was pressed correctly. Large numbers indicate that the key was missed a lot.</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame" row="0" column="2" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>frame4_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>VLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="0" column="1">
+ <property name="name">
+ <cstring>charProgress1Level</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="0" column="4">
+ <property name="name">
+ <cstring>charProgress5Level</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>charLabel1Level</cstring>
+ </property>
+ <property name="text">
+ <string>a:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>charLabel5Level</cstring>
+ </property>
+ <property name="text">
+ <string>e:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>charLabel2Level</cstring>
+ </property>
+ <property name="text">
+ <string>b:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="1" column="4">
+ <property name="name">
+ <cstring>charProgress6Level</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>charLabel6Level</cstring>
+ </property>
+ <property name="text">
+ <string>f:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="1" column="1">
+ <property name="name">
+ <cstring>charProgress2Level</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="2" column="1">
+ <property name="name">
+ <cstring>charProgress3Level</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="3">
+ <property name="name">
+ <cstring>charLabel7Level</cstring>
+ </property>
+ <property name="text">
+ <string>g:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>charLabel3Level</cstring>
+ </property>
+ <property name="text">
+ <string>c:</string>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="2" column="4">
+ <property name="name">
+ <cstring>charProgress7Level</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="3" column="4">
+ <property name="name">
+ <cstring>charProgress8Level</cstring>
+ </property>
+ </widget>
+ <widget class="QProgressBar" row="3" column="1">
+ <property name="name">
+ <cstring>charProgress4Level</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="3">
+ <property name="name">
+ <cstring>charLabel8Level</cstring>
+ </property>
+ <property name="text">
+ <string>h:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>charLabel4Level</cstring>
+ </property>
+ <property name="text">
+ <string>d:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox5_2</cstring>
+ </property>
+ <property name="title">
+ <string>Typing Rate</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel6_3</cstring>
+ </property>
+ <property name="text">
+ <string>Characters per minute:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel6_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Words per minute:</string>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="0" column="1">
+ <property name="name">
+ <cstring>charSpeedLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="1" column="1">
+ <property name="name">
+ <cstring>wordSpeedLCDLevel</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>groupBox6_3</cstring>
+ </property>
+ <property name="title">
+ <string>Accuracy</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QProgressBar" row="0" column="0">
+ <property name="name">
+ <cstring>correctnessBarLevel</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer22_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>89</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>progressTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Monitor Progress</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>currentTitleLabel_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>20</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Your Typing Progress</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Show progress in lecture:</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>lectureCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here you can select the lecture you want to obtain statistics for.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="KTouchChartWidget">
+ <property name="name">
+ <cstring>chartWidget</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>2</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox6_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Progress Chart Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup" row="0" column="0">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Chart Data</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>levelsRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Level stats</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>sessionsRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Session stats</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="1">
+ <property name="name">
+ <cstring>buttonGroup2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Chart Type</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>WPMRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Words per minute</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>CPMRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Characters per minute</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>correctRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Correctness</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>skillRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Skill</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="2">
+ <property name="name">
+ <cstring>buttonGroup3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Time Axis Scaling</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>timeRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Time scaled</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>eventRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Constant spacing</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>clearButton</cstring>
+ </property>
+ <property name="text">
+ <string>Clear History</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Pressing this button will erase the whole training statistics for the current user.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>KTouchChartWidget</class>
+ <header location="local">ktouchchartwidget.h</header>
+ <sizehint>
+ <width>200</width>
+ <height>200</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>3</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1525">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000005bc494441545885b596416823d719c77f0e0a8c0e0b12b860810533a0057bd88035642133908087e4a29ea2b087684fb1c9253db57b6b4ba125c9a15d07127613ca3a7bc93a812e524f514a4b9f601b3f85763d0e6d7676a1c623b0f00c8989442ca281085e0e23c9abeccab10dd1e5cfa7ff7fbef7f17fdffbde9b9152729a9ff3c7b2e249601e683f84df01518c7cab3e739a7c4f9c76f1e5175cd45f42767f2f27f0da1fae41ea34d9ce500003b86c97a10fc63963022b4f9560f053178046bd558734888e98c00f831aa0fdc4050cc0d61d36bedac0c81a63fcedfdd779bf179ec981999336a1f3ebb262a0b1fc2b93d75ffc0d624fd09d8d119f49c24c4cf77e4cfc5e07882106f94eed44cd78620734ad84fe4a96f8e90e6bff5b030dea77ebc4f3314431994517ede52cdacb39e8c5274d7bf2be8d6341743b4dfa1c68cf77a8b56a68058dce4e8ca643bc23a00df15f4378d03d7101277640bef9e18cf8ddfb33c1bb45d29fe4585d588528a654709385ff0ff1ed101e4448294f3c0b4e75726dc7517d60b53547358ac9bd92a3f185a0fb51cceaed80abbd98e6291687a103eb37d6d55cacaba59eadec595bf57b4ad9b3f651dcedabddc6be626e0ee4d75c7ee31a57e7aee0ffa98fd62873ed992b5cfdfb3ebcbd8efd9cab36ffe54d7eff50bea5595b6d363695e3382ab1564a565e7d4d6dca2da5be566aebdf09def3ee25f110d7ff7c4ba94b2b6acbdb52eacba16ef707fa7da5fe79a1a8befdeff0bb7d95e87f90ef5b5f29fb695b49298f7ac02958c82f2456c682cfc12c98f8918f55302102d77091c458058bfedd3eb9410eb123b0162c8812bd17f9b8291722b0e64daa8d2a967ec48ff3b58f36ff0948e697d7f6710a0e1f3ff818162088024cdd248802d041ec099c94461005a40b69bcae87bbe08ef9200ab0741381205d003ff271175dfcb63fe647f9d2058807c3a39a6cc18a52df28a57695524aa97b7e82a358ed2ab57f675fa94b9547fe9f405f29b564abcd3b5bc7ea36ef6ca92bcf5c39da020d0dbf1d8001e15e88b998e028c6001148483dfaff04164010e3e8d6b13a47b7900379b4053160160c082197cf3d16ddf30e92e97c2e9f4b7a85a4077e4cf7480f84510839e81ff61f8bb5ed3ace603adf3fec431e0402e67f44a71ff5402a712026d3cd50fdac8a356b210291747d20710c07bfe763e78ad0af430b36b63770f2ce981781a0b458421c087e0e543fade2165c6adbb5313fca572a96a8efd493d332728001d477ea94164af8b14fe562053ff6295f2ce3c73ece9c43fd7e1d7a1d444b502e9627f8cac50a5ed7c39977905188756821db72821fe9655b621d5ad4bb7560781dafdf5857cebc8377e0e1ea2ea225707407d99238f30ea22558fc6a91dcce4d4ab3650492d200825e17139b6ae63e2e207a5d8c94cbdaf990d24209d112b8ba8b6ccb713e5777b9d9b849fd6f75a4943353df03b73eb8a5aefff23a5ed7c39ab7f0da93281e48363ed8c05ab2f8c5a5d547f8116efca3caf5f7d6587b6bedb177c4d4dbb074e125e8825518262b587090c4fe818f7bc1219bc95259aee01ff85873c9c41bf123fd65fb25346dfa536d6a018d9648cef5e7024333f0a364a2f9918fa92763d5c646b69b98ba49f56e150a933c3ac8c89bbaf8b1052ceb2e7e04aeeea2451aa66e8e67fa089b3471f5e4dc97164af82d7f82274aee98e3de8ac73a6016202024fd429a200ae13c04ed214621a4a01949380f91d6c57cca3ce287e8b5bd635f1dc738604304869183bd2938887175673abf47721b9ecd8126e4210c3b9087ce101f8eedd432b22da7f2e4939e38bb0321e47259e84076880fc7cd4183e26c110e1fcf7308e69c79ac03536b6bb41a38070eb54f6ad8039bc6a0c1726a99e6a089abb9f83ff301a86dd7707b2eb5ffd4c6bc9d4af4e54c192f7dc61e28668a881d41e56285201fb0f2ec0a413ea0f26c053f978ce7ce4107e349032ff226f891de3be761680651144d2d60ea245cbfb1aea270fa870c407c2a282e15c966b25365e141c8f6ddeda94ff5ef018e80fecc25cb29330000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcombobox.h</includehint>
+ <includehint>ktouchchartwidget.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/ktouch/src/ktouchstatisticsdata.cpp b/ktouch/src/ktouchstatisticsdata.cpp
new file mode 100644
index 00000000..42251df2
--- /dev/null
+++ b/ktouch/src/ktouchstatisticsdata.cpp
@@ -0,0 +1,553 @@
+/***************************************************************************
+ * ktouchstatisticsdata.cpp *
+ * ------------------------ *
+ * Copyright (C) 2005 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "config.h"
+#include "ktouchstatisticsdata.h"
+
+#include <qfile.h>
+#include <qstringlist.h>
+#include <qdom.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+
+#ifdef HAVE_SSTREAM
+# include <sstream>
+#else
+# include <strstream>
+#endif
+
+// remove this define if XML output should be made uncompressed
+#define COMPRESSED_XML_STATISTICS
+
+
+// *** KTouchCharStats ***
+
+int KTouchCharStats::missHitRatio() const {
+ if (m_correctCount+m_wrongCount == 0) return 0;
+ return static_cast<int>((static_cast<double>(m_wrongCount)/(m_correctCount+m_wrongCount)*100));
+}
+// ----------------------------------------------------------------------------
+
+QTextStream& operator<<(QTextStream &out, const KTouchCharStats &ch) {
+ return (out << ch.m_char.unicode() << " " << ch.m_correctCount << " " << ch.m_wrongCount);
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** KTouchLevelStats ***
+
+void KTouchLevelStats::clear() {
+ m_levelNum = -1;
+ m_elapsedTime = 0;
+ m_words = 0;
+ m_totalChars = 0;
+ m_correctChars = 0;
+ m_charStats.clear();
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchLevelStats::read(QDomNode in) {
+ // read the level number
+ QDomNode n = in.attributes().namedItem("Number");
+ bool ok;
+ if (!n.isNull()) {
+ m_levelNum = n.nodeValue().toInt(&ok);
+ if (!ok) {
+ m_levelNum = -1;
+ return false; // need level number!
+ }
+ }
+ // read time
+ n = in.attributes().namedItem("Time");
+ if (!n.isNull()) {
+ m_elapsedTime = n.nodeValue().toDouble(&ok);
+ if (!ok) m_elapsedTime = 0;
+ }
+ // read total chars
+ n = in.attributes().namedItem("Chars");
+ if (!n.isNull()) {
+ m_totalChars = n.nodeValue().toInt(&ok);
+ if (!ok) m_totalChars = 0;
+ }
+ // read correct chars
+ n = in.attributes().namedItem("Corrects");
+ if (!n.isNull()) {
+ m_correctChars = n.nodeValue().toInt(&ok);
+ if (!ok) m_correctChars = 0;
+ }
+ // read number of words
+ n = in.attributes().namedItem("Words");
+ if (!n.isNull()) {
+ m_words = n.nodeValue().toInt(&ok);
+ if (!ok) m_words = 0;
+ }
+ // done with attributes, read recording time
+ n = in.namedItem("Time");
+ if (!n.isNull()) {
+ QString timestring = n.firstChild().nodeValue();
+ if (timestring != QString::null)
+ m_timeRecorded = QDateTime::fromString(timestring, Qt::ISODate);
+ }
+ // read characters
+ n = in.namedItem("CharStats");
+ if (!n.isNull()) {
+ QString char_data = n.firstChild().nodeValue();
+ //kdDebug() << "'" << char_data << "'" << endl;
+#ifdef HAVE_SSTREAM
+ std::stringstream strm(std::string(char_data.local8Bit()));
+#else
+ std::istrstream strm(char_data.local8Bit(), char_data.local8Bit().length());
+#endif
+ int ch, correct, wrong;
+ while (strm >> ch >> correct >> wrong)
+ m_charStats.insert( KTouchCharStats(QChar(ch), correct, wrong) );
+ //kdDebug() << m_charStats.size() << endl;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLevelStats::write(QDomDocument& doc, QDomElement& root) const {
+ QDomElement level = doc.createElement("LevelStats");
+ root.appendChild(level);
+ level.setAttribute("Number", m_levelNum);
+ level.setAttribute("Time", m_elapsedTime);
+ level.setAttribute("Chars", m_totalChars);
+ level.setAttribute("Corrects", m_correctChars);
+ level.setAttribute("Words", m_words);
+ // add time
+ QDomElement e = doc.createElement("Time");
+ QDomText tn = doc.createTextNode(m_timeRecorded.toString(Qt::ISODate));
+ e.appendChild(tn);
+ level.appendChild(e);
+ // add char stats
+ QString char_data;
+ // we append for each missed char the char-unicode and the counters
+ for (std::set<KTouchCharStats>::const_iterator it=m_charStats.begin(); it!=m_charStats.end(); ++it)
+ char_data += QString(" %1 %2 %3").arg(it->m_char.unicode())
+ .arg(it->m_correctCount).arg(it->m_wrongCount);
+ e = doc.createElement("CharStats");
+ tn = doc.createTextNode(char_data);
+ e.appendChild(tn);
+ level.appendChild(e);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLevelStats::addCorrectChar(QChar key) {
+ ++m_correctChars;
+ ++m_totalChars;
+ // we only count non-space characters
+ if (key!=QChar(' ')) {
+ std::set<KTouchCharStats>::iterator it = m_charStats.find( KTouchCharStats(key,0,0) );
+ if (it==m_charStats.end())
+ m_charStats.insert( KTouchCharStats(key,1,0) );
+ else
+ ++(const_cast<KTouchCharStats&>(*it).m_correctCount);
+ // this const_cast is necessary because the current gcc 3.2 has a bug in the
+ // implementation of set::find(). The non-const overload is missing and find() always
+ // returns a const object. Maybe in the next release this will be fixed. Until then
+ // the const_cast helps.
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLevelStats::removeCorrectChar() {
+ --m_correctChars;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLevelStats::addWrongChar(QChar key) {
+ ++m_totalChars;
+ if (key==QChar(8) || key==QChar(' '))
+ return; // don't remember wrong backspaces or spaces
+ std::set<KTouchCharStats>::iterator it = m_charStats.find( KTouchCharStats(key,0,0) );
+ if (it==m_charStats.end())
+ m_charStats.insert( KTouchCharStats(key,0,1) );
+ else
+ ++(const_cast<KTouchCharStats&>(*it).m_wrongCount);
+ // this const_cast is necessary because the current gcc 3.2 has a bug in the
+ // implementation of set::find(). The non-const overload is missing and find() always
+ // returns a const object. Maybe in the next release this will be fixed. Until then
+ // the const_cast helps.
+}
+// ----------------------------------------------------------------------------
+
+double KTouchLevelStats::correctness() const {
+ return (m_totalChars==0) ? 1.0 : static_cast<double>(m_correctChars)/m_totalChars;
+}
+// ----------------------------------------------------------------------------
+
+double KTouchLevelStats::charSpeed() const {
+ return (m_elapsedTime==0) ? 0 : 60.0*m_correctChars/m_elapsedTime;
+}
+// ----------------------------------------------------------------------------
+
+double KTouchLevelStats::wordSpeed() const {
+ return (m_elapsedTime==0) ? 0 : 60.0*m_words/m_elapsedTime;
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** KTouchSessionStats ***
+
+void KTouchSessionStats::clear() {
+ m_elapsedTime = 0;
+ m_words = 0;
+ m_totalChars = 0;
+ m_correctChars = 0;
+ m_levelNums.clear();
+ m_charStats.clear();
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchSessionStats::read(QDomNode in) {
+ // read time
+ QDomNode n = in.attributes().namedItem("Time");
+ bool ok;
+ if (!n.isNull()) {
+ m_elapsedTime = n.nodeValue().toDouble(&ok);
+ if (!ok) m_elapsedTime = 0;
+ }
+ // read total chars
+ n = in.attributes().namedItem("Chars");
+ if (!n.isNull()) {
+ m_totalChars = n.nodeValue().toInt(&ok);
+ if (!ok) m_totalChars = 0;
+ }
+ // read correct chars
+ n = in.attributes().namedItem("Corrects");
+ if (!n.isNull()) {
+ m_correctChars = n.nodeValue().toInt(&ok);
+ if (!ok) m_correctChars = 0;
+ }
+ // read number of words
+ n = in.attributes().namedItem("Words");
+ if (!n.isNull()) {
+ m_words = n.nodeValue().toInt(&ok);
+ if (!ok) m_words = 0;
+ }
+ // done with attributes, read recording time
+ n = in.namedItem("Time");
+ if (!n.isNull()) {
+ QString timestring = n.firstChild().nodeValue();
+ if (timestring != QString::null)
+ m_timeRecorded = QDateTime::fromString(timestring, Qt::ISODate);
+ }
+ // read level numbers
+ n = in.namedItem("LevelNums");
+ if (!n.isNull()) {
+ QString str = n.firstChild().nodeValue();
+#ifdef HAVE_SSTREAM
+ std::stringstream strm(std::string(str.local8Bit()));
+#else
+ std::istrstream strm(str.local8Bit(), str.local8Bit().length());
+#endif
+ int l;
+ while (strm >> l)
+ m_levelNums.insert(l);
+ }
+ // read characters
+ n = in.namedItem("CharStats");
+ if (!n.isNull()) {
+ QString char_data = n.firstChild().nodeValue();
+ //kdDebug() << "'" << char_data << "'" << endl;
+#ifdef HAVE_SSTREAM
+ std::stringstream strm(std::string(char_data.local8Bit()));
+#else
+ std::istrstream strm(char_data.local8Bit(), char_data.local8Bit().length());
+#endif
+ int ch, correct, wrong;
+ while (strm >> ch >> correct >> wrong)
+ m_charStats.insert( KTouchCharStats(QChar(ch), correct, wrong) );
+ //kdDebug() << m_charStats.size() << endl;
+ }
+
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSessionStats::write(QDomDocument& doc, QDomElement& root) const {
+ QDomElement session = doc.createElement("SessionStats");
+ root.appendChild(session);
+ session.setAttribute("Time", m_elapsedTime);
+ session.setAttribute("Chars", m_totalChars);
+ session.setAttribute("Corrects", m_correctChars);
+ session.setAttribute("Words", m_words);
+ // add time
+ QDomElement e = doc.createElement("Time");
+ QDomText tn = doc.createTextNode(m_timeRecorded.toString(Qt::ISODate));
+ e.appendChild(tn);
+ session.appendChild(e);
+ // add levels
+ QString level_nums;
+ for (std::set<unsigned int>::const_iterator it = m_levelNums.begin(); it != m_levelNums.end(); ++it)
+ level_nums += QString( " %1").arg(*it);
+ e = doc.createElement("LevelNums");
+ tn = doc.createTextNode(level_nums);
+ e.appendChild(tn);
+ session.appendChild(e);
+ // add char data
+ QString char_data;
+ // we append for each missed char the char-unicode and the counters
+ for (std::set<KTouchCharStats>::const_iterator it=m_charStats.begin(); it!=m_charStats.end(); ++it)
+ char_data += QString(" %1 %2 %3").arg(it->m_char.unicode())
+ .arg(it->m_correctCount).arg(it->m_wrongCount);
+ e = doc.createElement("CharStats");
+ tn = doc.createTextNode(char_data);
+ e.appendChild(tn);
+ session.appendChild(e);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSessionStats::addCorrectChar(QChar key) {
+ ++m_correctChars;
+ ++m_totalChars;
+ // we only count non-space characters
+ if (key!=QChar(' ')) {
+ std::set<KTouchCharStats>::iterator it = m_charStats.find( KTouchCharStats(key,0,0) );
+ if (it==m_charStats.end())
+ m_charStats.insert( KTouchCharStats(key,1,0) );
+ else
+ ++(const_cast<KTouchCharStats&>(*it).m_correctCount);
+ // this const_cast is necessary because the current gcc 3.2 has a bug in the
+ // implementation of set::find(). The non-const overload is missing and find() always
+ // returns a const object. Maybe in the next release this will be fixed. Until then
+ // the const_cast helps.
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSessionStats::removeCorrectChar() {
+ --m_correctChars;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchSessionStats::addWrongChar(QChar key) {
+ ++m_totalChars;
+ if (key==QChar(8) || key==QChar(' '))
+ return; // don't remember wrong backspaces or spaces
+ std::set<KTouchCharStats>::iterator it = m_charStats.find( KTouchCharStats(key,0,0) );
+ if (it==m_charStats.end())
+ m_charStats.insert( KTouchCharStats(key,0,1) );
+ else
+ ++(const_cast<KTouchCharStats&>(*it).m_wrongCount);
+ // this const_cast is necessary because the current gcc 3.2 has a bug in the
+ // implementation of set::find(). The non-const overload is missing and find() always
+ // returns a const object. Maybe in the next release this will be fixed. Until then
+ // the const_cast helps.
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** KTouchLectureStats ***
+
+void KTouchLectureStats::clear() {
+ m_lectureTitle = QString::null;
+ m_lectureURL = QString::null;
+ m_levelStats.clear();
+ m_sessionStats.clear();
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchLectureStats::read(QDomNode in) {
+ clear();
+ // read the URL
+ QDomNode n = in.namedItem("URL");
+ if (!n.isNull()) m_lectureURL = n.firstChild().nodeValue();
+ else return false; // no URL, statistics useless
+ // read the Title
+ n = in.namedItem("Title");
+ if (!n.isNull()) m_lectureTitle = n.firstChild().nodeValue();
+ // read the level stats
+ n = in.namedItem("AllLevelStats");
+ if (!n.isNull()) {
+ // loop over all childs and read levels
+ QDomNode levelNode = n.firstChild();
+ while (!levelNode.isNull()) {
+ //kdDebug() << "[KTouchLectureStats::read] Reading level stats" << endl;
+ KTouchLevelStats tmp;
+ if (tmp.read(levelNode)) m_levelStats.push_back(tmp);
+ levelNode = levelNode.nextSibling();
+ }
+ }
+ // read the session stats
+ n = in.namedItem("AllSessionStats");
+ if (!n.isNull()) {
+ // loop over all childs and read sessions
+ QDomNode sessionNode = n.firstChild();
+ while (!sessionNode.isNull()) {
+ //kdDebug() << "[KTouchLectureStats::read] Reading session stats" << endl;
+ KTouchSessionStats tmp;
+ if (tmp.read(sessionNode)) m_sessionStats.push_back(tmp);
+ sessionNode = sessionNode.nextSibling();
+ }
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchLectureStats::write(QDomDocument& doc, QDomElement& root) const {
+ if (m_lectureURL.isEmpty()) return; // Error here!
+ QDomElement lecture = doc.createElement("LectureStats");
+ root.appendChild(lecture);
+ // store lecture URL
+ QDomElement urlElement = doc.createElement("URL");
+ QDomText urlText = doc.createTextNode(m_lectureURL.url());
+ urlElement.appendChild(urlText);
+ lecture.appendChild(urlElement);
+ // store title
+ QString title = m_lectureTitle;
+ if (title.isEmpty())
+ title = m_lectureURL.fileName();
+ QDomElement titleElement = doc.createElement("Title");
+ QDomText titleText = doc.createTextNode(title);
+ titleElement.appendChild(titleText);
+ lecture.appendChild(titleElement);
+ // store level stats
+ QDomElement levelStatsElement = doc.createElement("AllLevelStats");
+ lecture.appendChild(levelStatsElement);
+ for (QValueVector<KTouchLevelStats>::ConstIterator it = m_levelStats.begin();
+ it != m_levelStats.end(); ++it)
+ {
+ it->write(doc, levelStatsElement);
+ }
+ // store session stats
+ QDomElement sessionStatsElement = doc.createElement("AllSessionStats");
+ lecture.appendChild(sessionStatsElement);
+ for (QValueVector<KTouchSessionStats>::ConstIterator it = m_sessionStats.begin();
+ it != m_sessionStats.end(); ++it)
+ {
+ it->write(doc, sessionStatsElement);
+ }
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** KTouchStatisticsData ***
+
+void KTouchStatisticsData::clear() {
+ m_lectureStats.clear();
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchStatisticsData::read(QWidget * window, const KURL& url) {
+ if (url.isEmpty()) return false;
+ // Ok, first download the contents as usual using the KIO lib
+ // File is only downloaded if not local, otherwise it's just opened
+ QString target;
+ bool result = false;
+ if (KIO::NetAccess::download(url, target, window)) {
+ // Ok, that was successful, store the lectureURL and read the file
+ QFile infile(target);
+ if ( !infile.open( IO_ReadOnly ) ) {
+ KIO::NetAccess::removeTempFile(target);
+ return false; // Bugger it... couldn't open it...
+ }
+ QDomDocument doc;
+
+#ifdef COMPRESSED_XML_STATISTICS
+ QByteArray array;
+ array = infile.readAll();
+ array = qUncompress(array);
+ doc.setContent( array );
+#else
+ doc.setContent( &infile );
+#endif // COMPRESSED_XML_STATISTICS
+ result = readStats(doc);
+ }
+ KIO::NetAccess::removeTempFile(target);
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchStatisticsData::write(QWidget * window, const KURL& url) const {
+ // create the XML document
+ QDomDocument doc;
+ writeStats(doc);
+
+ // and save it
+ QString tmpFile;
+ KTempFile *temp=0;
+ if (url.isLocalFile())
+ tmpFile=url.path(); // for local files the path is sufficient
+ else {
+ temp=new KTempFile; // for remote files create a temporary file first
+ temp->setAutoDelete(true); // so we don't have to delete the file ourselves
+ tmpFile=temp->name();
+ }
+
+ QFile outfile(tmpFile);
+ if ( !outfile.open( IO_WriteOnly ) ) {
+ if (temp) delete temp;
+ // kdDebug() << "Error creating lecture file!" << endl;
+ return false;
+ }
+
+#ifdef COMPRESSED_XML_STATISTICS
+ QByteArray array;
+ QTextStream out(array, IO_WriteOnly);
+ out << doc.toString();
+ array = qCompress(array);
+ outfile.writeBlock(array);
+#else
+ QTextStream out( &outfile );
+ out << doc.toString();
+#endif // COMPRESSED_XML_STATISTICS
+ outfile.close();
+
+ // if we have a temporary file, we still need to upload it
+ if (temp) {
+ KIO::NetAccess::upload(tmpFile, url, window);
+ delete temp;
+ }
+ return true;
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchStatisticsData::readStats(QDomDocument& doc) {
+ clear(); // clear current data
+ // retrieve the KTouchStatistics statistics
+ QDomNodeList entries = doc.elementsByTagName("LectureStats");
+ bool result = true;
+ unsigned int i=0;
+ while (result && i < entries.count()) {
+ KTouchLectureStats stats;
+ result = stats.read(entries.item(i));
+ // do we have a valid URL?
+ if (stats.m_lectureURL.isEmpty()) result = false;
+ if (result)
+ m_lectureStats[stats.m_lectureURL] = stats;
+ ++i;
+ }
+ return result;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchStatisticsData::writeStats(QDomDocument& doc) const {
+ QDomElement root = doc.createElement( "KTouchStatistics" );
+ doc.appendChild(root);
+ // Store Lecture statistics
+ LectureStatsMap::ConstIterator it = m_lectureStats.begin();
+ while (it != m_lectureStats.end()) {
+ it.data().write(doc, root);
+ ++it;
+ }
+}
+// ----------------------------------------------------------------------------
+
diff --git a/ktouch/src/ktouchstatisticsdata.h b/ktouch/src/ktouchstatisticsdata.h
new file mode 100644
index 00000000..9d3dae0b
--- /dev/null
+++ b/ktouch/src/ktouchstatisticsdata.h
@@ -0,0 +1,214 @@
+/***************************************************************************
+ * ktouchstatisticsdata.h *
+ * ---------------------- *
+ * Copyright (C) 2005 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHSTATISTICSDATA_H
+#define KTOUCHSTATISTICSDATA_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qstring.h>
+#include <qvaluevector.h>
+#include <qmap.h>
+#include <qdom.h>
+#include <qdatetime.h>
+
+#include <kurl.h>
+
+#include <set> // I'm using std::set here because QT is missing this container type
+
+class QWidget;
+
+
+// This file contains all class declarations dealing with the statistics obtained in KTouch.
+
+
+// *** KTouchCharStats ***
+
+/// Contains the stats for a single character.
+///
+/// Basically in this class the number of times the character has been pressed is counted. Both
+/// the number of times it was correctly pressed and the number of times it was missed are stored
+/// which allows to calculate a relative "hit-miss-ratio".
+/// Character statistics are created for every character that has been missed at some time in the
+/// training session.
+class KTouchCharStats {
+ public:
+ /// Default constructor.
+ KTouchCharStats() : m_char(0), m_correctCount(0), m_wrongCount(0) {}
+ /// Constructor with parameters.
+ KTouchCharStats(QChar ch, unsigned int correct, unsigned int wrong)
+ : m_char(ch), m_correctCount(correct), m_wrongCount(wrong) {}
+ /// Reads the character statistics from a XML Dom Node.
+ /// @return Returns 'true', when reading was successful or 'false' otherwise.
+ bool read(QDomNode in);
+ /// Writes the character statistics to the XML document.
+ void write(QDomDocument& doc, QDomElement& root) const;
+ /// Returns the miss-hit ratio (a value between 0-all correct and 100-all wrong).
+ int missHitRatio() const;
+
+ QChar m_char; ///< The character for which statistics are kept.
+ unsigned int m_correctCount; ///< How often the character has been typed correctly.
+ unsigned int m_wrongCount; ///< How often the character has been missed (not typed when it ought to be typed).
+};
+
+/// Sort criterion: Returns 'true' when the hit-miss ratio of 'lhs' is worse then the one of 'rhs'.
+inline bool higher_miss_hit_ratio(const KTouchCharStats & lhs, const KTouchCharStats & rhs) {
+ return lhs.missHitRatio() > rhs.missHitRatio();
+}
+/// Comparison operator "less", returns 'true' when the char-code of 'lhs' is less then the one of 'rhs'
+inline bool operator<(const KTouchCharStats &lhs, const KTouchCharStats &rhs) { return lhs.m_char<rhs.m_char; }
+/// Comparison operator "greater", returns 'true' when the char-code of 'lhs' is greater then the one of 'rhs'
+inline bool operator>(const KTouchCharStats &lhs, const KTouchCharStats &rhs) { return lhs.m_char>rhs.m_char; }
+/// Comparison operator == : returns 'true' when the char-code of 'lhs' is equal to then the one of 'rhs'
+inline bool operator==(const KTouchCharStats &lhs, const KTouchCharStats &rhs) { return lhs.m_char==rhs.m_char; }
+/// Writes the content of a KTouchCharStats object into the text stream.
+QTextStream& operator<<(QTextStream &out, const KTouchCharStats &ch);
+
+// *** KTouchLevelStats ***
+
+/// Contains the complete statistics obtained for a single level.
+///
+/// This class contains the statistics for a single run through a single level. It contains the
+/// statistics for all characters that have been mistyped in this level, the typing time, the word count,
+/// correct and total character count etc.
+class KTouchLevelStats {
+ public:
+ /// Default constructor
+ KTouchLevelStats() { clear(); }
+ /// Clears the data
+ void clear();
+
+ /// Reads the level statistics from a XML Dom Node.
+ /// @return Returns 'true', when reading was successful or 'false' otherwise.
+ bool read(QDomNode in);
+ /// Writes the level statistics to the XML document.
+ void write(QDomDocument& doc, QDomElement& root) const;
+ /// Adds a correct character count to the current statistics
+ void addCorrectChar(QChar key);
+ /// Removes correct character count
+ void removeCorrectChar();
+ /// Adds a wrong character count to the current statistics
+ void addWrongChar(QChar key);
+ /// Returns the typing accuracy or "correctness" as value between 0 and 1.
+ double correctness() const;
+ /// Returns the average typing speed in chars per minute.
+ double charSpeed() const;
+ /// Returns the average typing speed in words per minute.
+ double wordSpeed() const;
+
+ std::set<KTouchCharStats> m_charStats; ///< Holds the statistics for mistyped characters.
+ int m_levelNum; ///< Number of the level in the lecture.
+ double m_elapsedTime; ///< Typing time in this level in seconds.
+ unsigned int m_words; ///< The number of typed words.
+ unsigned int m_totalChars; ///< The total number of chars typed this level.
+ unsigned int m_correctChars; ///< The total number of correctly typed chars.
+ QDateTime m_timeRecorded; ///< The time at which the level stats were recorded.
+};
+
+
+
+// *** KTouchSessionStats ***
+
+/// Contains the complete statistics obtained for a single training session (spanning several levels).
+///
+/// This class contains the statistics for a complete training session of a single lecture but may include several levels.
+class KTouchSessionStats {
+ public:
+ /// Default constructor
+ KTouchSessionStats() { clear(); }
+ /// Clears the data
+ void clear();
+
+ /// Reads the session statistics from a XML Dom Node.
+ /// @return Returns 'true', when reading was successful or 'false' otherwise.
+ bool read(QDomNode in);
+ /// Writes the session statistics to the XML document.
+ void write(QDomDocument& doc, QDomElement& root) const;
+ /// Adds a correct character count to the current statistics
+ void addCorrectChar(QChar key);
+ /// Removes a correct character count
+ void removeCorrectChar();
+ /// Adds a wrong character count to the current statistics
+ void addWrongChar(QChar key);
+
+ std::set<unsigned int> m_levelNums; ///< Numbers of the levels in this session.
+ std::set<KTouchCharStats> m_charStats; ///< Holds the statistics for mistyped characters.
+ double m_elapsedTime; ///< Typing time in this session in seconds.
+ unsigned int m_words; ///< The number of typed words.
+ unsigned int m_totalChars; ///< The total number of chars typed this session.
+ unsigned int m_correctChars; ///< The total number of correctly typed chars.
+ QDateTime m_timeRecorded; ///< The time at which the session stats were recorded.
+};
+
+
+// *** KTouchLectureStats ***
+
+/// Contains the complete statistics obtained over time for a certain training lecture.
+///
+/// This class contains the statistics for a complete training lecture including separate level statistics as well
+/// as session statistics.
+class KTouchLectureStats {
+ public:
+ /// Default constructor
+ KTouchLectureStats() {}
+ /// Clears the data
+ void clear();
+
+ /// Reads a lecture statistics from a XML Dom Node.
+ /// @return Returns 'true', when reading was successful or 'false' otherwise.
+ bool read(QDomNode in);
+ /// Writes the lecture statistics to the XML document.
+ void write(QDomDocument& doc, QDomElement& root) const;
+
+ QString m_lectureTitle; ///< The descriptive title of the lecture.
+ KURL m_lectureURL; ///< The descriptive title of the lecture.
+
+ QValueVector<KTouchLevelStats> m_levelStats; ///< The statistics for all levels in this lecture.
+ QValueVector<KTouchSessionStats> m_sessionStats; ///< The statistics for all session for in this lecture.
+};
+
+
+// *** KTouchStatisticsData ***
+
+/// Contains the complete statistics for a certain user of KTouch.
+///
+/// All user statistics is kept in this class. The statistics data is read when KTouch is started. New
+/// statistics data is added when the lecture is changed or when the programm is closed. During
+/// normal training sessions the statistics remains unchanged. During training the current level and
+/// session statistics is obtained by and stored in the KTouchTrainer object.
+class KTouchStatisticsData {
+ public:
+ typedef QMap<KURL, KTouchLectureStats> LectureStatsMap;
+
+ /// Default constructor
+ KTouchStatisticsData() {}
+ /// Clears the data
+ void clear();
+
+ /// Reads the complete statistics from a XML file
+ /// @return Returns 'true', when reading was successful or 'false' otherwise.
+ bool read(QWidget * window, const KURL& url);
+ /// Writes the statistics data to the XML document.
+ bool write(QWidget * window, const KURL& url) const;
+
+ LectureStatsMap m_lectureStats; ///< All statistics of all lectures, stored based on their URLs.
+
+ private:
+ /// Reads the statistics data from file into an XML document
+ bool readStats(QDomDocument& doc);
+ /// Saves the statistics data in the XML document
+ void writeStats(QDomDocument& doc) const;
+};
+
+#endif // KTOUCHSTATISTICSDATA_H
diff --git a/ktouch/src/ktouchstatus.cpp b/ktouch/src/ktouchstatus.cpp
new file mode 100644
index 00000000..2c0d8341
--- /dev/null
+++ b/ktouch/src/ktouchstatus.cpp
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * ktouchstatus.cpp *
+ * ---------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchstatus.h"
+#include "ktouchstatus.moc"
+
+#include <qlcdnumber.h>
+#include <qlabel.h>
+#include <qprogressbar.h>
+#include <kdebug.h>
+#include <kpushbutton.h>
+#include "prefs.h"
+
+KTouchStatus::KTouchStatus(QWidget *parent)
+ : KTouchStatusLayout(parent)
+{
+ applyPreferences();
+}
+
+void KTouchStatus::applyPreferences() {
+ if (Prefs::autoLevelChange()) {
+ levelUpBtn->setEnabled( !Prefs::disableManualLevelChange() );
+ levelDownBtn->setEnabled( !Prefs::disableManualLevelChange() );
+ }
+ else {
+ levelUpBtn->setEnabled( true );
+ levelDownBtn->setEnabled( true );
+ }
+}
+
+void KTouchStatus::setNewChars(const QString& newChars) {
+ newCharsLabel->setText(newChars);
+}
+
+void KTouchStatus::updateStatus(unsigned int level, double correctness) {
+ levelLCD->display(static_cast<int>(level)+1); // +1 because our level variable ranges from 0...n-1
+ correctnessBar->setProgress(static_cast<int>(correctness*100) );
+}
diff --git a/ktouch/src/ktouchstatus.h b/ktouch/src/ktouchstatus.h
new file mode 100644
index 00000000..1782d3aa
--- /dev/null
+++ b/ktouch/src/ktouchstatus.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * ktouchstatus.h *
+ * -------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHSTATUS_H
+#define KTOUCHSTATUS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ktouchstatuslayout.h"
+
+/** This is the implementation of the status widget (at the top of the main view).
+ * It simply displays the status but does not have a functionality of its own.
+ * Everythings is calculated in the trainer (see KTouchTrainer)and then displayed
+ * using the updateStatus() member function.
+ * The "new characters" string is set using the member function setNewChars().
+ */
+class KTouchStatus : public KTouchStatusLayout {
+ Q_OBJECT
+ public:
+ /// Constructor
+ KTouchStatus(QWidget *parent);
+ /// Called when the preferences have changed in the configuration dialog.
+ void applyPreferences();
+ /// Sets the new characters text.
+ void setNewChars(const QString& newChars);
+ /// Updates the level LCD and the correctness progress bar
+ void updateStatus(unsigned int level, double correctness);
+};
+
+#endif // KTOUCHSTATUS_H
diff --git a/ktouch/src/ktouchstatuslayout.ui b/ktouch/src/ktouchstatuslayout.ui
new file mode 100644
index 00000000..80b29f9f
--- /dev/null
+++ b/ktouch/src/ktouchstatuslayout.ui
@@ -0,0 +1,360 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KTouchStatusLayout</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KTouchStatusLayout</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>661</width>
+ <height>100</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Level</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLCDNumber">
+ <property name="name">
+ <cstring>levelLCD</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="numDigits">
+ <number>3</number>
+ </property>
+ <property name="mode">
+ <enum>Dec</enum>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Current level</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This shows which level you are at.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>levelUpBtn</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>+</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>levelDownBtn</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>-</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Speed</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLCDNumber">
+ <property name="name">
+ <cstring>speedLCD</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="numDigits">
+ <number>3</number>
+ </property>
+ <property name="segmentStyle">
+ <enum>Flat</enum>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Characters/Minute</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This shows how fast you are typing. It measures the typing speed in characters per minute.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox12</cstring>
+ </property>
+ <property name="title">
+ <string>Correctness</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QProgressBar">
+ <property name="name">
+ <cstring>correctnessBar</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>How much are you typing correctly?</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This shows how correctly you are typing.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>New Characters in This Level</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>newCharsLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>20</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>new characters</string>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+</widget>
+<slots>
+ <slot>levelForcedDown()</slot>
+ <slot>levelForcedUp()</slot>
+ <slot>showStatChanged(int)</slot>
+ <slot>runningStateChanged(int)</slot>
+ <slot>startKTouch()</slot>
+ <slot>stopKTouch()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/ktouch/src/ktouchtrainer.cpp b/ktouch/src/ktouchtrainer.cpp
new file mode 100644
index 00000000..81c9da9e
--- /dev/null
+++ b/ktouch/src/ktouchtrainer.cpp
@@ -0,0 +1,502 @@
+/***************************************************************************
+ * ktouchtrainer.cpp *
+ * ----------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2006 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouchtrainer.h"
+#include "ktouchtrainer.moc"
+
+#include <qlcdnumber.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kaudioplayer.h>
+#include <qmessagebox.h>
+
+#include "ktouch.h"
+#include "ktouchstatus.h"
+#include "ktouchslideline.h"
+#include "ktouchkeyboardwidget.h"
+#include "ktouchlecture.h"
+#include "ktouchdefaults.h"
+#include "prefs.h"
+
+KTouchTrainer::KTouchTrainer(KTouchStatus *status, KTouchSlideLine *slideLine, KTouchKeyboardWidget *keyboard, KTouchLecture *lecture)
+ : QObject(),
+ m_trainingTimer(new QTimer),
+ m_statusWidget(status),
+ m_slideLineWidget(slideLine),
+ m_keyboardWidget(keyboard),
+ m_lecture(lecture)
+{
+ m_level = 0; // level 1, but we're storing it zero based
+ m_line = 0;
+ m_wordsInCurrentLine = 0;
+ m_trainingPaused=true; // we start in pause mode
+ m_teacherText=m_lecture->level(0).line(0);
+ m_studentText="";
+
+ // reset statistics
+ m_levelStats.clear();
+ m_sessionStats.clear();
+
+ /// \todo preload sounds and improve sound playback system
+ m_levelUpSound = KGlobal::dirs()->findResource("appdata","up.wav");
+ m_levelDownSound = KGlobal::dirs()->findResource("appdata","down.wav");
+ m_typeWriterSound = KGlobal::dirs()->findResource("appdata","typewriter.wav");
+
+ connect(m_statusWidget->levelUpBtn, SIGNAL(clicked()), this, SLOT(levelUp()) );
+ connect(m_statusWidget->levelDownBtn, SIGNAL(clicked()), this, SLOT(levelDown()) );
+ connect(m_trainingTimer, SIGNAL(timeout()), this, SLOT(timerTick()) );
+}
+// ----------------------------------------------------------------------------
+
+KTouchTrainer::~KTouchTrainer() {
+ delete m_trainingTimer;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::gotoFirstLine() {
+ m_statusWidget->setNewChars( m_lecture->level(m_level).newChars() );
+ m_line=0;
+ newLine();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::keyPressed(QChar key) {
+ // NOTE : In this function we need to distinguish between left and right
+ // typing. Use the config setting Prefs::right2LeftTyping() for that.
+
+ if (m_trainingPaused) continueTraining();
+ if (m_teacherText==m_studentText) {
+ // if already at end of line, don't add more chars
+ /// \todo Flash the line when line complete
+ if (Prefs::beepOnError()) QApplication::beep();
+ return;
+ }
+ // remember length of student text without added character
+ unsigned int old_student_text_len = m_studentText.length();
+ // compose new student text depending in typing direction
+ QString new_student_text = m_studentText;
+ if (Prefs::right2LeftTyping())
+ new_student_text = key + new_student_text;
+ else
+ new_student_text += key;
+
+ // don´t allow excessive amounts of characters per line
+ if (!m_slideLineWidget->canAddCharacter(new_student_text)) {
+ if (Prefs::beepOnError()) QApplication::beep();
+ return;
+ }
+ // store the new student text
+ m_studentText = new_student_text;
+ // we need to find out, if the key was correct or not
+ if (studentLineCorrect())
+ statsAddCorrectChar(key); // ok, all student text is correct
+ else {
+ // nope, the key was wrong : beep !!!
+ if (Prefs::beepOnError()) QApplication::beep();
+ // check if the key is the first wrong key that was mistyped. Only then add it
+ // to the wrong char statistics.
+ if (Prefs::right2LeftTyping()) {
+ if (m_teacherText.right(old_student_text_len)==m_studentText.right(old_student_text_len) &&
+ m_teacherText.length() > old_student_text_len)
+ {
+ // add the key the student ought to press to the wrong character stats
+ int next_key_index = m_teacherText.length() - old_student_text_len;
+// kdDebug() << "Wrong key = " << m_teacherText[next_key_index] << endl;
+ statsAddWrongChar( m_teacherText[next_key_index] );
+ }
+ }
+ else {
+ if (m_teacherText.left(old_student_text_len)==m_studentText.left(old_student_text_len) &&
+ m_teacherText.length() > old_student_text_len)
+ {
+ // add the key the student ought to press to the wrong character stats
+ int next_key_index = old_student_text_len;
+ statsAddWrongChar( m_teacherText[next_key_index] );
+ }
+ }
+ /// \todo Implement option whether subsequent mistyped keys should be remembered as missed
+ /// keys as well.
+ }
+ updateWidgets(); // update all the other widgets (keyboard widget, status widget and statusbar)
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::backspacePressed() {
+ if (m_trainingPaused) continueTraining();
+ /// \todo Implement the "remove space character = remove word count" feature
+
+ unsigned int len = m_studentText.length();
+ if (len) {
+ if (m_teacherText.left(len)==m_studentText && m_teacherText.length()>=len) {
+ // we are removing a correctly typed char
+ statsRemoveCorrectChar(m_studentText[len-1]);
+ }
+ m_studentText = m_studentText.left(--len);
+ updateWidgets(); // update all the widgets and the word count
+ if (m_teacherText.left(len)==m_studentText)
+ m_keyboardWidget->newKey(m_teacherText[len]);
+ else
+ m_keyboardWidget->newKey(QChar(8));
+ }
+ else {
+ /// \todo Flash line when Backspace on empty line
+ QApplication::beep();
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::enterPressed() {
+ if (m_trainingPaused) continueTraining();
+ if (m_studentText!=m_teacherText) {
+ QApplication::beep();
+ return;
+ };
+
+ /*
+ // NOTE : auto level change inside level was removed due to popular request
+
+ if (Prefs::autoLevelChange()) {
+ // if level increase criterion was fulfilled, increase line counter
+ if (Prefs::upCorrectLimit() <= m_session.correctness()*100 &&
+ Prefs::upSpeedLimit() <= m_session.charSpeed())
+ {
+ m_decLinesCount=0;
+ ++m_incLinesCount;
+ }
+ else if (Prefs::downCorrectLimit() > m_session.correctness()*100 ||
+ Prefs::downSpeedLimit() > m_session.charSpeed())
+ {
+ m_incLinesCount=0;
+ ++m_decLinesCount;
+ };
+ // Automatic level change after a number of lines can happen, if you fulfilled the
+ // requirements in the last 5 lines.
+ if (m_incLinesCount>=2) {
+ levelUp();
+ return;
+ }
+ if (m_decLinesCount>=2 && m_level!=0) {
+ levelDown();
+ return;
+ };
+ };
+ */
+
+
+ // Check if we are in the last line
+ if (m_line+1 >= m_lecture->level(m_level).count()) {
+ if (Prefs::autoLevelChange()) {
+ // adjust level if limits exceeded
+ if (Prefs::upCorrectLimit() <= m_levelStats.correctness()*100 &&
+ Prefs::upSpeedLimit() <= m_levelStats.charSpeed())
+ {
+ /// \todo Test if last level is done and show message, stop training, show statistics etc.
+ levelUp(); // level change takes care of updating word count
+ return;
+ }
+ else if (Prefs::downCorrectLimit() > m_levelStats.correctness()*100 ||
+ Prefs::downSpeedLimit() > m_levelStats.charSpeed())
+ {
+ levelDown(); // level change takes care of updating word count
+ return;
+ }
+ }
+ // we have to store the word count before continuing in the first line
+ updateWordCount();
+ m_levelStats.m_words += m_wordsInCurrentLine;
+ m_sessionStats.m_words += m_wordsInCurrentLine;
+ gotoFirstLine(); // restart in the new/current level
+ }
+ else {
+ // store the word count
+ updateWordCount();
+ m_levelStats.m_words += m_wordsInCurrentLine;
+ m_sessionStats.m_words += m_wordsInCurrentLine;
+ ++m_line;
+ newLine(); // otherwise show next line
+ }
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::updateWidgets() {
+ // update status widget
+ m_statusWidget->updateStatus(m_level, m_levelStats.correctness());
+ // update slide line widget
+ m_slideLineWidget->setStudentText(m_studentText);
+ // update keyboard widget -> show next to be pressed char.
+ // we have to find out first whether the student text is correct or not.
+ if (studentLineCorrect()) {
+ // ok, all student text is correct
+ if (m_teacherText.length()==m_studentText.length())
+ m_keyboardWidget->newKey(QChar(13)); // we have reached the end of the line
+ else
+ m_keyboardWidget->newKey(m_teacherText[m_studentText.length()]);
+ }
+ else {
+ m_keyboardWidget->newKey(QChar(8)); // wrong key, user must now press backspace
+ }
+ updateWordCount(); // here we first update the word count
+ updateStatusBar(); // and then the status bar
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::startTraining(bool keepLevel) {
+ // Here we start a new training session.
+
+ // keep the current level if flag is set
+ if (!keepLevel)
+ m_level=0;
+ // reset the level and session statistics
+ m_levelStats.clear();
+ m_sessionStats.clear();
+ // transfer level to level statistics
+ m_levelStats.m_levelNum = m_level;
+ // remember level in session stats
+ m_sessionStats.m_levelNums.insert(m_level);
+ // go to first line in level (also resets word count)
+ gotoFirstLine();
+ updateStatusBarMessage(i18n("Starting training session: Waiting for first keypress...") );
+ updateStatusBar();
+ m_statusWidget->updateStatus(m_level, 1);
+ m_statusWidget->speedLCD->display( 0 );
+ m_trainingPaused=true; // Go into "Pause" mode
+ m_trainingTimer->stop(); // Training timer will be started on first keypress.
+ m_slideLineWidget->setCursorTimerEnabled(true); // Curser will blink
+ updateLevelChangeButtons();
+}
+// ----------------------------------------------------------------------------
+
+// Pauses the current training session.
+// This function is called from class KTouch (when the Pause action is executed).
+void KTouchTrainer::pauseTraining() {
+ m_trainingPaused=true;
+ m_trainingTimer->stop();
+ m_slideLineWidget->setCursorTimerEnabled(false);
+ m_statusWidget->updateStatus(m_level, m_levelStats.correctness());
+ m_statusWidget->speedLCD->display( m_levelStats.charSpeed() );
+ updateStatusBarMessage(i18n("Training session paused. Training continues on next keypress...") );
+ updateStatusBar();
+}
+// ----------------------------------------------------------------------------
+
+// Continues the current training session.
+// This function is called from class KTouch when a user presses a normal key
+// while the training is in pause mode.
+void KTouchTrainer::continueTraining() {
+ m_trainingPaused=false;
+ m_slideLineWidget->setCursorTimerEnabled(true);
+ m_statusWidget->updateStatus(m_level, m_levelStats.correctness() );
+ m_statusWidget->speedLCD->display( m_levelStats.charSpeed() );
+ updateStatusBarMessage(i18n("Training session! The time is running...") );
+ updateStatusBar();
+ m_trainingTimer->start(LCD_UPDATE_INTERVAL); // start the timer
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::storeTrainingStatistics() {
+ // at first get a reference to the statistics data of the current lecture
+ KTouchLectureStats& data = KTouchPtr->getCurrentLectureStats();
+ // update word count
+ updateWordCount();
+ // add word count to level and session statistics
+ m_levelStats.m_words += m_wordsInCurrentLine;
+ m_sessionStats.m_words += m_wordsInCurrentLine;
+ // are there level stats to be stored?
+ if (m_levelStats.m_elapsedTime != 0) {
+ //kdDebug() << "[KTouchTrainer::storeTrainingStatistics] Storing level statistics!" << endl;
+ m_levelStats.m_timeRecorded = QDateTime::currentDateTime();
+ data.m_levelStats.push_back( m_levelStats );
+ }
+ if (m_sessionStats.m_elapsedTime != 0) {
+ //kdDebug() << "[KTouchTrainer::storeTrainingStatistics] Storing session statistics!" << endl;
+ m_sessionStats.m_timeRecorded = QDateTime::currentDateTime();
+ data.m_sessionStats.push_back( m_sessionStats );
+ }
+}
+// ----------------------------------------------------------------------------
+
+bool KTouchTrainer::studentLineCorrect() const {
+ if (m_teacherText.isEmpty())
+ return m_studentText.isEmpty();
+ unsigned int len = m_studentText.length();
+ // different check for left and right writing
+ if (Prefs::right2LeftTyping())
+ return m_teacherText.right(len)==m_studentText && m_teacherText.length()>=len;
+ else
+ return (m_teacherText.left(len)==m_studentText && m_teacherText.length()>=len);
+}
+// ----------------------------------------------------------------------------
+
+
+// *** Public slots ***
+
+void KTouchTrainer::levelUp() {
+ KAudioPlayer::play(m_levelUpSound.url());
+ ++m_level; // increase the level
+ if (m_level>=m_lecture->levelCount()) {
+ // already at max level? Let's stay there
+ m_level=m_lecture->levelCount()-1;
+ levelAllComplete();
+ /// \todo Do something when last level is completed
+ }
+ // Store level statistics if level is increased
+ statsChangeLevel();
+ gotoFirstLine();
+ updateLevelChangeButtons();
+}
+
+
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::levelDown() {
+ if (m_level>0) {
+ --m_level;
+ KAudioPlayer::play(m_levelDownSound.url());
+ }
+ // Store level statistics if level is increased
+ statsChangeLevel();
+ gotoFirstLine();
+ updateLevelChangeButtons();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::timerTick() {
+ if (m_trainingPaused) return;
+ // Add the timer interval. I think we can neglect the error we make when the session is
+ // paused and continued... it's not a scientific calculation, isn't it?
+ statsAddTime(LCD_UPDATE_INTERVAL*0.001);
+ // update only the widgets that are affected by progressing time
+ m_statusWidget->speedLCD->display( m_levelStats.charSpeed() );
+}
+// ----------------------------------------------------------------------------
+
+
+
+// *** Private functions ***
+
+void KTouchTrainer::levelAllComplete() {
+ QMessageBox::information(0, i18n("You rock!"),
+ i18n("You have finished this training exercise.\n"
+ "This training session will start from the beginning."));
+ statsChangeLevel();
+ startTraining(false);
+}
+
+void KTouchTrainer::updateLevelChangeButtons() {
+ if (!Prefs::disableManualLevelChange()) {
+ m_statusWidget->levelUpBtn->setEnabled(m_level < m_lecture->levelCount() - 1);
+ m_statusWidget->levelDownBtn->setEnabled(m_level > 0);
+ }
+}
+void KTouchTrainer::newLine() {
+ m_teacherText = m_lecture->level(m_level).line(m_line);
+ m_studentText="";
+ m_wordsInCurrentLine = 0;
+ m_keyboardWidget->newKey(m_teacherText[0]);
+ m_slideLineWidget->setNewText(m_teacherText, m_studentText);
+ updateStatusBar(); // update status bar
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::updateStatusBar() const {
+ KTouchPtr->changeStatusbarStats(m_levelStats.m_correctChars, m_levelStats.m_totalChars,
+ m_levelStats.m_words + m_wordsInCurrentLine,
+ m_sessionStats.m_correctChars, m_sessionStats.m_totalChars,
+ m_sessionStats.m_words + m_wordsInCurrentLine);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::updateStatusBarMessage(const QString& message) const {
+ KTouchPtr->changeStatusbarMessage(message);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::updateWordCount() {
+ // now update the m_wordsInCurrentLine variable
+ if (!studentLineCorrect()) return; // if error, don't update
+ int words = 0;
+ bool space = true;
+ for (unsigned int i=0; i<m_studentText.length(); ++i) {
+ bool is_space = (m_studentText[i] == QChar(' '));
+ if (is_space) {
+ if (space) continue; // two spaces after each other... ignore
+ else {
+ ++words;
+ space = true;
+ }
+ }
+ else {
+ if (!space) continue; // two chars after each other... ignore
+ else {
+ space = false; // no need to add a word here.
+ }
+ }
+ }
+ // check if line is completely typed and add a word then
+ if (m_studentText == m_teacherText) ++words;
+ m_wordsInCurrentLine = words;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::statsAddCorrectChar(QChar key) {
+ m_levelStats.addCorrectChar(key);
+ m_sessionStats.addCorrectChar(key);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::statsAddWrongChar(QChar key) {
+ m_levelStats.addWrongChar(key);
+ m_sessionStats.addWrongChar(key);
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::statsRemoveCorrectChar(QChar) {
+ m_levelStats.removeCorrectChar();
+ m_sessionStats.removeCorrectChar();
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::statsAddTime(double dt) {
+ m_levelStats.m_elapsedTime += dt;
+ m_sessionStats.m_elapsedTime += dt;
+}
+// ----------------------------------------------------------------------------
+
+void KTouchTrainer::statsChangeLevel() {
+ //kdDebug() << "[KTouchTrainer::statsChangeLevel] First!" << endl;
+ // first update word count and store data in
+ updateWordCount();
+ //kdDebug() << "[KTouchTrainer::statsChangeLevel] Adding word count of " << m_wordsInCurrentLine << endl;
+ m_levelStats.m_words += m_wordsInCurrentLine;
+ m_sessionStats.m_words += m_wordsInCurrentLine;
+ // get a reference to the statistics data of the current lecture
+ KTouchLectureStats& data = KTouchPtr->getCurrentLectureStats();
+ // are there level stats to be stored?
+ if (m_levelStats.m_elapsedTime != 0) {
+ //kdDebug() << "[KTouchTrainer::storeTrainingStatistics] Storing level statistics!" << endl;
+ m_levelStats.m_timeRecorded = QDateTime::currentDateTime();
+ data.m_levelStats.push_back( m_levelStats );
+ }
+ // clear level stats
+ m_levelStats.clear();
+ // transfer current level to level statistics
+ m_levelStats.m_levelNum = m_level;
+ // remember level in session stats
+ m_sessionStats.m_levelNums.insert(m_level);
+ // show new level (in status widet) and 100% correctness
+ m_statusWidget->updateStatus(m_level, 1);
+}
+// ----------------------------------------------------------------------------
diff --git a/ktouch/src/ktouchtrainer.h b/ktouch/src/ktouchtrainer.h
new file mode 100644
index 00000000..46c9d02c
--- /dev/null
+++ b/ktouch/src/ktouchtrainer.h
@@ -0,0 +1,163 @@
+/***************************************************************************
+ * ktouchtrainer.h *
+ * --------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2003 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHTRAINER_H
+#define KTOUCHTRAINER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qobject.h>
+
+#include "ktouchstatisticsdata.h"
+
+class QTimer;
+
+class KTouchStatus;
+class KTouchSlideLine;
+class KTouchKeyboardWidget;
+class KTouchLecture;
+
+/// This is the master trainer object and does all the heavy work.
+///
+/// The training object gets the already filtered "new key pressed" events from the main window
+/// and processes them. It manages the level and line adjustments, starts, pauses and restarts
+/// a training, updates the widgets and and and...
+/// <p>
+/// Whether in training or not the user may switch levels using the level change buttons (if enabled)
+/// or change the lecture. The slot levelUp() or levelDown() is called and the trainer is switching
+/// levels accordingly.
+/// <p>
+/// There is always a current training session. On a typical program start the training session is paused.
+/// When a training session is paused the timer is stopped and the program waits for the next keypress
+/// of the user and then the timer is restarted. Note that the Pause button (Pause action) is enabled/disabled from
+/// the main KTouch class.
+/// <p>
+/// When the user starts a new training session or quits the program the current level/session
+/// statistics data will be added to the user statistics and the stats will be cleared. If a new
+/// level is started (during a session), only the level stats are stored and cleared, the session
+/// statistics is kept. The only member functions, that add statistics data to the users statistics are
+/// therefore storeTrainingStatistics() (for level and session stats) and statsChangeLevel() (stores only
+/// level stats).
+/// <p>
+/// The trainer keeps record of the current level and session stats seperately and
+/// stores them in the m_levelStats and m_sessionStats member variables. However, the word count is only
+/// updated in these variables, once a slide line is completed (or a level/session/lecture is changed).
+/// <p>
+/// The member function updateWidgets() updates all training related widgets (status widget, slide line,
+/// and the statusbar of the main window). In this member function also the word count of the current line
+/// is updated.
+class KTouchTrainer : public QObject {
+ Q_OBJECT
+ public:
+ /// Constructor.
+ KTouchTrainer(KTouchStatus *status, KTouchSlideLine *slideLine, KTouchKeyboardWidget *keyboard, KTouchLecture *lecture);
+ /// Destructor
+ virtual ~KTouchTrainer();
+ /// Jumps to the first line in the current level (m_level) (Note: has no effect on the training statistics).
+ /// The function resets the word count.
+ void gotoFirstLine();
+ /// Jumps to the first level, line 1 (Note: has no effect on the training statistics!).
+ /// The function resets the word count.
+ void gotoFirstLevel() { m_level=0; gotoFirstLine(); }
+ /// Processes the character 'key' and updates the widgets and statistics.
+ /// If the training session was started and in waiting state the timer is started and the actuall training begins.
+ void keyPressed(QChar key);
+ /// Will be called when a character has been removed (recalculates the variables and updates the widgets).
+ void backspacePressed();
+ /// Will be called when "enter" has been pressed (displays next line).
+ void enterPressed();
+ /// Will be called whenever the student text has changed and updates the slide line widget,
+ /// the status widget and shows the next to be pressed key on the keyboard
+ void updateWidgets();
+ /// Starts a new training session for the current lecture.
+ /// This function is called from class KTouch (when the "New" session action is executed).
+ /// The function resets the statistics so the caller must ensure that the previous level
+ /// and session statistics are properly stored.
+ void startTraining(bool keepLevel);
+ /// Pauses the current training session.
+ /// This function is called from class KTouch (when the "Pause" action is executed).
+ void pauseTraining();
+ /// Continues the current training session.
+ /// This function is called from class KTouch when a user presses a normal key while the training is in
+ /// "Pause" mode.
+ void continueTraining();
+ /// Stores the currently accumulated statistics in the statistics for the current user (but only, if
+ /// some time has elapsed in the current training session). This function is called whenever a new
+ /// training session is started or when the program is closed.
+ void storeTrainingStatistics();
+ /// Returns true, if the students line is correct so far.
+ bool studentLineCorrect() const;
+ /// Returns number of words that have been typed so far in the current line.
+ unsigned int wordsInCurrentLine() const { return m_wordsInCurrentLine; }
+
+
+ unsigned int m_level; ///< Current level number (zero based).
+ unsigned int m_line; ///< Current line number (zero based).
+
+ QString m_teacherText; ///< The currently displayed teacher text.
+ QString m_studentText; ///< The currently typed student text.
+
+ bool m_trainingPaused; ///< Indicates whether we have paused the training session or not.
+ QTimer *m_trainingTimer; ///< The timer responsable for updating the speed LCD widget.
+
+ KTouchLevelStats m_levelStats; ///< Contains the statistics for the current level alone.
+ KTouchSessionStats m_sessionStats; ///< Contains the statistics for the current session (multiple levels).
+
+ public slots:
+ /// Will be called when the level is increased.
+ void levelUp();
+ /// Will be called when the level is decreased.
+ void levelDown();
+
+ private slots:
+ /// Will be called regularly by the training timer, increases the elapsed time and updates the speed LCD widget.
+ void timerTick();
+
+ private:
+ /// Sets up a new teacher line (depending on m_level and m_line).
+ /// The function resets the word count.
+ void newLine();
+ void levelAllComplete();
+ void updateLevelChangeButtons();
+ /// Updates the statusbar of the main window.
+ void updateStatusBar() const;
+ /// Updates the message in the statusbar of the main window.
+ void updateStatusBarMessage(const QString& message) const;
+ /// Updates the word count in the current student text line.
+ void updateWordCount();
+ /// Adds a correct character count to the current statistics.
+ void statsAddCorrectChar(QChar key);
+ /// Adds a wrong character count to the current statistics.
+ void statsAddWrongChar(QChar key);
+ /// Removes a correctly typed character count.
+ void statsRemoveCorrectChar(QChar);
+ /// Adds some elapsed time (in seconds) to the statistics.
+ void statsAddTime(double dt);
+ /// Stores level stats and resets level stats (this function is called from levelUp() and levelDown()
+ /// right before a new level and new line is started).
+ void statsChangeLevel();
+
+ KTouchStatus *m_statusWidget; ///< Pointer to the status widget on top of the main window.
+ KTouchSlideLine *m_slideLineWidget; ///< Pointer to the sliding line widget.
+ KTouchKeyboardWidget *m_keyboardWidget; ///< Pointer to the keyboard widget.
+ KTouchLecture *m_lecture; ///< Pointer to the lecture data.
+
+ KURL m_levelUpSound; ///< URL of the level up sound.
+ KURL m_levelDownSound; ///< URL of the level down sound.
+ KURL m_typeWriterSound; ///< URL of the typing sound.
+
+ unsigned int m_wordsInCurrentLine; ///< Number of words in the current typing line.
+};
+
+#endif // KTOUCHTRAINER_H
diff --git a/ktouch/src/ktouchui.rc b/ktouch/src/ktouchui.rc
new file mode 100644
index 00000000..36db42f6
--- /dev/null
+++ b/ktouch/src/ktouchui.rc
@@ -0,0 +1,29 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="ktouch" version="1.5.3">
+<MenuBar>
+ <Menu name="file"><text>F&amp;ile</text>
+ <Action name="file_openlecture" />
+ <Action name="file_editlecture" />
+ <Separator/>
+ <Action name="file_editcolors" />
+ <Action name="file_editkeyboard" />
+ </Menu>
+ <Menu name="training"><text>T&amp;raining</text>
+ <Action name="training_newsession" />
+ <Action name="training_pause" />
+ <Separator/>
+ <Action name="training_stats" />
+ <Action name="default_lectures" />
+ </Menu>
+ <Menu name="settings"><text>&amp;Settings</text>
+ <Action name="keyboard_layouts" append="save_merge"/>
+ <Action name="keyboard_schemes" append="save_merge"/>
+ </Menu>
+</MenuBar>
+<ToolBar name="mainToolBar"><text>Main Toolbar</text>
+ <Action name="training_newsession" />
+ <Action name="training_pause" />
+ <Separator/>
+ <Action name="training_stats" />
+</ToolBar>
+</kpartgui>
diff --git a/ktouch/src/ktouchutils.cpp b/ktouch/src/ktouchutils.cpp
new file mode 100644
index 00000000..af039f2c
--- /dev/null
+++ b/ktouch/src/ktouchutils.cpp
@@ -0,0 +1,43 @@
+/***************************************************************************
+ * ktouchutils.cpp *
+ * --------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include <qtextstream.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+#include <kdebug.h>
+
+#include "ktouchutils.h"
+
+QString format_speed(double speed) {
+ unsigned int mins = static_cast<unsigned int>(speed);
+ unsigned int secs = static_cast<unsigned int>(speed*60) - mins*60;
+ return QString("%1' %2''").arg(mins).arg(secs);
+}
+
+void sort_lists(QStringList& text, QStringList& data) {
+ if (text.count() != data.count()) return; // invalid input, no sorting possible
+ QMap<QString, QString> sort_map;
+ QStringList::const_iterator key_it = text.constBegin();
+ QStringList::const_iterator val_it = data.constBegin();
+ while (key_it != text.constEnd()) {
+// kdDebug() << *key_it << " " << *val_it << endl;
+ sort_map[*key_it++] = *val_it++;
+ }
+ text.sort();
+ key_it = text.constBegin();
+ data.clear();
+ while (key_it != text.constEnd()) {
+// kdDebug() << *key_it << " " << sort_map[*key_it] << endl;
+ data.append( sort_map[*key_it++] );
+ }
+}
diff --git a/ktouch/src/ktouchutils.h b/ktouch/src/ktouchutils.h
new file mode 100644
index 00000000..53b0daee
--- /dev/null
+++ b/ktouch/src/ktouchutils.h
@@ -0,0 +1,28 @@
+/***************************************************************************
+ * ktouchutils.h *
+ * ------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef KTOUCHUTILS_H
+#define KTOUCHUTILS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qstring.h>
+
+/// Formats the speed (given in chars/min) and creates a nice looking text.
+QString format_speed(double speed);
+
+/// Sorts both lists but uses only the values in "text" for sorting.
+void sort_lists(QStringList& text, QStringList& data);
+
+#endif // KTOUCHUTILS_H
diff --git a/ktouch/src/main.cpp b/ktouch/src/main.cpp
new file mode 100644
index 00000000..a5159ad1
--- /dev/null
+++ b/ktouch/src/main.cpp
@@ -0,0 +1,76 @@
+/***************************************************************************
+ * ktouch.cpp *
+ * ---------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#include "ktouch.h"
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+
+#include <kdebug.h>
+
+static const char description[] =
+ I18N_NOOP("A program that helps you to learn and practice touch typing");
+
+static const char version[] = "1.5.3";
+
+static KCmdLineOptions options[] = {
+ { "+[URL]", I18N_NOOP( "Training file to open" ), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char **argv)
+{
+ KAboutData about("ktouch",
+ I18N_NOOP("KTouch"),
+ version,
+ description,
+ KAboutData::License_GPL,
+ "Copyright (C) 2000-2006 by Håvard Frøiland and Andreas Nicolai",
+ 0,
+ "http://edu.kde.org/ktouch",
+ "submit@bugs.kde.org");
+ about.addAuthor( "Andreas Nicolai", I18N_NOOP("Current maintainer and programmer"), "Andreas.Nicolai@gmx.net" );
+ about.addAuthor( "Håvard Frøiland", I18N_NOOP("Original author, project admin"), "haavard@users.sourceforge.net" );
+ about.addCredit( "David Vignoni", I18N_NOOP("Creator of the SVG icon"), "david80v@tin.it");
+ about.addCredit( "Anne-Marie Mahfouf", I18N_NOOP("Lots of patches, fixes, updates"), "annma@kde.org");
+ about.addCredit( "All the creators of training and keyboard files", 0, 0);
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions( options );
+ KApplication app;
+ KTouch *mainWin = 0;
+
+ if (app.isRestored()) {
+ RESTORE(KTouch);
+ }
+ else
+ {
+ // no session.. just start up normally
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ // TODO: check the command line for a training file and set this as the new to open training file
+
+ /* TODO: turn splash screen on in release
+ KTouchSplash splash; // create the splash screen
+ splash.setHideEnabled( true ); // allow user to click the splash screen away
+ splash.show(); // show it
+ QTimer splashTimer;
+ splashTimer.connect(&splashTimer, SIGNAL(timeout()), &splash, SLOT(hide()));
+ splashTimer.start(2000, true); // start singleshot timer to hide the splashscreen
+ */
+
+ mainWin = new KTouch();
+ app.setMainWidget( mainWin );
+
+ mainWin->show();
+ args->clear();
+ }
+
+ return app.exec();
+}
diff --git a/ktouch/src/prefs.kcfgc b/ktouch/src/prefs.kcfgc
new file mode 100644
index 00000000..d5d5d7ba
--- /dev/null
+++ b/ktouch/src/prefs.kcfgc
@@ -0,0 +1,6 @@
+# Code generation options for kconfig_compiler
+File=ktouch.kcfg
+IncludeFiles=kglobalsettings.h
+ClassName=Prefs
+Singleton=true
+Mutators=true
diff --git a/ktouch/training/Makefile.am b/ktouch/training/Makefile.am
new file mode 100644
index 00000000..c4d354cf
--- /dev/null
+++ b/ktouch/training/Makefile.am
@@ -0,0 +1,36 @@
+# adding training files
+trainingdir = $(kde_datadir)/ktouch
+training_DATA = \
+bulgarian.ktouch.xml \
+bulgarian_long.ktouch.xml \
+catalan.ktouch.xml \
+danish2.ktouch.xml \
+danish.ktouch.xml \
+dvorak_ABCD.ktouch.xml \
+dvorak_es.ktouch.xml \
+dvorak-fr-1.ktouch.xml \
+dvorak-fr-2.ktouch.xml \
+dvorak.ktouch.xml \
+english.ktouch.xml \
+finnish.ktouch.xml \
+finnish_for_kids.ktouch.xml \
+french2.ktouch.xml \
+french.ktouch.xml \
+german2.ktouch.xml \
+german3.ktouch.xml \
+german.ktouch.xml \
+german.neo.ktouch.xml \
+german.number.ktouch.xml \
+hungarian_expert.ktouch.xml \
+hungarian.ktouch.xml \
+italian.ktouch.xml \
+nederlands_junior.ktouch.xml \
+nederlands.ktouch.xml \
+norwegian.ktouch.xml \
+polish.ktouch.xml \
+russian2ktouch.xml \
+russian.ktouch.xml \
+russian_long.ktouch.xml \
+slovenian.ktouch.xml \
+spanish.ktouch.xml \
+turkish.ktouch.xml \ No newline at end of file
diff --git a/ktouch/training/bulgarian.ktouch.xml b/ktouch/training/bulgarian.ktouch.xml
new file mode 100644
index 00000000..d723ea11
--- /dev/null
+++ b/ktouch/training/bulgarian.ktouch.xml
@@ -0,0 +1,215 @@
+<KTouchLecture>
+ <Title>Bulgarian (autogenerated)</Title>
+ <Comment>Georgi P. Georgiev
+joro_georgiev2001@magibg.com</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>то</NewCharacters>
+ <Line>тоо от ооо оотт то о отт</Line>
+ <Line>тото от ооо отто оотт отт</Line>
+ <Line>от от то от о оото ооооо</Line>
+ <Line>тото оо ооо от от отооо тооо</Line>
+ <Line>то от тотото тото оотт</Line>
+ <Line>то то от то от о о ооо</Line>
+ <Line>оото ото от ото тттт отто</Line>
+ <Line>тотото ооо то от о отт отооо</Line>
+ <Line>оо от оотт оото от о тооо</Line>
+ <Line>ото от от тттт тото оо тото</Line>
+ </Level>
+ <Level>
+ <NewCharacters>на</NewCharacters>
+ <Line>тона тно тно тантотата тотата</Line>
+ <Line>на танто тона ао нотата</Line>
+ <Line>нотната тантотата тно на тона</Line>
+ <Line>тотата нотно тота тотата тона</Line>
+ <Line>оа ан нотното нотна на</Line>
+ <Line>ан но нотната тон ао нотна</Line>
+ <Line>тнн ат танто нотата тота</Line>
+ <Line>тантото оа тотата но нотното</Line>
+ <Line>тон на нотно аат ан тота</Line>
+ <Line>нотното но тотата ата тно тнн</Line>
+ </Level>
+ <Level>
+ <NewCharacters>вя</NewCharacters>
+ <Line>ята вято навято отвяваната</Line>
+ <Line>ваната ятата отвятото навявана</Line>
+ <Line>овятата отвявано твоят таванното</Line>
+ <Line>явя я явна воняно явяваната</Line>
+ <Line>вота воняна твоят таванното</Line>
+ <Line>вята отвявано таванната овоняват</Line>
+ <Line>вято воят вята това воняна</Line>
+ <Line>това ято тавата твоята нов</Line>
+ <Line>явяваната таван в овятата овя</Line>
+ <Line>воняната тавата вонят отавя тавана</Line>
+ </Level>
+ <Level>
+ <NewCharacters>м,</NewCharacters>
+ <Line>вмятаното натаманяваното ама мама</Line>
+ <Line>намятано отмятам омотан натаманя</Line>
+ <Line>отмотаваното момя натаманявам мома</Line>
+ <Line>намотаван момяното там анатома</Line>
+ <Line>омаяната ма манната момян мотота</Line>
+ <Line>мятаната омотаван автомат атомна</Line>
+ <Line>натаманявано натаманяваната намотавана</Line>
+ <Line>намятам омотавана отмятана намотана</Line>
+ <Line>нямам атома маната мотат отмяна</Line>
+ <Line>намотавана тамян нямото намотана</Line>
+ </Level>
+ <Level>
+ <NewCharacters>хш</NewCharacters>
+ <Line>отмахва яхната ахано хвана охваното</Line>
+ <Line>хавата махната махова махаха</Line>
+ <Line>отвях шаван шахматното маяха</Line>
+ <Line>отмахва хвана ваяха мотаха ханша</Line>
+ <Line>яхано хавана отмахнаха манш</Line>
+ <Line>мотаха хм аншоа овонявах хаван</Line>
+ <Line>ахана шава шах охва намотаваш</Line>
+ <Line>момях шахматната яхнат ханша</Line>
+ <Line>ошава натаманяваш шават шавах</Line>
+ <Line>яхнаха отвяха отмятах отмахнат</Line>
+ </Level>
+ <Level>
+ <NewCharacters>съ</NewCharacters>
+ <Line>стаята автохтонът насновавах</Line>
+ <Line>стоях внасяна стотна отстоят</Line>
+ <Line>осовото атът ставано самотата</Line>
+ <Line>монотонността ставно шантавостта новост</Line>
+ <Line>въстанато въвонявана насявах осмян</Line>
+ <Line>схванато мъстяха насновяха втасаш</Line>
+ <Line>втасаха смотават свястта стъмняват</Line>
+ <Line>саван стомах внасяната мътя</Line>
+ <Line>стомаха масовост анонса съставяна</Line>
+ <Line>мътят сто настават асмата</Line>
+ </Level>
+ <Level>
+ <NewCharacters>пе</NewCharacters>
+ <Line>навестявахме овехтеех наметнехте</Line>
+ <Line>овеса отвеехме патовата спояваш</Line>
+ <Line>посвестен вменяемото ахването</Line>
+ <Line>несъответствената помпонът нахапеха наспаха</Line>
+ <Line>нашепнахте стопен овее отпояхме</Line>
+ <Line>помътнях навехнеш пооставана</Line>
+ <Line>настояването спънат осеменената помаех</Line>
+ <Line>потенета сметаната осеменят сопнете</Line>
+ <Line>отнемате пестенето светотатствената</Line>
+ <Line>натаманяхме понесат посметеш наставехте</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ги</NewCharacters>
+ <Line>опомниш сметни госте помомяния</Line>
+ <Line>гонеха вагонна поевтинени неотнимаемости</Line>
+ <Line>овехтявания отшивахте нагоите смигнаха</Line>
+ <Line>стисни наспиван отавяния шиехте</Line>
+ <Line>името снеси понаместиха отмивах</Line>
+ <Line>самотния стопанисвания наивна</Line>
+ <Line>осенените минахме сгъстявана отстъпите</Line>
+ <Line>пъханите снишиха нестесняваните</Line>
+ <Line>потегнах аниони пантеисти повествования</Line>
+ <Line>стигнех имен попитано напътваните</Line>
+ </Level>
+ <Level>
+ <NewCharacters>жд</NewCharacters>
+ <Line>донасян наводняхте съседства</Line>
+ <Line>дважди неподпомогнатите спогодяваме</Line>
+ <Line>донаждаш динамата доставяният</Line>
+ <Line>попадаме наводните подядеше оживея</Line>
+ <Line>доматения подписното догонвахте</Line>
+ <Line>нападаният поднеси подтиснатото</Line>
+ <Line>анодните наяждана поспадаше давенето</Line>
+ <Line>подгоням жасминовият напъденият</Line>
+ <Line>поожаднявани вдиганият осемдесетата</Line>
+ <Line>надминатите подмажехме понажежаването</Line>
+ </Level>
+ <Level>
+ <NewCharacters>фз</NewCharacters>
+ <Line>надвзимаше афиш сатанизмът извеяните</Line>
+ <Line>зашеметиш нагнездяме изтънявахме</Line>
+ <Line>изехтеше намазвам джазов загнездвано</Line>
+ <Line>засвоявам позамаехме взаимнозависимото</Line>
+ <Line>изстенваното звънтяха нагазваш издяването</Line>
+ <Line>позаписаха назоваването запятия</Line>
+ <Line>въздигнахте зашеметих антагонизъма</Line>
+ <Line>изфинваният затаяваме съвземеш измажеше</Line>
+ <Line>заметяхте феномена надвземахте</Line>
+ <Line>пантофът заотстъпвахме доизяждани</Line>
+ </Level>
+ <Level>
+ <NewCharacters>уб</NewCharacters>
+ <Line>утеснявам изгубвахте възобновете</Line>
+ <Line>духвани удавех уяснението сухото</Line>
+ <Line>угнихте подухвате напуснато</Line>
+ <Line>сапунисам женитбен безумствате</Line>
+ <Line>угасяваният базедовата утеснени</Line>
+ <Line>сдобиваше ануса битуминозната</Line>
+ <Line>бизнесменът обособяваш поиздумвана</Line>
+ <Line>изхаби обем депутат тупнахме</Line>
+ <Line>усамотяван забвения унижената бесеният</Line>
+ <Line>усвоявано опустошавахте изумяването</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ьч</NewCharacters>
+ <Line>заточавани епизодични зачитахме</Line>
+ <Line>домъчнеехме мечовидните свиньо петчасовия</Line>
+ <Line>запечени отсечена посочените</Line>
+ <Line>обознача демонични мошеничеството</Line>
+ <Line>подчиниш опичат поочупванията</Line>
+ <Line>надтичван потичваният изчезнехме</Line>
+ <Line>спазматичен надтичана чепатостта</Line>
+ <Line>чатнехте зачетената систематична</Line>
+ <Line>мошеничестването мачтовото засичаното</Line>
+ <Line>мъчняна метафизичното безчинствано</Line>
+ </Level>
+ <Level>
+ <NewCharacters>цю</NewCharacters>
+ <Line>отцепница изцапвано нацупените</Line>
+ <Line>цевите ценните животописци</Line>
+ <Line>спътницата сензационности пациент</Line>
+ <Line>цапаният нацепяно цапнехте съсипница</Line>
+ <Line>сегментацията изюденото мишници понацепеше</Line>
+ <Line>мюфтия ампутации цапваното</Line>
+ <Line>навигационно нацупехте дванадесетостенници</Line>
+ <Line>интуицията имитации отцепничеството</Line>
+ <Line>седмоцветният ценностна нацепяне възнаците</Line>
+ <Line>новаците афганистанци воденици</Line>
+ </Level>
+ <Level>
+ <NewCharacters>йъ</NewCharacters>
+ <Line>съхнах напъдят пъпчасаме дъгите</Line>
+ <Line>спихтосайте съединеното измъчената</Line>
+ <Line>възстановяхте буйствуван звънтежът</Line>
+ <Line>смайвано сбъдваме мъжовото обайването</Line>
+ <Line>невъзпитанието извехтявайте поогъван</Line>
+ <Line>настудувайте гъсто отпечатайте назобвай</Line>
+ <Line>наемайте заживей сдъвчат загъна</Line>
+ <Line>дойда бушменът списъчна папизъма</Line>
+ <Line>несъответственият запознавай бездейният</Line>
+ <Line>подсъден задънвания пясъчния</Line>
+ </Level>
+ <Level>
+ <NewCharacters>абвгдежзийклмнопрдтуфхцчшщъьюя</NewCharacters>
+ <Line>нахапващата смогвам френетична изщипвана</Line>
+ <Line>раздаваш изпивайки слъгани сивожълтият</Line>
+ <Line>боцваш боядисаше изпразвайки</Line>
+ <Line>орлова притиснаха дънерът оковял</Line>
+ <Line>многожелана окастрящ стъкмящо убеждаваща</Line>
+ <Line>фалирал затвърдеелия понакапван</Line>
+ <Line>изпламтяващият изпръсквахте дисквалифицирано</Line>
+ <Line>зяло деинициализирал доизслушващо</Line>
+ <Line>побиранията умопомрачен изприщваната</Line>
+ <Line>сплъстяват пренебрегваната повишила</Line>
+ </Level>
+ <Level>
+ <NewCharacters>,.</NewCharacters>
+ <Line>,. ж.а мтп, , е, , ,а ,а</Line>
+ <Line>,йб йб, чи, ж.а ж.а йб,</Line>
+ <Line>сшй, ,йб ,вь чге, ,вь ,а</Line>
+ <Line>,сзе ,сзе чи, .я ж.а ,а пчг,</Line>
+ <Line>сшй, ,йб .шр е, , чге, е,</Line>
+ <Line>м,шя ,вь , .шр .шфй .шфй</Line>
+ <Line>,вь ж.а .я .шр ш,нч ж,ет</Line>
+ <Line>пчг, ,вь пчг, ж.а .шр ,вь</Line>
+ <Line>йб, , ,сзе ю,ъд ,. у, жъ.б</Line>
+ <Line>,вь ф. .шфй у, сшй, ю,ъд</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/bulgarian_long.ktouch.xml b/ktouch/training/bulgarian_long.ktouch.xml
new file mode 100644
index 00000000..1474bb3a
--- /dev/null
+++ b/ktouch/training/bulgarian_long.ktouch.xml
@@ -0,0 +1,502 @@
+<KTouchLecture>
+ <Title>Bulgarian (auto-generated-long)</Title>
+ <Comment>Georgi P. Georgiev,
+joro_georgiev2001@magibg.com</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>то</NewCharacters>
+ <Line>тото ттт тотт ттт тот тот о от от тоот от ооо оооо ооо ттоо тото</Line>
+ <Line>тото тот ооо от то о тот тоот тото оот тото ттт то то от о тт тото</Line>
+ <Line>то ттт ттоо тотт от т от тото тотт от тото отт то ооо о ттто ттто</Line>
+ <Line>отт о оот ттт то оот тото оот оот от о о оот ттт оооо тоот тотт</Line>
+ <Line>то от т от ттто о т то оот то то от тоо от ооо от тоот оот то тото</Line>
+ <Line>то тоо тото ттто от от тоо ттоо отт тоо тото от то о ооо отт то</Line>
+ <Line>тот оот о тото то тотото то ттт о тоот тт ооо тото оот тоот тоот</Line>
+ <Line>тт тоот ттоо оот тот отт т ттт от оооо то ттто отт от ттт то от</Line>
+ <Line>тт ооо тот тто от от то отт то то то ттоо ттоо тото ттто ттт тото</Line>
+ <Line>тоо тотото оооо оот от то оот тотото тото тоот оооо оот оот тт тот</Line>
+ <Line>о ооо ттт оот отт то тото о то тотт ттто то оооо тото тотото от</Line>
+ <Line>тото ооо о ооо то оот тотото ттоо оооо от то тто тто тот то ттт тото</Line>
+ <Line>оот т то тоот от тотт о от тто о тоо от от от то ттто тотт тоо от</Line>
+ <Line>т ооо о ооо оот отт тто тото оот ооо то то оот ттт тто тот тоо</Line>
+ <Line>то отт тот от тото о ттт ооо тото то тотото тото то ооо то о оооо</Line>
+ <Line>тто т то оот тт тто тото тоо тто тотото то то тот тто тотт т ооо</Line>
+ <Line>то оот тото то ттто тотт оот тото оооо о тт оооо оот ттто тоо тто</Line>
+ <Line>ооо тото то оооо то о ттт о тотото то ттт ттоо ттт тот ттт ооо ттто</Line>
+ <Line>тоот от тоот о оот оооо то ттт то ооо от ттт оот то тото тт ттт тоот</Line>
+ <Line>то ттт ттоо отт ттоо от то о тотт тоо ттто то тт оот ооо от оооо</Line>
+ <Line>от от тоо тот ттто ттто ооо т тоо от ттоо оот то ттт тотото тоот</Line>
+ <Line>от тоот оот оот тото оооо оооо то от ттоо тотт оот т то ттт от</Line>
+ <Line>ттто ттто то отт ттт то тт тоо тотт оот оот ттт ттт тото тото оооо</Line>
+ <Line>ттт то оот о т тото то от ттоо оот то от о от ооо тто тото тоот</Line>
+ <Line>ттто тото оооо тоот то тто от о ттт тт оооо от оот оот тото ооо ттто</Line>
+ <Line>ттт тоо то оот оот то о от отт ооо то отт ооо отт тот то тт тотт</Line>
+ <Line>то тто от ттто то тоот от оооо от о тотт оот тоот ттт тот оот оооо</Line>
+ <Line>ттт оот тто ттоо от то тото ооо ттто о оот ттт оот ттоо оот то от</Line>
+ <Line>от ооо то оот ттт т ттоо от тотото о ттоо от тт оот то тото тотт</Line>
+ <Line>оот то оот ттто тот тото оот то ттт т тто оот оооо от ттоо ооо от</Line>
+ </Level>
+ <Level>
+ <NewCharacters>на</NewCharacters>
+ <Line>тона на нотна тантотата ат тантота нотата но на нота но но ат та</Line>
+ <Line>тантота тантота но таоо тантото нотата тотата тао ата ат а танто оа</Line>
+ <Line>на та нотата нотно тона тантотата на но нотната тао нотна но ата</Line>
+ <Line>тао тао нотна тантота тантотата ан но ан ан ан ан ат танто тон тон</Line>
+ <Line>нота тао на тантото но ан та нотата оа та та а тона таоо тона нотата</Line>
+ <Line>тао та а ат ата тантота нотата а ат на нотното на нотата нотна тона</Line>
+ <Line>нотно тотата ат но а ат танто нотното ат оа ат тао тона ат а на тантото</Line>
+ <Line>ан та та но тотата нотната танто нотната но ат ат тао тота оа но</Line>
+ <Line>но та таоо тантота тао нотна но а нотна но ата нотата но тон тотата</Line>
+ <Line>оа нотата тао ат ат та нотата ат но ан тота тантота тота тон нотната</Line>
+ <Line>тотата тантота та нотното танто ата на нотното тантота тантота тантото</Line>
+ <Line>но та но тон тота танто а а тао нотното тантото танто тантотата</Line>
+ <Line>но на но тота тотата на но нота ат нотно нотно тао ат тантотата</Line>
+ <Line>но нотно нотно тон тотата тотата на нотното нотна тона но но та</Line>
+ <Line>нотната ат а ан танто тантота но нотата нотно но нотна тантото ат оа</Line>
+ <Line>но нотно нотното но тотата таоо оа ат ан нотното ат но тотата тантотата</Line>
+ <Line>ат таоо танто та таоо та танто тота тона нотна а а та а ат ат нотното</Line>
+ <Line>ан ата ат но нотно но нотна нотното нотно тона но а на нотата тота</Line>
+ <Line>тотата но но та нота тона тона тантотата на на та нотата нота тона</Line>
+ <Line>таоо ат на но нотно тота нотното но а на та таоо ан на нотната но</Line>
+ <Line>ат танто ат нотно но оа тантото тантото нота таоо но нотата ата</Line>
+ <Line>таоо но ат тон нотно а а а тантото нота нотното та ат ат тон а ата</Line>
+ <Line>нотната на ат танто та нотата нотна нотно нотната но оа тантотата ат</Line>
+ <Line>нотно нотно но ат та тон но тантото нотата на танто тон тон ата та</Line>
+ <Line>а ата тота но тантото та нотното ат нотно тантотата тантотата</Line>
+ <Line>нотата ат тантото на но на тон а тота тотата ат на тон таоо оа на та</Line>
+ <Line>тао нота тона нотата нотното та таоо ат оа но ат нотното нотата</Line>
+ <Line>но тао но тон та но нотното тао нотна нота тона ата тантото та</Line>
+ <Line>та нота тота ат ат тао ат нота а тота та тота но таоо но нотата</Line>
+ <Line>на на но но тона ат нотно а тао нотната на тота нота ат но на а</Line>
+ </Level>
+ <Level>
+ <NewCharacters>вя</NewCharacters>
+ <Line>явяваната таванното вято явявано тонов това явното явявано явно ваят вота</Line>
+ <Line>отава навяваното навявана ята явяваното ятата овонявана овонявана</Line>
+ <Line>воняно ята явя отвяваното вя овято тонова вята отвято ята овоняваната</Line>
+ <Line>онова явно ново навят вята това навят отвявана овя отава таят навяваното</Line>
+ <Line>отавят таванна това вятото воняна таванната овятата овонява овято твоя</Line>
+ <Line>ята отавата тонова навятото навято навяваната вя вятата отвявано</Line>
+ <Line>тава воя овя отвявана вята вя вота отвятото ваната отвява тонова</Line>
+ <Line>ято таванното вана ято тонова твоят явявана отвяват нов наново ятата</Line>
+ <Line>тоновото воят навоя вая вонян това вонята ват воя това вонят навоя тя</Line>
+ <Line>овонява твоята аванта отвяват воняна навявано навяваната таван отвявана</Line>
+ <Line>ятата тая тавата нова навятото тоновата тавана явно отвя вонята овонява</Line>
+ <Line>воня навявана навята воя явяваната овято таванна вято отвято отавят</Line>
+ <Line>явяваното тая оная ваят вят ятата овятото овят воняната отавят ято овоняван</Line>
+ <Line>овята отвятата вя овонява тавата отново вата явяваното вонята вя навятата</Line>
+ <Line>тоя отвяваното ново навя воня явявана навяваното навоя тавана таван</Line>
+ <Line>тая таванно вя тонова вая оня отвяваната навяват вято отвявано отвявана</Line>
+ <Line>овонявана отвятата вя отавят отавя тонова в воят твоя в вятото явява вятото</Line>
+ <Line>твоята нова воняно таванно тавана воят воняно овонявано воняна овятото</Line>
+ <Line>явявано вота явно отавят таван нова явяваното овятата тонова явя тавата</Line>
+ <Line>отава ваната ново я явяван навято тая овятото отвятата овонявана явна</Line>
+ <Line>явявано нов отвята воняна тоновото явната явно твоят твоят тоновото</Line>
+ <Line>таван овоняват отвятото отвя овято таванно вая отвяваната овята явно</Line>
+ <Line>воняно таванно вятото овято вая явната навяван нова навявано тоновата</Line>
+ <Line>отвятото вота явното таванното ятото овя явявана воя отавя овонявана</Line>
+ <Line>отавят навята овятото вана отвятата отвявано таванно явявано вонян</Line>
+ <Line>явното отвявана нова воят воня овятата нова вят вятото овонява навявана</Line>
+ <Line>вата овятата тая тая овят в нова явят явяваната отвятата оня вонян</Line>
+ <Line>отвяваната авантата вота вонята овонявано авантата навоя вот отвявано таванно</Line>
+ <Line>новото отавата навята отвят отава явна ята навоят в овоняван отвявана</Line>
+ <Line>воя вят авантата вонят явява отвяват ятото воняно навяваната тоя</Line>
+ </Level>
+ <Level>
+ <NewCharacters>м,</NewCharacters>
+ <Line>намятам ма вмятана отмотана мотота отмотаят намятано мотам омотаното</Line>
+ <Line>намотаван омаяното маят мотота мятано отмотаното няманата ям намотаваната</Line>
+ <Line>момя мат омотавана атомно тамяна атомното мотано мятаната моят нямат</Line>
+ <Line>няманата маята намятат мама мотая матов яма намотавам мамата мотаят атомната</Line>
+ <Line>мотаното матовата отмотаното мантото ватмана мама намятат ватмана омаяно</Line>
+ <Line>маят нямам атомната няманото отмотаваната вмята няманото намятам</Line>
+ <Line>намотана автономната намотава мотаната атомна отмотават мотото няма отмятат</Line>
+ <Line>отмотават натаманяваното омотават натаманяваното автономното омотаван</Line>
+ <Line>омотан омотаваното омотаван момя омотаваната автономна ватмана омотавана</Line>
+ <Line>мотая намотавано отмотават мантата намятам намотавам мотат оттам мотана</Line>
+ <Line>яма мата монотонна маят мятана омаян намятаната момяното тамянов</Line>
+ <Line>момяната намотава отмотават вмятана отмотано манна намотано ватман атом</Line>
+ <Line>монотонното омаят омотавано атаман тамянната маят маната вмятана мята няма</Line>
+ <Line>тамянов намята отмяната намятан отям мотаната отмотаваната намотавана</Line>
+ <Line>намятана омаят отмота мотая отмятам автономната вмятам атома омотаваното</Line>
+ <Line>мотая атаман монотонно намотавам мото омотава матовата монотонната</Line>
+ <Line>ватмана монотонна намятана намотават матов момяна отмятам анатом намотават</Line>
+ <Line>тамян анатом мамон намотавана там омотано натаманяваното натаманяваната</Line>
+ <Line>мотота натаманяван намотаното няманото тома отмотано омотавана намотан</Line>
+ <Line>натаманявам натаманяван тамяновото намята монотонната мотая мотам натаманява</Line>
+ <Line>монотонната момяна атома отмятан манта намотаят автономно отмотаят намятат</Line>
+ <Line>тамянова ватмана мятам мотано мотото омотан натаманяваното вмята няма</Line>
+ <Line>наям нямат монотонна намотаната мотана омотавам автономната отмотава</Line>
+ <Line>атамана омотавано мятан омотавано натаманяват моя отмотавам отмотана</Line>
+ <Line>няманата нямо натаманят намота маята манна отмотавам нам мятана мятаното</Line>
+ <Line>отмотаното там намотава намотавано монотонното намотаваното атаман омотан</Line>
+ <Line>нямана ням матово натаманява маят тамянна момя мая мятат мамона мотана</Line>
+ <Line>автомата вмятан отмотавана яма автономното намотано мамон монотонната</Line>
+ <Line>намотавано автономното няманата намотават отмотаваното вям намотавам намотавана</Line>
+ <Line>вмятано мата монотонното отям отмотано омотано мама атаман мат мамона</Line>
+ </Level>
+ <Level>
+ <NewCharacters>хш</NewCharacters>
+ <Line>охната тяхна шавваш яхнатата наша воняха воняха шавано навяхвана яхваха</Line>
+ <Line>охвана тяхното автохтонното шахтовото нахвана шашма махово нахванаха</Line>
+ <Line>ха охнато махнаха махвана омотаваш отмотаваш ваша шавна шаха охотната</Line>
+ <Line>охнат таях шантава нямаха навяхвам махна охваната шахмат яхам отвях</Line>
+ <Line>махва маншон шаввам ахатовата навяхвах автохтон навяхваната шахматното</Line>
+ <Line>яхнатата ахваната шахтова вонях охваното шавах отмахвах яхнат омотах</Line>
+ <Line>отмахват отмахвам овяха аншоатата яхана яхната шамана шашаво махваното</Line>
+ <Line>шахматно хм аншоато навяхвам шават тяхно яхваното яхнато отмахнатото</Line>
+ <Line>махово ахвам аншоа вахтово аха охотна яха шантав нямаш хомот махова</Line>
+ <Line>махваното маншон натаманяха охотната махвам шахматна намотаваш шахмат</Line>
+ <Line>ваша яхват шавваха ваяха махваха махнах охнах охвам махваното хаван</Line>
+ <Line>манша шавано шавнатата яхвана навяхваното шантаво отмахван махната</Line>
+ <Line>яхван махваната натаманяваш навяхвам охваш хваната махнат аншоата</Line>
+ <Line>шавван вмятах охотна шашнатото тях махов автохтонното шашмата охотата</Line>
+ <Line>отмятах шахмат охваха ахан яхвана шавва хванат ахам шахматна ахваха</Line>
+ <Line>явяха наша яхтата махнатата тамошна отмахвано хаван хваната намяташ</Line>
+ <Line>яхнах автохтонно нахвана шаввам навяхвана намотаха охотното шавнатото</Line>
+ <Line>яханото маяха ваш навяхваната маях нямах маях шахматната момях тяхна</Line>
+ <Line>яха навяхваш аншоа ахах шах яхвам шавват отмахнаха шахтовата шаваха</Line>
+ <Line>шаввах охна машата хавата махнаха яхваната ахаха шантава шахмата аншоато</Line>
+ <Line>хан шаваш нахваната охван охотата шаввано хвана навяхваното махвана</Line>
+ <Line>шавват нямаш тамошно махова тях охваното шашната вмяташ маша охотно</Line>
+ <Line>навяхваш охна тяхната шавнатата отмятаха ахвано хванатото хава яханата</Line>
+ <Line>мяташ тях шашавата нахванат нямаха яхнато ахваното махната ахат таяха</Line>
+ <Line>охнато махах яхвам ахат шаваха таях хванатото махван охнатата отмахваното</Line>
+ <Line>ваша охваното яхнаха махнатото махваната хава автохтонно вахтов яхам</Line>
+ <Line>яхнатата шашавото отмахват аханото ох нахванах яхан аханото аха натаманяваха</Line>
+ <Line>овяха ханш шахтов шахтово яхах нахвана навяхвам отмотаваха ахвах охна</Line>
+ <Line>охва мятаха навяхвана отмахнах охваха шаваш момях вях яхнатата явяваха</Line>
+ <Line>отмахва махна отмотаха шахтов шахматната омотавах шавнат хм шаввах хомот</Line>
+ </Level>
+ <Level>
+ <NewCharacters>съ</NewCharacters>
+ <Line>настават сватосах смаян соваш смята сън схванато въставаното настоявам</Line>
+ <Line>савана втасват съмнявам осява всявам ананасът сомов отстояваха моста</Line>
+ <Line>смятан снасяно хаоса вносна въставано насмяха наносваната масов совано</Line>
+ <Line>смътността стотното настоят всяват схванах втасам наставано стъмнявана</Line>
+ <Line>вън наставано съмняват смотаваната осяваха сомово хасната настоявано</Line>
+ <Line>стана свъсвам самотното настаняват смята тъмнота тостът стотна основана</Line>
+ <Line>осяваното сова снована основавах остана сама мътят втасват ханства отсъстваш</Line>
+ <Line>носът отсъстваха сънна сносното отсъстваната ставаш осявана свястнота</Line>
+ <Line>сносно сонатното основна смахнатото място смян стъмвана съмната насновано</Line>
+ <Line>настояват основават сватовството съсъхван наставаната стотната отмъстяваха</Line>
+ <Line>смотаван снасяната въвонявано осъмвам съсъхваната останаха насято шанс</Line>
+ <Line>осното насяваната ананасово сватово сатно осъмвах настаняват маносаха</Line>
+ <Line>тъмнота новоосновано маносаш сама мастното състава смотах сношава хомотът</Line>
+ <Line>всято сватовството маносваната съхна сатана съсъхнатото смотаят нанася</Line>
+ <Line>смятана мътност свъсвах всявах стаяха мътняха шанс наставяна смотаят</Line>
+ <Line>сватовство тъняната свъсват маст свъся съсъхнато хостът съхнато сам ставах</Line>
+ <Line>внасян ставното отсъствано осъмнаха основавана отсята съхнато отсам</Line>
+ <Line>нанос станаха ставаната снасяно наносят въвонявах тъмното нанасям</Line>
+ <Line>ставата сова стават сованата ясна схванатата аванса мъхавостта навъся</Line>
+ <Line>стаяха монотонността аванс съставяното основна тъмняно наставаха смахнато</Line>
+ <Line>осяваната снасям схванатото сованата маносаха осмя соват свъсваното свъсваха</Line>
+ <Line>отнасяна вън стъмван нася наставяно настана снахата основна настояваха</Line>
+ <Line>соваха отсявах аванса сватосах смотая смахнатото свъсва насноваван</Line>
+ <Line>осята сънно съставно стомната наноса мъхавата оставят отсам монотонността</Line>
+ <Line>отстояваната въвоняха сносно маносваш самотно осната смотавам основаваш останах</Line>
+ <Line>сношават насявах нас сватосано стана ханъма остават стоманата вноса хаосно</Line>
+ <Line>отъняваха съмна навъсвано тънатото анасонов осмата вас маносаното смотава</Line>
+ <Line>отсъства наставян сомът ставното смотаят отвън остана сватосваш съмвам</Line>
+ <Line>стомашната автохтонът самотата тъмата маст тъст въвоняват отмъстяваш въстават</Line>
+ <Line>смятана отсява хъша основаваш насноваваха сънната свъсваната насновавано</Line>
+ </Level>
+ <Level>
+ <NewCharacters>пе</NewCharacters>
+ <Line>тъпото спояха втасаме съешаваме тестовото напасоха пооставана оставането</Line>
+ <Line>станеха светваха снесох светотатстване нехаеше се нехае степента съешена</Line>
+ <Line>посмяването ошетване поостанете пошепване теснея тънеш омотаеше отвея попяването</Line>
+ <Line>маяхме опеят тъпеното семената мамеше понаместехме патов опасваме встъпена</Line>
+ <Line>омесехме посеете поемеше напатвано нахапе онемяван понесяха патен помомях</Line>
+ <Line>вапсвахме схванеш наметен отмотахте свъсеното ненаместен нашетаме ахвате</Line>
+ <Line>посместената метнех посместван повяхваш постеното автостоп напътствена сменявана</Line>
+ <Line>отъняване вмесехме помятат топваш света напеехте пъха навехнатата пасвате</Line>
+ <Line>тънем помомяхме съмвате отънявахте онемя тъпееш осеняха намятане опомняш</Line>
+ <Line>неопасано естественото навестяхме постена съответната вмятане ясеново</Line>
+ <Line>пъхне встъпената опяваме веенетата опяваха неясен автономен споменеха</Line>
+ <Line>поясняваното съпоставена наспяха сепването попеете паянтата пошепна встъпваното</Line>
+ <Line>поместят сепвахте мешат пъхтяната сменяно навъсете тъпеехме сметно патентното</Line>
+ <Line>напомняха отавеното осветявахме помамван нашепваната отмахнете спотаят</Line>
+ <Line>опетнявате посветяхте тъпеете сменявахме външен напъвах свесва смесехме</Line>
+ <Line>пометеш стеснено опетняваха степваното степането спояваме намятате свесвах</Line>
+ <Line>напоява осветеността отесняваха пошаввахте настъпената сменяването напееш</Line>
+ <Line>непохватна смееха потъваната петняхме стъпвах съпътстван опънехме отменеше</Line>
+ <Line>яхахте вехнех смесехте отпасано навесната напътваме поотместван въставане</Line>
+ <Line>поостанехте натопявахте посвестят момеят попасване сместваше пошепнехте</Line>
+ <Line>патента отместването постава опвана вметнато пошаван тестваха овесена</Line>
+ <Line>посметем съставехме съешавам панамата шестостенно напатеше пасях степаш</Line>
+ <Line>онемявах напатеното посея онемян постановяват спомням посяваната опнахте</Line>
+ <Line>стоновете схапваха вехтееха попасяха неясна попееха съпътстваното вменената</Line>
+ <Line>напатеното настъпен нахапаното пестяхме посмявахме яснеете нямаме вметнат</Line>
+ <Line>неоново емнете посвеняхте ставената помътняхме тепаме внесоха понапомнената</Line>
+ <Line>шестването шепната наех съветваха съветвана спомнената напетото посявана</Line>
+ <Line>понавестях посмесех посмее поясняваната шавнахте отпасан стенене напъхван</Line>
+ <Line>омаеше помятана пошепнаха опвах сепнеш вехт нашетаме помътняването</Line>
+ <Line>осветя намесването светяхме сепвахме сетят поташа попяваш опяваното</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ги</NewCharacters>
+ <Line>съшиваха совнатите питомна попети снимат стоенията ишиасът висиш насипаните</Line>
+ <Line>теманията стопяемостите наспиваха наминеш осмиваната свестявания понавитата</Line>
+ <Line>неохотните пенявихте пигмент анонимен сивоти напомним смотания явените</Line>
+ <Line>синапеното повисяното несвиваемостта осмостенният поевтиняното гъта няманите</Line>
+ <Line>миниите оставанията стъпваните смигвана пъти имение отеснения несъвместимата</Line>
+ <Line>стихнат мим мигван асистентите иманентното сияна емисия попит посегнехме</Line>
+ <Line>шиен стаихте многотонно гамашите попия осияваната гигантите поотпихме</Line>
+ <Line>натаманявани отместваният постения опишехте посместените гноеният тъняният</Line>
+ <Line>напиха гътнеше посвиваните несистемен списваше гаснатия погни свиване</Line>
+ <Line>многостенно съставеният свестиш напомпаните нагоеният инатене тенисния погвате</Line>
+ <Line>погнаха опитам метнатият погасван вишневите сонетите есените сегашна</Line>
+ <Line>сонетният неотгатнатия несгъстима епигонът намесени сметите поотминавания</Line>
+ <Line>поопитат осмените ваши сияние впивах отговяван наемни нашиха агнеше гневени</Line>
+ <Line>смяният смотаният гонеше синяният тъговити осиновяхте постягана попятият</Line>
+ <Line>поотвиехме системните впие стопанисванията неясности петниха спагетите</Line>
+ <Line>писаните опияняваха насмитаното съветваните многосъставен нагниваме тягостни</Line>
+ <Line>поминаваните сепията многостепенните настини отметения опипваният попипането</Line>
+ <Line>оптативния несгъстимият емнатия опипа отмитата ставени нагостявате спишеха</Line>
+ <Line>автогенният патентованият понаситим несгъваемите хегемонният нависва омитаната</Line>
+ <Line>стъмнявани наемания съответствието съпоставеният помотаните отвинтваното</Line>
+ <Line>пътешествани топовните невестин поогъваше сипваха опипаш шишовете напътихте</Line>
+ <Line>посвиваното пансионите понаместих отстинат намигане сатанинството напипваните</Line>
+ <Line>имотен авансови несъпоставими съвместимостта сготвяна снимате поминавана</Line>
+ <Line>погинато местоименно гътвахте настинем мешаният помътените посвиваната</Line>
+ <Line>стъмнения патовите настави отметнатият свестиш смесеният витаеше ангините</Line>
+ <Line>стаения настиванията помним насиняваше емвани оагнят настъпяния стопанисваше</Line>
+ <Line>пестовни поминете отменения понамотания насинеехте опомниха свитости</Line>
+ <Line>постихваният погасявана инатихме опитомяват спипането впъхваният стиснатости</Line>
+ <Line>шашавите наготвяхте самоти погването неистинен наносвани вгъната помесените</Line>
+ <Line>нависвате понавита сгъвано схапваните несъответствията отмъстявани ненависти</Line>
+ </Level>
+ <Level>
+ <NewCharacters>жд</NewCharacters>
+ <Line>ожънван ожаднеехме подставената вживях достопаметната оживеете ояден</Line>
+ <Line>подножията поводиш седнехме подхождания досаждаш надписван подвижвана вдетиняването</Line>
+ <Line>подвеждах оженвах доихте понадвесвана снижат осъдих оживяваха тонажите</Line>
+ <Line>оженвах демодета доседяната подминавана надвиснехте подпомагани навежданията</Line>
+ <Line>натъжа отсъдения подмесян всаждаха подмигнете входове подсъдните мижим</Line>
+ <Line>намножаваме ядосано невижданият понамажат иден опадвана напада надмогни</Line>
+ <Line>подновявах подновеното поопадван смъдена непосадена дотегнати досмешавахте</Line>
+ <Line>шестдесети жегвани шестдесетгодишния понадвесва надишана снадената подмамяни</Line>
+ <Line>димно осемдесетгодишен мъждивия допадания поотведеното досягаш надяждахте</Line>
+ <Line>стадион подмесването походеха смъдването ягода навдигах подмесваха доходна</Line>
+ <Line>досегнеше вядох ведомствената неживата подмамяната недамгосано домовитът</Line>
+ <Line>вдишаше вдигне отежнявате видиотиха надянатата допития дивотата довтасана</Line>
+ <Line>подгъвана погодя надписното жътва поповдиганият недоставяния навдигани</Line>
+ <Line>домиете пешеходни надвнесен ведомствено напомаденото подменяваха оженвам</Line>
+ <Line>ояжда видимият находеше надпиван отдаване тъждествена надминатите</Line>
+ <Line>шестдневна стопановеди досетено погодяват отдаден димения надвесванията</Line>
+ <Line>несамоходни надъхате походният посвидяваха подеманата едносъставните поспаданата</Line>
+ <Line>женеше седемдневна смъдваните находеше наводнят отъждествената намножи</Line>
+ <Line>нападнати осведомях въвеждат подведях подменях свидни надяване дъхави</Line>
+ <Line>снижа джоджените ожидание допипа недоядена подмине подмажеш наддаването</Line>
+ <Line>мъжовите женствени дотегнатият вдъхваме дига жегнеш невидяно поводено</Line>
+ <Line>жадняхме подгонете подмигвате медоносни понаходехме споходиха надеше</Line>
+ <Line>досятият недостигането отпадана отдъхне подвих авджиите говедо смъдяха</Line>
+ <Line>мъждян ожънеш надвнесеш димих освежавате десетдневната невежествеността</Line>
+ <Line>досягахме надавания надживяване подивяваше споходеше отводнен авантаджии</Line>
+ <Line>ядни дината оснежаваш донасяното наежвам допивания жънат житие дънестия</Line>
+ <Line>джинсовете надоихте недостижима неводната напомадеха жадняха поспаднатият</Line>
+ <Line>подвиваното сгода осемдесета дояха отежнявано подмесехме повдигнехте господстваха</Line>
+ <Line>домогнех неоженен отживявахме дамгосах омъжвани овдовяване походно господствания</Line>
+ <Line>самоподписаният достоен мениджмънта отяданото отживявани осемгодишния отводнена</Line>
+ </Level>
+ <Level>
+ <NewCharacters>фз</NewCharacters>
+ <Line>заводихме известия иззвънявахме изгаснато изживяхме изгасяни занитвахте</Line>
+ <Line>визон изпъхтяват звъннахте пиетизмът зазвъняния позамазвам заведено</Line>
+ <Line>озаптяваният изоставане иззвъним звънтяния засветихме изтопеше низше меншевизма</Line>
+ <Line>извиеха заметне засега изменяме изтипосвате назовахте задавяната пазеше</Line>
+ <Line>зехтина подзижданите отзовете изстояхме записа запявах изгасявания загаснатите</Line>
+ <Line>изместения задяван изписванията задвижваната познатостта феномен замиването</Line>
+ <Line>осезавахме заменяемия съвземах мензата позаспивам снизяхте венозната запъхтените</Line>
+ <Line>затънтеха позагазихме затънтят позапиташ замязахме доизпитата поизмитането</Line>
+ <Line>дефетизмът гъмзите отзе изваем изметем снизим изпънеше тафти извиво изпозашивани</Line>
+ <Line>затъмняваната възсъздавахме извисяваме подвозихте заявяваме заведях пояздихме</Line>
+ <Line>възсяданата зазяпате мазнати яздят изстенаните запитва заговеят възведена</Line>
+ <Line>познатостите самоизяждаш доизядяха заменимост видоизмених запенян позамазване</Line>
+ <Line>земеписни заситихме замогнатото засенени запоихме изнемогнато спазим запознаха</Line>
+ <Line>смаза изгонването засветях поизоставих застоеше папизми изявената</Line>
+ <Line>изземане позаведях записи изстинете извозвани възседнеха запозная загниеш</Line>
+ <Line>неназованото омазненият звънтя завявах заизвиванията дивизионната извинете</Line>
+ <Line>изгиваме замахването повозени изпозашивате изоставяш неизвестност доизяжданата</Line>
+ <Line>запишех земноводни спазван засениш позавяхванията изстояхте възвишиха</Line>
+ <Line>изместима оназгодишното надвзето синапизъма земята задминат посъвземаното</Line>
+ <Line>запитахме поизпихте затъжаваните засипаната занаят изгазения изстеняхте</Line>
+ <Line>засноваваните спазма затихвам завоняваните захапано заносваш доизяснените</Line>
+ <Line>позастояваното изстъпехме низост затъпявам задавените поизмесеното позагазихте</Line>
+ <Line>завзетите запасано зажаднявания поопознахте изпитахте засвоят заженете</Line>
+ <Line>замезвате иззвънете заснемеше озовавахме загасяваше видоизменихме завинтения</Line>
+ <Line>яздиш изсипеше надвземеш изседи заизвитата задянахте въззеха застенатия</Line>
+ <Line>засновавахме затъжавано подмазано задомен подзидаш овъзмездените запашем</Line>
+ <Line>педантизма мазност мизата понизяваният намазваният затънените изпитните</Line>
+ <Line>позавехнахте извято невъзпятата занижат изпошива неизяснимото нанизани зовах</Line>
+ <Line>поизменям заситнехме изваждаха дафиновият изпадна повъздъхваме названият</Line>
+ <Line>фит позагатваното изженено изпънатия създавах познаваемото завиди</Line>
+ </Level>
+ <Level>
+ <NewCharacters>уб</NewCharacters>
+ <Line>утежняна доба изсушено отпусната обиждането умесените упоиш увесват бяган</Line>
+ <Line>сдушени муханата наумявани понадуе поумняването вдухнеше недопушените</Line>
+ <Line>изсушавано неутешим обсегнехте угнивате джуджето успяхме неубедения вдовствуваните</Line>
+ <Line>ужасено нашибваме ошугавяното угаснаха вбесяваме шутове удушим споменуваният</Line>
+ <Line>обидени увежданията самоубиваното подобаваш обявения зашумена умствения</Line>
+ <Line>уясняването тупваната шупване набутвам безподобна позабогатявания подбутваният</Line>
+ <Line>пухестото изхабите понабиването досушавам удостои обожествявах избухтявахте</Line>
+ <Line>безнадеждните сби обсъдените побеседванията поопушеното фундаментна забумтяваният</Line>
+ <Line>жизнеспособен душните особите небезизвестната всеобемният обособният затупваната</Line>
+ <Line>пътешествувате обезмитите многобоя избие сусамови обадеха съумяхме утежнявана</Line>
+ <Line>зажумя пустосаш споменуваше насапунисани усвоявания бегът напуши недееспособния</Line>
+ <Line>неусетните обмениш възмутената поопушена изпсуване нашумяван заобяснявах</Line>
+ <Line>изтупванията необхватната надумваният обиждания пушим удостоената застуденото</Line>
+ <Line>ухапваме угоиш понамусех опустошено изпухтяха боднатата обеднян ухнехме</Line>
+ <Line>уединяваш захабихме насапуненото угнетим избедняваше изстудявам хубавеех</Line>
+ <Line>опустошена поизтупаните попушват бавих ентусиаста бадемов убит избития</Line>
+ <Line>безопасни обтягат доугоявания минутата издебни ступаните обясняваше уязвявахме</Line>
+ <Line>унесох убягате понадуша базисен изуването внушавахме надушения поизтупах</Line>
+ <Line>успешност бедствувате поднебесният попътуваните упоменаванията понадушиха</Line>
+ <Line>похабяваме задушаваният неутаен нашушваната бъднина пухтите обединяване</Line>
+ <Line>недееспособност ухани успешно ухаен сънуваното наумяваното бездомен побягваното</Line>
+ <Line>обнадеждавах обтягаха теменугата обезумяна намушват изшумяваха понадушеният</Line>
+ <Line>божието тупваните обеманата ужасяваха боиш снабденото поиздумваният</Line>
+ <Line>безсъмнените забутан упаднахте шибнаха убягнех опуснатият бунтувани момувахме</Line>
+ <Line>необявено жабясвахме озобат избоботехте наумиха потупван бабуини напухваме</Line>
+ <Line>бобено бизони утихването попушваш подушен напсуваните подшушнатите</Line>
+ <Line>вбият бисът обхванахме набутваните изсушената буботеното побуявана</Line>
+ <Line>бавноходна безобидна угасим необяснените сухота обзетите ухаха набождахте</Line>
+ <Line>неснабдения унизяваха смутим бутонни военносъдебният мушен усамотяваните</Line>
+ <Line>изумеше забумтяваме успеваемостите издушехме уважават вбесяваме смушения</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ьч</NewCharacters>
+ <Line>маточен озадачавахме тоничните поотучехте топчестия позасечете самобичуваше</Line>
+ <Line>умъчнените почетеното подсичахме поучавано честитяваме изучено позачудиш</Line>
+ <Line>почесани напеченият естетични печатам оттечете джобче почват астматичният</Line>
+ <Line>набучете синоптична всечени участвувана почувстванията шаячни нечифтосани</Line>
+ <Line>неотзивчиви счетоводната означехте джебчиите гаменче затичане четни заточваното</Line>
+ <Line>отсечехте титанично вечности самоизмъчената ожесточехте снегочистачите</Line>
+ <Line>участва чивиите ожесточаваше печатимо хипнотични достатъчно дупчената</Line>
+ <Line>мечтахте пъпчасано допечатваната изтъпанчвахте поучаваме опичахме домъчняваните</Line>
+ <Line>подотчетността начеват изменничество дъсчени уточнява зачесване изсича идентичности</Line>
+ <Line>подучваните опечех намъчиха непочувствуваното начевахте амонячния участите</Line>
+ <Line>отчуждения чумосаната енигматични съчувствания обучавано зафучавах подчинение</Line>
+ <Line>живачните осичано измъчването обеззвучавано интимниченията забучвани счуете</Line>
+ <Line>изпъчването дочетеш егоистични читав диабетичните натечеха изтънчиш важничи</Line>
+ <Line>неавтоматичното анабиотичните чутото мъчноподвижна увенчавана обточвана допечатваните</Line>
+ <Line>обучаваха допечати изучихме безчетни сачмата набичвани зачестеше изпъчех</Line>
+ <Line>помохамеданчват стичаните поотучваха сочената оттичано неавтентичен почудени</Line>
+ <Line>отстъпничеството мечото чифтосваното мазачи седмаче анатомичният измучиш ченгетата</Line>
+ <Line>доносничеха чиниени чудесния измъчена загадъчна засечехте самоизмъчим безмозъчното</Line>
+ <Line>дотичваш чудете надничаните заучехте демоничен самобичувахме софистична</Line>
+ <Line>понапичаше анемичният наточва чатнах измъчена вчетете изтичаш изменничества</Line>
+ <Line>затичаната съучастничете безчинстват втечниха сачми назначихме височина</Line>
+ <Line>обозначаваният почивен подочувахме доучих тематичният озвученото момче новоназначеният</Line>
+ <Line>надпочвеният почетяхме почу пандемичната типична поизмъчвах начупяно охтичавата</Line>
+ <Line>починем заченатите начитан сбабичасаната анимистичният момчетията обточех</Line>
+ <Line>подпечатват точности химичните еднопоточно означени чим астматичните четините</Line>
+ <Line>чистото стъпча погачи поизточената надничен зачуваните отточим данъчна</Line>
+ <Line>междучасието едноседмичен понадупчехте починатите обучихте мечтата означиха</Line>
+ <Line>гьон набиченото зачешехме почесва поотпочинехте понечения изменчивата</Line>
+ <Line>незаучена тичанията мошеничестват зачевате зачестяваният забатачват антипатични</Line>
+ <Line>изтъпанчвано отчуждения мъчнееха заченатата тачех намъчвам надупчваното потичвах</Line>
+ </Level>
+ <Level>
+ <NewCharacters>цю</NewCharacters>
+ <Line>изпоцапаната баджаците семенце нациста нацупя смешница понацепвам надценяха</Line>
+ <Line>неоцветна дифтонгизации циганях човеците обезценено потенции безбожница</Line>
+ <Line>дефицитен нацъфтяхте цепнехте заместниците сцепи мацваният дистанционната</Line>
+ <Line>циганяхте извоюваше съюзихме отцеждане абсциса пътешественици цапотихте</Line>
+ <Line>уютният цепнатините нацапах агитации многоценните цопнаха депутация</Line>
+ <Line>боцвах инвестиционното адаптационния геноцидите дениците тутманици</Line>
+ <Line>очевидеца цопвах замацаше водноцветни нацупено чомаци спец наставницата</Line>
+ <Line>боцнех инцидентната неамбициозната оценявана бюфетчии дупчиците отстъпницата</Line>
+ <Line>двоицата часовниците неоцветният светиците нацъфтяха субстанция ютеното</Line>
+ <Line>зацепвана двуседмичници отцепничество многоценния писецът замацаното абисинците</Line>
+ <Line>заемодавеца нацепих завоюваната нацепяни тевтонеца инсинуация циганените</Line>
+ <Line>потапници цапнатото станция понацупвах цветни сподвижницата боцнаха ушенца</Line>
+ <Line>циганосваме мацнеха изпоцапана вцепенете безинициативна шанцова изюдената</Line>
+ <Line>изцапваха нацъфтява понацупеха цапванията надценен дебютанти немецо вцепеняваш</Line>
+ <Line>цопаме цапат навигации спусъци папуняците душевадецо понацепва пестовниците</Line>
+ <Line>цеховете пигментации мацнехте детенца чуждица богоубиецо годинаците доцеждаме</Line>
+ <Line>нацупите извоюват деецът овцевъдците цианизацията понацепвате цепене</Line>
+ <Line>дъбаци обецата зъботехници цепва месеци оцветяват станционно цепванията</Line>
+ <Line>цепнете несценичния съюзете цопнатия юзът победоносец дооценявам бяганицата</Line>
+ <Line>задушниците цицнатото изпоцапваше стагнация подценявана зацапвахме агитационният</Line>
+ <Line>изюденото цапотиха оцветихме съюзяваме циментовите воюваният обезцветения</Line>
+ <Line>тупаницата меценатите абзаца обезценяваната воюва дъсчиците оценявате мистицизъм</Line>
+ <Line>ценността безценността циганени ахмаци специфичното замъците въдици паници</Line>
+ <Line>замацахме неспецифичните многоценен бунтовница цупиха замацания гъсеници</Line>
+ <Line>дисеминациите езиците нотацията многоцветно оцветите светци овце сцежданата</Line>
+ <Line>цедената доцеждаш цъфтяния цезият боцне заместниците устоцветният юначе</Line>
+ <Line>методици душицата есенции цицнати недооценяваше вегетационните самоинициативното</Line>
+ <Line>извоюваното зацепеха дюшеци понацупят боцване циментното оценяваното ясновидците</Line>
+ <Line>авансцените инициативно ницшеанствата потомци зацапате пивницата гювеча</Line>
+ <Line>бенефициенти атестационна обезценените двоиците азиатци оцветените подценяване</Line>
+ </Level>
+ <Level>
+ <NewCharacters>йъ</NewCharacters>
+ <Line>потъмнените гъне запъхтявай изхайманеше мъжденият възбудимостта въззетият</Line>
+ <Line>съединяваната пожънванията спъваните неомъжено духай съсед бедствай ганаецът</Line>
+ <Line>запустей запътвана съсичаните чистофайниците неотстъпности йон йотувахте</Line>
+ <Line>зъбеха дой възставан вдовствувай богоубиецът безсъмнения геноцидът</Line>
+ <Line>дотъчи изхайтвах въден наджънвай затънтени позвъняван съчинение изпъхтяват</Line>
+ <Line>сонетът нагнездяйте поменавайте възведем изхайтваната съмнявахме неотстъпния</Line>
+ <Line>отчитай мътят фанатизъм несгъваемият отмивайте гътай незнайни съчетано</Line>
+ <Line>тъпеехте вдъхновяваме невъзпитаното задуйте всеотдайностите изсъхваните</Line>
+ <Line>попътувания напъждания възобновяхте звънне понабъбвахме съживяваха съответстваше</Line>
+ <Line>опъваш стъмване стъпнахте идвайте звъннах тостът самодейци затънеехме</Line>
+ <Line>съвестностите несъмнено тъговития несъвместими подгъвахме затъмнения съвест</Line>
+ <Line>пъченията видиотявайте упадайте тутай напътих загъмжаваш съчетаят свиневъдци</Line>
+ <Line>стягайте напътствуваха спотайването завъдиха тъмняхте съединихте невъведено</Line>
+ <Line>съответни овцевъдът настъпвайте нехайството възмогване възсиня навой попушвайте</Line>
+ <Line>постъпван запъхтявате издънвана гъбовидна понапъпеният неизпънатия въздигат</Line>
+ <Line>натаманявайте съживите възставаше жътвата навъсвайте досвидявайте упадъчните</Line>
+ <Line>надънваната във посгъстен изпъваните запечатвайте пейзажа пъдпъдъчо позатъжени</Line>
+ <Line>свойството възобновяван отъждествихте отъждествяваната пъхнехме затъжавайте</Line>
+ <Line>тътнехме съответстват въстанатите синчецът поотдъхвайте питейно бездейства</Line>
+ <Line>подействаните съсипия отсъдехте отивайте фъстъчените дънестия навъжданото</Line>
+ <Line>взаимодействам недостатъчно възходната сеячът поопушвайте гъгнива съюзих възмогнаха</Line>
+ <Line>стягайте пъхтяно извъждайте възхитена мътняна военносъдебни зъбеното</Line>
+ <Line>потъмненото усмихвайте встъпени изгъвахте съсипеше тътнете засъхнах свиневъдството</Line>
+ <Line>пътеписите назъбваме навъди съответстванията потънах позатъжим дънените</Line>
+ <Line>йотувания звънете остатъчен затъмнее одушвай недочуй обуй съчиняване въздъхната</Line>
+ <Line>съешавай гестаповецът извий тъмносиньото навъсех пастетът съвместими</Line>
+ <Line>наобядвай поизтънявам немъжествените осъдят заотстъпването съсипаха иззиждай</Line>
+ <Line>съсичано изпънатите съчетаваме попийната сопаджийства анасонът дочупвайте</Line>
+ <Line>упойват извайваме напъхваше свойствата свиневъдството съчинен възстановявам</Line>
+ <Line>напътствуван възмездихме махвайте погубвай запъханите омайваме напъвахме</Line>
+ </Level>
+ <Level>
+ <NewCharacters>абвгдежзийклмнопрдтуфхцчшщъьюя</NewCharacters>
+ <Line>устрелвалия отбрулвате размотаваш вкочанящата ликуваното захарта преустрояваната</Line>
+ <Line>участващи наджасвалото разюздвайки неудържаната проспектите окълцвал изпотяван</Line>
+ <Line>котиралите пандемии поутолява препържех закуцвала нахълтвания навършеща</Line>
+ <Line>бронзиранията интерпелираш тарана драматургическото корковите закрещялият</Line>
+ <Line>наговореща боксуваща мотаеща монархът запираш вменяванията подпашелия жонгльорки</Line>
+ <Line>възпитателните хаитския унася скаларно изнемогнатото обърсвала иронизиращото</Line>
+ <Line>успети дисекциите славословения наставещият фосфорна запътихте понахранещото</Line>
+ <Line>епидермалният банализират дисциплинирания стоборите демагнитизирала редено</Line>
+ <Line>доизпипвахте поопарената присламчвайте бодванията изтопилия отбождане ямайско</Line>
+ <Line>предателствувалият изхайманяващия успеха значат оглупеелите просмучат мокрички</Line>
+ <Line>жигосани детониране отворел сопотската чествувалите братовчеди сближена</Line>
+ <Line>извъртвалото проумяхме помирявам смесили вписал уседявайте безчинствувана</Line>
+ <Line>изтръшкващите снабдялото изплесвайки приритващите бетонобъркачките усвояваща</Line>
+ <Line>поотваря изсушейки сбираното ваеха благодатното мяркан недискретно поостригвалите</Line>
+ <Line>прехвъркващите приправел отърчаване домъквали оглозгваща надирате соляща запрашвахте</Line>
+ <Line>рехабилитират опридащ хуквай подплатили дълбаелият архимандрити бедило наемодателки</Line>
+ <Line>формообразуваната инквизиционна устискащо разгорещяваният полягваният захабилата</Line>
+ <Line>минералогическата впрягащо пооткрехващото пробутваща свираните намацвало изчисляемата</Line>
+ <Line>обезвредяванията паразитирах заслоняващ вигващият книгообмените преситещ пораздрусваш</Line>
+ <Line>завладялата монополизираното локан углъбилото окървавящ подхвърчахме запратеше</Line>
+ <Line>диаграма поблагодарящият семенната разсъхналото намножаваното позапържехте</Line>
+ <Line>поражданият разлудявахте стратезите довявайки подплъзвала приросил непечени</Line>
+ <Line>измирисващи демодулиралия избикаляща неони мошеническо дисимилациите безумствалия</Line>
+ <Line>облажа ограбвана красноармееца приучаващата несъчувствени изтрещяло</Line>
+ <Line>оскърбящият боготворените лъщялия каци разискряната възкресяваните пресъздаването</Line>
+ <Line>цап отгатнех позакръгля неопитомената свадливости додеят възтържествуващият</Line>
+ <Line>съсъхнатата русифицирай телезрителите наплещеният разбунтувалият концентриращия</Line>
+ <Line>поизбледнява дошли сплашни пламенеещи рекогносцирало поизметялото подгизваме</Line>
+ <Line>изтрополяванията плесенясащите дръпвалия пльоснех отбиралата забълбукала разкряскваше</Line>
+ <Line>маргиналният фабрикувате продухвателна бръкната предвестяваните счесваното</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/catalan.ktouch.xml b/ktouch/training/catalan.ktouch.xml
new file mode 100644
index 00000000..ef606077
--- /dev/null
+++ b/ktouch/training/catalan.ktouch.xml
@@ -0,0 +1,203 @@
+<KTouchLecture>
+ <Title>Catalan (auto-generated)</Title>
+ <Comment>KTouch training file generated Sat Aug 23 21:40:00 2003
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>ff jfjf fj jjj ff ffjf</Line>
+ <Line>fjjj jjff ff fjj j fj ff</Line>
+ <Line>jf fjjj ff j jjj ff j j</Line>
+ <Line>ffjjf fj fjj fjjj fjjj j fjjj</Line>
+ <Line>fjj fff j fjj j jf jj ff</Line>
+ <Line>ff ff fj jj jf j ff ffjf</Line>
+ <Line>fj fj jf fff jf fff jf</Line>
+ <Line>jf fj jf ff j jf jjff jfjf</Line>
+ <Line>fjj jfjf j jf ffj fj jj</Line>
+ <Line>ffffj jjf fff fjjj ffjf ff</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>jkj k d kd jd jd fdf jkj</Line>
+ <Line>kd kf jd fd jkj fdj jd</Line>
+ <Line>dd dd fk fdk jfkj jd jkj</Line>
+ <Line>kdj ffk kf ffk jkj jkkdf</Line>
+ <Line>jd ddfkd fd jd dk dd jd</Line>
+ <Line>kdj jfkj dd jd dk jkkdf</Line>
+ <Line>djd kf fdk ddfkd jkkdf jd</Line>
+ <Line>jfk dk fk fk ddfkd fdj jkj</Line>
+ <Line>k kdj dk fdjd jd djd jkj</Line>
+ <Line>jk fdj jfkj fd fdjd k jkkdf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>laesç</NewCharacters>
+ <Line>deses sedesses sedada dese</Line>
+ <Line>efes sedada jaça sella llas</Line>
+ <Line>sedes alesses e lassesses</Line>
+ <Line>desllaçada allejada alleja llaçada</Line>
+ <Line>fase alejades ells salses</Line>
+ <Line>jaç falles sedasses dallades</Line>
+ <Line>dessal alfes salda sedal alleja</Line>
+ <Line>ajaçades fes fesa dallades all</Line>
+ <Line>faç lesa e fallades falsada</Line>
+ <Line>llaçada alleja faldades ells</Line>
+ </Level>
+ <Level>
+ <NewCharacters>coss</NewCharacters>
+ <Line>alfalsos falles caldejades collesses</Line>
+ <Line>lesos cossesses fosses sassolada</Line>
+ <Line>assolda sedes defeco salles</Line>
+ <Line>assolelles aflacada focs llocs</Line>
+ <Line>aclofesses follejada escada escodole</Line>
+ <Line>escasseja celles sassolades ells</Line>
+ <Line>acloca dessolcada solaçada</Line>
+ <Line>desllaça esclafada locals flaca</Line>
+ <Line>cesses assolada deso salla</Line>
+ <Line>assolades ecs callols colcada</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ntàèé</NewCharacters>
+ <Line>encasant flotà llastesses sotalades</Line>
+ <Line>faldejat desenastes tonants sadollà</Line>
+ <Line>encastés onejants estassant escalena</Line>
+ <Line>socons defensessen ajocant</Line>
+ <Line>entenc desset fosfatant escandesc</Line>
+ <Line>tascàs lesenes desdono acanalesses</Line>
+ <Line>cassanells desencastessen assestà</Line>
+ <Line>estacades esfèns telà asson delatessen</Line>
+ <Line>descloent tantejat sedàs desolessen</Line>
+ <Line>assesto descontentats atans</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ívrr</NewCharacters>
+ <Line>florada acontentar arrosarà</Line>
+ <Line>estotara escaloní acatarrares</Line>
+ <Line>enverdescades corallejaran versessen</Line>
+ <Line>desvalorara centellejara cavallares</Line>
+ <Line>desfasar afrontares relaten estavellaren</Line>
+ <Line>desenrola destacaràs entretocaran</Line>
+ <Line>afalconarà enveraven safraneres</Line>
+ <Line>concerní trastocàs rosos covaré</Line>
+ <Line>enrastelle concentrats escodarà</Line>
+ <Line>alforres casí descolorar corredores</Line>
+ </Level>
+ <Level>
+ <NewCharacters>meó</NewCharacters>
+ <Line>somortes falsejaríem mort amanollí</Line>
+ <Line>cerví entravessat escalafons</Line>
+ <Line>ensofrant retrec masera forjaves</Line>
+ <Line>comeses estotjaríem amom reforcéssem</Line>
+ <Line>recosíem esfèn telecomandam destorçara</Line>
+ <Line>atendaves amorteràrem envejàvem</Line>
+ <Line>avolesa soterrat entotsolar</Line>
+ <Line>retardarem asserenament venerarà</Line>
+ <Line>desossés malmesclant llefardaríem</Line>
+ <Line>armoll declamares terçades</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hrü</NewCharacters>
+ <Line>rastellesses desenfarcellar forçat</Line>
+ <Line>anhelant lletreres remara decoloraràs</Line>
+ <Line>desarraconara tercers defenestrà electromotor</Line>
+ <Line>mofaran amorejar desencrosta</Line>
+ <Line>torcejarà trontollí encercolàs</Line>
+ <Line>esfondrades falcar recomanaríem</Line>
+ <Line>raso francmaçones assamarrarem</Line>
+ <Line>fondejares rondara entrenàrem marradejava</Line>
+ <Line>malserví emmerletem amorfes afartesses</Line>
+ <Line>desacorralen feren remarcàs assamarrades</Line>
+ </Level>
+ <Level>
+ <NewCharacters>goï</NewCharacters>
+ <Line>rotífer maregés colltorcerà</Line>
+ <Line>desgravat vagassegés torcejam</Line>
+ <Line>conhortades honorares comarcans</Line>
+ <Line>escassegesses clatellejo afetgegares</Line>
+ <Line>deshonrívol lladrons atemoríssem</Line>
+ <Line>astoraments remodela moradís tascones</Line>
+ <Line>realegrarem coratge ondegí assessoressen</Line>
+ <Line>correlant enjogassadament escaroten</Line>
+ <Line>conversegéssem canonéssem marcegem</Line>
+ <Line>desgleve desassossego torcada</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bpl·l</NewCharacters>
+ <Line>desenrojolaran clamoregí debategar</Line>
+ <Line>aborronarem encrespàvem engolfem</Line>
+ <Line>capejat desemmerletara coralets</Line>
+ <Line>peonarà llocota apressats espentejada</Line>
+ <Line>espantàvem desmesclà bregares embascat</Line>
+ <Line>deportesses desborrats celebrador</Line>
+ <Line>escarpís esparpallats gansallant</Line>
+ <Line>premsat abalançaríem solvataràs</Line>
+ <Line>desempotés ponderàs angolesos anteposant</Line>
+ <Line>ensellarà enllaçaves sorollarem</Line>
+ </Level>
+ <Level>
+ <NewCharacters>quny</NewCharacters>
+ <Line>cadascuna esbrotonàrem enfadaríem</Line>
+ <Line>falsejàreu endolau condolgué arrengàveu</Line>
+ <Line>envellutaves nannaran tondosaré esbarrejaren</Line>
+ <Line>duraren mullena atapeísseu negrós</Line>
+ <Line>embrearan cananeu esbatuda camandulejàreu</Line>
+ <Line>pampalluguegesses empaquetàrem trafeguegesses</Line>
+ <Line>rafegut descabdellaríeu tufejat</Line>
+ <Line>destrenant assuaujares malmetent</Line>
+ <Line>conjuréssem ultratgésseu destrempaven</Line>
+ <Line>gallofejaren desoleu caçaven confessarem</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wncc</NewCharacters>
+ <Line>esbatanésseu ensangonem embargaments</Line>
+ <Line>contraforadí emmorcarem acamussades</Line>
+ <Line>desatrac desencarregara provaven</Line>
+ <Line>asserenaràs regentats escopetejà</Line>
+ <Line>desaccentuarem entrava asserenaran</Line>
+ <Line>transsudeu acorralares rascladors</Line>
+ <Line>ulceraràs desempresonar octants</Line>
+ <Line>cèmbal copejament recalçar</Line>
+ <Line>catenes desenllosàveu enforno</Line>
+ <Line>vencereu cessa bastonera promoguessen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cx</NewCharacters>
+ <Line>cuafí contrapassar desencerclades</Line>
+ <Line>escarufejau clatrats camuflau crestejaríeu</Line>
+ <Line>entretancarà gronxolàvem dutxaré</Line>
+ <Line>penedesc coneguem enxarxant corcares</Line>
+ <Line>escorçaràs cornésseu carburares</Line>
+ <Line>percaçàrem garfesc covers malencertam</Line>
+ <Line>encomanés recomencesses caganer</Line>
+ <Line>corejat falconers afermancéssem</Line>
+ <Line>educo malmesclaran escarxàveu</Line>
+ <Line>entrebancaven cabestro rebec desencastaren</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yz</NewCharacters>
+ <Line>anyenca escanyoten grunya muntanyosos</Line>
+ <Line>embotzegam zumzejades enlleganyaren</Line>
+ <Line>embotzegàs esmorzades complanyesses</Line>
+ <Line>allenyats escanyussàs ressenyéssem</Line>
+ <Line>desentranyau benzofurans manyucléssem</Line>
+ <Line>brunzo besunyareu assenyaléssem</Line>
+ <Line>menyscabaven desenfonyara embotzegaríeu</Line>
+ <Line>magatzemera escarcanyada areny pertanys</Line>
+ <Line>despanyades estrenyereu embanyat</Line>
+ <Line>empenyalats desenyoraràs polzejàveu</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>Sorells Masos Campdevànol Montenegro</Line>
+ <Line>Iraq Cabanelles Camarasa</Line>
+ <Line>Macra Bompàs Laurentí Ix Salamanca</Line>
+ <Line>Urgell Armenter Justa Agatocles</Line>
+ <Line>Marçà Catral Massalfassar</Line>
+ <Line>Alda Paulí Anselm ESE Montlluís</Line>
+ <Line>Alfafar Sorollera Bolonya Leandre</Line>
+ <Line>Oxford Valença Sagàs Esdres</Line>
+ <Line>Isaura UPV Roger Aneto Corbera</Line>
+ <Line>Esteve Bulaternera Conflent</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/danish.ktouch.xml b/ktouch/training/danish.ktouch.xml
new file mode 100644
index 00000000..9b4ac5d2
--- /dev/null
+++ b/ktouch/training/danish.ktouch.xml
@@ -0,0 +1,1178 @@
+<KTouchLecture>
+ <Title>Danish (complete course)</Title>
+ <Comment>Træningsfil udviklet af
+Gunther Strube, gstrube@tiscali.dk og
+Anja Lysholm, anjal@danbbs.dk, April-Juli 2002
+
+Baseret på:
+ &quot;Lær maskinskrivning i Folke- og Ungdomsskolen&quot;
+ Kamma Jensen &amp; Jytte Møller
+ ISBN 87-17-02200-2
+
+Program udviklet af Håvard Frøiland
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>Lektion 1. Grundstilling: asdf og jklæ</NewCharacters>
+ <Line>fff jjj fff jjj fff jjj fff jjj fff jjj fff jjj fff jjj</Line>
+ <Line>ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk</Line>
+ <Line>fff jjj ddd kkk fff jjj ddd kkk fff jjj ddd kkk fff jjj</Line>
+ <Line>fff jjj ddd kkk fff jjj ddd kkk fff jjj ddd kkk fff jjj</Line>
+ <Line>fjdk fjdk fjdk fjdk fjdk fjdk fjdk fjdk fjdk fjdk fjdk</Line>
+ <Line>aaa æææ aaa æææ aaa æææ aaa æææ aaa æææ aaa æææ aaa æææ</Line>
+ <Line>sss lll sss lll sss lll sss lll sss lll sss lll sss lll</Line>
+ <Line>aaa æææ sss lll aaa æææ sss lll aaa æææ sss lll aaa æææ</Line>
+ <Line>aaa æææ sss lll aaa æææ sss lll aaa æææ sss lll aaa æææ</Line>
+ <Line>aæsl aæsl aæsl aæsl aæsl aæsl aæsl aæsl aæsl aæsl aæsl</Line>
+ <Line>aæsldkfjdkslaæsldkfjdkslaæsldkfjdkslaæsldkfjdkslaæ</Line>
+ <Line>aæsldkfjdkslaæsldkfjdkslaæsldkfjdkslaæsldkfjdkslaæ</Line>
+ <Line>lak kaj sæd fæl aks las dæk sad læk sæl sal dal jas</Line>
+ <Line>lak kaj sæd fæl aks las dæk sad læk sæl sal dal jas</Line>
+ <Line>lak kaj sæd fæl aks las dæk sad læk sæl sal dal jas</Line>
+ <Line>laks skal kald skaf kaja saks sjæl klæd slæk fjas kælk</Line>
+ <Line>laks skal kald skaf kaja saks sjæl klæd slæk fjas kælk</Line>
+ <Line>laks skal kald skaf kaja saks sjæl klæd slæk fjas kælk</Line>
+ <Line>falsk sjask skala flæsk skjald afkald lakaj kajak aflad</Line>
+ <Line>falsk sjask skala flæsk skjald afkald lakaj kajak aflad</Line>
+ <Line>falsk sjask skala flæsk skjald afkald lakaj kajak aflad</Line>
+ <Line>sæk kæd alf læs kala lajka affald sjakal kasak jaffa</Line>
+ <Line>sæk kæd alf læs kala lajka affald sjakal kasak jaffa</Line>
+ <Line>sæk kæd alf læs kala lajka affald sjakal kasak jaffa</Line>
+ </Level>
+ <Level>
+ <LevelComment>(venstre 3 finger; fra 'd' til 'e' og 'd' til 'c') (venstre 2. finger; fra 'f' til 'b')</LevelComment>
+ <NewCharacters>Lektion 2. Nye bogstaver: ecb</NewCharacters>
+ <Line>fbf fbf fbf fbf fbf fbf fbf fbf fbf fbf fbf fbf</Line>
+ <Line>dcd dcd dcd dcd dcd dcd dcd dcd dcd dcd dcd dcd</Line>
+ <Line>ded ded ded ded ded ded ded ded ded ded ded ded</Line>
+ <Line>fff jjj ddd kkk fff jjj ddd kkk fff jjj ddd kkk fff jjj</Line>
+ <Line>aaa æææ sss lll aaa æææ sss lll aaa æææ sss lll aaa æææ</Line>
+ <Line>fjdkslaæ fjdkslaæ fjdkslaæ fjdkslaæ fjdkslaæ fjdkslaæ</Line>
+ <Line>abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef</Line>
+ <Line>abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef</Line>
+ <Line>abcdfe abcdfe abcdfe abcdfe abcdfe abcdfe abcdfe abcdfe</Line>
+ <Line>bede bjælke bakke bede bjælke bakke bede bjælke bakke</Line>
+ <Line>bede bjælke bakke bede bjælke bakke bede bjælke bakke</Line>
+ <Line>bede bjælke bakke bede bjælke bakke bede bjælke bakke</Line>
+ <Line>celle decca bjælde celle decca bjælde celle decca bjælde</Line>
+ <Line>celle decca bjælde celle decca bjælde celle decca bjælde</Line>
+ <Line>celle decca bjælde celle decca bjælde celle decca bjælde</Line>
+ <Line>beklæde daske kælk beklæde daske kælk beklæde daske kælk</Line>
+ <Line>beklæde daske kælk beklæde daske kælk beklæde daske kælk</Line>
+ <Line>beklæde daske kælk beklæde daske kælk beklæde daske kælk</Line>
+ <Line>kalde ballade blæse kalde ballade blæse kalde ballade blæse</Line>
+ <Line>kalde ballade blæse kalde ballade blæse kalde ballade blæse</Line>
+ <Line>kalde ballade blæse kalde ballade blæse kalde ballade blæse</Line>
+ </Level>
+ <Level>
+ <LevelComment>(venstre 2. finger; fra 'f' til 'g') (højre 2. finger; fra 'j' til 'h') (højre 3. finger; fra 'k' til 'i')</LevelComment>
+ <NewCharacters>Lektion 3. Nye bogstaver: ghi</NewCharacters>
+ <Line>fgf fgf fgf fgf fgf fgf fgf fgf fgf fgf fgf fgf</Line>
+ <Line>jhj jhj jhj jhj jhj jhj jhj jhj jhj jhj jhj jhj</Line>
+ <Line>kik kik kik kik kik kik kik kik kik kik kik kik</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>hagl cif hagl cif hagl cif hagl cif hagl cif hagl cif</Line>
+ <Line>sled bæk sled bæk sled bæk sled bæk sled bæk sled bæk</Line>
+ <Line>illegal kaglede silkeslag illegal kaglede silkeslag</Line>
+ <Line>illegal kaglede silkeslag illegal kaglede silkeslag</Line>
+ <Line>illegal kaglede silkeslag illegal kaglede silkeslag</Line>
+ <Line>chik check hellas chik check hellas chik check hellas</Line>
+ <Line>chik check hellas chik check hellas chik check hellas</Line>
+ <Line>chik check hellas chik check hellas chik check hellas</Line>
+ <Line>cecilia klike skik cecilia klike skik cecilia klike skik</Line>
+ <Line>cecilia klike skik cecilia klike skik cecilia klike skik</Line>
+ <Line>cecilia klike skik cecilia klike skik cecilia klike skik</Line>
+ <Line>fjeld æsel fjeld æsel fjeld æsel fjeld æsel fjeld æsel</Line>
+ <Line>fjeld æsel fjeld æsel fjeld æsel fjeld æsel fjeld æsel</Line>
+ <Line>hib kage hib kage hib kage hib kage hib kage hib kage</Line>
+ <Line>hib kage hib kage hib kage hib kage hib kage hib kage</Line>
+ </Level>
+ <Level>
+ <LevelComment>(højre 2. finger; fra 'j' til 'n') (højre 2. finger; fra 'j' til 'm') (højre 4. finger; fra 'l' til 'o')</LevelComment>
+ <NewCharacters>Lektion 4. Nye bogstaver: mno</NewCharacters>
+ <Line>jmj jmj jmj jmj jmj jmj jmj jmj jmj jmj jmj jmj</Line>
+ <Line>jnj jnj jnj jnj jnj jnj jnj jnj jnj jnj jnj jnj</Line>
+ <Line>lol lol lol lol lol lol lol lol lol lol lol lol</Line>
+ <Line>abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi</Line>
+ <Line>abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi</Line>
+ <Line>jklmno jklmno jklmno jklmno jklmno jklmno jklmno jklmno</Line>
+ <Line>jklmno jklmno jklmno jklmno jklmno jklmno jklmno jklmno</Line>
+ <Line>jklmon jklmon jklmon jklmon jklmon jklmon jklmon jklmon</Line>
+ <Line>modesag mad film modesag mad film modesag mad film</Line>
+ <Line>modesag mad film modesag mad film modesag mad film</Line>
+ <Line>modesag mad film modesag mad film modesag mad film</Line>
+ <Line>nominel bon nælden nominel bon nælden nominel bon nælden</Line>
+ <Line>nominel bon nælden nominel bon nælden nominel bon nælden</Line>
+ <Line>nominel bon nælden nominel bon nælden nominel bon nælden</Line>
+ <Line>mon han kan komme i dag</Line>
+ <Line>de kom med den falske seddel</Line>
+ <Line>mon de ikke nok kan skaffe dem</Line>
+ <Line>benene kan ikke holde</Line>
+ <Line>mona og lise kan sælge fisk</Line>
+ <Line>officiel node olie officiel node olie officiel node olie</Line>
+ <Line>officiel node olie officiel node olie officiel node olie</Line>
+ <Line>officiel node olie officiel node olie officiel node olie</Line>
+ </Level>
+ <Level>
+ <LevelComment>(højre 5. finger; fra 'a' til 'q') (højre 2. finger; fra 'f' til 'r') (venstre 5. finger; fra 'æ' til 'p')</LevelComment>
+ <NewCharacters>Lektion 5. Nye bogstaver: pqr</NewCharacters>
+ <Line>æpæ æpæ æpæ æpæ æpæ æpæ æpæ æpæ æpæ æpæ æpæ æpæ</Line>
+ <Line>aqa aqa aqa aqa aqa aqa aqa aqa aqa aqa aqa aqa</Line>
+ <Line>frf frf frf frf frf frf frf frf frf frf frf frf</Line>
+ <Line>abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr</Line>
+ <Line>mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr</Line>
+ <Line>mnoprq mnoprq mnoprq mnoprq mnoprq mnoprq mnoprq mnoprq</Line>
+ <Line>hep bask celle min jord fange hep bask celle min jord fange</Line>
+ <Line>hep bask celle min jord fange hep bask celle min jord fange</Line>
+ <Line>program penge pap program penge pap program penge pap</Line>
+ <Line>program penge pap program penge pap program penge pap</Line>
+ <Line>program penge pap program penge pap program penge pap</Line>
+ <Line>rom reklame cirkel rom reklame cirkel rom reklame cirkel</Line>
+ <Line>rom reklame cirkel rom reklame cirkel rom reklame cirkel</Line>
+ <Line>rom reklame cirkel rom reklame cirkel rom reklame cirkel</Line>
+ <Line>der kom de fire drenge fra kolding</Line>
+ <Line>i denne gade bor lone helmer</Line>
+ <Line>der er med i ceremonien</Line>
+ <Line>jeg bad dem komme om morgenen</Line>
+ <Line>pigerne gik i biografen</Line>
+ <Line>drengene spillede fodbold</Line>
+ <Line>forskellige mere eller mindre komplicerede maskiner</Line>
+ <Line>forskellige mere eller mindre komplicerede maskiner</Line>
+ <Line>forskellige mere eller mindre komplicerede maskiner</Line>
+ </Level>
+ <Level>
+ <LevelComment>(højre 4. finger; fra 's' til 'w') (højre 2. finger; fra 'f' til 't') (højre 2. finger; fra 'f' til 'v') (venstre 2. finger; fra 'j' til 'u')</LevelComment>
+ <NewCharacters>Lektion 6. Nye bogstaver: tuvw</NewCharacters>
+ <Line>ftf ftf ftf ftf ftf ftf ftf ftf ftf ftf ftf ftf</Line>
+ <Line>juj juj juj juj juj juj juj juj juj juj juj juj</Line>
+ <Line>fvf fvf fvf fvf fvf fvf fvf fvf fvf fvf fvf fvf</Line>
+ <Line>sws sws sws sws sws sws sws sws sws sws sws sws</Line>
+ <Line>abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr</Line>
+ <Line>pqrstuvw pqrstuvw pqrstuvw pqrstuvw pqrstuvw pqrstuvw</Line>
+ <Line>pqrstuvw pqrstuvw pqrstuvw pqrstuvw pqrstuvw pqrstuvw</Line>
+ <Line>pqrstuwv pqrstuwv pqrstuwv pqrstuwv pqrstuwv pqrstuwv</Line>
+ <Line>stroppetur stopur slutspurt stroppetur stopur slutspurt</Line>
+ <Line>stroppetur stopur slutspurt stroppetur stopur slutspurt</Line>
+ <Line>stroppetur stopur slutspurt stroppetur stopur slutspurt</Line>
+ <Line>vejr vrangen savne vejr vrangen savne vejr vrangen savne</Line>
+ <Line>vejr vrangen savne vejr vrangen savne vejr vrangen savne</Line>
+ <Line>vejr vrangen savne vejr vrangen savne vejr vrangen savne</Line>
+ <Line>lær de unge hvordan de skal tænke</Line>
+ <Line>ikke hvad de skal tænke</Line>
+ <Line>hvor alle tænker det samme</Line>
+ <Line>er der ikke nogen der tænker ret meget</Line>
+ <Line>den tænker ikke godt som ikke tænker en gang til</Line>
+ <Line>wigwam wienerbarn wigwam wienerbarn wigwam wienerbarn</Line>
+ <Line>wigwam wienerbarn wigwam wienerbarn wigwam wienerbarn</Line>
+ <Line>wigwam wienerbarn wigwam wienerbarn wigwam wienerbarn</Line>
+ </Level>
+ <Level>
+ <LevelComment>(højre 5. finger; fra 'a' til 'z') (højre 4. finger; fra 's' til 'x') (venstre 2. finger; fra 'j' til 'y') (venstre 5. finger; fra 'æ' til 'ø')</LevelComment>
+ <NewCharacters>Lektion 7. Nye bogstaver: zxyø</NewCharacters>
+ <Line>sxs sxs sxs sxs sxs sxs sxs sxs sxs sxs sxs sxs</Line>
+ <Line>jyj jyj jyj jyj jyj jyj jyj jyj jyj jyj jyj jyj</Line>
+ <Line>aza aza aza aza aza aza aza aza aza aza aza aza</Line>
+ <Line>æøæ æøæ æøæ æøæ æøæ æøæ æøæ æøæ æøæ æøæ æøæ æøæ</Line>
+ <Line>stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw</Line>
+ <Line>stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw</Line>
+ <Line>xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø</Line>
+ <Line>xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø</Line>
+ <Line>husk juble dele quilte dompap waggon vaccine xerografi</Line>
+ <Line>husk juble dele quilte dompap waggon vaccine xerografi</Line>
+ <Line>bordeaux xylofon xeroform bordeaux xylofon xeroform</Line>
+ <Line>bordeaux xylofon xeroform bordeaux xylofon xeroform</Line>
+ <Line>bordeaux xylofon xeroform bordeaux xylofon xeroform</Line>
+ <Line>lyd nyse tyde fryse skyde lyd nyse tyde fryse skyde</Line>
+ <Line>lyd nyse tyde fryse skyde lyd nyse tyde fryse skyde</Line>
+ <Line>lyd nyse tyde fryse skyde lyd nyse tyde fryse skyde</Line>
+ <Line>zebra zink zar zulu zone zebra zink zar zulu zone</Line>
+ <Line>zebra zink zar zulu zone zebra zink zar zulu zone</Line>
+ <Line>zebra zink zar zulu zone zebra zink zar zulu zone</Line>
+ <Line>han glemte xylofonen i bussen</Line>
+ <Line>de spillede bezique hele aftenen</Line>
+ <Line>else har min cykellygte</Line>
+ <Line>han hentede sin søn ved skolen</Line>
+ <Line>cement er et vigtigt materiale</Line>
+ <Line>jeg har læst din artikel</Line>
+ <Line>børsen sønner tømme ønske gløde skønne følge rømme</Line>
+ <Line>børsen sønner tømme ønske gløde skønne følge rømme</Line>
+ <Line>børsen sønner tømme ønske gløde skønne følge rømme</Line>
+ </Level>
+ <Level>
+ <LevelComment>(højre 3. finger; fra 'k' til ',') (højre 4. finger; fra 'l' til '.') (højre 5. finger; fra 'æ' til 'å') (højre 5. finger; fra 'æ' til '-')</LevelComment>
+ <NewCharacters>Lektion 8. Nye bogstaver: å,.-</NewCharacters>
+ <Line>æåæ æåæ æåæ æåæ æåæ æåæ æåæ æåæ æåæ æåæ æåæ æåæ</Line>
+ <Line>k,k k,k k,k k,k k,k k,k k,k k,k k,k k,k k,k k,k</Line>
+ <Line>l.l l.l l.l l.l l.l l.l l.l l.l l.l l.l l.l l.l</Line>
+ <Line>æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ æ-æ</Line>
+ <Line>abcdef ghijkl mnopqr stuvwx abcdef ghijkl mnopqr stuvwx</Line>
+ <Line>yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.-</Line>
+ <Line>yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.- yzæøå,.-</Line>
+ <Line>aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz</Line>
+ <Line>emuå fnw, emuå fnw, emuå fnw, emuå fnw, emuå fnw,</Line>
+ <Line>cksæ dltø cksæ dltø cksæ dltø cksæ dltø cksæ dltø</Line>
+ <Line>gov. hpx- gov. hpx- gov. hpx- gov. hpx- gov. hpx-</Line>
+ <Line>åben låge måske åben låge måske åben låge måske</Line>
+ <Line>åben låge måske åben låge måske åben låge måske</Line>
+ <Line>åben låge måske åben låge måske åben låge måske</Line>
+ <Line>der var mange mennesker på gaden, selv om det regnede.</Line>
+ <Line>der var mange mennesker på gaden, selv om det regnede.</Line>
+ <Line>der var mange mennesker på gaden, selv om det regnede.</Line>
+ <Line>hunden var tolv år gammel,</Line>
+ <Line>vi skal på skovtur på søndag,</Line>
+ <Line>else-marie kan ikke komme med,</Line>
+ <Line>næste week-end er vi ikke hjemme,</Line>
+ <Line>vi får gæster i påsken,</Line>
+ <Line>de skal ikke flyve før på lørdag.</Line>
+ <Line>jeg har ringet - men der var ingen, der svarede.</Line>
+ <Line>jeg har ringet - men der var ingen, der svarede.</Line>
+ <Line>jeg har ringet - men der var ingen, der svarede.</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 9. Repetition og øvelser 1</NewCharacters>
+ <Line>abcdef abcdef abcdef abcdef abcdef abcdef abcdef abcdef</Line>
+ <Line>ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl ghijkl</Line>
+ <Line>mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr mnopqr</Line>
+ <Line>stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw stuvw</Line>
+ <Line>xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø xyzæø</Line>
+ <Line>å,.- å,.- å,.- å,.- å,.- å,.- å,.- å,.- å,.- å,.- å,.-</Line>
+ <Line>og i at det en den til er de af på var han der så med ikke</Line>
+ <Line>og i at det en den til er de af på var han der så med ikke</Line>
+ <Line>æblerne var sure som citroner - de var slet ikke modne</Line>
+ <Line>æblerne var sure som citroner - de var slet ikke modne</Line>
+ <Line>æblerne var sure som citroner - de var slet ikke modne</Line>
+ <Line>næsten lige nu,</Line>
+ <Line>vi viser frem,</Line>
+ <Line>jorden er rund,</Line>
+ <Line>vi løber med,</Line>
+ <Line>kommer han snart,</Line>
+ <Line>vejen var meget lang,</Line>
+ <Line>nu er det sent,</Line>
+ <Line>hun deres også skal alle kunne kommer sin hans meget mange</Line>
+ <Line>hun deres også skal alle kunne kommer sin hans meget mange</Line>
+ <Line>vi regner med at høre fra dig en af de nærmeste dage</Line>
+ <Line>vi regner med at høre fra dig en af de nærmeste dage</Line>
+ <Line>vi regner med at høre fra dig en af de nærmeste dage</Line>
+ <Line>de eneste, som aldrig begår fejl,</Line>
+ <Line>er de, som aldrig gør noget</Line>
+ <Line>lysten driver værket,</Line>
+ <Line>når værket ikke fordriver lysten</Line>
+ <Line>har man meget, så går det til</Line>
+ <Line>har man lidet, så slår det til</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 10. Repetition og øvelser 2</NewCharacters>
+ <Line>abc def ghi jkl mno pqr stu vwx yzæøå, .-</Line>
+ <Line>bkjc ræzs bkjc ræzs bkjc ræzs bkjc ræzs bkjc ræzs</Line>
+ <Line>dmle tåøu dmle tåøu dmle tåøu dmle tåøu dmle tåøu</Line>
+ <Line>fong v.,w fong v.,w fong v.,w fong v.,w fong v.,w</Line>
+ <Line>hipa xy-q hipa xy-q hipa xy-q hipa xy-q hipa xy-q</Line>
+ <Line>det er dejligt vejr i dag, jeg vil gå en tur langs stranden</Line>
+ <Line>det er dejligt vejr i dag, jeg vil gå en tur langs stranden</Line>
+ <Line>her ned store lille du gik ville må bliver få eller sagde</Line>
+ <Line>her ned store lille du gik ville må bliver få eller sagde</Line>
+ <Line>adskille bestyre censor disk eksempel frimærke grammatik</Line>
+ <Line>adskille bestyre censor disk eksempel frimærke grammatik</Line>
+ <Line>adskille bestyre censor disk eksempel frimærke grammatik</Line>
+ <Line>sig ikke alt, hvad du ved - men vid alt, hvad du siger</Line>
+ <Line>hemmeligheden ved at kede er at sige alt</Line>
+ <Line>selv det sværeste kan siges nemt - men det er svært</Line>
+ <Line>selv det nemmeste kan siges svært - og det er nemt</Line>
+ <Line>nok under tid går måtte have være dog mig sine noget derfor</Line>
+ <Line>nok under tid går måtte have være dog mig sine noget derfor</Line>
+ <Line>handicap ingeniør juice kladde lektier myndig niveau</Line>
+ <Line>handicap ingeniør juice kladde lektier myndig niveau</Line>
+ <Line>handicap ingeniør juice kladde lektier myndig niveau</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 11. Repetition og øvelser 3</NewCharacters>
+ <Line>adbcef adbcfe adbecf adbecf adbefc adbfce adbfec</Line>
+ <Line>gjhikl gjhilk gjhkil gjhkli gjhlik gjhlki</Line>
+ <Line>mpnoqr mpnorq mpnqor mpnqro mpnroq mpnrqo</Line>
+ <Line>for men vi som sig har jeg om et da havde nu ved fra kan</Line>
+ <Line>for men vi som sig har jeg om et da havde nu ved fra kan</Line>
+ <Line>tiden er gået hurtigt,</Line>
+ <Line>i denne side af vejen,</Line>
+ <Line>han har penge,</Line>
+ <Line>det begyndte godt,</Line>
+ <Line>vandet er meget koldt,</Line>
+ <Line>må vi være længe oppe,</Line>
+ <Line>der er røde køer på marken,</Line>
+ <Line>det går nok denne gang.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 12. Repetition og øvelser 4</NewCharacters>
+ <Line>abc def ghi jkl mno pqr vwx yzæ øå, .-</Line>
+ <Line>abc def ghi jkl mno pqr vwx yzæ øå, .-</Line>
+ <Line>fik jo kun vil mod godt se dag andre gamle hele lige år</Line>
+ <Line>fik jo kun vil mod godt se dag andre gamle hele lige år</Line>
+ <Line>olympiade pjece quilte refleks samfund tempo union</Line>
+ <Line>olympiade pjece quilte refleks samfund tempo union</Line>
+ <Line>olympiade pjece quilte refleks samfund tempo union</Line>
+ <Line>ordet introduktion er et fremmedord, der som så mange</Line>
+ <Line>andre stammer fra latin - det betyder indledning eller</Line>
+ <Line>præsentation - et kursus kan starte med introduktions-</Line>
+ <Line>dage - et musikstykkes første sats kaldes ofte intro-</Line>
+ <Line>duktion - det første brev angående en sag benævnes in-</Line>
+ <Line>troduktionsskrivelse.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 13. Repetition og øvelser 5</NewCharacters>
+ <Line>abcd efgh ijkl mnop qrst uvwx yzæø å,.-</Line>
+ <Line>abcd efgh ijkl mnop qrst uvwx yzæø å,.-</Line>
+ <Line>stor komme gå gennem os frem alt smart stod endnu hver helt</Line>
+ <Line>stor komme gå gennem os frem alt smart stod endnu hver helt</Line>
+ <Line>aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz</Line>
+ <Line>emuå fnw, emuå fnw, emuå fnw, emuå fnw, emuå fnw, emuå fnw,</Line>
+ <Line>lidt selv denne igen været hvad mand nogle end hen hundrede</Line>
+ <Line>lidt selv denne igen været hvad mand nogle end hen hundrede</Line>
+ <Line>et koncept er en slags kladde, som skrives, hvis man ikke</Line>
+ <Line>er helt sikker på den endelige udforming af et skriftligt</Line>
+ <Line>arbejde - kommer man til at skrive forkert, kan man bare</Line>
+ <Line>strege ud og derefter skrive videre - konceptet betragtes</Line>
+ <Line>som grundlag for en renskrift, f.eks. kladde til et brev.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 14. Repetition og øvelser 6</NewCharacters>
+ <Line>abcd efgh ijkl mnop qrst uvwx yzæø å,.-</Line>
+ <Line>abcd efgh ijkl mnop qrst uvwx yzæø å,.-</Line>
+ <Line>varme walkietalkie xero yoga zenit ækvator ørken ådsel</Line>
+ <Line>varme walkietalkie xero yoga zenit ækvator ørken ådsel</Line>
+ <Line>varme walkietalkie xero yoga zenit ækvator ørken ådsel</Line>
+ <Line>cksæ dltø cksæ dltø cksæ dltø cksæ dltø cksæ dltø</Line>
+ <Line>gov. hpx- gov. hpx- gov. hpx- gov. hpx- gov. hpx-</Line>
+ <Line>ingen ja sammen uden blive mere dens gang min ad anden sit</Line>
+ <Line>ingen ja sammen uden blive mere dens gang min ad anden sit</Line>
+ <Line>ordet manuskript stammer fra latin og betyder egentlig</Line>
+ <Line>håndskrift - det bruges nu også som en maskinskrevet tekst,</Line>
+ <Line>specielt om en forfatters arbejde i den form, hvori det</Line>
+ <Line>afleveres til forlægger eller trykkeri - det trykte eller</Line>
+ <Line>maskinskrevne materiale, der skal afskrives, kaldes også</Line>
+ <Line>et manuskript.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 15. Repetition og øvelser 7</NewCharacters>
+ <Line>abcde fghij klmno pqrst uvwxy zæøå, .-</Line>
+ <Line>abcde fghij klmno pqrst uvwxy zæøå, .-</Line>
+ <Line>tog bedes jorden blevet både gerne vand dage folk ny først</Line>
+ <Line>tog bedes jorden blevet både gerne vand dage folk ny først</Line>
+ <Line>fong v.,w fong v.,w fong v.,w fong v.,w fong v.,w</Line>
+ <Line>hipa xy-q hipa xy-q hipa xy-q hipa xy-q hipa xy-q</Line>
+ <Line>anden læge land sidste således del dig ellers fordi aldrig</Line>
+ <Line>anden læge land sidste således del dig ellers fordi aldrig</Line>
+ <Line>der er forskellige teorier om, hvordan jazzen er opstået -</Line>
+ <Line>ingen af disse teorier kan dog bevises - nogle mener, at</Line>
+ <Line>jazzen er resultatet af et møde mellem afrikansk og euro-</Line>
+ <Line>pæisk kultur, andre går ud fra, at denne musikform er</Line>
+ <Line>startet, da en ny befolkningsgruppe, som ikke var hæmmet</Line>
+ <Line>af en ensrettet, akademisk tradition, begyndte at spille</Line>
+ <Line>og efterhånden fandt ud af at gøre det på en ny og hidtil</Line>
+ <Line>uprøvet måde.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 16. Repetition og øvelser 8</NewCharacters>
+ <Line>abcde fghij klmno pqrst uvwxy zæøå, .-</Line>
+ <Line>abcde fghij klmno pqrst uvwxy zæøå, .-</Line>
+ <Line>først vandet hvis ser sted ligger næsten får hr. samme før</Line>
+ <Line>først vandet hvis ser sted ligger næsten får hr. samme før</Line>
+ <Line>bkjc ræzs bkjc ræzs bkjc ræzs bkjc ræzs bkjc ræzs</Line>
+ <Line>dmle tåøu dmle tåøu dmle tåøu dmle tåøu dmle tåøu</Line>
+ <Line>hjem dette disse ude lå langt mellem undskylde små tilbage</Line>
+ <Line>hjem dette disse ude lå langt mellem undskylde små tilbage</Line>
+ <Line>der er ingen tvivl om, at forældres indflydelse på</Line>
+ <Line>deres børns valg af erhverv kan være meget stor -</Line>
+ <Line>i gamle dage var det en selvfølge, at forældrene</Line>
+ <Line>fastlagde deres børns fremtid - ofte fulgte sønnen</Line>
+ <Line>i faderens fodspor.</Line>
+ <Line>i de fleste hjem er det nu blevet således, at de</Line>
+ <Line>unge selv er med til at bestemme, hvad de vil være</Line>
+ <Line>- ja, nogle forældre overlader helt til børnene at</Line>
+ <Line>afgøre sagen - men det rigtige må være, at forældre</Line>
+ <Line>og børn i fællesskab finder frem til den bedst muli-</Line>
+ <Line>ge løsning.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 17. Store bogstaver med højre og venstre skiftenøgler</NewCharacters>
+ <Line>Anna Børge Christian Dorthe Else Frede Gunnar Hans Ida Jens</Line>
+ <Line>Anna Børge Christian Dorthe Else Frede Gunnar Hans Ida Jens</Line>
+ <Line>Kirsten Lars Morten Niels Ole Peter Ruth Søren Tove Ulla Vera</Line>
+ <Line>Kirsten Lars Morten Niels Ole Peter Ruth Søren Tove Ulla Vera</Line>
+ <Line>Werner Xenia Yrsa Zenta Ærø Øjvind Åse</Line>
+ <Line>Werner Xenia Yrsa Zenta Ærø Øjvind Åse</Line>
+ <Line>altid flere ofte omkring side byen inde bort danske skoven</Line>
+ <Line>altid flere ofte omkring side byen inde bort danske skoven</Line>
+ <Line>Mandag. Tirsdag. Onsdag. Torsdag. Fredag. Lørdag. Søndag.</Line>
+ <Line>Mandag. Tirsdag. Onsdag. Torsdag. Fredag. Lørdag. Søndag.</Line>
+ <Line>Frilandsmuseet ved Sorgenfri blev oprettet ved år-</Line>
+ <Line>hundredeskiftet og en nu en afdeling af National-</Line>
+ <Line>museet. Til parken er overflyttet gamle landbyg-</Line>
+ <Line>ninger fra Danmark og de tidligere danske lands-</Line>
+ <Line>dele i Sydsverige og Sydslesvig. Bygningerne er</Line>
+ <Line>udvalgt således, at de giver et indtryk af de for-</Line>
+ <Line>skellige egnes byggeskikke siden det syttende år-</Line>
+ <Line>hundrede.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 18. Tal 1-5</NewCharacters>
+ <Line>fr5f fr5f fr5f fr5f fr5f fr5f fr5f fr5f fr5f fr5f</Line>
+ <Line>de4d de4d de4d de4d de4d de4d de4d de4d de4d de4d</Line>
+ <Line>sw3s sw3s sw3s sw3s sw3s sw3s sw3s sw3s sw3s sw3s</Line>
+ <Line>aq2a aq2a aq2a aq2a aq2a aq2a aq2a aq2a aq2a aq2a</Line>
+ <Line>aq1a aq1a aq1a aq1a aq1a aq1a aq1a aq1a aq1a aq1a</Line>
+ <Line>Tæppet er 4 meter bredt og 5 meter langt.</Line>
+ <Line>Tæppet er 4 meter bredt og 5 meter langt.</Line>
+ <Line>Forretningen er flyttet fra Algade 4 til Bredgade 5.</Line>
+ <Line>Forretningen er flyttet fra Algade 4 til Bredgade 5.</Line>
+ <Line>135 kg sukker og 241 kg mel.</Line>
+ <Line>135 kg sukker og 241 kg mel.</Line>
+ <Line>1 er for lidt, mon 2 er nok, tag hellere 3 med det samme.</Line>
+ <Line>1 er for lidt, mon 2 er nok, tag hellere 3 med det samme.</Line>
+ <Line>Hun bor på Vestergade nr. 12, han bor på Østergade nr. 21.</Line>
+ <Line>Hun bor på Vestergade nr. 12, han bor på Østergade nr. 21.</Line>
+ <Line>De er flyttet fra Nørregade nr. 13 til Søndergade nr. 31.</Line>
+ <Line>De er flyttet fra Nørregade nr. 13 til Søndergade nr. 31.</Line>
+ <Line>Jordkloden modtager daglig enorme energimængder fra</Line>
+ <Line>solen i form af strålevarme. Denne varme er en be-</Line>
+ <Line>tingelse for alt liv på jorden og ville være mere</Line>
+ <Line>en rigelig til dækning af vort samlede energibehov,</Line>
+ <Line>hvis vi kunne udnytte den. I de kommende år vil for-</Line>
+ <Line>skere overalt på jorden forsøge at finde frem til</Line>
+ <Line>metoder, der kan omdanne solenergi til energiformer,</Line>
+ <Line>vi kan anvende i stedet for kul, olie m.v.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 19. Tal 6-0</NewCharacters>
+ <Line>jy6j jy6j jy6j jy6j jy6j jy6j jy6j jy6j jy6j jy6j</Line>
+ <Line>ju7j ju7j ju7j ju7j ju7j ju7j ju7j ju7j ju7j ju7j</Line>
+ <Line>ki8k ki8k ki8k ki8k ki8k ki8k ki8k ki8k ki8k ki8k</Line>
+ <Line>lo9l lo9l lo9l lo9l lo9l lo9l lo9l lo9l lo9l lo9l</Line>
+ <Line>æp0æ æp0æ æp0æ æp0æ æp0æ æp0æ æp0æ æp0æ æp0æ æp0æ</Line>
+ <Line>Rejsen varede 37 timer, og de kørte igennem 6 lande.</Line>
+ <Line>Rejsen varede 37 timer, og de kørte igennem 6 lande.</Line>
+ <Line>Der var 10 piger og 17 drenge i klassen.</Line>
+ <Line>Der var 10 piger og 17 drenge i klassen.</Line>
+ <Line>Pensionsalderen for kvinder er 62, for mænd er den 67.</Line>
+ <Line>Pensionsalderen for kvinder er 62, for mænd er den 67.</Line>
+ <Line>Han fik 46 points ud af 59 mulige.</Line>
+ <Line>Han fik 46 points ud af 59 mulige.</Line>
+ <Line>Han blev født den 28. juni 1947 i Rudkøbing.</Line>
+ <Line>Han blev født den 28. juni 1947 i Rudkøbing.</Line>
+ <Line>Der var 807 ansøgere men kun 698 pladser.</Line>
+ <Line>Der var 807 ansøgere men kun 698 pladser.</Line>
+ <Line>Træer vokser ikke alene i højtiden, men også i højtiden.</Line>
+ <Line>I laget mellem bark og ved finder der en celledeling</Line>
+ <Line>sted. Hvis temperaturen var ens året rundt, ville</Line>
+ <Line>træet vokse jævnt, men på vore breddegrader sker væk-</Line>
+ <Line>sten i ryk, fordi træerne hviler om vinteren. Dette</Line>
+ <Line>bevirker, at man på et oversavet træ tydeligt kan se,</Line>
+ <Line>hvor mange år træet er, ved hjælp af de såkaldte år-</Line>
+ <Line>ringe. Danmarks ældste træ er Kongeegen i Nordskoven</Line>
+ <Line>ved Jægerspris, som på grundlag af sin tykkelse er</Line>
+ <Line>bedømt til 1800 år.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 20: Repetition og øvelser 9</NewCharacters>
+ <Line>Januar. Februar. Marts. April. Maj. Juni.</Line>
+ <Line>Januar. Februar. Marts. April. Maj. Juni.</Line>
+ <Line>Juli. August. September. Oktober. November. December.</Line>
+ <Line>Juli. August. September. Oktober. November. December.</Line>
+ <Line>Sækkene vejede i alt 415 kg</Line>
+ <Line>Sækkene vejede i alt 415 kg</Line>
+ <Line>Vi udstiller i Aalborghallen den 2. og 3. juni i år.</Line>
+ <Line>Vi udstiller i Aalborghallen den 2. og 3. juni i år.</Line>
+ <Line>stille ganske mennesker fast gøre igennem ene kommet par</Line>
+ <Line>stille ganske mennesker fast gøre igennem ene kommet par</Line>
+ <Line>stadig fri går hovedet sådan stykke endelig holdt sad</Line>
+ <Line>stadig fri går hovedet sådan stykke endelig holdt sad</Line>
+ <Line>Tasterne på skrivemaskinen må ikke trykkes ned, men skal</Line>
+ <Line>slås staccato an, det vil sige et kort lodret anslag med</Line>
+ <Line>spidsen af fingeren på tasten, som lynhurtig slippes i</Line>
+ <Line>det øjeblik, den er i bund.</Line>
+ <Line>Ved salg på kredit forstår man, at der gives en vis hen-</Line>
+ <Line>stand med betalingen. En detailhandler eller grosserer</Line>
+ <Line>får ofte så lang kredit, at han får tid til at videre-</Line>
+ <Line>sælge varerne, således at han har fået penge til beta-</Line>
+ <Line>ling af gælden. Detailhandlerens kunder - forbrugerne -</Line>
+ <Line>køber på kredit, hvis de ikke har opsparet tilstrækkelig</Line>
+ <Line>mange penge.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 21: Repetition og øvelser 10</NewCharacters>
+ <Line>Assens. Bjerringbro. Christiansfeld. Dokkedal. Egense.</Line>
+ <Line>Assens. Bjerringbro. Christiansfeld. Dokkedal. Egense.</Line>
+ <Line>Fakse. Gilleleje. Hadsund. Ingstrup. Jerslev. Klim.</Line>
+ <Line>Fakse. Gilleleje. Hadsund. Ingstrup. Jerslev. Klim.</Line>
+ <Line>Lemvig. Marstal. Nakskov. Oksbøl. Padborg. Randers.</Line>
+ <Line>Lemvig. Marstal. Nakskov. Oksbøl. Padborg. Randers.</Line>
+ <Line>Sorø. Tjæreborg. Ulfborg. Vejle. Ydby. Æbeltoft. Ølgod.</Line>
+ <Line>Sorø. Tjæreborg. Ulfborg. Vejle. Ydby. Æbeltoft. Ølgod.</Line>
+ <Line>den 7. og 8. november, den 9. og 10. december</Line>
+ <Line>den 7. og 8. november, den 9. og 10. december</Line>
+ <Line>Bogen har 268 sider, jeg er kommet til side 109.</Line>
+ <Line>Bogen har 268 sider, jeg er kommet til side 109.</Line>
+ <Line>vej fået god hos atter begyndte finde give næste morgen</Line>
+ <Line>vej fået god hos atter begyndte finde give næste morgen</Line>
+ <Line>inden kl. luften nogen hjemme hvide høre idet lang sidder</Line>
+ <Line>inden kl. luften nogen hjemme hvide høre idet lang sidder</Line>
+ <Line>Det er svært for en tom sæk at stå oprejst.</Line>
+ <Line>Med lyn kan man oplyse verden, men ikke opvarme en ovn.</Line>
+ <Line>Fanatisme vil sige, at man fordobler sine anstrengelser,</Line>
+ <Line>efter at man har glemt sit mål.</Line>
+ <Line>Noget af det mest irriterende i denne verden er, at kund-</Line>
+ <Line>skaber og færdigheder kun kan erhverves gennem hårdt ar-</Line>
+ <Line>bejde.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 22: Repetition og øvelser 11</NewCharacters>
+ <Line>aæsldkfjdkslaæsldkfjdkslaæaæsldkfjdkslaæaæsldkfjdkslaæ</Line>
+ <Line>aften gået hurtigt medens bedre gav højt arbejde imod</Line>
+ <Line>aften gået hurtigt medens bedre gav højt arbejde imod</Line>
+ <Line>Hver gang, man skal træffe et valg, er der en mulighed</Line>
+ <Line>for, at man vælger forkert. Hvis det drejer sig om en</Line>
+ <Line>ting, man har købt, kan det måske lade sig gøre at få</Line>
+ <Line>den byttet eller at lade handelen gå tilbage.</Line>
+ <Line>Har man valgt uddannelse eller erhverv, burde det også</Line>
+ <Line>være let at vælge om igen, hvis det viser sig, at man</Line>
+ <Line>har valgt forkert. Opdager man sin fejltagelse i løbet</Line>
+ <Line>af få uger, kan det gå ret smertefrit, men sker det</Line>
+ <Line>flere gange, eller afgørelsen trækkes i langdrag, er</Line>
+ <Line>det en anden sag. Det kan være klogt at gennemdrøfte</Line>
+ <Line>de problemer, man har, med forældre eller andre, som</Line>
+ <Line>man har tillid til.</Line>
+ <Line>rigtig rundt begge dagen forbi intet nå nye stort syg</Line>
+ <Line>rigtig rundt begge dagen forbi intet nå nye stort syg</Line>
+ <Line>gjorde hinanden lov mængde set tager foran haft nemlig</Line>
+ <Line>gjorde hinanden lov mængde set tager foran haft nemlig</Line>
+ <Line>Peter svømmede 400 meter crawl</Line>
+ <Line>Peter svømmede 400 meter crawl</Line>
+ <Line>Peter svømmede 400 meter crawl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 23: Repetition og øvelser 12</NewCharacters>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>solen vejen vel dyr gode let mens pludselig engang senere</Line>
+ <Line>solen vejen vel dyr gode let mens pludselig engang senere</Line>
+ <Line>Hvis du vil udvide dit ordforråd, må du slå alle de</Line>
+ <Line>ord, du ikke kender, op i en fremmedordbog, efterhånden</Line>
+ <Line>som du støder på dem, skrifteligt eller mundtligt.</Line>
+ <Line>Jo flere ord du kender, desto lettere er det at læse</Line>
+ <Line>vanskeligere stof, og desto lettere vil du have ved</Line>
+ <Line>at udtrykke dig.</Line>
+ <Line>Det behøver ikke at betyde, at du skal anvende frem-</Line>
+ <Line>medord i tide og utide. Du skal kun bruge dem, når</Line>
+ <Line>de giver en bedre og tydeligere mening end et almin-</Line>
+ <Line>deligt dansk ord. Mange diskussioner og samtaler bliver</Line>
+ <Line>uklare, fordi deltagerne ikke helt kender betydningen</Line>
+ <Line>af de ord, der anvendes. Uenighed og misforståelser kan</Line>
+ <Line>undgås, hvis man kender fremmedords betydning.</Line>
+ <Line>Ordet kommunikere er et fremmedord. Det betyder at</Line>
+ <Line>meddele eller at udveksle meddelelser.</Line>
+ <Line>siden slet står tage allerede grund gør hende lærer måde</Line>
+ <Line>siden slet står tage allerede grund gør hende lærer måde</Line>
+ <Line>begynder borte længere spurgte lange måske steder videre</Line>
+ <Line>begynder borte længere spurgte lange måske steder videre</Line>
+ <Line>Hør, jeg taler som en bog</Line>
+ <Line>- det er klogt at være klog,</Line>
+ <Line>eller i en omvendt sum</Line>
+ <Line>- det er dumt at være dum.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 24: Repetition og øvelser 13</NewCharacters>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>større børnene findes langs mad midt nåede satte stå</Line>
+ <Line>større børnene findes langs mad midt nåede satte stå</Line>
+ <Line>hvert imidlertid nede penge sent bag blade fleste gård</Line>
+ <Line>hvert imidlertid nede penge sent bag blade fleste gård</Line>
+ <Line>For millioener af år siden var jorden dækket af varme,</Line>
+ <Line>lavvandede have. I disse have levede utallige smådyr.</Line>
+ <Line>Når de døde, sank de ned på havbunden, hvor de efter-</Line>
+ <Line>hånden dannede et slamlignede lag. Dette slamlag blev</Line>
+ <Line>tykkere og tykkere og blev senere dækket af et tykt</Line>
+ <Line>lag mudder, som langsomt omdannedes til en porøs sten-</Line>
+ <Line>art, som kunne opsuge den olie, som slamlaget på grund</Line>
+ <Line>af trykket ovenfra blev omdannet til.</Line>
+ <Line>Den olie, som er så vigtig for os i vores hverdag,</Line>
+ <Line>blev til på denne måde gennem millioner af år. De så-</Line>
+ <Line>kaldte oliefelter er de lag - som regel dybt nede i</Line>
+ <Line>jorden - der består af et oliefyldt porøst stenlag.</Line>
+ <Line>Der er mulighed for at finde olie mange steder på</Line>
+ <Line>jorden, for eksempel også i havbunden omkring Danmark.</Line>
+ <Line>Stuen måler 4 x 5 meter</Line>
+ <Line>Stuen måler 4 x 5 meter</Line>
+ <Line>Jeg har rettet 41 stile, kun 4 eller 5 var gode.</Line>
+ <Line>Jeg har rettet 41 stile, kun 4 eller 5 var gode.</Line>
+ <Line>Der var 32 deltagere i mødet.</Line>
+ <Line>Der var 32 deltagere i mødet.</Line>
+ <Line>-., åøæ zyx wvu tsr qpo nml kji hgf edc ba</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 25: Repetition og øvelser 14</NewCharacters>
+ <Line>aæsldkfjdkslaæsldkfjdkslaæaæsldkfjdkslaæaæsldkfjdkslaæ</Line>
+ <Line>A. Andersen. B. Bjerg. C. Carlsen. D. Dam. E. Eriksen.</Line>
+ <Line>A. Andersen. B. Bjerg. C. Carlsen. D. Dam. E. Eriksen.</Line>
+ <Line>F. Frandsen. G. Gregersen. H. Hansen. I. Iversen J. Jensen.</Line>
+ <Line>F. Frandsen. G. Gregersen. H. Hansen. I. Iversen J. Jensen.</Line>
+ <Line>K. Knudsen. L. Larsen. M. Madsen. N.Nielsen. O.Olsen.</Line>
+ <Line>K. Knudsen. L. Larsen. M. Madsen. N.Nielsen. O.Olsen.</Line>
+ <Line>lande lod mine plads stærk vist egne fandt flyver gange</Line>
+ <Line>lande lod mine plads stærk vist egne fandt flyver gange</Line>
+ <Line>Årets gang i naturen er fuld af overraskelser. Når sneen</Line>
+ <Line>smelter bort, og frosten går af jorden, vækkes de første</Line>
+ <Line>bladanlæg til live. Så tidligt som i marts titter de</Line>
+ <Line>første følfod frem i grøftekanten, og man kan finde duf-</Line>
+ <Line>tende violer på stengærdet ved skoven. Når jorden bliver</Line>
+ <Line>varmere, begynder røddernes fine net at opsuge vand, og</Line>
+ <Line>planterne skyder hurtigt i vejret. Planterne retter sig</Line>
+ <Line>mere efter mikroklimaet ved jordoverfladen end efter det</Line>
+ <Line>klima, vi andre registrerer i et par meters højde over</Line>
+ <Line>jordoverfladen. Det er forskellen i mikroklimaet, der</Line>
+ <Line>gør, at nogle anemoner springer ud op til et par uger</Line>
+ <Line>før andre, der gror på mindre heldige steder.</Line>
+ <Line>Ring besked inden kl. 10 til telefonen 08 67 90 79</Line>
+ <Line>Ring besked inden kl. 10 til telefonen 08 67 90 79</Line>
+ <Line>Ring besked inden kl. 10 til telefonen 08 67 90 79</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 26: Repetition og øvelser 15</NewCharacters>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>flok gaden lægge løb omtrent ondt rask sider siger skibe</Line>
+ <Line>flok gaden lægge løb omtrent ondt rask sider siger skibe</Line>
+ <Line>P. Pedersen. R. Rasmussen. S. Sørensen. T. Thomsen. U. Ulrich.</Line>
+ <Line>P. Pedersen. R. Rasmussen. S. Sørensen. T. Thomsen. U. Ulrich.</Line>
+ <Line>V. Vang. Y. Yde. Z. Zerlang. Æ. Ærø. Ø. Ørum. Å. Åbo.</Line>
+ <Line>V. Vang. Y. Yde. Z. Zerlang. Æ. Ærø. Ø. Ørum. Å. Åbo.</Line>
+ <Line>Hvert 4. år er skudår, og februar har 29 dage mod de sæd-</Line>
+ <Line>vanlige 28 dage. Der kiles en dag ind imellem den 23. og</Line>
+ <Line>24. februar, den såkaldte skuddag. Vi har skudår de år,</Line>
+ <Line>hvor årstallet er deleligt med 4, for eksempel 1968, 1972,</Line>
+ <Line>1976 og 1980. År 2000 vil dog ikke være skudår, ligesom</Line>
+ <Line>år 1900 ikke var det.</Line>
+ <Line>Man mener, det var de første romere, der indførte et år</Line>
+ <Line>på 12 måneder. Cæsar bestemte, at hvert 4. år skulle være</Line>
+ <Line>skudår med 366 dage, de mellemliggende 3 år 365 dage. Denne</Line>
+ <Line>tidsregning fik navnet den julianske tidsregning og blev</Line>
+ <Line>indført den 1. januar år 45.</Line>
+ <Line>hilsen klokken mest mindre største vejret efterhånden gjort</Line>
+ <Line>hilsen klokken mest mindre største vejret efterhånden gjort</Line>
+ <Line>lagde lever natten siger tiden fremmede hel tænkte hvordan</Line>
+ <Line>lagde lever natten siger tiden fremmede hel tænkte hvordan</Line>
+ <Line>lave luft nej ret svarede tidligere venligst øjeblik altså</Line>
+ <Line>lave luft nej ret svarede tidligere venligst øjeblik altså</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 27: Repetition og øvelser 16</NewCharacters>
+ <Line>abcdef ghijkl mnopqr stuvwx yzæøå, .-</Line>
+ <Line>abcdef ghijkl mnopqr stuvwx yzæøå, .-</Line>
+ <Line>Der er stor forskel på unge menneskers læsefærdighed.</Line>
+ <Line>Enkelte hurtige læsere kan læse op til 500 ord pr.</Line>
+ <Line>minut, medens de langsomme læsere måske kun kommer op</Line>
+ <Line>på 50 ord pr. minut. Læsehastigheden bør varieres ef-</Line>
+ <Line>ter det stof, der læses. En side i en roman kan læses</Line>
+ <Line>hurtigere end en side i en lærebog i matematik eller</Line>
+ <Line>biologi. Det kræver en bestemt teknik at lære en lek-</Line>
+ <Line>tie, hvor man skal forstå og huske det læste. Man kan</Line>
+ <Line>godt læse lektien 2-3 gange uden at have lært den.</Line>
+ <Line>Et af de vigtigste midler til effektiv lektielæsning</Line>
+ <Line>er koncentration, det vil sige evnen til at holde tan-</Line>
+ <Line>kerne samlede om den opgave, man er optaget af. Man</Line>
+ <Line>lærer ikke sin lektie, hvis tankerne flakker rundt,</Line>
+ <Line>medens man læser. Det kræver ofte stor viljeanspændel-</Line>
+ <Line>se og selvdisciplin at koncentrere sig. Den største</Line>
+ <Line>hjælp til koncentration er virkelig interesse for den</Line>
+ <Line>foreliggende opgave, men der er vel ingen, der synes,</Line>
+ <Line>at alle opgaver er lige interessante. Det er dog værd</Line>
+ <Line>at lægge mærke til, at hvis man for alvor forsøger at</Line>
+ <Line>læse en lektie og grundigt sætter sig ind i stoffet,</Line>
+ <Line>så vil man mærke, at interessen kommer af sig selv.</Line>
+ <Line>rejste siden slår slags stærk træer unge forskellige</Line>
+ <Line>rejste siden slår slags stærk træer unge forskellige</Line>
+ <Line>heller hus høres kender manden meddele afsende modtage</Line>
+ <Line>heller hus høres kender manden meddele afsende modtage</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 28: Repetition og øvelser 17</NewCharacters>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>abcdefghijklmnopqrstuvwxyzæøå,.-</Line>
+ <Line>Mit telefonnummer er fra 24. november 35 17 88 96</Line>
+ <Line>Mit telefonnummer er fra 24. november 35 17 88 96</Line>
+ <Line>Mit telefonnummer er fra 24. november 35 17 82 96</Line>
+ <Line>Der findes dyr med mærkelige spisevaner ganske ligesom</Line>
+ <Line>mennesker. Mange insekter er vegetarianere, andre er</Line>
+ <Line>lidenskabelige kødædere. Sommerfuglelarver spiser al-</Line>
+ <Line>mindeligvis blade, men der findes en art, der kun kan</Line>
+ <Line>trives på en ganske bestemt pileart - al anden føde</Line>
+ <Line>nægter den at spise, om den så skal dø af sult. Menne-</Line>
+ <Line>sker og dyr behøver i virkeligheden de samme nærings-</Line>
+ <Line>stoffer, som de indtager i forskellig form. Alle har</Line>
+ <Line>behov for fedt og sukker som brændstof for organismen</Line>
+ <Line>og kraftkilde for musklerne. Disse stoffer er lige så</Line>
+ <Line>nødvendige, som olien er det for en dieselmotor, der</Line>
+ <Line>skal kunne yde noget.</Line>
+ <Line>Naturligvis er det ikke nødvendigt udelukkende at spi-</Line>
+ <Line>se sukker. Brød og kartofler er sukkerkilder for krop-</Line>
+ <Line>pen, idet disse fødemidlers hovedbestanddel, stivelse,</Line>
+ <Line>i kemisk henseende står sukkeret nær og faktisk omdan-</Line>
+ <Line>nes til sukkerstof af vore fordøjelsesorganer. Samtidig</Line>
+ <Line>er det nødvendigt at få tilført æggehvidestoffer, pro-</Line>
+ <Line>tein, idet kroppen for en stor del består af æggehvide-</Line>
+ <Line>stoffer.</Line>
+ <Line>taget vokser vort øjne derved fattige hoved høje især</Line>
+ <Line>taget vokser vort øjne derved fattige hoved høje især</Line>
+ <Line>langsomt ligner råbte ro time tusinde bare dårlig eneste</Line>
+ <Line>langsomt ligner råbte ro time tusinde bare dårlig eneste</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 29: Repetition og øvelser 18</NewCharacters>
+ <Line>aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz aiqy bjrz</Line>
+ <Line>emuå fnw, emuå fnw, emuå fnw, emuå fnw, emuå fnw,</Line>
+ <Line>3 stk. autobørster nr. 2172 a kr. 18,25</Line>
+ <Line>4 stk. autobørster nr. 2179 a kr. 16,35</Line>
+ <Line>I de egne af jorden, der er hjemsøgt af jordskælv, findes</Line>
+ <Line>der også vulkaner. Man har kaldt dem ildsprudende bjerge,</Line>
+ <Line>men der er ikke ild, der kommer ud af vulkanerne, det er</Line>
+ <Line>smeltede, glødende stenmasser og store mængder af vand-</Line>
+ <Line>damp og andre luftarter, der sammen med støv, grus og sten</Line>
+ <Line>undertiden slynges kilometerhøjt til vejrs. Disse masser</Line>
+ <Line>oplyses nedefra, og det ser derfor ud, som om det er ild,</Line>
+ <Line>der står ud af bjergets åbning.</Line>
+ <Line>Man troede tidligere, at vulkanernes glødende masser kom</Line>
+ <Line>fra et smeltet jordindre. I vore dage hælder man til den</Line>
+ <Line>anskuelse, at der i tyve til tredive kilometers dybte un-</Line>
+ <Line>der jordoverfladen foregår radioaktive processer, hvorved</Line>
+ <Line>der opstår så høj en temperatur, at de fleste klipper smel-</Line>
+ <Line>ter.</Line>
+ <Line>Den smeltede masse kaldes magma. Denne masse bliver ved</Line>
+ <Line>ophedningen lettere end de omgivende faste dele, og den</Line>
+ <Line>smelter sig derfor vej opefter igennem de endnu faste</Line>
+ <Line>klipper. Magmaen indeholder mange forskellige luftarter,</Line>
+ <Line>bland andet enorme mængder af vanddamp. Når jordskorpen</Line>
+ <Line>ved vulkanudbruddet gennembrydes, slynges dele af den</Line>
+ <Line>sønderbrudte jordskorpe sammen med glødende magmadele til</Line>
+ <Line>vejrs med de eksploderende luftarter.</Line>
+ <Line>enkelte faldt færdige hørte kære livet løber nær sommeren</Line>
+ <Line>enkelte faldt færdige hørte kære livet løber nær sommeren</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 30: Repetition og øvelser 19</NewCharacters>
+ <Line>cksæ dltø cksæ dltø cksæ dltø cksæ dltø cksæ dltø</Line>
+ <Line>gov. hpx- gov. hpx- gov. hpx- gov. hpx- gov. hpx-</Line>
+ <Line>Afgang hver mandag kl. 6.35 og hver fredag kl. 7.25</Line>
+ <Line>Afgang hver mandag kl. 6.35 og hver fredag kl. 7.25</Line>
+ <Line>Når vinden kommer fra havet, fører den altid vand med sig</Line>
+ <Line>ind over land. Det kan være vanddamp eller vanddråber. Så</Line>
+ <Line>længe luften endnu ikke er mættet med vanddamp, kan den</Line>
+ <Line>stadig optage mere vand, og den virker derfor udtørrende.</Line>
+ <Line>Når den under en given temperatur ikke kan optage mere</Line>
+ <Line>vanddamp, siger man, at den er mættet. Ved temperaturstig-</Line>
+ <Line>ning kan luften optage mere vand, ved temperaturfald kon-</Line>
+ <Line>denseres, det vil sige fortættes vanddampen. Man taler så</Line>
+ <Line>om, at temperaturen har nået dugpunktet.</Line>
+ <Line>Bæres de vandmættede luftstrømme ind over land i lav høj-</Line>
+ <Line>de, kaldes de tågebanker. Driver de højere oppe, kaldes</Line>
+ <Line>de skyer. Disse dannes næsten altid, hvor kold og varm</Line>
+ <Line>luft mødes. Hvor en vandfyldt luftmasse hurtigt afkøles,</Line>
+ <Line>kan man se skyer vokse frem med stor hastighed. Vanddrå-</Line>
+ <Line>berne i skyerne vil, så længe de er små, kunne holdes</Line>
+ <Line>svævende meget længe på grund af opstigende varm luft.</Line>
+ <Line>Hvis opdriften aftager, og dråberne bliver tunge, vil de</Line>
+ <Line>falde ned som regn. Hvis varm luft glider ind over kold</Line>
+ <Line>luft, vil vi næsten altid få silende heldagsregn. Skyder</Line>
+ <Line>kold luft ind under varm luft, får vi kraftige byger.</Line>
+ <Line>ting vidste året blandt f.eks. forstod hjælp hvorfor</Line>
+ <Line>ting vidste året blandt f.eks. forstod hjælp hvorfor</Line>
+ <Line>hvorledes kort navn tak vender vældige bede ca. kunne</Line>
+ <Line>hvorledes kort navn tak vender vældige bede ca. kunne</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 31: Afhjælpning af typiske fejl: ae as bv cv dk ds ea ei</NewCharacters>
+ <Line>ansvar afklar attrap klar bank sanktion transaktion aks</Line>
+ <Line>barnagtig klar nar kanal kanasta fatal ananas asfalt ar</Line>
+ <Line>kvadrat araber racehad ar at da ja nat rat lak ham bank</Line>
+ <Line>tavle kabale mad allak arrangement arv banan latakia ad</Line>
+ <Line>barbar barnebarn bank brobyggeri bredbladet birkebarken</Line>
+ <Line>benbrud babybad bænkebidder berberis bæger begriber bue</Line>
+ <Line>central citrus center chintz celcius cafe check cowboys</Line>
+ <Line>cif cyklus cocktail cognac accept calcium succes cancan</Line>
+ <Line>dine adfærd med dag udsende daddel ild dit dyd dividere</Line>
+ <Line>dåd dodder dødsdømt ding dang ræd dødvande dåvildt sæde</Line>
+ <Line>dale der den addere dem odder dagdriver drøm dog handle</Line>
+ <Line>did dadel dato dedikation debet ideel dernede dolk drik</Line>
+ <Line>emne dette efter eder efeu ejendel flere ene mellem tre</Line>
+ <Line>kendsgerning rederi sirene service metersystemet energi</Line>
+ <Line>elleve eneste en et hed erfare henvende meddelelse etat</Line>
+ <Line>deres reder herved ellers ekko evne seddel eksamen lede</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 32: Afhjælpning af typiske fejl: fg gf gh hg hj ie io jh</NewCharacters>
+ <Line>frafald fast fabel affald offer efter første forfald af</Line>
+ <Line>asfalt fosfor forfatter frakke frifinde fred fanfare få</Line>
+ <Line>og gengive gø angå sagogryn goddag geolog gerrig gæring</Line>
+ <Line>gage gang gengæld genopbygge gigt gul god gale gav gære</Line>
+ <Line>gage gengæld gibs giv lægge gags gang gruble gys agerer</Line>
+ <Line>engagere gamling genganger gul grøn gøre agent gnu ugle</Line>
+ <Line>hjem henhold ham handel hvem har hippie højhalset højre</Line>
+ <Line>hed hen hvorhen handske hejre hjerte høns hilsen højhed</Line>
+ <Line>her hen ham henhold have hæk hasard charme hilsen hvede</Line>
+ <Line>holden hud handel hundehus hvalp husholder hastig hilse</Line>
+ <Line>ind ild hils bring ir ris fri sit tidlig giftig million</Line>
+ <Line>iltog ironi biologi triologi irritation citat ilt idiot</Line>
+ <Line>elite erika incitament initiativ irriterende indbinding</Line>
+ <Line>individ indianer indesidden indblik indicere indeks ilt</Line>
+ <Line>jul jeres ja juli jazz jævn kajak jetjager jasmin juice</Line>
+ <Line>jakke eje dej jo juni jævn jet jura journal januar jury</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 33: Afhjælpning af typiske fejl: kd kl lk ls mn nm nv oi</NewCharacters>
+ <Line>kukkuk anke kokon kollekt koks kokken kolerisk kompleks</Line>
+ <Line>kokos klask klinke klokke klynk kokain konkret krakiler</Line>
+ <Line>kaskade kajak kanin koket konkurs kvantum akkurat kirke</Line>
+ <Line>kurs dukke kamik kikke krukke konkurrence kram kokarder</Line>
+ <Line>lille lovlig linoleum ligeløn ligestilling lanolin lang</Line>
+ <Line>levere alle lollænder lynlås lægelig lilje læspe løs lå</Line>
+ <Line>lak tallerken lov låg lo le al mel lollænder lovlig læk</Line>
+ <Line>lemfældig lette kolonial livlig løfte ligeløn lotto ild</Line>
+ <Line>meddele mest mammut medbestemmelse meddelelsesmiddel må</Line>
+ <Line>museum mulig mølle mægler mad mere mamma murer mime mut</Line>
+ <Line>nedennævnte anerkende nogen nonne navnlig nødvendig nat</Line>
+ <Line>nuance nænne næsten nødlande nævninge notabene nationen</Line>
+ <Line>nænne nat anden næsen renden nonnen nynner kinden sneen</Line>
+ <Line>nankin neon niende nonsens inden bønne rank kunne kanon</Line>
+ <Line>opera også omsorg oldemoder oktober oldenborre opponent</Line>
+ <Line>omsonst nordre optog ordre overopsyn ortopæd opfordrede</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 34: Afhjælpning af typiske fejl: op på rt sd sl tr uy vb</NewCharacters>
+ <Line>overliste odont ottoman orlov ozon ovenover sort oboist</Line>
+ <Line>orgel ortografi obo tons jolle oktav ornotolog over tom</Line>
+ <Line>papir paprika paraply papæske poplin polyfoto polo oppe</Line>
+ <Line>propaganda opponent psykologi prydplante pamper primula</Line>
+ <Line>rare radere reol reparere rang referere rar reform roer</Line>
+ <Line>regenerere redegøre rapir redder raseri rekreere ringer</Line>
+ <Line>stang scene saksofon svensk serie esse små snavs shorts</Line>
+ <Line>sanse solo sanktion siesta sekvens sne saft se souschef</Line>
+ <Line>grosserer sanse straks skanse sit sans skrift skænd sti</Line>
+ <Line>standse grossist sko hastesag svar forespørge som sidst</Line>
+ <Line>tætte tekst tast titel tiltag tomt tvist tylt tautologi</Line>
+ <Line>teint tyst team tantieme tendentiøs atlet tiltale talte</Line>
+ <Line>under uvane udelukkende udsalg uformuende udsultet ulve</Line>
+ <Line>udhus ukultiveret undergrund ukulele ukuelig ukrudt urt</Line>
+ <Line>vende veksel vanvare vrang vedvarende via venlige vodka</Line>
+ <Line>viv viske væv væske værelse værdi hverv vegne varer var</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 35: Afhjælpning af typiske fejl: vn xc yu æø øæ åp ,. .,</NewCharacters>
+ <Line>virvar vrag væver var vrøvl vi vove væv vokseværket vov</Line>
+ <Line>vil votiv vovelige viv vivace hvor vistra ivrige valuta</Line>
+ <Line>xerografi xylofon xeroform xenia oxygen oxydere saxofon</Line>
+ <Line>axminster foxtrot hydroxyl mixed mixtur flux box oxford</Line>
+ <Line>ydeevne yderligere tydelig ytre ynkværdig synlig myndig</Line>
+ <Line>yalelås byrde cykel ypperste lymfe ydmyg yoga ny lyd sy</Line>
+ <Line>æbletræ ærekær ærbar ærlig ærkefjende ærgerrig æter kær</Line>
+ <Line>æske pæretræ nænsom ændre blæse udtrække hændelse æsler</Line>
+ <Line>ørkesløs øredøvende økonomi øjeblik østrigsk ønske tøve</Line>
+ <Line>østers østersøen ønskedrøm køn løn høns øllebrød økonom</Line>
+ <Line>åben rå åndeløs åndfuld århusianer tåbe låne dåne sådan</Line>
+ <Line>både vådeskud tårn skåne åre lås hånd når måne åben sår</Line>
+ <Line>og, at, det, en, den, til, er, de, af, på, var, han, i,</Line>
+ <Line>så, med, ikke, for, men, vi, som, sig, har, jeg, deres,</Line>
+ <Line>hr. fr. dvs. osv. etc. evt. dus. stk. ds. sk. gl. iflg.</Line>
+ <Line>ks. pk. fl. sp. ca. jfr. kl. kr. o.lign. bl.a. j.nr. f.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 36: Træning i hastighed og sikkerhed, 1</NewCharacters>
+ <Line>Lige siden huleboerne for tredive tusinde år siden malede</Line>
+ <Line>på drypstensgrotternes vægge, har menneskene prøvet på at</Line>
+ <Line>afskaffe den grå hverdag og gøre livet mere farverigt. De</Line>
+ <Line>har prøvet at efterligne naturens farvepragt, og de har</Line>
+ <Line>lidt efter lidt erfaret, at farverne har stor psykologisk</Line>
+ <Line>betydning med stærk indvirkning på gemyttet. Tidligere gem-</Line>
+ <Line>te mennesker sig bag mørke farver. Stuernes vægge var mør-</Line>
+ <Line>kegrønne, eller brune, og gardinerne holdt brutalt lyset ude.</Line>
+ <Line>Møbler var betrukket med sorte hestehår, og det tøj, man</Line>
+ <Line>bar, var også mørkt og trist. Vor tid er i langt højere</Line>
+ <Line>grad farveforbrugende. Takket være kemien og industrien,</Line>
+ <Line>der siden anden verdenskrig har gennemgået en rivende ud-</Line>
+ <Line>vikling, har vi i dag flere muligheder end nogen sinde før</Line>
+ <Line>for at tilfredstille vor latente farveglæde. Der er dog</Line>
+ <Line>først i de seneste år, at farverne virkelig har lavet om på</Line>
+ <Line>vor hverdag og har præget vor tilværelse - regnbuen er ble-</Line>
+ <Line>vet hvermands eje.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 37: Træning i hastighed og sikkerhed, 2</NewCharacters>
+ <Line>Syntetiske farver og plasticmaling har gjort det nemt for</Line>
+ <Line>enhver ar sætte kulør på hjemmet. Ingen er bange for at ta-</Line>
+ <Line>ge en pensel og en bøtte maling og smøre solskin på hjem-</Line>
+ <Line>mets vægge. Familiens medlemmer har fundet en ny fælles in-</Line>
+ <Line>teresse. Farvehandlerens butik bugner med materialerm, som</Line>
+ <Line>kan live op og skabe humør. Der er mode i farver. Når en</Line>
+ <Line>modeskaber i Paris bestemmer, at nu skal kvinderne gå i</Line>
+ <Line>beige og grønt, så sidder farvefabrikanterne ved hans fød-</Line>
+ <Line>der og kigger med og indretter produktionen derefter. Rå-</Line>
+ <Line>stofferne til dansk farve- og lakindustri kommer fortrins-</Line>
+ <Line>vis fra England og Tyskland, men der er også en stor frem-</Line>
+ <Line>stilling herhjemme. Stort set består en liter maling af</Line>
+ <Line>tre lige store dele, nemlig farvestof, bindemiddel og for-</Line>
+ <Line>tyndingsvæske. Farvestoffet - eller pigmentet - blev oprin-</Line>
+ <Line>deligt fremstillet af planteudtræk, men det produceres nu</Line>
+ <Line>ad kemisk vej. Bindemidlet kan være vand, alkyder eller ve-</Line>
+ <Line>getabilske olier. Fortyndingsvæsken er terpentin eller</Line>
+ <Line>kulbrinte.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 38: Træning i hastighed og sikkerhed, 3</NewCharacters>
+ <Line>Tiden går. Den er kostbar, og den skal udnyttes. Det er en</Line>
+ <Line>gammel erfaring, men sætningens første ord er ikke helt så</Line>
+ <Line>ligetil. Tiden er et begreb, som vi kender godt fra vore</Line>
+ <Line>sanser, og som dog er så svært at definere. Men vi kan må-</Line>
+ <Line>le tiden. I os har vi et indbygget tidsmål, pulsslagene,</Line>
+ <Line>ca. et i sekundet, somme tider flere, somme tider færre.</Line>
+ <Line>Solen angiver dag og nat, og de fire årstider skifter. Vi</Line>
+ <Line>kan ikke opfatte kortere tider end et øjes blinken og læn-</Line>
+ <Line>gere tider end vort eget liv, men alligevel ved vi, at ti-</Line>
+ <Line>den går tilbage før vor fødsel og vil fortsætte efter vor</Line>
+ <Line>død - men denne viden ligger uden for vore sansers opfat-</Line>
+ <Line>telsesevne. Vi kan ikke forbedre vore sanser, man vi kan</Line>
+ <Line>skaffe os redskaber, som deler tiden op. Vi kan lave ure.</Line>
+ <Line>Primitive folkeslag kan klare sig med den inddeling af ti-</Line>
+ <Line>den, som solens gang hen over himlen giver. De kan nøjes</Line>
+ <Line>med at dele dagen i morgen, middag, aften og nat.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 39: Træning i hastighed og sikkerhed, 4</NewCharacters>
+ <Line>Denne inddeling ville ikke være tilstrækkelig i et højt ud-</Line>
+ <Line>viklet samfund som vort, hvor folk skal møde på arbejde til</Line>
+ <Line>fastsatte tider, og hvor arbejdets varighed er målt ud i</Line>
+ <Line>tid efter overenskomster mellem arbejdsgivere og arbejdsta-</Line>
+ <Line>gere. Også fritidens interessante tv-underholdning begynder</Line>
+ <Line>med sekunders nøjagtighed på klokkeslet fastsat ugen i for-</Line>
+ <Line>vejen. Det hele lyder så nemt, men er dog så svært, for al-</Line>
+ <Line>le skal jo være enige om, hvorfra tiden skal tælles, hvilke</Line>
+ <Line>enheder der skal vælges, og urene skal gå ens. Solens dag-</Line>
+ <Line>lige bevægelse rundt om jorden er kun tilsyneladende. Det</Line>
+ <Line>er jo jorden, som en gang i døgnet drejer rundt om sin egen</Line>
+ <Line>akse, og hele systemet udgør et mægtigt og temmeligt præcist</Line>
+ <Line>ur, som vi kan konstruere mekaniske ure til at følge og</Line>
+ <Line>samtidig benytte til at kontrollere disse ures nøjagtige</Line>
+ <Line>gang.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 40: Træning i hastighed og sikkerhed, 5</NewCharacters>
+ <Line>Fyrvæsenet er grundlagt af sørøvere - dog ikke det danske</Line>
+ <Line>fyr- og vagervæsen, men oldtidens og den tidlige middelal-</Line>
+ <Line>ders fyrvæsener i Middelhavet. Dette store indhav var i år-</Line>
+ <Line>hundreder hjemsøgt af sørøvere, der opererede fra uindtage-</Line>
+ <Line>lige borge på klippekyster og drog hærgende rundt i alle</Line>
+ <Line>middelhavsegnene. De lod opsætte fyr og ansatte formentlig</Line>
+ <Line>folk til at passe blussene - simpelt hen for bedre at kun-</Line>
+ <Line>ne finde rundt. De var jo ret interesserede i at kunne ope-</Line>
+ <Line>rere om natten. Der var dog også mere officielle fyr alle-</Line>
+ <Line>rede i oldtiden. Berømt er især fyrtårnet Pharos, et af den</Line>
+ <Line>gamle verdens syv underværker. Det er meget sandsynligt, at</Line>
+ <Line>de danske vikinger, der også hovedsagelig bevægede sig</Line>
+ <Line>langs kysterne, har haft faste aftaler om at holde brænden-</Line>
+ <Line>de bavner vedlige passende steder, når de skulle drage i</Line>
+ <Line>leding, eller vikingeflåden var ventet hjem.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 41: Træning i hastighed og sikkerhed, 6</NewCharacters>
+ <Line>Første vidnesbyrd om et offentligt forordnet fyr i Dan-</Line>
+ <Line>mark stammer fra Dragør - en af de pladser ved Øresunds</Line>
+ <Line>bredder, hvor der i middelalderen var marked om efteråret</Line>
+ <Line>i de århundreder, da silden kunne fiskes her i uhyre mæng-</Line>
+ <Line>der. I over tre hundrede år blussede man på stranden i</Line>
+ <Line>Dragør for at vise skibene fra hansestæderne vej. Det var</Line>
+ <Line>Frederik den Anden, der forordnede fyr opsat på Skagen,</Line>
+ <Line>Anholt og Kullen. Besked om fyrenes anordning blev sendt</Line>
+ <Line>ud gennem toldvæsenet i Helsingør, der jo i kraft af sund-</Line>
+ <Line>tolden var den mest internationalt orienterede by i Norden.</Line>
+ <Line>Af en eller anden grund kaldte man dem papegøjefyr. Da man</Line>
+ <Line>ikke kender deres konstruktion, er det svært at gætte hvor-</Line>
+ <Line>for. Det menes, at fyrene har bestået af en fyrpande på</Line>
+ <Line>toppen af en mast, og at man har fyret med brænde. I så</Line>
+ <Line>fald har man vel sammenlignet med de kunstige papegøjer på</Line>
+ <Line>en stang, som skydebrødre skød til måls efter. Masten har</Line>
+ <Line>næppe været højere, end at fyrmesteren har kunnet holde</Line>
+ <Line>blusset vedlige ved hjælp af en stige.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 42: Træning i hastighed og sikkerhed, 7</NewCharacters>
+ <Line>Betegnelsen økologi kommer af det græske ord oikos, der be-</Line>
+ <Line>tyder hus, levested eller lignende. Den videnskab, der be-</Line>
+ <Line>skæftiger sig med læren om organismerne i deres naturlige</Line>
+ <Line>omgivelser eller - sagt på en anden måde - med naturens</Line>
+ <Line>struktur og funktion, kaldes økologi, der som selvstændig</Line>
+ <Line>videnskab er relativ ung. Dens forskningsprogram er først</Line>
+ <Line>blevet klart formuleret i det tyvende århundrede. Det har</Line>
+ <Line>dog altid været således, at jægere, diskere, kvægavlere og</Line>
+ <Line>agerdyrkere som en ganske naturlig ting har arbejdet ud fra</Line>
+ <Line>økologiske grundtanker. For disse mennesker er der ikke ta-</Line>
+ <Line>le om en ophøjet videnskab, de arbejder simpelt hen ud fra</Line>
+ <Line>deres egen dømmekraft og ud fra de erfaringer, der er op-</Line>
+ <Line>samlet gennem generationer. Som eksempel kan nævnes, at</Line>
+ <Line>agerdyrkeren bestræber sig på, at afgrøden skal give det</Line>
+ <Line>størst mulige udbytte. Han gør dette ved at udvælge plan-</Line>
+ <Line>tesorter, der passer til klima og jordbund. Han passer dem</Line>
+ <Line>og griber ind med regulerede foranstaltninger, hvis en</Line>
+ <Line>faktor svigter eller tager overhånd. Der gødes, kunstvan-</Line>
+ <Line>des eller plantes læhegn.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 43: Træning i hastighed og sikkerhed, 8</NewCharacters>
+ <Line>På en række afgørende punkter kan økologien tjene menneske-</Line>
+ <Line>hedens sag, og aldrig nogen sinde har behovet for viden og</Line>
+ <Line>forståelse på dette område været større end netop nu. Med</Line>
+ <Line>de enorme tekniske muligheder, der står til rådighed for</Line>
+ <Line>mennesker i dag, har vi opnået en uhyggelig evne til at æn-</Line>
+ <Line>dre og kontrollere vore omgivelser. Vor indsigt i de natur-</Line>
+ <Line>lige systemer, som vi prøver på at ændre, er ikke fulgt med</Line>
+ <Line>den større tekniske formåen. Uden økologisk viden kontrol-</Line>
+ <Line>lerer og bruger vi naturen i blinde, og som i de fleste til-</Line>
+ <Line>fælde, hvor en ukyndig søger at gribe ind i en kompliceret</Line>
+ <Line>mekanisme, fører dette til ødelæggelse. Ødelægges den natur-</Line>
+ <Line>lige balance i de processer, der foregår i naturen, kan ska-</Line>
+ <Line>den ikke gøres god igen i en håndevending, det kan tage år-</Line>
+ <Line>tier, før den naturlige balance er genoprettet.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 44: Træning i hastighed og sikkerhed, 9</NewCharacters>
+ <Line>Muskelinfiltrationer er en gigtsygdom, der viser sig ved</Line>
+ <Line>hårde, ømme knudedannelser i muskulaturen. De væsentligste</Line>
+ <Line>årsager hertil er kulde, træk og forceret arbejde i samme</Line>
+ <Line>stilling, men nervøsitet i forbindelse med et dårligt ar-</Line>
+ <Line>bejdsklima kan også være årsag til lidelsen. Muskelstof-</Line>
+ <Line>skiftet hæmmes, således at blodet ikke optager tilstræk-</Line>
+ <Line>keligt ilt, og affaldsstofferne ikke fjernes hurtigt nok.</Line>
+ <Line>Spændingerne begynder langs muskelkanterne, hvor blodfor-</Line>
+ <Line>syningen er dårligst, og breder sig videre til sener og</Line>
+ <Line>underhudsvæv. Ømheden opstår, når det hårde muskelvæv</Line>
+ <Line>trykker på nerverne og gennem centralnervesystemet frem-</Line>
+ <Line>kalder irritationen. En stor del af det arbejde, der fo-</Line>
+ <Line>regår på virksomhederne i dag, er specialiseret, og man-</Line>
+ <Line>ge mennesker er bundet til samme sted flere timer ad gan-</Line>
+ <Line>gen. Herved belastes kroppen hårdere end i perioder, hvor</Line>
+ <Line>der er mulighed for bevægelse, f.eks. i fritiden.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 45: Træning i hastighed og sikkerhed, 10</NewCharacters>
+ <Line>Skal muskelinfiltrationer undgås, gælder det om at skabe</Line>
+ <Line>et godt arbejdsmiljø. Rummets temperatur skal være behage-</Line>
+ <Line>lig, og selve arbejdspladsen skal være indrettet, således</Line>
+ <Line>at unødvendige anstrengelser undgås. Dårlig belysning kan</Line>
+ <Line>medføre hovedpine som følge af spændinger i hals og nakke.</Line>
+ <Line>De mennesker, der betjener regne- og skrivemaskiner, er</Line>
+ <Line>udsat for disse gener, hvis de sidder med løftede skuldre</Line>
+ <Line>og med hovedet drejet i en bestemt vinkel gennem længere</Line>
+ <Line>tid. Hvis der ikke føres noget for at modvirke spændinger-</Line>
+ <Line>ne, bliver de angrebne dele af kroppen trætte og tunge, og</Line>
+ <Line>resultatet kan blive kroniske gigtlidelser. Ved behandling</Line>
+ <Line>af infiltrationerne må man først sætte ind på at fjerne</Line>
+ <Line>årsagen til deres opståen, og dernæst må man lindre smer-</Line>
+ <Line>terne hos de personer, der har fået lidelsen. Behandlin-</Line>
+ <Line>gen består i kortbølge-, massage- eller varmebehandlinger,</Line>
+ <Line>som fremmer blodomløbet, således at der tilføres mere ilt,</Line>
+ <Line>og de ophobede affaldsstoffer fjernes.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 46: Folkeskolens prøve i hastighed og sikkerhed, 1</NewCharacters>
+ <Line>Hvis det gælder om at holde sig vågen, hjælper det at drikke</Line>
+ <Line>en kop kaffe eller en kop te. Dette skyldes, at både teblade</Line>
+ <Line>og kaffebønner indeholder et stof, koffein, der blandt andet</Line>
+ <Line>har en mærkelig evne til at fjerne trangen til søvn, uden at</Line>
+ <Line>åndsevnerne påvirkes. Efter at man gar drukket en kop te el-</Line>
+ <Line>ler kaffe, vil koffeinet hurtigt blive optaget gennem mavens</Line>
+ <Line>og tarmens vægge. Allerede efter cirka et kvarters forløb er</Line>
+ <Line>det muligt at måle virkningen, der varer i det næste par ti-</Line>
+ <Line>mer. Man ved ikke meget om, hvordan det opkvikkende stof på-</Line>
+ <Line>virker vort nervesystem, og man må derfor indtil videre nøj-</Line>
+ <Line>es med at konstatere en vis positiv virkning på evnen til at</Line>
+ <Line>lære og ril at få ideer. Koffein i mindre portioner er uska-</Line>
+ <Line>deligt, men ved en dosis på over ti gram, der svarer til om-</Line>
+ <Line>kring hundrede kopper kaffe, bliver det dødeligt. Overdreven</Line>
+ <Line>nydelse af koffein kan give rystende hænder og hjertebanken.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 47: Folkeskolens prøve i hastighed og sikkerhed, 2</NewCharacters>
+ <Line>Det er normalt, at et lille barn i løbet af sit første leve-</Line>
+ <Line>år har lært at sige nogle få ord og udføre nogle enkle hånd-</Line>
+ <Line>bevægelser som at gribe noget og ryste det eller føre det op</Line>
+ <Line>til munden. Som regel har det også lært at kende sin familie</Line>
+ <Line>fra fremmede mennesker, og det er godt på vej til at lære at</Line>
+ <Line>gå. I denne tidligste barndom lærer de fleste børn nogenlun-</Line>
+ <Line>de lige meget, og i virkeligheden er det en imponerende ind-</Line>
+ <Line>læringsproces, der finder sted i sådan en lille hjerne, selv</Line>
+ <Line>om det ikke kommer så tydeligt til udtryk i det, barnet kan.</Line>
+ <Line>Spædbarnet skal især lære at se tingene omkring sig som ting</Line>
+ <Line>og ikke blot som usammenhængende prikker og pletter. De man-</Line>
+ <Line>ge små sanseceller i øjnene sender nemlig besked om hver de-</Line>
+ <Line>res lille del af synsfeltet til hjernen, som så skal lære at</Line>
+ <Line>sætte alle disse billeder sammen til en helhed, og først når</Line>
+ <Line>der er blevet lært, opfatter barnet et ansigt som et ansigt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 48: Folkeskolens prøve i hastighed og sikkerhed, 3</NewCharacters>
+ <Line>Mange unge har en naturlig interesse i at beskæftige sig med</Line>
+ <Line>børn, og de fleste vil før eller senere få med børn at gøre.</Line>
+ <Line>Barnepleje er således et livsnært emne at tage op for eksem-</Line>
+ <Line>pel som et valgbart kursus for elever i skolens ældste klas-</Line>
+ <Line>ser. Formålet med denne undervisning må selvfølgelig være at</Line>
+ <Line>give eleverne viden og færdigheder vedrørende småbørns pleje</Line>
+ <Line>og pasning, og desuden skal de efterhånden også opnå indsigt</Line>
+ <Line>i det ansvar, som altid følger med at have med børn at gøre.</Line>
+ <Line>Derfor bør arbejdet i timerne foregå på en sådan måde, at de</Line>
+ <Line>personlige egenskaber, der er nødvendige, hvis man skal kun-</Line>
+ <Line>ne påtage sig ansvaret for børn, bliver udviklet hos elever-</Line>
+ <Line>ne. Undervisningen skal også indeholde en orientering om den</Line>
+ <Line>støtte og hjælp, som samfundet tilbyder en familie med børn.</Line>
+ <Line>Hvor det forekommer naturligt, bør man ikke alene omtale det</Line>
+ <Line>sunde barn, men også det handicappede barns særlige forhold.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 49: Folkeskolens prøve i hastighed og sikkerhed, 4</NewCharacters>
+ <Line>Vore oldeforældre i byerne tog en enkelt gang om året en tur</Line>
+ <Line>i skoven eller ud på landet i maj eller juni måned, når vej-</Line>
+ <Line>ret var godt. Oldefar var i sit bedste jakkesæt. På fødderne</Line>
+ <Line>havde han fjederstøvler og på hovedet sin fine stråhat. Hvis</Line>
+ <Line>han smed jakken, så man hans tæt tilknappede vest, og gennem</Line>
+ <Line>de ærmeløse gab stak hans skjorteærmer med de hvide, stivede</Line>
+ <Line>manchetter. Blev varmen ulidelig, knappede han vesten op, så</Line>
+ <Line>man kunne se hans seler. Oldemor var i lang sort kjole, høj-</Line>
+ <Line>halset, besat med kniplinger. Håret, der var sat op på hove-</Line>
+ <Line>det, skærmede hun imod solen med sin sorte silkeparasol. Når</Line>
+ <Line>varmen blev helt uudholdelig, åbnede hun de høje knapstøvler</Line>
+ <Line>en ganske lille smule. Frokosten belv indtaget i det grønne.</Line>
+ <Line>Den var medbragt hjemmefra, omhyggeligt pakket ind i en sko-</Line>
+ <Line>tøjsæske, som agurkesalaten gjorde våd. En skovtur blev vel-</Line>
+ <Line>lykket, når det gode vejr holdt sig, til man var vel hjemme.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Lektion 50: Folkeskolens prøve i hastighed og sikkerhed, 5</NewCharacters>
+ <Line>Et dovendyr føler sig kun hjemme, når det hænger i tropesko-</Line>
+ <Line>vens grene, hvor det bevæger sig med en udpræget langsomhed,</Line>
+ <Line>hvad der har givet dyret navn. Hvis et dovendyr bliver udsat</Line>
+ <Line>for fare, kan det flygte med en fart af omkring to kilometer</Line>
+ <Line>i timen, men denne hastighed bliver der kun tale om, når det</Line>
+ <Line>for alvor gælder livet. Det virker komisk med en sådan lang-</Line>
+ <Line>somhed, men det er i virkeligheden en styrke for et dovendyr</Line>
+ <Line>at bevæge sig sådan. Så er der nemlig ingen, der lægger mær-</Line>
+ <Line>ke til det. Dovendyret er også vanskeligt at få øje på, for-</Line>
+ <Line>di der er grønt som de blade, det hænger imellem. Ikke fordi</Line>
+ <Line>det har en grøn pels, for det er der ingen dyr, der har, men</Line>
+ <Line>fordi det som det eneste dyr har alger i håret. Hvert enkelt</Line>
+ <Line>hår er forsynet med riller på langs og på tværs, og i dem er</Line>
+ <Line>det muligt for algerne at gro. Det sker dog ikke i en zoolo-</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/danish2.ktouch.xml b/ktouch/training/danish2.ktouch.xml
new file mode 100644
index 00000000..5c4bf20e
--- /dev/null
+++ b/ktouch/training/danish2.ktouch.xml
@@ -0,0 +1,152 @@
+<KTouchLecture>
+ <Title>Danish (auto-generated)</Title>
+ <Comment>KTouch training file generated Sun Aug 25 22:07:37 2002
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>ffff jj jjj jjjj</Line>
+ <Line>f fjf fjjj jjjf</Line>
+ <Line>ffjjf fjf j fjjj jj</Line>
+ <Line>jff f ffff j fj</Line>
+ <Line>jjjf fjj fjfjj fj</Line>
+ <Line>j jf jjjf jf jfj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>kfkf kd dfj jk dk</Line>
+ <Line>fk d kd dfj fjd</Line>
+ <Line>jk dfj dfj d d</Line>
+ <Line>k dk fk d jk kd</Line>
+ <Line>df dfj jd dfj dfj</Line>
+ <Line>jjk d dk kfkf fjd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>ksdd fld s s dkld</Line>
+ <Line>jll fkl s fld ds</Line>
+ <Line>fld l sjk kld kld</Line>
+ <Line>sk ffkl fkl sk</Line>
+ <Line>dl sf dkld ffs</Line>
+ <Line>dkld kl dl sdl lsd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>øa</NewCharacters>
+ <Line>rad sjals ja lala</Line>
+ <Line>løds kaj falk flak</Line>
+ <Line>fad flaks rød fladsøs</Line>
+ <Line>ras skalk løds salsa</Line>
+ <Line>løj klask da a fa</Line>
+ <Line>køls asks dødsfalds</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>saft afnød klat anskaf</Line>
+ <Line>raskt taktfast naj</Line>
+ <Line>fastansat slants stanks</Line>
+ <Line>nat afnød østland</Line>
+ <Line>tskf anstand løsladt</Line>
+ <Line>fladt støjs afnød</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iv</NewCharacters>
+ <Line>skandinavistisk afstiv tavst</Line>
+ <Line>divans asiat kitinskal</Line>
+ <Line>statists instinktiv anilin</Line>
+ <Line>standtid kids finans</Line>
+ <Line>vvs visa annalistisk</Line>
+ <Line>klatvist vindfløj fatalists</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>øffes kilet vandstandene</Line>
+ <Line>fjenden standenes svinde</Line>
+ <Line>svalendes afskallendes</Line>
+ <Line>søvejenes sammenfattendes</Line>
+ <Line>mjavede afstødes øjnes</Line>
+ <Line>stødtandens assistents mine</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>akkilessenernes versenes madrasser</Line>
+ <Line>radikaliseredes fritidshjemmenes</Line>
+ <Line>afskrivere saltsøers retssalen</Line>
+ <Line>diasrammer rimesse svinemiklers</Line>
+ <Line>hankedes lejekaserners</Line>
+ <Line>timevisers familiariseredes</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>agathe fritekstsøgning</Line>
+ <Line>hagendes demonstrators</Line>
+ <Line>motellerne maoisme indtegn</Line>
+ <Line>trillingers vidneafhøringer</Line>
+ <Line>teltholdernes helligdage sorteringsmaskinens</Line>
+ <Line>sorteredes aftenandagt</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>simplifikationerne fejlbedømmelsers</Line>
+ <Line>genanvendelsesprojektets barberknivs</Line>
+ <Line>tilspidsningerne belliser spergel</Line>
+ <Line>promillekørsel strippokerne</Line>
+ <Line>eskaperes børsnoteret</Line>
+ <Line>bestrø patineredes</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qå</NewCharacters>
+ <Line>bondegårdenes fjortenårigs</Line>
+ <Line>spånløs indlåner fireåringen</Line>
+ <Line>frådseren afhåringers</Line>
+ <Line>pålideligstes delområderne</Line>
+ <Line>årsopgørelses båsens såmaskines</Line>
+ <Line>båndsprøjtningerne åredes vedgåelsen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wn</NewCharacters>
+ <Line>omredaktion rekordindehavere</Line>
+ <Line>sladderhankes stenbedsplanters</Line>
+ <Line>tapetseringerne åbnede hovmodendes</Line>
+ <Line>forkøbsrettighederne konfektioneres</Line>
+ <Line>apoteosens papirfabrikken</Line>
+ <Line>opløbnes konfereringers</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cæ</NewCharacters>
+ <Line>svækkelses tænkeboks ærmebladene</Line>
+ <Line>anticiperedes civilisationsformers</Line>
+ <Line>æggehvidestoffets desinficeringer</Line>
+ <Line>jærtegn racet efterspændingerne</Line>
+ <Line>centralisations kancellister</Line>
+ <Line>spættes demarchen congoleser</Line>
+ </Level>
+ <Level>
+ <NewCharacters>x</NewCharacters>
+ <Line>radixers excelleredes</Line>
+ <Line>lixens excesser dioxinbegrænsning</Line>
+ <Line>sexologiskes saxofonists</Line>
+ <Line>maxien oxider boxcalf</Line>
+ <Line>dioxinets sexmistænkt</Line>
+ <Line>mexico saxofonistens</Line>
+ </Level>
+ <Level>
+ <NewCharacters>,.</NewCharacters>
+ <Line>a.m.b.a. nov. nr. jan.</Line>
+ <Line>mv. mht. apr. dvs.</Line>
+ <Line>c. c. iht. nov.</Line>
+ <Line>etc. kl. tv. a.m.b.a.</Line>
+ <Line>bl.a. osv. d.v.s.</Line>
+ <Line>c. nr. apr. afs.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWYZÆØÅ</NewCharacters>
+ <Line>Ea Hermanda Mejken</Line>
+ <Line>Claramilla Mariettes Klas</Line>
+ <Line>Femmøllers Joahs Sella</Line>
+ <Line>Francas Jefs Irbits</Line>
+ <Line>Bredahls Klaves Silvanias</Line>
+ <Line>Amerika Aksinjas Jensmine</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/dvorak-fr-1.ktouch.xml b/ktouch/training/dvorak-fr-1.ktouch.xml
new file mode 100644
index 00000000..3880bd33
--- /dev/null
+++ b/ktouch/training/dvorak-fr-1.ktouch.xml
@@ -0,0 +1,299 @@
+<KTouchLecture>
+ <Title>French - Dvorak 1st part</Title>
+ <Comment>Apprentissage du clavier Dvorak-fr
+Partie 1
+30 mai 2002 - Francis Leboutte, www.algo.be
+7 décembre 2004 - Passage au format ktouch par Matthieu MOY
+14 septembre 2005 - Passage au format ktouch XML par Stéphane Raimbault</Comment>
+ <Levels>
+ <Level>
+ <LevelComment>Touches de base</LevelComment>
+ <NewCharacters>es</NewCharacters>
+ <Line>eeee ssss eeee ssss eeee ssss eeee ssss</Line>
+ <Line>eee ee s ee ssss ss</Line>
+ <Line>es es se se se es se es</Line>
+ <Line>s e se es ess see</Line>
+ <Line>e s es se see ess</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ut</NewCharacters>
+ <Line>uuuu tttt uuuu tttt uuuu tttt uuuu tttt</Line>
+ <Line>uuu uu t uu tttt tt</Line>
+ <Line>ut ut tu tu</Line>
+ <Line>tu ut tu ut</Line>
+ <Line>t u tu ut utt tuu</Line>
+ <Line>u t ut tu tuu utt</Line>
+ <Line>eeee ssss uuuu tttt</Line>
+ <Line>tu tu tu tu et et et et te te te te es es es es</Line>
+ <Line>su su su su</Line>
+ <Line>tes tes tes tes tes tes tes tes tes tes</Line>
+ <Line>tues tues tues tues tues tues tues tues</Line>
+ <Line>est est est est sus sus sus sus set set set set</Line>
+ <Line>test test test test tues tues tues tues sets sets sets sets</Line>
+ </Level>
+ <Level>
+ <NewCharacters>an</NewCharacters>
+ <Line>aaaa nnnn aaaa nnnn aaaa nnnn aaaa nnnn</Line>
+ <Line>aaa aa n aa nnnn nn</Line>
+ <Line>an an na na</Line>
+ <Line>na an na an</Line>
+ <Line>n a na an ann naa</Line>
+ <Line>a n an na naa ann</Line>
+ <Line>eeee ssss nnnn uuuu tttt aaaa</Line>
+ <Line>en en en en su su su su ne ne ne ne</Line>
+ <Line>ne ne ne ne us us us us tu tu tu tu</Line>
+ <Line>nu nu nu nu an an an an sa sa sa sa</Line>
+ <Line>ta ta ta ta es es es es te te te te</Line>
+ <Line>tas tas tas tas nue nue nue nue</Line>
+ <Line>ans ans ans ans sue sue sue sue</Line>
+ <Line>sut sut sut sut eut eut eut eut</Line>
+ <Line>tue tue tue tue set set set set</Line>
+ <Line>tau tau tau tau tau tau tau</Line>
+ <Line>use use use use uns uns uns uns eau eau eau eau</Line>
+ <Line>saut saut saut saut anus anus anus anus</Line>
+ <Line>anse anse anse anse</Line>
+ <Line>tenu tenu tenu tenu tant tant tant tant</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mots</LevelComment>
+ <NewCharacters></NewCharacters>
+ <Line>tasse tasse tasse tasse usent usent usent usent</Line>
+ <Line>tenus tenus tenus tenus</Line>
+ <Line>nasse nasse nasse nasse tante tante tante tante</Line>
+ <Line>suent suent suent suent</Line>
+ <Line>tente tente tente tente saute saute saute saute</Line>
+ <Line>suant suant suant suant</Line>
+ <Line>aunes aunes aunes aunes</Line>
+ <Line>usante usante usante usante naseau naseau naseau naseau</Line>
+ <Line>ananas ananas ananas ananas</Line>
+ <Line>ententes ententes ententes ententes ententes</Line>
+ <Line>ententes ententes ententes</Line>
+ </Level>
+ <Level>
+ <NewCharacters>od</NewCharacters>
+ <Line>oooo ddddd oooo ddddd oooo ddddd oooo ddddd</Line>
+ <Line>ooo oo d oo dddd dd</Line>
+ <Line>od od do do do od do od</Line>
+ <Line>d o do od odd doo o d od do doo odd</Line>
+ <Line>oooo uuuu ssss nnnn aaaa dddd tttt eeee</Line>
+ <Line>os os os os on on on on tu tu tu tu</Line>
+ <Line>ta ta ta ta de de de de ne ne ne ne</Line>
+ <Line>do do do do sa sa sa sa na na na na</Line>
+ <Line>ad ad ad ad us us us us ut ut ut ut</Line>
+ <Line>nu nu nu nu un un un un du du du du</Line>
+ <Line>se se se se es es es es te te te te</Line>
+ <Line>dos dos dos dos</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mots</LevelComment>
+ <NewCharacters></NewCharacters>
+ <Line>ton ton ton ton ose ose ose ose</Line>
+ <Line>des des des des des des des des des des</Line>
+ <Line>dettes dettes dettes dettes dettes dettes dettes dettes</Line>
+ <Line>nues nues nues nues nues nues nues nues nues nues nues</Line>
+ <Line>nous nous nous nous nous nous nous nous nous nous nous</Line>
+ <Line>dans dans dans dans dans dans dans dans</Line>
+ <Line>dont dont dont dont dont dont dont dont</Line>
+ <Line>oses oses oses oses unes unes unes unes date date date date</Line>
+ <Line>tout tout tout tout dose dose dose dose</Line>
+ <Line>dune dune dune dune anse anse anse anse</Line>
+ <Line>aune aune aune aune</Line>
+ <Line>notes notes notes notes notes notes notes notes</Line>
+ <Line>tons tons tons tons tons tons tons tons tons</Line>
+ <Line>dents dents dents dents dents dents dents dents</Line>
+ <Line>sautons sautons sautons sautons sautons sautons</Line>
+ <Line>dansons dansons dansons dansons dansons dansons</Line>
+ <Line>soute soute soute soute doute doute doute doute natte natte natte natte</Line>
+ <Line>tasse tasse tasse tasse anode anode anode anode atone atone atone atone</Line>
+ <Line>saute saute saute saute ouest ouest ouest ouest</Line>
+ <Line>suant suant suant suant sonde sonde sonde sonde soude soude soude soude</Line>
+ <Line>sonate sonate sonate sonate tondue tondue tondue tondue</Line>
+ <Line>usante usante usante usante anodes anodes anodes anodes</Line>
+ <Line>tondues tondues tondues tondues soudent soudent soudent soudent</Line>
+ <Line>usantes usantes usantes usantes</Line>
+ </Level>
+ <Level>
+ <LevelComment>Index, majeurs et annuaires vers le bas et le haut</LevelComment>
+ <NewCharacters>ir</NewCharacters>
+ <Line>ie ie ie ie ie ie ie ie ie ie ie ie ie ie</Line>
+ <Line>rs rs rs rs rs rs rs rs rs rs rs rs rs rs</Line>
+ <Line>ie ie ie rs rs ie rs ie ie rs rs rs ie rs</Line>
+ <Line>ie rs ie ie rs rs rs ie rs ie ie rs ie ie</Line>
+ <Line>ras ras ras ras ras ras ras ras ras ras ras</Line>
+ <Line>ide ide ide ide ide ide ide ide ide ide ide</Line>
+ <Line>sieurs sieurs sieurs sieurs sieurs sieurs</Line>
+ <Line>ries ries ries ries ries ries ries ries ries ries</Line>
+ <Line>sires sires sires sires sires sires sires sires</Line>
+ <Line>tait tait tait tait tais tais tais tais tais tais</Line>
+ <Line>rites rites rites rites rites rites rites rites</Line>
+ <Line>nions nions nions nions nions nions nions nions nions</Line>
+ <Line>rides rides rides rides rides rides rides rides</Line>
+ <Line>suer suer suer suer ruer ruer ruer ruer</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mots plus longs</LevelComment>
+ <NewCharacters></NewCharacters>
+ <Line>nouer nouer nouer nouer noter noter noter noter ruade ruade ruade ruade</Line>
+ <Line>droite droite droite droite sonder sonder sonder sonder</Line>
+ <Line>ardent ardent ardent ardent adroit adroit adroit adroit</Line>
+ <Line>danseur danseur danseur danseur adroite adroite adroite adroite</Line>
+ <Line>suinter suinter suinter suinter renouer renouer renouer renouer</Line>
+ <Line>notaire notaire notaire notaire noiraud noiraud noiraud noiraud</Line>
+ <Line>soutien soutien soutien soutien endroit endroit endroit endroit</Line>
+ <Line>sourdine sourdine sourdine sourdine sudation sudation sudation sudation</Line>
+ <Line>outsider outsider outsider outsider noterais noterais noterais noterais</Line>
+ <Line>soutenir soutenir soutenir soutenir adroites adroites adroites adroites</Line>
+ <Line>aiderons aiderons aiderons aiderons risettes risettes risettes risettes</Line>
+ <Line>nous autres nous autres nous autres nous autres nous autres nous autres</Line>
+ <Line>nourrirons nourrirons nourrirons nourrirons nourrirons nourrirons</Line>
+ <Line>soutiendra soutiendra soutiendra soutiendra</Line>
+ </Level>
+ <Level>
+ <LevelComment>Majeurs vers le bas</LevelComment>
+ <NewCharacters>,l</NewCharacters>
+ <Line>let let let let let let let let let let</Line>
+ <Line>u, u, u, u, u, u, u, u,</Line>
+ <Line>lutte, lutte, lutte, lutte, lutte, lutte, lutte, lutte,</Line>
+ <Line>let, let, let, let, let, let, let, let,</Line>
+ <Line>lut lut lut lut lut lut lut lut lut lut</Line>
+ <Line>lut, lut, lut, lut, lut, lut, lut, lut,</Line>
+ <Line>lait lait lait lait</Line>
+ <Line>lait, lait, lait, lait, lait, lait, lait,</Line>
+ <Line>ailette ailette ailette</Line>
+ <Line>ailette, ailette, ailette, ailette, ailette,</Line>
+ <Line>lots lots lots lots</Line>
+ <Line>lots, lots, lots, lots, lots, lots,</Line>
+ <Line>allure allure allure allure</Line>
+ <Line>allure, allure, allure, allure, allure, allure, allure,</Line>
+ <Line>silure silure silure</Line>
+ <Line>silure, silure, silure, silure, silure,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Majeurs vers le haut</LevelComment>
+ <NewCharacters>éc</NewCharacters>
+ <Line>ténu ténu ténu ténu ténu ténu ténu ténu ténu ténu</Line>
+ <Line>cet cet cet cet cet cet cet cet cet cet cet cet</Line>
+ <Line>ce ténu ce ténu ce ténu ce ténu ce ténu ce ténu ce ténu</Line>
+ <Line>suée suée suée suée suée suée suée suée</Line>
+ <Line>cote cote cote cote cote cote cote cote</Line>
+ <Line>écoute écoute écoute écoute écoute écoute</Line>
+ <Line>décrut décrut décrut décrut décrut décrut</Line>
+ <Line>racé racé racé racé racé racé</Line>
+ <Line>écrété écrété écrété écrété</Line>
+ <Line>acte acte acte acte acte acte acte</Line>
+ <Line>raclée raclée raclée raclée</Line>
+ <Line>écru écru écru écru écru écru</Line>
+ <Line>calé calé calé calé lacé lacé lacé lacé</Line>
+ <Line>codétenu codétenu codétenu codétenu codétenu</Line>
+ <Line>déci déci déci déci déci déci déci déci</Line>
+ <Line>tuée tuée tuée tuée</Line>
+ <Line>luné luné luné luné lancé lancé lancé lancé</Line>
+ <Line>éclaté éclaté éclaté éclaté lactée lactée lactée lactée</Line>
+ <Line>assuétude assuétude assuétude assuétude</Line>
+ </Level>
+ <Level>
+ <LevelComment>Annulaires vers le haut</LevelComment>
+ <NewCharacters>´m</NewCharacters>
+ <Line>mon mon mon mon mon mon mon mon mon mon mon</Line>
+ <Line>'a 'a 'a 'a 'a 'a 'a 'a 'a</Line>
+ <Line>mon mon 'a mon 'a 'a mon 'a 'a 'a mon 'a mon 'a mon 'a mon</Line>
+ <Line>l´air l´air l´air l´air l´air l´air l´air l´air</Line>
+ <Line>ment ment ment ment ment ment ment</Line>
+ <Line>d´une d´une d´une d´une d´une d´une</Line>
+ <Line>armée armée armée armée armée armée</Line>
+ <Line>l´amont l´amont l´amont l´amont l´amont</Line>
+ <Line>sommes sommes sommes sommes sommes</Line>
+ <Line>mains mains mains mains mains mains</Line>
+ <Line>enmena enmena enmena enmena enmena</Line>
+ <Line>écumait écumait écumait écumait écumait</Line>
+ <Line>l´allure l´allure l´allure l´allure l´allure l´allure</Line>
+ <Line>ma maman m'a donné une tomme</Line>
+ </Level>
+ <Level>
+ <LevelComment>Annulaires vers le bas</LevelComment>
+ <NewCharacters>pq</NewCharacters>
+ <Line>que que que que que que que que que que que</Line>
+ <Line>pan pan pan pan pan pan pan pan pan pan pan</Line>
+ <Line>pan que que pan pan que pan que pan pan que que pan que</Line>
+ <Line>quand quand quand quand quand quand quand</Line>
+ <Line>pente pente pente pente pente pente pente</Line>
+ <Line>quota quota quota quota quota quota quota quota quota</Line>
+ <Line>pain pain pain pain pain pain pain pain pain pain</Line>
+ <Line>prune prune prune prune prune prune</Line>
+ <Line>qui qui qui qui qui qui</Line>
+ <Line>plaque plaque plaque plaque plaque plaque plaque</Line>
+ <Line>temps temps temps temps temps temps</Line>
+ <Line>plouc plouc plouc plouc</Line>
+ <Line>pétal pétal pétal pétal</Line>
+ <Line>qualité qualité qualité qualité qualité</Line>
+ <Line>quiproquo quiproquo quiproquo quiproquo</Line>
+ <Line>auquel auquel auquel auquel auquel auquel</Line>
+ <Line>piquet piquet piquet piquet piquet</Line>
+ <Line>capé capé capé placé placé placé</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mots plus longs</LevelComment>
+ <NewCharacters></NewCharacters>
+ <Line>quoique quoique quoique quoique quoique quoique</Line>
+ <Line>pourquoi pourquoi pourquoi pourquoi pourquoi pourquoi</Line>
+ <Line>piqure piqure piqure piqure</Line>
+ <Line>plaquer plaquer plaquer plaquer</Line>
+ <Line>quasar quasar quasar quasar quasar quasar quasar</Line>
+ <Line>pommes pommes pommes pommes pommes pommes pommes</Line>
+ <Line>parques parques parques parques parques parques</Line>
+ <Line>pataras pataras pataras pataras pataras pataras</Line>
+ <Line>lunatique lunatique lunatique lunatique lunatique</Line>
+ <Line>quadrillerait quadrillerait quadrillerait quadrillerait</Line>
+ <Line>quenouille quenouille quenouille quenouille quenouille</Line>
+ <Line>atlantique atlantique atlantique atlantique atlantique</Line>
+ <Line>l´aptitude l´aptitude l´aptitude l´aptitude l´aptitude</Line>
+ <Line>pire pire pire pire plus plus plus plus</Line>
+ <Line>parts parts parts parts parts parts parts parts</Line>
+ <Line>partie partie partie partie glapir glapir glapir glapir</Line>
+ <Line>parie parie parie parie paire paire paire paire</Line>
+ <Line>pirate pirate pirate pirate</Line>
+ <Line>préemption préemption préemption préemption</Line>
+ </Level>
+ <Level>
+ <LevelComment>Index vers le haut</LevelComment>
+ <NewCharacters>gv</NewCharacters>
+ <Line>gens gens gens gens gens gens gens gens gens gens</Line>
+ <Line>vus vus vus vus vus vus vus vus vus vus vus vus</Line>
+ <Line>age age age age age age age age age age</Line>
+ <Line>visses visses visses visses visses visses visses</Line>
+ <Line>givres givres givres givres givres givres givres</Line>
+ <Line>genou genou genou genou genou genou</Line>
+ <Line>page page page page</Line>
+ <Line>vanne vanne vanne vanne vanne vanne</Line>
+ <Line>auge auge auge auge auge auge auge auge</Line>
+ <Line>vagues vagues vagues vagues vagues vagues</Line>
+ <Line>agaves agaves agaves agaves agaves</Line>
+ <Line>gelées gelées gelées gelées</Line>
+ <Line>vider vider vider vider vider vider</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mots plus longs</LevelComment>
+ <NewCharacters></NewCharacters>
+ <Line>usage usage usage usage usage usage usage usage usage</Line>
+ <Line>vendre vendre vendre vendre vendre vendre vendre</Line>
+ <Line>gemmes gemmes gemmes gemmes gemmes gemmes gemmes</Line>
+ <Line>valvule valvule valvule valvule valvule valvule valvule</Line>
+ <Line>mages mages mages mages mages mages mages mages</Line>
+ <Line>gommes gommes gommes gommes gommes gommes gommes</Line>
+ <Line>grammes grammes grammes grammes grammes</Line>
+ <Line>agrumes agrumes agrumes agrumes agrumes agrumes agrumes</Line>
+ <Line>messager messager messager messager messager messager messager</Line>
+ <Line>gourmets gourmets gourmets gourmets gourmets gourmets gourmets</Line>
+ <Line>guider guider guider guider gourde gourde gourde gourde</Line>
+ <Line>gradin gradin gradin gradin gredin gredin gredin gredin</Line>
+ <Line>ergoter ergoter ergoter ergoter endroit endroit endroit endroit</Line>
+ <Line>graduer graduer graduer graduer</Line>
+ <Line>guéridon guéridon guéridon guéridon</Line>
+ <Line>grandiose grandiose grandiose grandiose</Line>
+ <Line>nouveau nouveau nouveau nouveau nouveau nouveau nouveau nouveau</Line>
+ <Line>l´allumage l´allumage l´allumage l´allumage l´allumage</Line>
+ <Line>l´alunissage l´alunissage l´alunissage l´alunissage</Line>
+ <Line>avogadro avogadro avogadro avogadro</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/dvorak-fr-2.ktouch.xml b/ktouch/training/dvorak-fr-2.ktouch.xml
new file mode 100644
index 00000000..ea1036e2
--- /dev/null
+++ b/ktouch/training/dvorak-fr-2.ktouch.xml
@@ -0,0 +1,257 @@
+<KTouchLecture>
+ <Title>French - Dvorak 2nd part</Title>
+ <Comment>30 mai 2002 - Francis Leboutte, www.algo.be
+7 décembre 2004 - Passage au format ktouch par Matthieu MOY
+14 septembre 2005 - Passage au format ktouch XML par Stéphane Raimbault</Comment>
+ <Levels>
+ <Level>
+ <LevelComment>Voyelles accentuées (accent grave et tréma) et c cédille</LevelComment>
+ <NewCharacters>èùâêûîôïç</NewCharacters>
+ <Line>père père père père</Line>
+ <Line>où où où où où où</Line>
+ <Line>pâle pâle pâle pâle</Line>
+ <Line>tôt tôt tôt tôt tôt</Line>
+ <Line>août août août août</Line>
+ <Line>naître naître naître naître</Line>
+ <Line>caïd caïd caïd caïd</Line>
+ <Line>ça ça ça ça ça</Line>
+ <Line>sittèle sittèle sittèle sittèle</Line>
+ <Line>mât mât mât mât mât mât mât mât</Line>
+ <Line>pèse-moût pèse-moût pèse-moût pèse-moût pèse-moût</Line>
+ <Line>l'évêque l'évêque l'évêque l'évêque l'évêque l'évêque l'évêque</Line>
+ </Level>
+ <Level>
+ <LevelComment>Index vers le centre</LevelComment>
+ <NewCharacters>bf</NewCharacters>
+ <Line>bel bel bel bel bel bel bel bel bel bel bel bel bel</Line>
+ <Line>fus fus fus fus fus fus fus fus fus fus fus</Line>
+ <Line>fils fils fils fils fils fils fils fils fils fils</Line>
+ <Line>becs becs becs becs becs becs becs becs becs becs</Line>
+ <Line>beau beau beau beau beau beau beau beau beau beau</Line>
+ <Line>butée butée butée butée butée bête bête bête bête bête</Line>
+ <Line>bègue bègue bègue bègue bègue</Line>
+ <Line>fente fente fente fente fente fente</Line>
+ <Line>facs facs facs facs facs facs facs</Line>
+ <Line>fisc fisc fisc fisc fisc fisc fisc</Line>
+ <Line>fesse fesse fesse fesse fesse fesse</Line>
+ <Line>buse buse buse buse</Line>
+ <Line>rubis rubis rubis rubis</Line>
+ <Line>billets billets billets billets</Line>
+ <Line>bât bât bât bât</Line>
+ </Level>
+ <Level>
+ <LevelComment>Index vers le centre et le bas</LevelComment>
+ <NewCharacters>yx</NewCharacters>
+ <Line>ye ye ye ye ye ye ye ye ye ye</Line>
+ <Line>xs xs xs xs xs xs xs xs xs xs</Line>
+ <Line>yen yen yen yen yen yen yen yen yen yen yen</Line>
+ <Line>axes axes axes axes axes axes axes axes axes</Line>
+ <Line>yin yin yin yin yin yin yin yin yin yin yin</Line>
+ <Line>taxes taxes taxes taxes taxes taxes taxes taxes taxes</Line>
+ <Line>tyran tyran tyran tyran</Line>
+ <Line>satyre satyre satyre satyre</Line>
+ <Line>sixième sixième sixième sixième sixième</Line>
+ </Level>
+ <Level>
+ <LevelComment>Index vers le centre et le haut</LevelComment>
+ <NewCharacters>.h</NewCharacters>
+ <Line>hs hs hs hs hs hs hs hs hs</Line>
+ <Line>.e .e .e .e .e .e .e .e .e</Line>
+ <Line>hottes hottes hottes hottes hottes hottes hottes hottes</Line>
+ <Line>hommes hommes hommes hommes hommes hommes hommes hommes</Line>
+ <Line>hausse hausse hausse hausse hausse</Line>
+ <Line>houx. houx. houx. houx. houx. houx. houx. houx. houx. houx. houx.</Line>
+ <Line>hiboux hiboux hiboux hiboux hiboux hiboux hiboux hiboux hiboux</Line>
+ <Line>cahots cahots cahots cahots cahots cahots cahots cahots</Line>
+ <Line>hase. hase. hase. hase. hase. hase. hase. hase. hase. hase.</Line>
+ <Line>mèches mèches mèches mèches</Line>
+ <Line>hase. hase. hase. hase. hase. hase. hase. hase. hase. hase.</Line>
+ <Line>haies. haies. haies. haies. haies. haies. haies. haies.</Line>
+ <Line>boxes boxes boxes boxes boxes boxes boxes boxes boxes boxes</Line>
+ <Line>beaux beaux beaux beaux beaux beaux beaux beaux beaux beaux</Line>
+ <Line>faxes faxes faxes faxes faxes faxes</Line>
+ <Line>xérès xérès xérès xérès xérès</Line>
+ <Line>foyers foyers foyers foyers foyers foyers foyers foyers</Line>
+ <Line>fayot fayot fayot fayot fayot fayot fayot fayot fayot</Line>
+ <Line>l'homme l'homme l'homme l'homme l'homme l'homme</Line>
+ <Line>fraye fraye fraye fraye fraye fraye fraye fraye fraye</Line>
+ <Line>acheté acheté acheté acheté acheté acheté acheté</Line>
+ <Line>fuyant fuyant fuyant fuyant fuyant fuyant fuyant fuyant</Line>
+ <Line>frayeur frayeur frayeur frayeur frayeur frayeur frayeur</Line>
+ <Line>festoyer festoyer festoyer festoyer festoyer festoyer</Line>
+ </Level>
+ <Level>
+ <LevelComment>Auriculaires vers le bas</LevelComment>
+ <NewCharacters>;j</NewCharacters>
+ <Line>judo judo judo judo judo judo judo judo judo judo</Line>
+ <Line>o; o; o; o; o; o; o; o; o; o;</Line>
+ <Line>judo; judo; judo; judo; judo; judo; judo; judo; judo;</Line>
+ <Line>judas; judas; judas; judas; judas; judas; judas; judas;</Line>
+ <Line>bijou; bijou; bijou; bijou; bijou; bijou; bijou; bijou;</Line>
+ <Line>ajouté; ajouté; ajouté; ajouté; ajouté; ajouté; ajouté;</Line>
+ <Line>bijoux; bijoux; bijoux; bijoux; bijoux; bijoux; bijoux;</Line>
+ <Line>jiu-jitsu; jiu-jitsu; jiu-jitsu; jiu-jitsu; jiu-jitsu;</Line>
+ </Level>
+ <Level>
+ <LevelComment>Auriculaires vers le haut</LevelComment>
+ <NewCharacters>:k</NewCharacters>
+ <Line>kid kid kid kid kid kid kid kid kid kid kid kid</Line>
+ <Line>o: o: o: o: o: o: o: o: o: o:</Line>
+ <Line>o:o:o:o;o;o:o;o;o:o:o:o;o:o;o;o:o;o;</Line>
+ <Line>kid: kid: kid: kid: kid: kid: kid: kid: kid: kid: kid:</Line>
+ <Line>kodiak: kodiak: kodiak: kodiak: kodiak: kodiak: kodiak:</Line>
+ <Line>ski: ski: ski: ski: ski: skaï: skaï: skaï: skaï: skaï:</Line>
+ <Line>kurde: kurde: kurde: kurde: kurde: kurde: kurde: kurde:</Line>
+ </Level>
+ <Level>
+ <LevelComment>Auriculaires vers la droite</LevelComment>
+ <NewCharacters>w</NewCharacters>
+ <Line>world world world world world world world world</Line>
+ <Line>wide wide wide wide wide wide wide wide wide wide</Line>
+ <Line>web web web web web web web web web web web web</Line>
+ <Line>watt watt watt watt</Line>
+ <Line>world wide web. world wide web. world wide web.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Auriculaires vers le haut et la droite</LevelComment>
+ <NewCharacters>z</NewCharacters>
+ <Line>zen zen zen zen zen zen zen zen zen zen zen zen</Line>
+ <Line>zone zone zone zone zone zone zone zone zone zone</Line>
+ <Line>zut zut zut zut zut zut zut zut zut zut zut zut</Line>
+ <Line>demandez demandez demandez demandez demandez</Line>
+ <Line>zazou zazou zazou zazou</Line>
+ <Line>barzoï barzoï barzoï barzoï</Line>
+ </Level>
+ <Level>
+ <LevelComment>Pangramme : une phrase qui contient toutes les lettres de l'alphabet</LevelComment>
+ <NewCharacters>pangramme</NewCharacters>
+ <Line>portez ce vieux whisky au juge blond qui fume</Line>
+ <Line>voyez ce bon fakir moqueur pousser un wagon en jouant du xylophone</Line>
+ <Line>Zoé ma grande fille veut que je boive ce whisky dont je ne veux pas</Line>
+ <Line>the quick brown fox jumps over the lazy dog</Line>
+ </Level>
+ <Level>
+ <LevelComment>Entraînement à la vitesse</LevelComment>
+ <NewCharacters>vitesse</NewCharacters>
+ <Line>Digrammes et trigrammes les plus fréquents. Exercez-vous en</Line>
+ <Line>particulier aux digrammes à une main, dont certains sont parmi les</Line>
+ <Line>plus difficiles à taper.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Digrammes de la main droite</LevelComment>
+ <NewCharacters>digramme droite</NewCharacters>
+ <Line>nt nt nt nt nt nt nt nt nt</Line>
+ <Line>ns ns ns ns ns ns ns ns ns</Line>
+ <Line>nt nt ns nt ns ns ns nt ns nt nt ns nt ns nt ns nt nt</Line>
+ <Line>pr ns pr ns pr ns pr ns pr ns pr ns pr ns</Line>
+ <Line>st st st st st st st st</Line>
+ <Line>tr st tr st tr st tr st tr st tr st tr st</Line>
+ <Line>nc t nc t nc t nc t nc t nc t nc t</Line>
+ <Line>rt s rt s rt s rt s rt s rt s rt s</Line>
+ <Line>pl nt pl nt pl nt pl nt pl nt pl nt</Line>
+ <Line>rs rs rs rs rs rs rs rs rs</Line>
+ <Line>ts ts ts ts ts ts ts ts ts</Line>
+ <Line>ch ts ch ts ch ts ch ts ch ts ch ts</Line>
+ <Line>ct ct ct ct ct ct ct ct ct ct ct ct</Line>
+ <Line>nd nd nd nd nd nd nd nd nd</Line>
+ <Line>mp n mp n mp n mp n mp n mp n mp n</Line>
+ </Level>
+ <Level>
+ <LevelComment>Digrammes de la main gauche</LevelComment>
+ <NewCharacters>digramme gauche</NewCharacters>
+ <Line>qu a qu a qu a qu a qu a qu a qu a</Line>
+ <Line>ue ue ue ue ue ue ue ue ue</Line>
+ <Line>io e io e io e io e io e io e io e</Line>
+ <Line>ou ou ou ou ou ou ou ou ou</Line>
+ <Line>ai e ai e ai e ai e ai e ai e ai e</Line>
+ <Line>ie ie ie ie ie ie ie ie ie</Line>
+ <Line>au au au au au au au au au</Line>
+ <Line>eu eu eu eu eu eu eu eu eu</Line>
+ <Line>au ou ou au au au ou au ou ou ou ou au ou ou au ou ou</Line>
+ <Line>oi e oi e oi e oi e oi e oi e oi e</Line>
+ <Line>ui e ui e ui e ui e ui e ui e ui e</Line>
+ <Line>ée u ée u ée u ée u ée u ée u ée u</Line>
+ <Line>ei ei ei ei ei ei ei ei ei</Line>
+ <Line>e, ue e, ue e, ue e, ue e, ue e, ue</Line>
+ </Level>
+ <Level>
+ <LevelComment>Digrammes à 2 mains</LevelComment>
+ <NewCharacters>digramme double</NewCharacters>
+ <Line>es es es es es es es es es</Line>
+ <Line>en en en en en en en en en</Line>
+ <Line>le t le t le t le t le t le t le t</Line>
+ <Line>de de de de de de de de de</Line>
+ <Line>on on on on on on on on on</Line>
+ <Line>re s re s re s re s re s re s re s</Line>
+ <Line>ti e ti e ti e ti e ti e ti e ti e</Line>
+ <Line>er s er s er s er s er s er s er s</Line>
+ <Line>co t co t co t co t co t co t co t</Line>
+ <Line>an an an an an an an an an</Line>
+ <Line>te te te te te te te te te</Line>
+ <Line>la t la t la t la t la t la t la t</Line>
+ <Line>et et et et et et et et et</Line>
+ <Line>me n me n me n me n me n me n me n</Line>
+ <Line>ur s ur s ur s ur s ur s ur s ur s</Line>
+ <Line>at at at at at at at at at</Line>
+ </Level>
+ <Level>
+ <LevelComment>Ca continue...</LevelComment>
+ <NewCharacters>suite</NewCharacters>
+ <Line>ra s ra s ra s ra s ra s ra s ra s</Line>
+ <Line>ce t ce t ce t ce t ce t ce t ce t</Line>
+ <Line>tr s tr s tr s tr s tr s tr s tr s</Line>
+ <Line>ve s ve s ve s ve s ve s ve s ve s</Line>
+ <Line>un un un un un un un un un</Line>
+ <Line>ir es ir es ir es ir es ir es ir es</Line>
+ <Line>l' ta l' ta l' ta l' ta l' ta l' ta</Line>
+ <Line>ri se ri se ri se ri se ri se ri se</Line>
+ <Line>si e si e si e si e si e si e si e</Line>
+ <Line>or s or s or s or s or s or s or s</Line>
+ <Line>li te li te li te li te li te li te</Line>
+ <Line>ar s ar s ar s ar s ar s ar s ar s</Line>
+ <Line>pa n pa n pa n pa n pa n pa n pa n</Line>
+ <Line>iq eau iq eau iq eau iq eau iq eau</Line>
+ <Line>ro s ro s ro s ro s ro s ro s ro s</Line>
+ <Line>el t el t el t el t el t el t el t</Line>
+ <Line>il et il et il et il et il et il et</Line>
+ <Line>em n em n em n em n em n em n em n</Line>
+ <Line>ma n ma n ma n ma n ma n ma n ma n</Line>
+ <Line>om n om n om n om n om n om n om n</Line>
+ <Line>al t al t al t al t al t al t al t</Line>
+ <Line>té u té u té u té u té u té u té u</Line>
+ </Level>
+ <Level>
+ <LevelComment>Trigrammes les plus fréquents</LevelComment>
+ <NewCharacters>trigramme</NewCharacters>
+ <Line>ent ent ent ent ent ent</Line>
+ <Line>les t les t les t les t les t les t les t</Line>
+ <Line>ion e ion e ion e ion e ion e ion e ion e</Line>
+ <Line>que a que a que a que a que a que a que a</Line>
+ <Line>tio e tio e tio e tio e tio e tio e tio e</Line>
+ <Line>des des des des des des</Line>
+ <Line>ati e ati e ati e ati e ati e ati e ati e</Line>
+ <Line>men men men men men men</Line>
+ <Line>iqu eau iqu eau iqu eau iqu eau iqu eau iqu eau</Line>
+ <Line>res res res res res res</Line>
+ <Line>ire s ire s ire s ire s ire s ire s ire s ire s</Line>
+ <Line>con t con t con t con t con t con t con t con t</Line>
+ <Line>ons ons ons ons ons ons</Line>
+ <Line>eme n eme n eme n eme n eme n eme n eme n eme n</Line>
+ <Line>par ans par ans par ans par ans par ans par ans</Line>
+ <Line>ent ent ent ent ent ent</Line>
+ <Line>eur est eur est eur est eur est eur est eur est</Line>
+ <Line>pro ens pro ens pro ens pro ens pro ens pro ens</Line>
+ <Line>com ent com ent com ent com ent com ent com ent</Line>
+ <Line>ues ues ues ues ues ues</Line>
+ <Line>tre s tre s tre s tre s tre s tre s tre s tre s</Line>
+ <Line>ont ont ont ont ont ont</Line>
+ <Line>ren se ren se ren se ren se ren se ren se ren se</Line>
+ <Line>our se our se our se our se our se our se our se</Line>
+ <Line>nce tes nce tes nce tes nce tes nce tes nce tes</Line>
+ <Line>lle t lle t lle t lle t lle t lle t lle t lle t</Line>
+ <Line>ité une ité une ité une ité une ité une ité une</Line>
+ <Line>air nte elle ure ien</Line>
+ <Line>ces enc art dan onn</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/dvorak.ktouch.xml b/ktouch/training/dvorak.ktouch.xml
new file mode 100644
index 00000000..cc60a5ec
--- /dev/null
+++ b/ktouch/training/dvorak.ktouch.xml
@@ -0,0 +1,602 @@
+<KTouchLecture>
+ <Title>Dvorak (auto-generated)</Title>
+ <Comment>Trainingfile genereated Mon Apr 8 18:44:12 2002
+Program written by Håvard Frøiland
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>uh</NewCharacters>
+ <Line>h uh h h h huh uh h uh u uh u uh u h h u u</Line>
+ <Line>huh u huh huh huh h huh uh huh huh h huh u</Line>
+ <Line>h u uh u u uh h uh h u h uh h uh uh h h huh</Line>
+ <Line>h u huh huh u h uh huh huh uh huh huh h h</Line>
+ <Line>h uh u uh h u u u huh uh h h u uh u u uh u</Line>
+ <Line>huh uh h h uh huh h uh u h u u h uh h uh h</Line>
+ <Line>u h uh huh h h huh h u uh u uh h uh uh huh</Line>
+ <Line>huh uh u uh huh h huh huh uh h h h u uh u</Line>
+ <Line>uh uh huh u huh huh u huh h huh u huh h huh</Line>
+ <Line>u huh huh h u u h u h huh huh u huh huh huh</Line>
+ <Line>uh h u h huh huh h huh h huh h huh h huh huh</Line>
+ <Line>h u huh huh uh h h uh u u uh u huh u h uh</Line>
+ <Line>h u h u u huh u h h h h h u h h u uh huh h</Line>
+ <Line>h huh u huh u huh u uh uh huh huh u huh u</Line>
+ <Line>u h uh u u huh uh u h uh uh h uh huh uh u</Line>
+ <Line>h huh u uh uh uh u huh u huh uh u u u uh huh</Line>
+ <Line>u u u uh u huh h u u uh u huh uh h u huh huh</Line>
+ <Line>uh u u u uh h uh uh huh h huh h uh huh uh</Line>
+ <Line>h h h u huh u uh h h h h huh h u uh h h h</Line>
+ <Line>uh u huh uh h uh uh h uh uh huh u u huh u</Line>
+ <Line>uh h u huh huh uh huh huh uh uh h h u h h</Line>
+ <Line>uh uh uh u u uh huh huh huh u uh uh uh huh</Line>
+ <Line>uh h u uh u h uh huh h u u huh u uh h uh huh</Line>
+ <Line>uh u u h uh h huh uh huh h h uh huh h u huh</Line>
+ <Line>uh h u huh uh h huh huh uh uh u h huh huh</Line>
+ <Line>huh uh h u uh huh u u u u uh uh h uh huh u</Line>
+ <Line>u u u huh h huh huh h huh uh huh h uh uh h</Line>
+ <Line>uh h u huh uh h u h uh huh huh u huh u h u</Line>
+ <Line>huh uh uh uh huh uh u huh u huh uh uh uh u</Line>
+ <Line>uh u u h u h u uh u huh u h u u u uh uh u</Line>
+ </Level>
+ <Level>
+ <NewCharacters>et</NewCharacters>
+ <Line>eh th teeth et et th teethe tee th the et</Line>
+ <Line>et tutu tutu tee t teethe thee th t tee tutu</Line>
+ <Line>t teethe teeth the eh th t teethe thee th</Line>
+ <Line>t the th e teethe e the e tut the e eh eh</Line>
+ <Line>tee tee e e tutu t tee tee eh eh eh tutu tee</Line>
+ <Line>tut teethe eh t t tee thee tee tee tee the</Line>
+ <Line>teeth the et th the eh the teeth tut the et</Line>
+ <Line>eh thee tee tut teeth thee teethe thee et</Line>
+ <Line>th the eh the tut tut e et et tee tee teethe</Line>
+ <Line>teethe tee e th tut tut t e e t eh thee the</Line>
+ <Line>teethe tut e tut t e teethe tut eh eh t tutu</Line>
+ <Line>eh e tutu thee the the tee teethe tut thee</Line>
+ <Line>tee t teethe tee t teeth thee teethe tee tee</Line>
+ <Line>th tee et the the teethe et thee et e tee</Line>
+ <Line>eh t e teethe tut tut eh tee e teeth tutu</Line>
+ <Line>t thee t th tut tutu e teeth t tee th e teethe</Line>
+ <Line>tutu teethe teethe tee teethe teeth teethe</Line>
+ <Line>e et teeth teeth tut tee t teeth tee et thee</Line>
+ <Line>tut tut tutu teethe t the teethe et tut eh</Line>
+ <Line>eh thee e et the teethe tee th tutu t tee</Line>
+ <Line>thee et eh eh th th t tutu eh tutu eh teethe</Line>
+ <Line>tee et teeth teeth teethe teeth tee et t e</Line>
+ <Line>et e tut tutu tee teethe tee tut eh e the</Line>
+ <Line>the th teethe tutu tee the et e thee teethe</Line>
+ <Line>the thee tutu th tee tut tutu th tutu teethe</Line>
+ <Line>eh tutu th et t t tee tutu th the t tutu tutu</Line>
+ <Line>et the t tee the eh e th thee thee et et et</Line>
+ <Line>tut tutu th eh the tut et teethe tut e et</Line>
+ <Line>teeth teethe th tee teeth e t teeth tut eh</Line>
+ <Line>eh et the th th e teeth eh e teeth tutu teethe</Line>
+ </Level>
+ <Level>
+ <NewCharacters>on</NewCharacters>
+ <Line>oh noun net note neon o nu noun n on nun not</Line>
+ <Line>out non one nun nth nett noun oho nett one</Line>
+ <Line>noun no nut onto one nee none o nu nett noon</Line>
+ <Line>ooh oho onto out neon none non noon one nett</Line>
+ <Line>out noun nu nu not no on neut neut nee neon</Line>
+ <Line>o noun oho nut nth not nee non oh nut o onto</Line>
+ <Line>nu oho oho noun oh oho net o on oh not nth</Line>
+ <Line>ooh nth ooh nut one noon net nut nett nett</Line>
+ <Line>neon nu on net neon one none noun no noun</Line>
+ <Line>out note neon none one o onto ooh nu o nett</Line>
+ <Line>none nut one on onto one nth oh oh nu noon</Line>
+ <Line>nut nth nu nu none neut no neon neon nun out</Line>
+ <Line>oho one noun nun on nth noun oh net oho oho</Line>
+ <Line>oho note nut neut no non no one out out none</Line>
+ <Line>onto note nut none nett net ooh ooh neon on</Line>
+ <Line>nett none neon noon no none oh one not neon</Line>
+ <Line>neut o nu noun on onto n nee one out oh no</Line>
+ <Line>not non neon oh nett one nun nun nee out one</Line>
+ <Line>not out nee noon note neon not out onto one</Line>
+ <Line>onto nun ooh non nun neut noun oh on n nee</Line>
+ <Line>none neon nun non on not nu oho nett non noun</Line>
+ <Line>nth n noun on nett oh none oho out nee net</Line>
+ <Line>n o noun noon neut no no noon non neon onto</Line>
+ <Line>nu nth neut out non out nth oh nut onto oh</Line>
+ <Line>one neut n out oho nun o no noun no on neon</Line>
+ <Line>o o noun oh n ooh noon neon none nth note</Line>
+ <Line>net noon net nun on none nee one o nth nth</Line>
+ <Line>non noon n oho o noun note oh none neon net</Line>
+ <Line>oho noon not no noon no neon nth nett o one</Line>
+ <Line>on note nee nett oh onto noun out on nee out</Line>
+ </Level>
+ <Level>
+ <NewCharacters>as</NewCharacters>
+ <Line>aunt ash soothest st sooth attenuate shouts</Line>
+ <Line>attest ant sanest astute season sanes seen</Line>
+ <Line>shoos senses stenos soot sasses senses souths</Line>
+ <Line>shootout senates settees statuses stoat ahas</Line>
+ <Line>sooth astutest ates autos shushes shunt statue</Line>
+ <Line>annotates attune sheet soothest sensuousness</Line>
+ <Line>auto souse stoutness sets shuts souths shouts</Line>
+ <Line>saute statues set sens stetson attune stet</Line>
+ <Line>stash sensuous stoat sea sen autos sautes</Line>
+ <Line>sheet sashes anon stones aunts snoots sot</Line>
+ <Line>sauna at soon shunts ah southeast soothes</Line>
+ <Line>sanes sanenesses autos stet sos sooths snouts</Line>
+ <Line>sonatas aha sanenesses shots shahs ante sanes</Line>
+ <Line>sue assess ante stouts assen snots sheets</Line>
+ <Line>asses shut state souths ahas auto suets sensuousness</Line>
+ <Line>sue sense attests shouts soothe souses sensuousnesses</Line>
+ <Line>seasons season sonata antennae sea ahas stoutnesses</Line>
+ <Line>statuses asset shutouts suntan statuette ante</Line>
+ <Line>anus sanenesses ashes shh stouts aunt soothes</Line>
+ <Line>son an sense anons ate stoutest ass suntan</Line>
+ <Line>saneness souses sautes seats shutouts stash</Line>
+ <Line>astutenesses snoots sautes sunsets anent soonest</Line>
+ <Line>atone steno shes sos astutest ah shunt shuns</Line>
+ <Line>auto sonatas snoots settee statutes stouts</Line>
+ <Line>sane s sheath sane stoutness setts southeast</Line>
+ <Line>sateens sons anon ashen anent seats stunt</Line>
+ <Line>sets stetsons seasons shot sots soothes attn</Line>
+ <Line>stoutness seen she sees soots sates sue statehouses</Line>
+ <Line>antennas assonant ates sensuousnesses sanenesses</Line>
+ <Line>astuteness sheath ashen ate sans snout snot</Line>
+ </Level>
+ <Level>
+ <NewCharacters>id</NewCharacters>
+ <Line>denseness intestate destined inst denies inane</Line>
+ <Line>detainee deadheads denseness insinuations</Line>
+ <Line>detain deadest ideation donutted detuned dist</Line>
+ <Line>dished its indeeds denudes disunited innuendos</Line>
+ <Line>instantaneousness death inane desist intuits</Line>
+ <Line>inset issuant dded donut insanities detune</Line>
+ <Line>intone insidious intentions iodinated detained</Line>
+ <Line>dissension dents dust dustinesses insist in</Line>
+ <Line>didoes intension danishes intentnesses innate</Line>
+ <Line>indentions initiation detainee deadness dentition</Line>
+ <Line>dottiest issued dadoes dissuaded disunites</Line>
+ <Line>dune denotation disunited dueness inned inundate</Line>
+ <Line>douse iodate daises inn doth instate danishes</Line>
+ <Line>intuited inion instantiate duh dissident indent</Line>
+ <Line>dinned donate intension intense iodides deaths</Line>
+ <Line>indents initiation dentins insaneness dottiest</Line>
+ <Line>dishes dinette insides dented disunite detained</Line>
+ <Line>ind duennas dunno desist desuetudes destinate</Line>
+ <Line>denotation disuses detonations deadens dadoed</Line>
+ <Line>denies duetted do indentation dentition ideate</Line>
+ <Line>iodination ind innuendo detonations diseases</Line>
+ <Line>id dentins dustinesses dustiest diastases</Line>
+ <Line>diathesis dished distentions destine douse</Line>
+ <Line>dandies destined denseness iodines insentient</Line>
+ <Line>dodos dotted diseased institutes dissuaded</Line>
+ <Line>donas donnishness destituteness duet danseuses</Line>
+ <Line>dandies detonation inned d instantiations</Line>
+ <Line>destine id insinuates intentnesses insanest</Line>
+ <Line>dusts instantness dueness iodines dainties</Line>
+ <Line>dandiest densest detonation datasets destitutions</Line>
+ </Level>
+ <Level>
+ <NewCharacters>p</NewCharacters>
+ <Line>phosphates pantheons patented pea pinto pipes</Line>
+ <Line>panned pods poshed paste passioned poshest</Line>
+ <Line>pons pusses poshest posted ponies possess</Line>
+ <Line>poisons pieties peens pennons pithiest pethidine</Line>
+ <Line>pated petite peened petunias pinheadedness</Line>
+ <Line>poinsettias piousnesses patientest pad pennis</Line>
+ <Line>passionateness pappiest pas pet posthaste</Line>
+ <Line>pops pout peed phone postdate pined pope poison</Line>
+ <Line>position pitapats pouts pushed pinions popped</Line>
+ <Line>passionates pupates pit punts piteousness</Line>
+ <Line>peso pied pithiest pensions pension puppet</Line>
+ <Line>pope potatoes pianists potions patsies pontoon</Line>
+ <Line>peasant pistons paints poets poss panpipes</Line>
+ <Line>pas postseason pose postpones phat putout</Line>
+ <Line>psst penitent pennons patented pendant pinon</Line>
+ <Line>pensioned pinatas peonies pod pitapat positions</Line>
+ <Line>puses pudenda pipes ponies pints pantsuits</Line>
+ <Line>pan puppet pappies peened pennis pus pope</Line>
+ <Line>ponded patted pups phosphate punishes postponed</Line>
+ <Line>penned potashes pipette passionates pinon</Line>
+ <Line>pains passionateness peptide peptidases pupation</Line>
+ <Line>pettiest pitas pistons pippin pantheists pa</Line>
+ <Line>paddies pest pot pied pop points phosphatase</Line>
+ <Line>pans postdate pussiest pinon pest posed paeans</Line>
+ <Line>petted pip pipped pone puts pinpoints puppet</Line>
+ <Line>pines photoed past pities pipette pine psi</Line>
+ <Line>pantheons paths push pinups punishes potshot</Line>
+ <Line>pantie pendants padded psi pa phosphide pinnate</Line>
+ <Line>patientest positioned postpaid pipettes putt</Line>
+ <Line>pendents popped poppet pod pappiest pinpointed</Line>
+ </Level>
+ <Level>
+ <NewCharacters>g</NewCharacters>
+ <Line>get gossips gadgets gneisses get gasped gaging</Line>
+ <Line>giddies gout gush gasps git gusto gusseting</Line>
+ <Line>g gene gutsed gag gating gnats guising gusting</Line>
+ <Line>getups genuinenesses giddied gnashing gunning</Line>
+ <Line>guideposts gateau getting guested giants gutsiest</Line>
+ <Line>gainsaid gadding gagging gouging gusseted</Line>
+ <Line>gaunts ghettos gateau gatehouse goodnesses</Line>
+ <Line>geese gotta gad gainsaid go goutiest gist</Line>
+ <Line>guanine gentians geest gunships gadded gunpoints</Line>
+ <Line>gunshot gauntnesses gashed geed geode gnash</Line>
+ <Line>gaudies ghosting gashing gaunting gad gush</Line>
+ <Line>goatees got gist gens gauss goddess gist guessing</Line>
+ <Line>gets geode guesting gonna gutsiest gussets</Line>
+ <Line>gens guineas geed gust gnashes gees genesis</Line>
+ <Line>gigs gestates gust gossiped gunships godsend</Line>
+ <Line>gashest godson gaudies ghosts guessing giantesses</Line>
+ <Line>going gnashing gustiness gaped ghosted genuinenesses</Line>
+ <Line>gust gentians guest gaits gags gushiest gigs</Line>
+ <Line>gateau gains guise going gutties gudgeon gestated</Line>
+ <Line>godsons gaped gaps gateau going gatehouse</Line>
+ <Line>good ghosts giddinesses ghettoing gases gestation</Line>
+ <Line>gestapos gouge gouges giddiness gashing gaudiest</Line>
+ <Line>gunpoint ghats guanine giddies goddess gashing</Line>
+ <Line>guanos gunpoints gunpoint godding ginning</Line>
+ <Line>god godsons gauss gating gutted gashest godhood</Line>
+ <Line>gannet ghosted geode gages gages gusting gusset</Line>
+ <Line>godhoods goto gags goos ghosts gestations</Line>
+ <Line>ginseng gustiest guanines gaudinesses godded</Line>
+ <Line>gassiest gets gentian gaging gnu gush gun</Line>
+ <Line>gnash gnu gage gusts gaits goatees gasping</Line>
+ </Level>
+ <Level>
+ <NewCharacters>.c</NewCharacters>
+ <Line>cacheting cascading contentions chip consented</Line>
+ <Line>cheetahs constituting chaps consensus continuations</Line>
+ <Line>cadet chant cations canoes chuted catenate</Line>
+ <Line>caging censused cheapen contusing coituses</Line>
+ <Line>china chicnesses chasten chianti condensates</Line>
+ <Line>cocaines continuous coconuts ceases catching</Line>
+ <Line>constitutes cushioned cunts cacophonist copied</Line>
+ <Line>cot coincident cessations consonant cupidities</Line>
+ <Line>chitchatting canasta congestions cheapening</Line>
+ <Line>consented cannoning ceded conies caucusing</Line>
+ <Line>cession condescended causations conceit congaed</Line>
+ <Line>cathodic coated chitchatted cutout continuations</Line>
+ <Line>chinas caddied captains cocas cannonaded coeducation</Line>
+ <Line>coping chat cooing consign cannoned codded</Line>
+ <Line>count chit constituent catchpennies cassias</Line>
+ <Line>censused canine chestiest cheap cease countenancing</Line>
+ <Line>conspectuses condescended coses casing coedits</Line>
+ <Line>cocoons conspicuousness constitution cassia</Line>
+ <Line>cc choosing cites cup copings consigned choosinesses</Line>
+ <Line>chain cheapish caucused cottoned chaoses chips</Line>
+ <Line>cocooning concedes cu cunning cheapen connotes</Line>
+ <Line>conduced continuousness concision cosinesses</Line>
+ <Line>condensations caucusing chinning canoes cued</Line>
+ <Line>chastening contused chihuahua casts couscous</Line>
+ <Line>cachet captaining canton cheap connections</Line>
+ <Line>contents copied coping concatenated conspicuousnesses</Line>
+ <Line>cadencing coined concessions coca cosines</Line>
+ <Line>casuist continua catnips cheapest condensing</Line>
+ <Line>concision cacophonies chestiest cant chide</Line>
+ <Line>caches cupping constituencies capacitances</Line>
+ </Level>
+ <Level>
+ <NewCharacters>,r</NewCharacters>
+ <Line>renegaded randiness reedinesses ruder rushers</Line>
+ <Line>recs rhesus reddishness riptides restated</Line>
+ <Line>rephrasing rephotographs radon rosetting rants</Line>
+ <Line>ripener rodeoed retrace roached rattiest recto</Line>
+ <Line>resonances radiated recreant randinesses riposting</Line>
+ <Line>read recoding randing routing rattier reappearing</Line>
+ <Line>radiance rodents ragouted rapier rechristened</Line>
+ <Line>reparteeing repeat rushers roe repossesses</Line>
+ <Line>reducing roper restarting reprehensions renaissances</Line>
+ <Line>raunchier reunions reacting ripcords reintroduction</Line>
+ <Line>ranges reship runtiness reroutes reds retrogrades</Line>
+ <Line>regraded reproducing raccoons reopening regenerate</Line>
+ <Line>recuse reaccessed redirected reproductions</Line>
+ <Line>recess radiated ripened ring reprocesses rottenest</Line>
+ <Line>rigging riping retain rhinoceroses retracted</Line>
+ <Line>radios repartitioner retrod readier reciprocities</Line>
+ <Line>riptides renaissance reattached reorientates</Line>
+ <Line>rustier rogue reticence rids recognitions</Line>
+ <Line>roadsigns radiotherapist reduct residents</Line>
+ <Line>reset recurses reputations racecourses regents</Line>
+ <Line>resurges raptness recreated raucousnesses</Line>
+ <Line>reintegrates reconsecration repairer restitutions</Line>
+ <Line>repartees routers reenact reprehension reappointed</Line>
+ <Line>recrudescences renditioning roots rotation</Line>
+ <Line>rattraps rerecords rites repartitioner ropers</Line>
+ <Line>reapportioned repost reiterating reintegrating</Line>
+ <Line>recoding restarter renouncer rashest ragout</Line>
+ <Line>reasserted renderer redundancies retest reconstructions</Line>
+ <Line>rectos renaissance rounds receptor rainiest</Line>
+ <Line>rained ruses repudiations renouncing riposted</Line>
+ </Level>
+ <Level>
+ <NewCharacters>'q</NewCharacters>
+ <Line>quash queens quartets queued quarantine's</Line>
+ <Line>quipping quart's quads quest quarantine's</Line>
+ <Line>quaintness quintic questioning queuing quart's</Line>
+ <Line>quencher queen q's quietude's quitter's quester</Line>
+ <Line>quadrant qt quietening quire quoined quitters</Line>
+ <Line>quietest quince quashes question quince's</Line>
+ <Line>queasinesses quasar's quietus quashes quire</Line>
+ <Line>quintet's quotient quietus quest quitters</Line>
+ <Line>quietness quadricepses quart's quests quahogs</Line>
+ <Line>quiche's questers queens queasier quadraphonic</Line>
+ <Line>quietest quotients queasinesses quotients</Line>
+ <Line>quid's quoit queers queuer's quadded quietening</Line>
+ <Line>quiche's quiets queuers quartet quarried quittances</Line>
+ <Line>quietnesses querier quadding queue quangos</Line>
+ <Line>quietude's questioners quietus's quince quad's</Line>
+ <Line>quenches quadratic's quiche quadric quietness's</Line>
+ <Line>quartics questionnaire's quart's quencher</Line>
+ <Line>quenchers queered quinines quotidians quoting</Line>
+ <Line>queernesses quietens quitters quarries quanta</Line>
+ <Line>quadrupeds quarter quires quiets quadruped's</Line>
+ <Line>quadraphonic quine quart's quieted quadrature</Line>
+ <Line>quotidians quiescentness quint's question</Line>
+ <Line>queasier quotient's quainter quitting quitters</Line>
+ <Line>quoter quasar quired quiescent quadratic quadratures</Line>
+ <Line>quid's quotations quotas queues quoined quotients</Line>
+ <Line>queasiness quietudes question's queernesses</Line>
+ <Line>quite quadratures quahog quieter's quitters</Line>
+ <Line>queers quern quited ques quonset quota's quarto's</Line>
+ <Line>quittances quiesced quirt's questing quenching</Line>
+ <Line>quarries q quoits quarterer quine quatrain's</Line>
+ </Level>
+ <Level>
+ <NewCharacters>l</NewCharacters>
+ <Line>logistical leaded lipreading lassies lignites</Line>
+ <Line>lesions landlord laddering lost laciest liquorice</Line>
+ <Line>laterals locution linguist's lichen licensee</Line>
+ <Line>legislator's lurcher's litigiousness's legislator</Line>
+ <Line>listeners learned lotter lighthouse lusted</Line>
+ <Line>lugsails lupus's lecherousness's lord's lettering's</Line>
+ <Line>lintels lustrous luting litterers league lender</Line>
+ <Line>letterhead's largess's leanness lulled localed</Line>
+ <Line>loggia lustinesses lupuses liaising loon legit</Line>
+ <Line>landau linting lutanist's loins lastings latches</Line>
+ <Line>logins lunatic lier's legion lousing litigators</Line>
+ <Line>learner lipase largenesses littered landslid</Line>
+ <Line>letters lurching learn ladder's luggages lodestones</Line>
+ <Line>lancet's leaned lidding looters ladder lagoon's</Line>
+ <Line>logical lulls logic's linted lard lanced lollipop's</Line>
+ <Line>lurcher's loneliness loonies lorn ludicrousness</Line>
+ <Line>lisp loudliest lunate lushed leggings lossier</Line>
+ <Line>lecture's logical litigant's larch ltd lunch</Line>
+ <Line>lecherousness legend's landscaping lecithins</Line>
+ <Line>loudened lorises lot lease's lastingness's</Line>
+ <Line>legislations login listing lashes loaning's</Line>
+ <Line>lustiness leanings leap laura's liaised lessors</Line>
+ <Line>loggia's legatee's loaning lacuna's lopsidedness</Line>
+ <Line>letterpresses literatures local latticed lutenist's</Line>
+ <Line>lusted lien lactational loincloths lilted</Line>
+ <Line>loophole's legalese's locus's lii littlenesses</Line>
+ <Line>lightning leniencies laggard's longhair lenser</Line>
+ <Line>lactating lodge lardier loaner landslid liquor's</Line>
+ <Line>loch's lariat lated loop's loiters lento league</Line>
+ <Line>licentiousness's lipid licorice lipid lean</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kb</NewCharacters>
+ <Line>budgie barracking booting bee's books bookkeeper's</Line>
+ <Line>beddings been bursitis bluest biding bluings</Line>
+ <Line>brothel's bigger breeding knockabout's bedder</Line>
+ <Line>blinkering knuckleheads baptist's burglars</Line>
+ <Line>bingos billboard backscattered kibble's bing</Line>
+ <Line>blotted bloodline's k's knockings bikinied</Line>
+ <Line>bitser's bind beanstalk's bot knob brightest</Line>
+ <Line>borstal's ballers brouhahas birthstone bottlenecks</Line>
+ <Line>baccarats backstabber bookstore kindling's</Line>
+ <Line>backdating bloodsheds bookishness boodle begot</Line>
+ <Line>bingen balconies boutique bods bilker's belletrist's</Line>
+ <Line>blitheness's bonding boatclubs kestrels bittier</Line>
+ <Line>broadcasters knickers bricker blood bobolink</Line>
+ <Line>bass's braggarts bastion kitchener's bubbling</Line>
+ <Line>banking's kissing bidden blackcurrant bikini's</Line>
+ <Line>bedaubing balding kinkier baggage's keener's</Line>
+ <Line>boater's karat bilge's buccaneers bunco's</Line>
+ <Line>bill blindings breathier bespattering bi bestrides</Line>
+ <Line>boas bedridden blueing's bookkeeping's bulleting</Line>
+ <Line>bottlers kindness's barring basest bookers</Line>
+ <Line>bullhorn battlers bonneting kit beastliness</Line>
+ <Line>basins krills bitser bassoonist budgerigars</Line>
+ <Line>baggie bequests blunting butane busgirl bisects</Line>
+ <Line>kilting boll kibble's beguiles broaden bull</Line>
+ <Line>bundle bouldered boggling bibliographic braggart</Line>
+ <Line>blitheness's butch barracking bungee boatloads</Line>
+ <Line>kindness's bounteousness's bobbin bibbed killer's</Line>
+ <Line>billboards backpacked bluebottle's baobab</Line>
+ <Line>birthstones bookkeeper's bacon ballot breathless</Line>
+ <Line>boulder brassiness blockading blinks burgle</Line>
+ </Level>
+ <Level>
+ <NewCharacters>m</NewCharacters>
+ <Line>masthead's modulus mer misapplier's month</Line>
+ <Line>marmosets missioner mutilation's musher misconducted</Line>
+ <Line>meetinghouses mosquitoes maraca melodiousness</Line>
+ <Line>methanol mintage's mopers matter's malenesses</Line>
+ <Line>mister minister's mescal mud melter's mealiest</Line>
+ <Line>mightn't microcomputer's monographes multiplier</Line>
+ <Line>moccasin micromanaged miscalculation's maltreated</Line>
+ <Line>mesomorph muscatels maggotier metering motionlessness</Line>
+ <Line>menial murk museum's ministrant metronome</Line>
+ <Line>miring mesquites mutilating moistener miking</Line>
+ <Line>maltier morned mundanes moulted mistrial's</Line>
+ <Line>muslin's marriages mealing manipulatable maidens</Line>
+ <Line>malocclusions marshals motliest morphemes</Line>
+ <Line>marmot's megabuck mountainous mulch microelectronics</Line>
+ <Line>manipulatable mensches mutterers missioners</Line>
+ <Line>mistaken merchantman misaddress minings mannikin's</Line>
+ <Line>moonstone mandarin's moulders masting mores</Line>
+ <Line>mountaintop microdot mourned macaque modulator</Line>
+ <Line>mischanced monitors mete miniaturing mulled</Line>
+ <Line>markkaa mopping mudguard's maillot moldboards</Line>
+ <Line>mucilage manliness microscopic multicomputer's</Line>
+ <Line>milts motor machinations muser's mousiness</Line>
+ <Line>macadams monorails mishitting menaced masochisms</Line>
+ <Line>machinate management's maintains mascara machismo</Line>
+ <Line>maligns merchandising masonic millimeter monopole</Line>
+ <Line>mikado mids misleading maraschino mos manuscript</Line>
+ <Line>membranes mosque's monarchs manatee's moistnesses</Line>
+ <Line>morsel musked marinara's murmurings microscopes</Line>
+ <Line>minuend's makeups midterm mist mildest microelectronics's</Line>
+ <Line>melodic manures municipals micromanages mutate</Line>
+ </Level>
+ <Level>
+ <NewCharacters>jw</NewCharacters>
+ <Line>jaunting wattage's workmanship's woolgatherer</Line>
+ <Line>waitpeople winegrower's wheatens wildernesses</Line>
+ <Line>wooden wrathed whereon wealth jaunt jam's</Line>
+ <Line>joined jollied watchtowers winsomer wassail's</Line>
+ <Line>widths weighted junctures windbreaker jackboot</Line>
+ <Line>woning wantoning wiggliest wrangles jingoism</Line>
+ <Line>windbreaker windmilled jangled wrongnesses</Line>
+ <Line>wains ware's watercoloring workhorses wariest</Line>
+ <Line>wackes juju watertightness wildcatter jujitsu</Line>
+ <Line>winged worldlinesses wino worsted's jock wagons</Line>
+ <Line>wingspans wingtips wannabee westing's jubilating</Line>
+ <Line>work's woodcock's jolliness wherewith whimper</Line>
+ <Line>weaner's woodcocks whispered who wagtail's</Line>
+ <Line>wheat wholesaled whopper's words wooden wedgier</Line>
+ <Line>whitest jettisoning whisted weakeners jingoistic</Line>
+ <Line>wobble jabberer's jennet jacket's whig waggled</Line>
+ <Line>witches whelk's wrinkled jauntiness writer</Line>
+ <Line>whitebait wheres jackass jun joisted jujubes</Line>
+ <Line>wallowed warmers wold jihad's wintriest withholdings</Line>
+ <Line>weeping walnut weirdest whorehouse workbooks</Line>
+ <Line>wordless workstation wrestlings jerkiness</Line>
+ <Line>watercourse's jawbreaker withstood warinesses</Line>
+ <Line>wiggled wiping weighting's jags wardrobes</Line>
+ <Line>jointer's wriggliest widow jab windchill junk</Line>
+ <Line>jerkwaters weaner jar wooled woodland's wisdom's</Line>
+ <Line>joust whine jaunt jugs withstands workout</Line>
+ <Line>wonkier jape's jackpots website jewel's woodside</Line>
+ <Line>who'd whisperer with woning witlessness wonts</Line>
+ <Line>wills wildest wiretapper windwards jaggedest</Line>
+ <Line>whisker's wait jinrikisha winos johns willingness's</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qv</NewCharacters>
+ <Line>quakes volubilities quester's valetudinarianism</Line>
+ <Line>questionableness varicoses virago version</Line>
+ <Line>valuation's victualer's vis's queller's veined</Line>
+ <Line>viaduct's violins vaccinia varnisher's queuer's</Line>
+ <Line>vaporise vignettes ventilates victor's quickness</Line>
+ <Line>vapor vb venter's valiantness quashed quadrillion's</Line>
+ <Line>vengeance validated verging verged vitriol</Line>
+ <Line>vellum viaducts viper quisling's veronica</Line>
+ <Line>vests quitclaims quadriplegia vowelled quelling</Line>
+ <Line>queered quiesce voucher's quantiles viscus's</Line>
+ <Line>quadripartition vendibles verve's vector's</Line>
+ <Line>vapored vote's visitor's vintager's vegetations</Line>
+ <Line>vitriolic quaintness's vibraharp's value veiner</Line>
+ <Line>veto vestige's virgin vaccinated vocabularies</Line>
+ <Line>quadrants quashes vouched vets vegan's vanilla</Line>
+ <Line>qualm vectorial quickened vane vanquished</Line>
+ <Line>velars vanquish viticultures vended vitrine</Line>
+ <Line>verdigrising vagabonding vagabond's veers</Line>
+ <Line>quad's vernaculars voiceband quipped quadruples</Line>
+ <Line>vault's voltage vertigo vitrine's quipping</Line>
+ <Line>vegetarian's quencher quell villainousness</Line>
+ <Line>virus's vegans verdict vest's vainest queues</Line>
+ <Line>viewpoints variegations verisimilitudes vaporer</Line>
+ <Line>vented vacated viscera quartering's visoring</Line>
+ <Line>vignette quicksilvered quail vagueing voltmeter's</Line>
+ <Line>venison's quipped quicken quilling vegetative</Line>
+ <Line>questionnaire's vised viking variegations</Line>
+ <Line>veldt's quicksilvering quilting versus quoter's</Line>
+ <Line>quicksand's virulence vaudeville valors vibes</Line>
+ <Line>vertebrate virulence's vesture vacation vacuumed</Line>
+ </Level>
+ <Level>
+ <NewCharacters>;z</NewCharacters>
+ <Line>zigzagging zipper's zoos zigamorph zebra zebra's</Line>
+ <Line>zombie zoned zealots zone's zeal's zwieback's</Line>
+ <Line>zwieback's zeals zed's zealot zorches zeppelin</Line>
+ <Line>zwiebacks zonal zippiest zoner zilch zebu's</Line>
+ <Line>zonal zeroed zorch zilch zippiest zenith zigged</Line>
+ <Line>zippiest zed's zeta zone zebra's zombi's zigzagging</Line>
+ <Line>zinnias zip zone's zircon zeros zoned zippiest</Line>
+ <Line>zing's zinnias zealotries zoned zest's zookeeper</Line>
+ <Line>zinging zounds zorched zodiacal zwiebacks</Line>
+ <Line>zeitgeists zoner zucchini's zonings zaniness's</Line>
+ <Line>zaps zippier zucchini's zippered zig zoo zirconiums</Line>
+ <Line>zed zirconium's zone's zed's zirconiums zoological</Line>
+ <Line>zither's zillions zeroing's zero's zillion's</Line>
+ <Line>zithers zealot zucchinis zeppelin zillions</Line>
+ <Line>zaniness's zested zone zero's zoologist zoner</Line>
+ <Line>zeros zealot's zagging zealousness zigged</Line>
+ <Line>zincs zucchini's zodiac zapped zonked zeta's</Line>
+ <Line>zinger zeugma's zero zucchini's zealotries</Line>
+ <Line>zeniths zippiest zillion zagging zealot's</Line>
+ <Line>zoologist zodiacs zucchinis zillion zeitgeist</Line>
+ <Line>zonal zanies zombi's zealot zillion's zip's</Line>
+ <Line>zags zebra zounds zebu zebu's zenned zippers</Line>
+ <Line>zest zen z zippers zucchinis zero zirconium's</Line>
+ <Line>zinc's zoologist's zoned zodiacs zestiest</Line>
+ <Line>zigamorph zoologies zeppelin's zoner zippers</Line>
+ <Line>zone zinger zebus z zigzags zinnia zip's zoning</Line>
+ <Line>zeitgeists zanied zeppelin's zombi's zeitgeists</Line>
+ <Line>zigzag's zodiacal zesting zigzag's zealotries</Line>
+ <Line>zirconiums zap zips zombie's zucchinis zenning</Line>
+ <Line>zooms zoological zounds zenned zoned zealotries</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yf</NewCharacters>
+ <Line>flurries frailer footsteps flinting forthright</Line>
+ <Line>fluoroscope foolishly fedora's frolicker flutings</Line>
+ <Line>fraud's fortnights frigate yak fads function's</Line>
+ <Line>frogman feminist's fibrin firepower fulfill</Line>
+ <Line>flaccidities forswearing faulty firebrick</Line>
+ <Line>freak's fearsome formals fascinations yowed</Line>
+ <Line>fealty's fraternization's flagstones fawningly</Line>
+ <Line>filthiest fiends funking fairway's fieldworks</Line>
+ <Line>festoon's yelps fortieth fleetingnesses furnishers</Line>
+ <Line>factored fob fleeted fancies fiber foregrounding</Line>
+ <Line>favorite's forgivingly folksy frost's farsightedness</Line>
+ <Line>furtiveness's finickiness faction facade's</Line>
+ <Line>fructose flout foundations flayers flint's</Line>
+ <Line>faultlessness finishes falsie farmings frosteds</Line>
+ <Line>farrow's fellowman fabricator's fritterer</Line>
+ <Line>foments foreshadowed firefight fovea's flipped</Line>
+ <Line>firelights forcing flounciest flanges fogged</Line>
+ <Line>forerunners forevermore fliers flyleaf facilitating</Line>
+ <Line>filtered forecastles faining farthings flippers</Line>
+ <Line>faces fatuity flipper's flabby franchise felicities</Line>
+ <Line>forfeitures fusspot's flat's fazing flunk</Line>
+ <Line>freckled fizzer fiestas fireman's femaleness</Line>
+ <Line>firewater's fluoridate footstep forewarn fishermen's</Line>
+ <Line>fourthly fretfulness's felicitation friggings</Line>
+ <Line>fountainheads fouler framer's forging flimsily</Line>
+ <Line>fornications falloffs flamboyants fops felicitation</Line>
+ <Line>fandango's flashcube fudging figures foretasting</Line>
+ <Line>futilely fatteners frying fontanels fascinated</Line>
+ <Line>fumigant's fibrin footwear's furtiveness's</Line>
+ <Line>fluoresce flimflam's yea floury flyweight's</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yf</NewCharacters>
+ <Line>facade's footrest farmhand falsity's ferny</Line>
+ <Line>finials forethoughts flossier forwardness</Line>
+ <Line>furiousness foraged foddering flank's youthfully</Line>
+ <Line>flaws fatigue furlong's firebrick flyway foggiest</Line>
+ <Line>foreordained fabulists ferrous fuzzball frets</Line>
+ <Line>formate's yarning flypapers fink firehouses</Line>
+ <Line>fancywork's feeding footprints faring frequency's</Line>
+ <Line>forequarter firebrick's fussbudget faintly</Line>
+ <Line>foo faddish firms friendlinesses flowcharting</Line>
+ <Line>falsifies foreleg's falconer's fundraisers</Line>
+ <Line>ferrule franticness facings form's flat's</Line>
+ <Line>feminine finalists formatting falsification</Line>
+ <Line>freeloaded flouters furtive flack's forced</Line>
+ <Line>foreleg foil flumed frenetic fields faith's</Line>
+ <Line>fumigating farseeing finner farewelling figurativeness's</Line>
+ <Line>frightened fretfulness's fomentation's ferrets</Line>
+ <Line>faces fainter fustiest fibrils yellows fluorite</Line>
+ <Line>fandangos frangibilities farm's fruitlessness's</Line>
+ <Line>filed freebooters fen fawner factory flameproofed</Line>
+ <Line>fez flinging fatuities fascists flamenco flirted</Line>
+ <Line>feedlot's foamer finally frays fable firmer</Line>
+ <Line>firearms footstool's furbisher's floridness</Line>
+ <Line>flue flans fib faultfinder ferules yaw fascicles</Line>
+ <Line>forswearing freezing fluents fecundability</Line>
+ <Line>farsighted frontrunner's fairgoers fortuity</Line>
+ <Line>favors fervidness's fancier fleawort's flags</Line>
+ <Line>funkier friarly filterers falsetto's frozenly</Line>
+ <Line>yodeler fit's faraway friskily faulted farads</Line>
+ <Line>yarmulke's fatso furiousness furring fitting</Line>
+ <Line>florets fishnet's fuddle film falsetto fistula</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/dvorak_ABCD.ktouch.xml b/ktouch/training/dvorak_ABCD.ktouch.xml
new file mode 100644
index 00000000..4115c624
--- /dev/null
+++ b/ktouch/training/dvorak_ABCD.ktouch.xml
@@ -0,0 +1,496 @@
+<KTouchLecture>
+ <Title>Dvorak - ABCD</Title>
+ <Comment>This ktouch lesson taken from Dan Wood's
+A Basic Course in Dvorac (ABCD)
+Available at http://www.gigliwood.com/abcd/abcd.html
+</Comment>
+ <Levels>
+ <Level>
+ <LevelComment>Introducing U and H: Home row, Index fingers (This is the Beavis &amp; Butthead lesson; it gets snazzier, trust me!)</LevelComment>
+ <NewCharacters>uh</NewCharacters>
+ <Line>uuuu hhhh uuuu hhhh uuuu hhhh uuuu hhhh</Line>
+ <Line>uuuu hhhh uuuu hhhh uuuu hhhh uuuu hhhh</Line>
+ <Line>uh uh uh uh</Line>
+ <Line>hu hu hu hu</Line>
+ <Line>huh huh huh huh</Line>
+ <Line>uh huh uh huh uh huh uh huh</Line>
+ <Line>h u uh hu uhh huh uhh</Line>
+ <Line>h u uh hu uhh huh uhh</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing E and T: Home row, Second fingers</LevelComment>
+ <NewCharacters>et</NewCharacters>
+ <Line>eeee tttt eeee tttt eeee tttt eeee tttt</Line>
+ <Line>eeee tttt eeee tttt eeee tttt eeee tttt</Line>
+ <Line>et et et et</Line>
+ <Line>tee tee tee tee</Line>
+ <Line>tete tete tete tete</Line>
+ <Line>eet eet eet eet</Line>
+ <Line>t e et te teet tee teet tete et</Line>
+ <Line>t e et te teet tee teet tete et</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive: E, H, T, U</LevelComment>
+ <NewCharacters>ethu</NewCharacters>
+ <Line>eeee hhhh tttt uuuu</Line>
+ <Line>eeee hhhh tttt uuuu</Line>
+ <Line>eeee hhhh tttt uuuu</Line>
+ <Line>hue hue hue hue tutu tutu tutu tutu the the the the he he he he he</Line>
+ <Line>teeth teeth teeth teeth hut hut hut hut</Line>
+ <Line>thee thee thee thee tutu tutu tutu tutu</Line>
+ <Line>eh he hue hut teeth teethe the thee tutu</Line>
+ <Line>eh he hue hut teeth teethe the thee tutu</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing O and N: Home row, third fingers</LevelComment>
+ <NewCharacters>on</NewCharacters>
+ <Line>oooo nnnn oooo nnnn oooo nnnn oooo nnnn</Line>
+ <Line>oooo nnnn oooo nnnn oooo nnnn oooo nnnn</Line>
+ <Line>no no no no</Line>
+ <Line>on on on on</Line>
+ <Line>non non non non</Line>
+ <Line>noon noon noon noon</Line>
+ <Line>ono ono ono ono</Line>
+ <Line>no non noon on noo ono</Line>
+ <Line>no non noon on noo ono</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including O and N</LevelComment>
+ <NewCharacters>comp + o n</NewCharacters>
+ <Line>hone hone hone hone hoot hoot hoot hoot hunt hunt hunt hunt</Line>
+ <Line>neon neon neon neon none none none none note note note note</Line>
+ <Line>noun noun noun noun onto onto onto onto Otto Otto Otto Otto</Line>
+ <Line>teen teen teen teen tent tent tent tent then then then then</Line>
+ <Line>thou thou thou thou tone tone tone tone toot toot toot toot</Line>
+ <Line>tote tote tote tote tout tout tout tout tune tune tune tune</Line>
+ <Line>tenet tenet tenet tenet tenth tenth tenth tenth tooth tooth tooth tooth</Line>
+ <Line>Tune the tone</Line>
+ <Line>Note the teen not the tutu</Line>
+ <Line>Ten hot teeth tout the tune</Line>
+ <Line>The one nut to tote out the hen</Line>
+ <Line>None hunt out the tenth one ton nun</Line>
+ <Line>Hunt the neon then toot out the tune onto the tent</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing A and S: Home row, fourth fingers</LevelComment>
+ <NewCharacters>as</NewCharacters>
+ <Line>aaaa ssss aaaa ssss aaaa ssss aaaa ssss</Line>
+ <Line>aaaa ssss aaaa ssss aaaa ssss aaaa ssss</Line>
+ <Line>as as as as</Line>
+ <Line>sa sa sa sa</Line>
+ <Line>sas sas sas sas</Line>
+ <Line>ass ass ass ass</Line>
+ <Line>sass sass sass sass</Line>
+ <Line>as a sass ass as a sas</Line>
+ <Line>as a sass ass as a sas</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including A and S</LevelComment>
+ <NewCharacters>comp + a s</NewCharacters>
+ <Line>aaaa eeee hhhh nnnn oooo ssss tttt uuuu</Line>
+ <Line>ah ah ah ah an an an an at at at at ha ha ha ha so so so so us us us us</Line>
+ <Line>ash ash ash ash San San San San sat sat sat sat sea sea sea sea</Line>
+ <Line>ease ease ease ease east east east east Haas Haas Haas Haas</Line>
+ <Line>Hans Hans Hans Hans hash hash hash hash sane sane sane sane</Line>
+ <Line>sash sash sash sash Sean Sean Sean Sean seat seat seat seat</Line>
+ <Line>Stan Stan Stan Stan</Line>
+ <Line>Sean hates tetanus shots</Line>
+ <Line>Eat the toast at ten to noon</Line>
+ <Line>The Taos sun shone as hot as Santa Anna</Line>
+ <Line>Anthea assesses the estate at South Tahoe</Line>
+ <Line>Hotshot Hanna uses these shoes that Shannon soon sees</Line>
+ <Line>At noon on the teahouse Aunt Tess hushes the nauseous host</Line>
+ <Line>Annette senses the sensuous sunset onset on the Athens sea</Line>
+ <Line>Tess Sutton notates the tenuous state that southeast Houston has seen</Line>
+ <Line>Ethan Ness attests to these Tennessee Senate OSHA statutes to shun Utah</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing I and D: Index finger stretching in the home row</LevelComment>
+ <NewCharacters>di</NewCharacters>
+ <Line>iiii dddd iiii dddd iiii dddd iiii dddd</Line>
+ <Line>iiii dddd iiii dddd iiii dddd iiii dddd</Line>
+ <Line>id id id id</Line>
+ <Line>id id id id</Line>
+ <Line>did did did did</Line>
+ <Line>did did did did</Line>
+ <Line>Didi did id did i</Line>
+ <Line>Didi did id did i</Line>
+ <Line>uuuu hhhh iiii dddd</Line>
+ <Line>du du du du hi hi hi hi</Line>
+ <Line>dud dud dud dud hid hid hid hid</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including I and D (entire home row)</LevelComment>
+ <NewCharacters>comp + d i</NewCharacters>
+ <Line>aaaa dddd eeee hhhh iiii nnnn oooo ssss tttt uuuu</Line>
+ <Line>aaaa dddd eeee hhhh iiii nnnn oooo ssss tttt uuuu</Line>
+ <Line>Tina is on hiatus instead</Line>
+ <Line>The statue is sent to Santa Anita</Line>
+ <Line>This session is tedious on the tendons</Line>
+ <Line>That Thai dish is intense on the sinuses</Line>
+ <Line>Onions stain satin so use this Tide on this</Line>
+ <Line>Dan Addison detonated the thousandth headstone</Line>
+ <Line>Estonian nationhood is a notion hidden in Asia</Line>
+ <Line>The tennis enthusiast hides the dots on his hands</Line>
+ <Line>Otis said that sand is the seed that Isis sent us</Line>
+ <Line>Ted Austin insinuated that Tunisia is in Indonesia</Line>
+ <Line>The Dissonant in the ninth edition hits on the Saudis</Line>
+ <Line>I insist that Adenine is in DNA and that andesine is not</Line>
+ <Line>Deanna and Eddie suntanned on the Tahitian seaside oasis</Line>
+ <Line>Indiana and Ohio do not need donated tissues and headsets</Line>
+ <Line>The attendant initiated an intense sound that suited Odessa</Line>
+ <Line>The dodo added nine and nineteen and attained nine thousand</Line>
+ <Line>Duane nodded to his sis as he situated his sedan in the shade</Line>
+ <Line>Dennis Hudson is hidden in a distant Tunisian hashish hideout</Line>
+ <Line>Nina and Dana hit the astonished attendee on the head in unison</Line>
+ <Line>Auntie Edith tends to hint that Edna heeds the ideas due to Satan</Line>
+ <Line>The idea that nineteen studious Dadaists assisted Einstein is asinine</Line>
+ <Line>Todd hesitated in his Datsun then hit the Honda in the side in an instantaneous THUD</Line>
+ <Line>The thesis that Dante dated Death is as inane as the attitude that Sade stood on Sadness</Line>
+ <Line>A destitute Sudanese assassin insists that sainthood is indeed a handout to heathenish idiots</Line>
+ <Line>A thousand nude deadheads sustained hideous headstands as studious atheists dissented and seethed</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing P and G: First fingers reaching up</LevelComment>
+ <NewCharacters>pg</NewCharacters>
+ <Line>gggg pppp gggg pppp gggg pppp gggg pppp</Line>
+ <Line>gggg pppp gggg pppp gggg pppp gggg pppp</Line>
+ <Line>pg pg pg pg pg pg pg pg</Line>
+ <Line>gp gp gp gp gp gp gp gp</Line>
+ <Line>gggg hhhh pppp uuuu</Line>
+ <Line>up up up up hug hug hug hug pug pug pug pug pup pup pup pup</Line>
+ <Line>ugh ugh ugh ugh Hugh Hugh Hugh Hugh Pugh Pugh Pugh Pugh</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including P and G</LevelComment>
+ <NewCharacters>comp + p g</NewCharacters>
+ <Line>aaaa dddd eeee gggg hhhh iiii nnnn oooo pppp ssss tttt uuuu</Line>
+ <Line>aaaa dddd eeee gggg hhhh iiii nnnn oooo pppp ssss tttt uuuu</Line>
+ <Line>The Huntington is in Pasadena</Line>
+ <Line>He has one pip on his insignia</Line>
+ <Line>I did not see Patton Against The Gestapo</Line>
+ <Line>I put the sponge onto the peg on the spigot</Line>
+ <Line>She did not postpone the hepatitis diagnosis</Line>
+ <Line>The USPS sent postage high on August eighteenth</Line>
+ <Line>Pete stops as he peeps at the Pepsi and doughnuts</Line>
+ <Line>Nothing is as stupendous as an independent opinion</Line>
+ <Line>I did not design this gadget that ignites potatoes</Line>
+ <Line>Neptune is the sea god and is the god Poseidon too</Line>
+ <Line>Do not dispute that pogo is as ingenious as ping pong</Line>
+ <Line>The suggestion that toothpaste is poisonous is stupid</Line>
+ <Line>I suggest that one not go to Saigon in a ship tonight</Line>
+ <Line>Giuseppe pigged out on antipasto and pungent spaghetti</Line>
+ <Line>The pianist is a passionate sap and sings insipid songs</Line>
+ <Line>Angus thought he needed a tenspot to snap up the headphones</Line>
+ <Line>Gina Esposito supposed that the signpost in Spain said STOP</Line>
+ <Line>The Spanish poet happened to paint his house indigo and sepia</Line>
+ <Line>Gus is assigned to get genuine snapshots inside the USGS ship</Line>
+ <Line>This pennant said Hastings on it and that one said Penn State</Line>
+ <Line>Gas Seepage in the Peugeot stopped the engine at the guidepost</Line>
+ <Line>Patti Eng has a PhD in the thespian sagas on Oedipus and Antigone</Line>
+ <Line>Tonight the teenage peasants appease the pagan suntanning goddess</Line>
+ <Line>The penguin gasped as its appendage pushed past the Patagonian ship</Line>
+ <Line>Seeing an aging ape eating pudding in a teaspoon is not too desponding</Line>
+ <Line>In this episode the patient hostages hug and sing despite the gunshots</Line>
+ <Line>Espionage at DuPont and Hughes is upsetting to the GOP and the Pentagon</Line>
+ <Line>Doug pauses as he puts the poinsettias and sagging petunias in the teapot</Line>
+ <Line>The indignant patient ingested a potent dosage to suspend his indigestion</Line>
+ <Line>Upsetting gossip at the pageant had Stephanie and Gina sidestepping opponents</Line>
+ <Line>Pat goes sightseeing at the pagoda in Shanghai despite the gunshots at its apogee</Line>
+ <Line>The passage on Pegasus and the Aegean Sea upon page eight is a poignant adaptation</Line>
+ <Line>In hindsight Stonehenge suggests the indigenous geniuses had to depend on the sun and its phases</Line>
+ <Line>Daphne Stephenson has gone to Ghana and Ethiopia and Uganda to audiotape the distinguished singing</Line>
+ <Line>The Pope stood in position atop the highest point in Santiago as an aghast Angie Diego ingested peanuts</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing . and C: Second fingers reaching up</LevelComment>
+ <NewCharacters>.c</NewCharacters>
+ <Line>cccc .... cccc .... cccc .... cccc ....</Line>
+ <Line>cccc .... cccc .... cccc .... cccc ....</Line>
+ <Line>eeee cccc tttt ....</Line>
+ <Line>ec ec ec ec tc tc tc tc</Line>
+ <Line>ec ec ec ec tc tc tc tc</Line>
+ <Line>c. c. c. c. t. t. t. t. e. e. e. e.</Line>
+ <Line>c. c. c. c. t. t. t. t. e. e. e. e.</Line>
+ <Line>etc. etc. etc. etc. etc. etc. etc. etc.</Line>
+ <Line>etc. etc. etc. etc. etc. etc. etc. etc.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including . and C</LevelComment>
+ <NewCharacters>comp + . c</NewCharacters>
+ <Line>aaaa cccc dddd eeee gggg hhhh iiii nnnn oooo pppp ssss tttt uuuu ....</Line>
+ <Line>aaaa cccc dddd eeee gggg hhhh iiii nnnn oooo pppp ssss tttt uuuu ....</Line>
+ <Line>I can accept this pecan pie.</Line>
+ <Line>Each disc costs ten cents each.</Line>
+ <Line>The census counts us each decade.</Line>
+ <Line>Couscous is cheapest in Connecticut.</Line>
+ <Line>Cincinnati and Chicago...each U.S.A. cities.</Line>
+ <Line>The didactic speech on Chopin educated Chad.</Line>
+ <Line>Isaac cannot teach us the Chattanooga Choo Choo.</Line>
+ <Line>Scott Chen teaches in oceanic science at Antioch.</Line>
+ <Line>The cadets deduced that such antics caused chaos.</Line>
+ <Line>His stethoscope suggested that Connie had congestion.</Line>
+ <Line>I contend that a Hitachi scope can decode this speech.</Line>
+ <Line>The octopus descended to the Titanic deep in the ocean.</Line>
+ <Line>U.N.E.S.C.O. accepted a chance at a conspicuous occupation.</Line>
+ <Line>The stagecoach continued to pass the cacti in scenic Tucson.</Line>
+ <Line>Capt. P. T. Cohen needs access to a tactician in this section.</Line>
+ <Line>Insecticide succeeds in contacting the insect in a picosecond.</Line>
+ <Line>Cognac and scotch is an inconspicuous choice...thought Candace.</Line>
+ <Line>Topnotch associates to authenticate the ancient Cantonese teacups.</Line>
+ <Line>Coco said coaching is a cinch...catch and toss...catch and toss....</Line>
+ <Line>The catsup accident at the picnic depicted Dutch as an apathetic nuisance.</Line>
+ <Line>It is no coincidence that this idiotic sentence has eight concise Cs in it.</Line>
+ <Line>The enthusiastic duchess noticed the Pontiac coupe...and decided to chase it.</Line>
+ <Line>I detect a headache...I hope it is not the Schnapps and Cocoa I had as a nightcap.</Line>
+ <Line>The accountant...the C.P.A...conceded that he had on occasion hidden cocaine in a coconut.</Line>
+ <Line>The cautious Canadian statisticians caught inconsistencies in the second spacesuit design.</Line>
+ <Line>The Ph.D. conducted the Puccini Toccata... an acoustic succession in succinct cacophonic staccato notes.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing , and R: Third fingers reaching up</LevelComment>
+ <NewCharacters>,r</NewCharacters>
+ <Line>rrrr ,,,, rrrr ,,,, rrrr ,,,, rrrr ,,,,</Line>
+ <Line>rrrr ,,,, rrrr ,,,, rrrr ,,,, rrrr ,,,,</Line>
+ <Line>nnnn oooo rrrr ,,,,</Line>
+ <Line>or, or, or, or, ro, ro, ro, ro, nor, nor, nor, nor,</Line>
+ <Line>Orr, Orr, Orr, Orr, Ron, Ron, Ron, Ron, Orono, Orono, Orono, Orono</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including , and R</LevelComment>
+ <NewCharacters>comp + , r</NewCharacters>
+ <Line>aaaa cccc dddd eeee gggg hhhh iiii nnnn oooo pppp rrrr ssss tttt uuuu ,,,, ....</Line>
+ <Line>aaaa cccc dddd eeee gggg hhhh iiii nnnn oooo pppp rrrr ssss tttt uuuu ,,,, ....</Line>
+ <Line>Schroeder desires a career as an orchestra conductor.</Line>
+ <Line>A recurring procedure irrigates the orchard and the prairie.</Line>
+ <Line>Harrison, Harriet, Arturo, and Christopher are grandparents.</Line>
+ <Line>Reagan arranged an airdrop, near the northern Pretoria corridor.</Line>
+ <Line>The erratic Richard Rodgers production returned to the Curran Theatre.</Line>
+ <Line>Carrie read the transportation report as Rosie rehearsed her transcript.</Line>
+ <Line>Roger that, in the circuit, the resistors and transistors are corroded.</Line>
+ <Line>The grocer reported that the antiperspirant had deteriorated.</Line>
+ <Line>Pierre Renoir regrets that Gerard Depardieu is not in Chartres, as desired.</Line>
+ <Line>Horns are characteristic to the rhinoceros and the Triceratops, a dinosaur.</Line>
+ <Line>Tia Carrere stars, narrates, and is the director in this torrid adaptation.</Line>
+ <Line>Gertrude, in her aristocratic grandeur, returned the carrots at the restaurant.</Line>
+ <Line>The Enterprise surprised Picard as it crisscrossed the restricted stratosphere.</Line>
+ <Line>Ritter, a character actor, returned an uproarious retort to the irritating chairperson.</Line>
+ <Line>The rhetoric, the grandeur, and the scripture interpretation surprised the churchgoer.</Line>
+ <Line>The choreographer restrained his rather strong terpsichorean urges, and did not dance.</Line>
+ <Line>The oceanographer reports that the interior pressure is inappropriate and erroneous, and orders the radar operator to intercept the pursuer.</Line>
+ <Line>Ed Harris stars as an arrogant and treacherous paratrooper, interpreting, in error, orders to torture a geriatric instructor.</Line>
+ <Line>Though his side has surrendered, he continues to oppress and interrogate the retired grandparent.</Line>
+ <Line>The aggressor is arrested, arraigned, tried, and, appropriate to the horrors he practiced, prosecuted and incarcerated.</Line>
+ <Line>The granddaughter, a stenographer, nurtures her grandpa, and he recuperates, though his arthritis returns.</Line>
+ <Line>In retrospect, that paragraph incorporated a preposterous R proportion.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing ' and L: Fourth fingers reaching up</LevelComment>
+ <NewCharacters>'l</NewCharacters>
+ <Line>llll '''' llll '''' llll '''' llll ''''</Line>
+ <Line>llll '''' llll '''' llll '''' llll ''''</Line>
+ <Line>LLLL &quot;&quot;&quot;&quot; LLLL &quot;&quot;&quot;&quot; LLLL &quot;&quot;&quot;&quot; LLLL &quot;&quot;&quot;&quot;</Line>
+ <Line>aaaa llll ssss ''''</Line>
+ <Line>all all all all la la la la A's A's A's A's</Line>
+ <Line>ala ala ala ala l's l's l's l's s's s's s's s's</Line>
+ <Line>Sal Sal Sal Sal lass lass lass lass Sal's Sal's Sal's Sal's</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including ' and L</LevelComment>
+ <NewCharacters>comp + ' l</NewCharacters>
+ <Line>aaaa cccc dddd eeee gggg hhhh iiii llll nnnn</Line>
+ <Line>oooo pppp rrrr ssss tttt uuuu '''' ,,,, ....</Line>
+ <Line>&quot;Hello,&quot; Ellen laughed, as she collided into Allen.</Line>
+ <Line>In a nutshell, Clinton still had an electoral landslide.</Line>
+ <Line>The alcoholic general staged a coup d'etat in Tallahassee.</Line>
+ <Line>Lucille and Randall cleaned their plates in the candlelight.</Line>
+ <Line>Leland alleged that &quot;Gilligan's Island&quot; is a little illogical.</Line>
+ <Line>Sinead O'Connor's latest single isn't going to appall Russell.</Line>
+ <Line>Colonial landlords near London once said &quot;ain't,&quot; not &quot;isn't.&quot;</Line>
+ <Line>Caroline D'Arc is an enrollee at that college in Philadelphia.</Line>
+ <Line>Didn't she hear, Cal used lots o' laterals, in the last seconds.</Line>
+ <Line>Eileen O'Hare and Pat O'Shea still shouldn't tell Leslie O'Neill.</Line>
+ <Line>&quot;This little oriental elephant is a cultural sellout,&quot; said Helen.</Line>
+ <Line>The illegal planeload o' pollutants hasn't landed at Chicago's O'Hare.</Line>
+ <Line>She'll call Allison in Honolulu, not a local call, on her cellular phone.</Line>
+ <Line>This'll enthrall the linguists...using the letter &quot;L,&quot; one can spell &quot;chocolate.&quot;</Line>
+ <Line>Allegra, an unparalleled intellectual, calculated the celestial latitudes and longitudes in her sleep.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing Y and F: Index fingers stretching up</LevelComment>
+ <NewCharacters>yf</NewCharacters>
+ <Line>ffff yyyy ffff yyyy ffff yyyy ffff yyyy</Line>
+ <Line>ffff yyyy ffff yyyy ffff yyyy ffff yyyy</Line>
+ <Line>fy fy fy fy</Line>
+ <Line>yf yf yf yf</Line>
+ <Line>ffff gggg hhhh yyyy pppp uuuu</Line>
+ <Line>guy guy guy guy gyp gyp gyp gyp</Line>
+ <Line>UHF UHF UHF UHF yuh yuh yuh yuh</Line>
+ <Line>huff huff huff huff</Line>
+ <Line>puff puff puff puff</Line>
+ <Line>puffy puffy puffy puffy puppy puppy puppy puppy</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including Y and F, full upper/home rows</LevelComment>
+ <NewCharacters>comp + y f</NewCharacters>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii llll nnnn</Line>
+ <Line>oooo pppp rrrr ssss tttt uuuu yyyy '''' ,,,, ....</Line>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii llll nnnn</Line>
+ <Line>oooo pppp rrrr ssss tttt uuuu yyyy '''' ,,,, ....</Line>
+ <Line>In Lafayette, crayfish and coffee intensify the lifestyle.</Line>
+ <Line>&quot;I defy you,&quot; cried Finley, &quot;to find a falcon as feathery as Godfrey.&quot;</Line>
+ <Line>Granny Fay left Cindy a frilly, yet unfortunately frayed, taffeta dress.</Line>
+ <Line>In days of yesteryear, typography did not signify only fonts and typefaces.</Line>
+ <Line>The youthful fantasy of Goofy and Donald left Francine the fallacy that life is often funny.</Line>
+ <Line>&quot;After the fifteenth forfeiture,&quot; uttered the referee, &quot;Stanford is, officially, ineffectual.&quot;</Line>
+ <Line>Dreyfuss thought fondly of that hefty eyeful of San Francisco's fog, last Friday near the ferry.</Line>
+ <Line>Geoffrey's faculty lecture on crystallography and diffraction patterns is usually insufficient and faulty.</Line>
+ <Line>If you can differentiate psychotherapy and psychoanalysis, or psychiatry and psychology, you yourself are a psychologist.</Line>
+ <Line>Yesterday, as they do each payday, Sydney and Clifford playfully ran off to the fishery for frothy glasses of Henry's Draft Ale.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing K and M: Index fingers reaching down</LevelComment>
+ <NewCharacters>km</NewCharacters>
+ <Line>kkkk mmmm kkkk mmmm kkkk mmmm kkkk mmmm</Line>
+ <Line>kkkk mmmm kkkk mmmm kkkk mmmm kkkk mmmm</Line>
+ <Line>km km km km km km km km</Line>
+ <Line>mk mk mk mk mk mk mk mk</Line>
+ <Line>hhhh kkkk mmmm uuuu</Line>
+ <Line>ku ku ku ku</Line>
+ <Line>mu mu mu mu</Line>
+ <Line>UK UK UK UK</Line>
+ <Line>hum hum hum hum mum mum mum mum muk muk muk muk</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including K and M</LevelComment>
+ <NewCharacters>comp + k m</NewCharacters>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii kkkk llll mmmm</Line>
+ <Line>nnnn oooo pppp rrrr ssss tttt uuuu yyyy '''' ,,,, ....</Line>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii kkkk llll mmmm</Line>
+ <Line>nnnn oooo pppp rrrr ssss tttt uuuu yyyy '''' ,,,, ....</Line>
+ <Line>Kramer asked for skim milk in a melodramatic manner.</Line>
+ <Line>&quot;My kingdom for a Macintosh,&quot; Maurice choked out meekly.</Line>
+ <Line>It's more sportsmanlike to say &quot;checkmate&quot; than &quot;knockout.&quot;</Line>
+ <Line>Emmet felt homesick until Mom sent him that Hallmark Hanukkah card.</Line>
+ <Line>The makeshift cloakroom is a trademark of McKinley's decisionmaking.</Line>
+ <Line>Kim's nickname is &quot;Kimono,&quot; an irksome mockery of her days in Yokohama.</Line>
+ <Line>There's not much homemade pumpkin ice cream and Smucker's hot fudge sauce remaining.</Line>
+ <Line>The filmmaker, in machinelike precision, caught the magma and smoke from the immense Mt. Krakatoa on film.</Line>
+ <Line>Stock in Amtrak skyrocketed after McKeon's remark mocking spokesmen, gimmickery, and smokescreens in the marketplace.</Line>
+ <Line>From Katmandu to Oklahoma, from Stockholm to Kentucky, from Alaska to the Kremlin, Kodak film is found in many, many cameras.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing J and W: Second fingers reaching down</LevelComment>
+ <NewCharacters>jw</NewCharacters>
+ <Line>jjjj wwww jjjj wwww jjjj wwww jjjj wwww</Line>
+ <Line>jjjj wwww jjjj wwww jjjj wwww jjjj wwww</Line>
+ <Line>jw jw jw jw jw jw jw jw</Line>
+ <Line>wj wj wj wj wj wj wj wj</Line>
+ <Line>eeee jjjj tttt wwww</Line>
+ <Line>ewe ewe ewe ewe jet jet jet jet Jew Jew Jew Jew</Line>
+ <Line>wee wee wee wee wet wet wet wet</Line>
+ <Line>Jewett Jewett Jewett Jewett</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including J and W</LevelComment>
+ <NewCharacters>comp + j w</NewCharacters>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm</Line>
+ <Line>nnnn oooo pppp rrrr ssss tttt uuuu wwww yyyy '''' ,,,, ....</Line>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm</Line>
+ <Line>nnnn oooo pppp rrrr ssss tttt uuuu wwww yyyy '''' ,,,, ....</Line>
+ <Line>Jamestown, New York, that's my home town.</Line>
+ <Line>The Joshua Tree National Monument is known worldwide.</Line>
+ <Line>Jujitsu makes you use your opponent's weight against himself.</Line>
+ <Line>&quot;Wow,&quot; he said as his jaw dropped. &quot;That's a jewel of a wristwatch.&quot;</Line>
+ <Line>Wanting the water to flow, Irwin twisted the faucet counterclockwise.</Line>
+ <Line>Woodrow Wilson's popularity went downward after the economic slowdown.</Line>
+ <Line>The old Jewish widow withdrew further, working with the wooden jigsaw.</Line>
+ <Line>Judy wondered if it was worthwhile to walk downtown to the Jewelry store.</Line>
+ <Line>I wonder if that Newsweek on the windowsill has the lowdown on Woolworths.</Line>
+ <Line>With awe, Jeremy awkwardly swallowed a whole slew of raisinettes as the John Waters film started.</Line>
+ <Line>Wynonna Judd, after a whirlwind tour of the Midwest, waited at the Waldorf Astoria for two weeks.</Line>
+ <Line>&quot;Your Majesty,&quot; wrote Marjorie, &quot;Nothing justifies prejudice. I can rejoice only when there is justice.&quot;</Line>
+ <Line>The newsletter whitewashed reports of wiretapping in Congresswoman Hollingsworth's jurisdiction.</Line>
+ <Line>&quot;Hallelujah,&quot; wailed the janitor as he jettisoned the typewriter out the window.</Line>
+ <Line>The projectile majestically landed at the junction of Jefferson and Winslow streets, just jolting, not injuring, a jogging tourist.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing Q and V: Third fingers reaching down</LevelComment>
+ <NewCharacters>qv</NewCharacters>
+ <Line>qqqq vvvv qqqq vvvv qqqq vvvv qqqq vvvv</Line>
+ <Line>qqqq vvvv qqqq vvvv qqqq vvvv qqqq vvvv</Line>
+ <Line>qv qv qv qv qv qv qv qv</Line>
+ <Line>vq vq vq vq vq vq vq vq</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including Q and V</LevelComment>
+ <NewCharacters>comp + q v</NewCharacters>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn</Line>
+ <Line>oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww yyyy '''' ,,,, ....</Line>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn</Line>
+ <Line>oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww yyyy '''' ,,,, ....</Line>
+ <Line>Mercury and quicksilver are quite the same.</Line>
+ <Line>An acquisitive mind helped Pavlov evolve his theories.</Line>
+ <Line>QVC's involvement with Paramount may give it new verve.</Line>
+ <Line>Vivian's new Volvo unequivocally vanquished her fears of driving.</Line>
+ <Line>According to Pravda, Vladivostok was a quiet village in its Soviet days.</Line>
+ <Line>This unique, opaque liquor does not quench your thirst, it makes you queasy.</Line>
+ <Line>David's vivid imagination and his inquisitive and inventive mind suggest a high IQ.</Line>
+ <Line>If Iraq was equipped to invade and conquer Tel Aviv, the U.S. may have quashed that pervasively.</Line>
+ <Line>We've never quantitatively proven that a quaver is equivalent to a quiver, only qualitatively.</Line>
+ <Line>This revolutionary cardiovascular technique is representative of the productivity here in Charlottesville.</Line>
+ <Line>&quot;I've never had such quality hors d'oeuvres,&quot; Javier said assertively over the tranquil sounds of Vivaldi,</Line>
+ <Line>as he looked over the picturesque headquarters of the Vancouver Civic Center.</Line>
+ <Line>Nirvana's inequivalent sequel to their provocative release, Nevermind, is inconclusive.</Line>
+ <Line>Nevertheless, this quirky yet vivacious trio has evoked a progressive sound that very well may give you a new perspective on irreverence.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing ; and Z: Fourth fingers reaching down</LevelComment>
+ <NewCharacters>;z</NewCharacters>
+ <Line>;;;; zzzz ;;;; zzzz ;;;; zzzz ;;;; zzzz</Line>
+ <Line>;;;; zzzz ;;;; zzzz ;;;; zzzz ;;;; zzzz</Line>
+ <Line>;z ;z ;z ;z :z :z :z :z</Line>
+ <Line>;z ;z ;z ;z :z :z :z :z</Line>
+ <Line>Z; Z; Z; Z; z: z: z: z:</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including ; and Z</LevelComment>
+ <NewCharacters>comp + ; z</NewCharacters>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo</Line>
+ <Line>pppp qqqq rrrr ssss tttt uuuu vvvv wwww yyyy zzzz '''' ,,,, .... ;;;;</Line>
+ <Line>aaaa cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo</Line>
+ <Line>pppp qqqq rrrr ssss tttt uuuu vvvv wwww yyyy zzzz '''' ,,,, .... ;;;;</Line>
+ <Line>Zachary MacKenzie froze in amazement; on the radio in his Mazda he heard pizzicato stanzas of Mozart.</Line>
+ <Line>Carmen Rodriguez is a citizen of Venezuela; her former spouse, Inigo Martinez, and his new wife, Anna Vasquez, have moved to Swaziland or Tanzania.</Line>
+ <Line>The prizewinning paper on immunization against schizophrenia was delivered in Czechoslovakia; this technique was deemphasized in Switzerland.</Line>
+ <Line>A crazed gazelle was whizzing around the zoo; a quizzical giraffe guzzled down pizzas through his muzzle; another one merely grazed and dozed;</Line>
+ <Line>several chimpanzees started zigging and zagging; the reptile zone was oozing with activity; </Line>
+ <Line>several lizards hazarded the freezing waters and capsized the fish tanks; a dozen grizzlies were waltzing in the plaza.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Introducing X and B: Index fingers stretching down</LevelComment>
+ <NewCharacters>xb</NewCharacters>
+ <Line>bbbb xxxx bbbb xxxx bbbb xxxx bbbb xxxx</Line>
+ <Line>bbbb xxxx bbbb xxxx bbbb xxxx bbbb xxxx</Line>
+ <Line>bx bx bx bx bx bx bx bx</Line>
+ <Line>xb xb xb xb xb xb xb xb</Line>
+ </Level>
+ <Level>
+ <LevelComment>Comprehensive, including X and B (This is it, folks!)</LevelComment>
+ <NewCharacters>comp + x b</NewCharacters>
+ <Line>aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo</Line>
+ <Line>pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz '''' ,,,, .... ;;;;</Line>
+ <Line>aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo</Line>
+ <Line>pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz '''' ,,,, .... ;;;;</Line>
+ <Line>Heathcliff Huxtable was played by the inexorable Bill Cosby.</Line>
+ <Line>An inexhaustible supply of benzedrine merely exacerbated his disturbances.</Line>
+ <Line>Bruce Boxleitner explained to the extraterrestrial why Babylon Five was built.</Line>
+ <Line>The ambidextrous exhibitor was exhausted by the time he loaded the boxcar with hobbyhorses.</Line>
+ <Line>Drop those xeroxes off in the mailbox; I'll get them in the bibliography in five days maximum.</Line>
+ <Line>Mr. Balboa is pretty flexible with the textbook; it's probably excusable to fall a bit behind.</Line>
+ <Line>Why Mr. Baxter went from Bordeaux to the tableaux exhibit in Luxembourg by taxicab is inexplicable.</Line>
+ <Line>Becky found the Bronx pretty obnoxious; though there was that Caribbean restaurant that truly excelled.</Line>
+ <Line>The executives at NBC, CBS, and ABC all found it inexcusable that the BBC was so inflexible and xenophobic.</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/dvorak_es.ktouch.xml b/ktouch/training/dvorak_es.ktouch.xml
new file mode 100644
index 00000000..7d3ec33a
--- /dev/null
+++ b/ktouch/training/dvorak_es.ktouch.xml
@@ -0,0 +1,407 @@
+<KTouchLecture>
+ <Title>Dvorak Español</Title>
+ <Comment>Ignacio Fernández Galván, 2005
+http://djelibeibi.unex.es/
+</Comment>
+ <Levels>
+ <Level>
+<NewCharacters>ur</NewCharacters>
+<Line>uu rr rru uuuu rru uuuu rrrur rrrur uru uurrr ruu rrrr rru rr ruuuru</Line>
+<Line>uuuu ruu uu rrrrr r rrrr uru u uu ruu rrrrr rr uurrr uu uurrr rrrr ruu r</Line>
+<Line>u ruu ruu rur u u rru ruu uuuu rrrrr u r ruuuru rr uuuu rur rrrur uu uu</Line>
+<Line>uurrr rru rrrr uu uu r rrrur uu rrrrr rrrur ruuuru ruu uurrr uurrr rr</Line>
+<Line>ruu rr rrrur rur rur ruuuru uu rrrrr rrrrr urrrrr uu uu r rrrur uu ruu</Line>
+<Line>urrrrr ruu uurrr uru ruuuru rr rrrur urrrrr uu uu rur rrrrr rrrur rrrr</Line>
+<Line>ruu urrrrr uu ruu rru ruu ruu rrrur uu uu uu uuuu uu rr rr r ruu ruuuru</Line>
+<Line>rrrr uuuu rrrrr rur rr ruuuru rr urrrrr uu rru rrrr uuuu uuuu r uu</Line>
+<Line>urrrrr rr rrrur uu uru uu uuuu uru uu uu ruu uuuu u ruuuru uu rr r ruu</Line>
+<Line>ruu uurrr uu uurrr uu rur rr rr u r ruuuru ruuuru uu uu rur u uru ruuuru</Line>
+<Line>rr rr rur u ruuuru ruu ruu uu r urrrrr rrrur u rur uurrr r u rru uurrr</Line>
+<Line>uu urrrrr uuuu rrrr uu ruu ruuuru r rrrrr ruu rru ruuuru uu ruu urrrrr</Line>
+<Line>ruu rr uu rrrrr uu rru rr ruu ruu uu uu r uurrr uu rru uu uurrr ruuuru r</Line>
+<Line>uurrr rrrr uru r ruuuru r r uuuu rrrur rru uuuu rrrur uu rur uru rru r</Line>
+<Line>rru uurrr ruuuru rrrr ruu ruu uuuu uuuu rur rrrrr r urrrrr u uu rr rrrrr</Line>
+<Line>ruu uurrr rrrrr rrrr r uu uu rrrur rur rru rr uu ruu rrrur ruu r urrrrr</Line>
+<Line>uu rru rur rru rru uurrr rrrr ruu ruu rur ruu rrrrr uu ruu rrrr uu rrrr</Line>
+<Line>uu ruu rrrrr urrrrr uuuu rrrur u u uru uu urrrrr rr ruu u rru r ruuuru</Line>
+<Line>uurrr r rrrur ruu uurrr rur ruu uuuu ruu uurrr rrrr uru r ruuuru r r</Line>
+ </Level>
+ <Level>
+<NewCharacters>et</NewCharacters>
+<Line>ere utter rete rue tute tut te t rte tee e t terree rute rte utter rute</Line>
+<Line>truer tute rut tut tete erre ureter tute terr rute retrete rte turret</Line>
+<Line>rte t rut tutee tutee te erute e ureter true true teeter turre turret</Line>
+<Line>ureter tu tee e rete tutee tee teeter tee tute terree utterer turre t</Line>
+<Line>rue rte terr te e e tut true te err re true terree tete tr tutu tree ere</Line>
+<Line>tut tute tute terr tete tete terree tutee utterer ere ere tr utterer t</Line>
+<Line>rt retrete terete tutee utterer ureter true utterer utterer tree truer</Line>
+<Line>ureter te utterer rte terr tutu true tete te ureter truer tete tutu tute</Line>
+<Line>t terete e erute terree utterer tree e rte e true tu terete terete rete</Line>
+<Line>terete tutu terree turre tete teeter tu tete terete ureter ere true tree</Line>
+<Line>terete tete tutee erute tute rue tut tete ureter turre tete truer tree</Line>
+<Line>true rute tutee teeter terete utter utterer utterer tree tr terete erute</Line>
+<Line>ureter terr e te utterer tute rut true tee tete tutu true terree true</Line>
+<Line>tutu terete terree e utterer re te rte tree erute terete te teeter terete</Line>
+<Line>terree tete t tute teeter ere true tu re terree turre terr utter tee t</Line>
+<Line>te tee rte erute teeter rute err retrete tutu erute truer utterer te tu</Line>
+<Line>utterer erute erute rete tut tutee tu rue te tu rt teeter rte terete tree</Line>
+<Line>teeter ere terr retrete ureter turre rute tr erre tutee tu te tutu truer</Line>
+<Line>te terr teeter tr utterer erute utterer teeter rte retrete rut re truer</Line>
+ </Level>
+ <Level>
+ <NewCharacters>on</NewCharacters>
+<Line>retro tonne reenter toro nu retro torturen troneren rotuno rotten rennet</Line>
+<Line>entrone turne nut orto entrone retenerte norteo entronen tron oreen tono</Line>
+<Line>torturer retorne error neuter o oteen torture tenor torturen roturen</Line>
+<Line>rote entreno entrone trueno reroute ruto outrun rottener teten tono tore</Line>
+<Line>runner torturen torturen euro entreunte non entono tenue roten unten</Line>
+<Line>trout terreen oren terreen eren entrono retente note runo returnee unto</Line>
+<Line>torren rerun notro entorne unto torno tonne unto eon treo un rune out</Line>
+<Line>torturen otter troneren tuneo trout rotuno tour rento orto tuturuto</Line>
+<Line>tuteen tuteo reno unte tuno ruten tonne reto outrun enteren runo treo</Line>
+<Line>retorno ten rotten tenner retento rout urn roten rento otro reenter</Line>
+<Line>ronronee tort turronero ton toe toreo toruno roe tuturuto tronere oro</Line>
+<Line>tenor roen entornen tetero enrono teto entro retoro reten entuerto</Line>
+<Line>tuneen turronero roue tonto ro out entro trenteno roete entrene unto uno</Line>
+<Line>enrune outrun roe euro entro tenner note nurturer note torree o torrente</Line>
+<Line>neto rune oreo notro tronere troten ronroneo tronero torture retornen</Line>
+<Line>otro tuneo no ton noto oree nortee entorno torneo outre retento truene</Line>
+<Line>roturo ronronee reno noun ruto ruten nene runner tout roture enturo</Line>
+<Line>turnen oren nono entente terno roturo treo terno retort tontee entro</Line>
+<Line>entro torturen torrente turno toruno truenen not trot rentero entronere</Line>
+<Line>uro tonne retornen tornen retenten toruno terno terne non retorne rotor</Line>
+ </Level>
+ <Level>
+ <NewCharacters>as</NewCharacters>
+<Line>enserar nans resonases reataran resonaras atraernos rustras narran retan</Line>
+<Line>asurases ruanes rest terrones tratarse ostenta enrasaras sanas entornase</Line>
+<Line>retorna serrases tarareare rateos reuntasen rosetones enartases sornaste</Line>
+<Line>usase asurares rotas sastresa surtas rotases sorra sestearen ratonaras</Line>
+<Line>tenors asaetees eses taste reatares sanear toaras tutease asaeteara</Line>
+<Line>enteraros torneares saturare esa enartaste enrostras resanes rastras</Line>
+<Line>atontaron asunto austro enrasan torturar raros entura tersare atontes</Line>
+<Line>assents reararas ratas restarse ensenas tetas sonora raso sosera</Line>
+<Line>aserrase us rattans arara trotters norteas susana retretas orate tunanta</Line>
+<Line>rautas trotara atestaste osaran trasuntan esterares rases arrate</Line>
+<Line>enastaren atareasen ronroneas esturaren tuteare ensotaron rosas retesan</Line>
+<Line>ensenara eater rastreara totanera tetaren aunaren stone statures</Line>
+<Line>ratoneros enasten rastra esturarte artesones sastras tensare reararan</Line>
+<Line>teneros asustares arresten norteaste enarenara seranean erases ese</Line>
+<Line>asustaron torraran arruasen rares taus terrease arrasaste nueras</Line>
+<Line>enseraren etas usares setenaras rosease arruaron usuta artesana ruana</Line>
+<Line>nantar sateen tetases atronere usurearan toseta asesorar retratas</Line>
+<Line>retesara rentoso atasen arreasen atontasen atusar transo tetaras turrase</Line>
+<Line>torneasen enteraste truenas usutas eater stare tonos narrasen resanara</Line>
+<Line>ostenten aseen sonrosear atonto oases roseasen asestases sus asarse</Line>
+<Line>retreta tanteasen atentes ansarones san setero seseaste asesasen tanteos</Line>
+ </Level>
+ <Level>
+ <NewCharacters>id</NewCharacters>
+<Line>strains inunden desdedido artsiest tirrias insudara tontadas atiesare</Line>
+<Line>desires atinarais retentad riendas sodios santidad nations desudare</Line>
+<Line>resididas rotunda radiaras aireas airo endosad estirarse reunida seiseno</Line>
+<Line>retada edren detiene tensina enditaron atronadas arietes dissent</Line>
+<Line>ideaseis derision innatas asaeteado deionised disentir seriaren osarios</Line>
+<Line>dissuades triase antia desanuda adornante sordas insidia anudaran</Line>
+<Line>tonarios detonada irisan rodeando drains ration reinsert did ninnies</Line>
+<Line>derruir ditsier disonar enrodas airados ordained desanude arrodeara</Line>
+<Line>anudes situara tatuadas rotundas inured tundieses dreariest aterrad</Line>
+<Line>enredases anidares rinsed dietaron nudists destenta destoses atetado</Line>
+<Line>aneroid destetare tedio derrite sodio dentases audios aireas atentada</Line>
+<Line>desunan noise unisonada deseareis rodeara asida desanidar serenado</Line>
+<Line>ordered detonad radio airarte dissonant desatad resisando enditas</Line>
+<Line>tosidas asientos reedier disuade desuda odies tired entienden internada</Line>
+<Line>asedaseis diuresis diestra sedientos desdente dados tirintio rondareis</Line>
+<Line>readies siseados trinan sitarists enartadas tintineo rieseis etude</Line>
+<Line>andado rustriste tiroteen asirias arteries istrian netted dinosaur</Line>
+<Line>dentadas asientas sientas airearon sardina atiendes atadores desadeudo</Line>
+<Line>rosado rattier astisteis dreaded insudes dornie inodoros torrad rueda</Line>
+<Line>adensen enrodan dado rindieren nidrios entrenada dedo ordinated</Line>
+<Line>sonrieres rentareis nardinas daunt staidness antoniana asistente</Line>
+ </Level>
+ <Level>
+ <NewCharacters>áéíóú</NewCharacters>
+<Line>resudé útero dudó ratearé sedearían endosé enriáis resentís tostaréis</Line>
+<Line>santería aunándose distarías detenéis tiréis resisaré dorándote rosearán</Line>
+<Line>intuía inundarán oseéis atraséis resistían desaterró ruinarías denotaré</Line>
+<Line>reuntáis asustó raerán aserré sornáis atediaré transaría urdiréis</Line>
+<Line>uniéndose desadeudó nansú susurró odiarías tonsuráis derritáis aserrará</Line>
+<Line>tundí asedáis dentarías endiosará irritarán desasíais sornó asedaré</Line>
+<Line>drenarían entendían testéis idearé testáis dirían editaré edité sonrías</Line>
+<Line>saetía disonarás enarenaré donarían roerá tundearé torraré atusarías</Line>
+<Line>rastrarán tensará sedería tantearás sonreído sentían tendría rustirás</Line>
+<Line>adensáis antiaéreo asustáis desordenó sisearéis atontáis sesearía</Line>
+<Line>trastorné atronarán erosioné erutaréis arría destetará irritarán restaré</Line>
+<Line>dónde sonríes desdaréis aterreró adosará tundearán insudó satinarán</Line>
+<Line>rustrió ruaréis titará otearía orinaría nordesteó raías situaría</Line>
+<Line>tostarás teneduría dentarían deterioró asordáis astéis torráis oíros</Line>
+<Line>airáis rotarían rustirás toaríais naneéis rutarías atáis enrunéis éter</Line>
+<Line>erídano dría asteré enrasé retinaría nadaré anadearás anidéis rendís</Line>
+<Line>desertáis orinarías atusarás enronarás notará enraséis desearían</Line>
+<Line>tiraríais atenúe aserrarán retasarás denostó resonarán editarán</Line>
+<Line>tarareéis desadornó arruinará oír terrearé soneteará arruinéis redundó</Line>
+<Line>renadíos nantarás atinéis donándose atreudáis taséis oráis susurrón duró</Line>
+<Line>arrasaría desadornó sitúa disté retundáis sesteéis derretía resentís</Line>
+ </Level>
+ <Level>
+ <NewCharacters>pg</NewCharacters>
+<Line>guardar rapara disgregó suponed apagó ripiarais ratigasen resitting pino</Line>
+<Line>tragaran triptongó grossness prodiga aporra pisoteare pudiese irrogad</Line>
+<Line>repeine degustará repagases peignoir pine apiane guttiest gouged negrura</Line>
+<Line>pasturage pretest respigare trapeará presagié gitanearé piarán inauguro</Line>
+<Line>aporrarán repaid parergon pudingas graneo grandiose ataruga rigieres</Line>
+<Line>engruesan predigest gestean desgrana parapetar patera narigudo negreare</Line>
+<Line>destripan puniesen prognes taponera despenad petting graneada torpedo</Line>
+<Line>repugnes engrapé napper pungirá ranger pedrea torpedeo grates grunions</Line>
+<Line>entarugad anegaren disiparé patearía disparate pongs reportage dirigirás</Line>
+<Line>proteger espurrias sopuntó instigare raposeáis soporte tugged pegasos</Line>
+<Line>anegando trepados pisonearé gateareis ignoras pipiaré perduran urgieren</Line>
+<Line>pioneers asegure resigning apetitosa despana sosegaren tapir estigios</Line>
+<Line>dignéis uprooting guiparía atrapases gansees superarás prosigo aguando</Line>
+<Line>straiting pródiga striped pingó dragonea desoigo topare pipping repagan</Line>
+<Line>depuro depuráis guerread sangran prenoté giants pointers grins generates</Line>
+<Line>repague griega pisonead guiaréis sopase pernios popasen apagarnos apagad</Line>
+<Line>suprioras pigeoning energiser pringada raposinas gatearen repagada pispa</Line>
+<Line>tapers arrogues gestearía raptéis espigosos posee arpes adaptes dignarán</Line>
+<Line>tripped papping despanare soapiest spiting protegió punirás posdatas</Line>
+<Line>disgustar depones pondera atropó desgana grúa perdurar griterías ponían</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ñc</NewCharacters>
+<Line>gañir guiñará restañéis atasco aniñarse niñada engañada precising</Line>
+<Line>nacarada acacia desencapa acuartó asurcasen ciñe diseñar careened</Line>
+<Line>caudatas ciaras iciest niceness desdeñes cariñar estaño porcino enocase</Line>
+<Line>carcaño señoreáis suceder roñar prescindí roñen recusan tacañean</Line>
+<Line>desroñare cuatreño acertáis tectónico cañedo cuñad cuisine addicting</Line>
+<Line>caído preñara niña crepito coronador pergeñé estucases graced soñados</Line>
+<Line>rancian consonada adueñadas estañan adueñaré picoting scoot desciño</Line>
+<Line>diseñases cuñarás enseñaría picardía encañare catonicé ordeñáis descepad</Line>
+<Line>especies carrascas acuñe space dañinos copiaría peña regañada creates</Line>
+<Line>apacigua picaréis acuñarían tañían truncados cuándo añorare apancora</Line>
+<Line>gruñiría ordeñan carenaría apiñaste encañonan ensueñas acatarra</Line>
+<Line>esparcirá entuñaría trencen castigate añadiese escodad carpets destacan</Line>
+<Line>enseñe escañasen cerciorar enact centena incusos entrañas doña cernían</Line>
+<Line>desensaña cariarais estucases porteña ciñéndote dañe desceñid apuñaría</Line>
+<Line>tacañeada roñarás tacañea uñada traducid reseñase adduce dañaras cucó</Line>
+<Line>roñó recaude acaecidas truncado desdeñes tañerías guadañáis saca toce</Line>
+<Line>apuñeas cañoneo ensañaros ordeñase apañados acosad garduños cañota</Line>
+<Line>guiñaste enancaron costeña rapiñase enceparé secundad cande cocees</Line>
+<Line>acertaría apiñe roñaseis engañara desdeñan acañonees acontecí cantiña</Line>
+<Line>recreando doñas cocearais reacuñará perecerá encaucen desecaré seccione</Line>
+<Line>descoca gruñas cañero caño desteñían escañeros encaño acapare</Line>
+ </Level>
+ <Level>
+ <NewCharacters>h</NewCharacters>
+<Line>hateáis reharía historio aches enhueréis chippie cachad hundieses uchú</Line>
+<Line>hadarás acechasen encacho hincaran phi pushiness estreches hotness</Line>
+<Line>hedonist acechos right trechean puncháis enhornaré rightness enhestas</Line>
+<Line>ancheta ahincáis chichiest hoot ponche chips chupeta soother piache</Line>
+<Line>tooth rightest hincháis graphic chocheara hundido deshonoro enhestó</Line>
+<Line>espichada chateare heathers adhered doodahs cacho herrarás cashed</Line>
+<Line>sancocha hospodar seashores enchiné hongos sanchetes hiriesen herretea</Line>
+<Line>adherirá hedidos trashes sahornan cocheases destechas hocicudas chatees</Line>
+<Line>penchants honradas hincaron hearers therapist adherir ahogarais hinchó</Line>
+<Line>chapuces chocheada hr phone anchurosa sonoche horn antiphon hurtagua</Line>
+<Line>cinchones sospechar tochura rehear hostigará agachare troopship snitch</Line>
+<Line>chistase rehashing hearthrug ahorréis tethers cachua chariest estrechar</Line>
+<Line>hincaré hooter honradote asechases nosh enhiestas thespians híspidos</Line>
+<Line>honesto rechina rephrases hacheare earshot enchico coheredan hence</Line>
+<Line>headaches cachetero pinchones achispéis hundís hincas ahogarais cachado</Line>
+<Line>hiciera predichas reherrará ahondar underhand choteadas ahornaste</Line>
+<Line>chocareis pathetic chupasen chitón enchinase shrouding chotearon</Line>
+<Line>chanceada agarrocho pinchases anhidrita tochedad chastened ahorcados</Line>
+<Line>chattiest encauchó entruche rachareis hunters hespirse ditched chateó</Line>
+<Line>ducharan echar cocheáis chincha chateaste chirriáis coguchos heredera</Line>
+<Line>ahorradas hopeare hied perch theirs chincharé achenes hearsing hopeado</Line>
+ </Level>
+ <Level>
+ <NewCharacters>l</NewCharacters>
+<Line>salseros alteéis copulara declaring orlarais halarás deliraren platinéis</Line>
+<Line>resaltar desalarás encele halconear apiolaras clisé agotarla linóleo</Line>
+<Line>acallé tecleases lucirles lépero gallead ludiasen desliada aplacías</Line>
+<Line>colearais carlingas solapas deluded laurente alcance telurios criollo</Line>
+<Line>recelada lleca calándose elección aplanáis saltareis alienadas acodalare</Line>
+<Line>piolares leéroslas delineara litoral latín splines alegan ladradas</Line>
+<Line>placareis lapicen ganchuela escarpelo placearás salteños serpollar</Line>
+<Line>lolling sultans halaríais patrullas calcino apiñarles salgue apearlos</Line>
+<Line>desellar ralos pulidoras llagando tildad pedal idílico gelds rielarás</Line>
+<Line>silícico alineare tutelara colono lung tirulatos teólogos alindado</Line>
+<Line>gloriases elogiarle galoparan crudillos iletrada clarearon ladrada</Line>
+<Line>estallas suplió sploshing astilléis acanalaré resalido pulid aletargan</Line>
+<Line>panoplias retallad soldaréis curial polcaren chaneléis religado lager</Line>
+<Line>papeloneo chulos letuarios alistara legara enllocara upholding golpeó</Line>
+<Line>rehelear usarlas enchilad asoldade real ararlas llande aclararía</Line>
+<Line>inhalants hallarán salida sallador escalasen people postulará lacrarán</Line>
+<Line>entrillar halos girártela pedirlos hospitals lencero aglutina palparen</Line>
+<Line>despalde tillaré leparás alargué rielarán loather landlines paloteó</Line>
+<Line>longar autillo elopes adelantas pasteleas aliagas clarores trapalona</Line>
+<Line>eludían unsettled aludidos laceraran alienado launas acertarlo insocial</Line>
+<Line>sundials platicare dollop deplorar alegó arrolla repolla enlacé galas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yf</NewCharacters>
+<Line>finarás facility fundarais fairytale fachendeé financié fairly enyugan</Line>
+<Line>fincases reputedly royo prefina sanctity efundí coolly inertly fugaran</Line>
+<Line>infartos steely infieren fusilando enfriarla oroya torridly escuyerá</Line>
+<Line>fraterna linearly unhappy dashingly rayosos difícil confluyó oyereis</Line>
+<Line>stuffed stuffiest retype trashy incluyes falderas layados soslayes</Line>
+<Line>chiflando esférico pity etiology recluyó safely hydrangea hydrology</Line>
+<Line>nasally pacifista leisurely refolding filé ferien hooraying afronta</Line>
+<Line>daftly infusos yugular sedgy propylene odiously hayfield ghostly</Line>
+<Line>fundasen yo farrier acefalías sufras fuels refer afelparen filched</Line>
+<Line>recayendo escuyan essayed roundelay fecharas shiny reyunas careful</Line>
+<Line>infundida raffled alfardé desafila felony poppy incluyáis rayad</Line>
+<Line>ayustadas lengthily felted yaciste enrayéis refregué tangy perfilen</Line>
+<Line>conflict ofendéis follaréis fulero farrearé afeados caulífera afluida</Line>
+<Line>hoya yeah enfulláis afatas daffy graffiti fuerces asininely cifraseis</Line>
+<Line>diluyo afielada oysters nicety racy flings retype diluyere atalayará</Line>
+<Line>factoids free yeah espy futurity referían spyhole falsía agency guayad</Line>
+<Line>ofertarla oyeseis ufanos desapoyan pilfers rechiflé ayude estufó</Line>
+<Line>infunden sunny defiendan raya rayador alcalifa floreadas creyeses fluffy</Line>
+<Line>configuro federarlo ayudarán catalysed faience crayolas creyerais</Line>
+<Line>enfadasen afiarán topically difluir rigidity aforaseis enraye farragosa</Line>
+<Line>enfrontes idiocy restudy horrify apoyarás yesera spaying frenaste</Line>
+ </Level>
+ <Level>
+ <NewCharacters>xb</NewCharacters>
+<Line>rebullan abanasen expendido suffixes subastáis glob axiales fixtures</Line>
+<Line>iniciaban exaltaros gangueaba befaste exaltaste oxidasen látex escribís</Line>
+<Line>relaxes exulted exculpate badallas albedrío extrañar exilie exorase</Line>
+<Line>hebra xxxi exores bisexual cabreaba herbosa outfox extendida blissing</Line>
+<Line>barreada aocaba expiates excediera extraigas abanaréis baratas abonadas</Line>
+<Line>befit borboteó rociabais explicaba exegetic rorabais abanara surtaxes</Line>
+<Line>caneaban extracts blindases rebuto expertise sixtieth benefice probabais</Line>
+<Line>expidiera rebasaron prónuba excediera exponerse bastearás bellyache</Line>
+<Line>expanden públicas recobró exculpad hexing exorarla exhibido explayaba</Line>
+<Line>boxeados extrañé cabes anorexic expedían oxidaría encabrió inexactos</Line>
+<Line>exudabais bañáis caben bents coxálgico cabalada aberraré asfixiado</Line>
+<Line>sorbiese derribaré arietaba extruding bedelio execre respiraba flexuosos</Line>
+<Line>bailarás oxidarles indexers expolió binaren laxó expresáis oxide oxcart</Line>
+<Line>labelling cebarán exultar taxied sextario ababillan excitaría urbanises</Line>
+<Line>anorexias bateaba resobréis exportas extension expugnaba desbaben</Line>
+<Line>apareaban expendía bucearía silabar baldía oxigenan oxidarlas bordad</Line>
+<Line>bedpans expects pretax atoxicase exposes expat expurgaré raboseada rabeé</Line>
+<Line>belesa excretará rebuff pebble rectoraba cerrabas breché expié unfixed</Line>
+<Line>xi cableaba bufonesca ballena indexen excusaban bey pyxes debauchee</Line>
+<Line>robarais expropió burilaría habérsela abollaras dopabais brillare</Line>
+<Line>laborable expolias lineaba exagerare excited laxara exfoliara aberres</Line>
+ </Level>
+ <Level>
+ <NewCharacters>km</NewCharacters>
+<Line>kappa pekingese kilning trompillé miamos relinked monkish camuflan</Line>
+<Line>kopecks bikini inkblot chukkas dreamt rumbaréis ampararte apenarme</Line>
+<Line>espetemos risking bulkiness drinkers oinked penknife impregnen primeaban</Line>
+<Line>petcocks topknot tokens desusemos freakish kinetics frank alambrado</Line>
+<Line>spake hearkens leakiness dikes premiaría amnios embribara mulilla</Line>
+<Line>embriones sickroom backbit kinetics bakers inkier emanan conkers porkies</Line>
+<Line>marchaman poseíamos esfumemos pummel playbook miañéis keelhauls armaseis</Line>
+<Line>inhumaría tosemos comebacks koans escamaste remosto playbook relamamos</Line>
+<Line>lithesome rampaging misspoken humare dimer rakishly animarás tarifemos</Line>
+<Line>farmacias secamos dicótomo thicket sneakers backer cumpliste bulky</Line>
+<Line>yarmulkes matings informada desarrumé empurrará keyholes alfombran</Line>
+<Line>planks hormigueo selectman many mocks skylark keelhaul empocemos</Line>
+<Line>remabais simples rámeos keystones grosbeak embeodad empergare skimmer</Line>
+<Line>tokens chospemos meraban dankest haláramos skittle deskill inkblots</Line>
+<Line>linkage modeláis sheikdom penásemos humblest spank rumas moulting</Line>
+<Line>empleabas sucked pecks sucking remarked tacked mugidor darkies decoremos</Line>
+<Line>interlink dickybird backdates hookiest humpback ransacks morrillas</Line>
+<Line>humidor derramen suckles picker kangaroo blanking tricking mallar</Line>
+<Line>kilotons nickle bookend snaky pickling escaméis macrocosm alimonará</Line>
+<Line>sickened blastema fastbacks eximiros kick bumptious clunky clerking</Line>
+<Line>montaseis broke maranalla bulk umbralado témporas adormitan molleemos</Line>
+ </Level>
+ <Level>
+ <NewCharacters>jw</NewCharacters>
+<Line>ajironar wattage wuss jaricaban jineteare fajeros outgrew waders wannest</Line>
+<Line>joyosas outwears ahojaban alijabais swags repajos upwind jorobases</Line>
+<Line>homenajeó unwell wriggly jarabeará waned tideways wren jarciáis amojonen</Line>
+<Line>whitehead jaspees bewared hojaldró wheels wangler snowier drawcord luje</Line>
+<Line>ajorrará endowment conjuntos mujalatas crewel gawkiest alejaron enojamos</Line>
+<Line>rijas gorjeada slower undertow shrewing coworker mildew bojes atajes</Line>
+<Line>parejura burrajean entapujen wackes narwhals whiskery bewaring elije</Line>
+<Line>slowest lijéis amarraje urajeados encobijad jugabais hewed pajoleros</Line>
+<Line>paws lambrija sinewy woke wispiest jamaste pujadoras retejes sonrojad</Line>
+<Line>jasemos warships pewits jaldre sujetaban leastwise tweak bajuna swirling</Line>
+<Line>blowgun scows desabejad unwitting aflojo jedaréis crawlers wronging</Line>
+<Line>mewing coworker waddles barbwire rejigged unwounded jirpees swelled</Line>
+<Line>jactarais unwitting answering wooding award jasado jinglaría redijeran</Line>
+<Line>cowed jaw sinew tripwires sedujeron esponjará jauntier reawakens jacas</Line>
+<Line>sobajare tajeros winnings allows jawbones jitarían desfijare ajorabas</Line>
+<Line>downpipes meltdowns oreja wined brewpub anejo mawkishly catwalk mejorare</Line>
+<Line>wrights weaklings swamis unwound ajorarían downrange ejectors arroja</Line>
+<Line>abjection pathways ajustaros sonrojeen enojadas warred jalábamos aguije</Line>
+<Line>worksheet rojas motejaban matojo wodge atrojarlo bawds sparrow jockeys</Line>
+<Line>winery weaselly mojiganga wildness twaddles lujoso bellows steward</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qv</NewCharacters>
+<Line>requiem obsequies baqueare choquéis veamos movérselo mesquites viciad</Line>
+<Line>revalues pesquis qualifies matraqueo encuques promover niquelado parvenu</Line>
+<Line>hociques olivícola evens inviting asurquen quartiles quebrantó verifique</Line>
+<Line>flanquean esquilen acerques cultivara exclusivo aseveraré loquacity</Line>
+<Line>requiter resequido ovaré jaqueara vigil maloqueo quietaste noviciado vet</Line>
+<Line>velleras envolveré quijones appliques esquejará carvajo saqueases</Line>
+<Line>quintales envolvías edifique bienvivas archives nevan veladoras alivia</Line>
+<Line>revelo esparvas raqueéis coloquen inquinaré calvamos banquetas turuleque</Line>
+<Line>abrevó tronqueen bolsiquea viriles adoptivo flaquees reservas maquilada</Line>
+<Line>remolquen visitant roquetes invoque enoquéis manqueáis dove abdiquéis</Line>
+<Line>mosqueare bayoque velvet arenque vaqueiro vencerlo marquesas acequiabav</Line>
+<Line>mosqueda desvirgan cautivé octaviano esvaraban requerido novaseis</Line>
+<Line>renqueara bloquead servil lectivo vigilan vergetas emparvara traquetea</Line>
+<Line>verdón olivares derrquéis anivelada venteros ravishes muñequeen viciosv</Line>
+<Line>vortex vacíen quemarla boquidura ataviéis volantón visitarla estoquve</Line>
+<Line>evadiese activar viruses aovamos revierten encovado valdense revamping</Line>
+<Line>esvaré vociferó equivalí vapulasen tique vaquería monarquía moquease</Line>
+<Line>esquejase terqueé aquietes salifique avetados larva casquera deaves</Line>
+<Line>ronquera vierta versearé silva alquilaba desavenís tranquilé quejéis</Line>
+<Line>clavarte viburnums ronqueará revuelven periquete valsó vascófilo voceado</Line>
+<Line>innovemos quimones carnívoro flaqueaba vegetando quitará empolvado</Line>
+ </Level>
+ <Level>
+ <NewCharacters>z</NewCharacters>
+<Line>zurrar almizclan satirizó remozan retazaría regazó azolases azoarías</Line>
+<Line>hozaríais energizes azoré zurrirás tronzaron rebuznes pardiez theorizes</Line>
+<Line>maznare hypnotize amanzanar herborizó zapatuda rapidez prizes pizcaras</Line>
+<Line>hiladizo calzadas lanzones estezara zodiaco adrizasen cazarais zanjada</Line>
+<Line>totalizó ofrezcáis zapemos zealotry zahoraban atenazáis envanezco</Line>
+<Line>impureza mezclaran sonetizo ironizara rezone schmaltzy empozasen melliza</Line>
+<Line>vaporize abenuz engazas ditz esperezas solazaba azumase esbinzad</Line>
+<Line>abrazaren escobizo esquinzar pedrizos kazoo azufraran zurríamos</Line>
+<Line>rapuzaren destazada futzing virigazas deszumare esbozaban regazaba</Line>
+<Line>azoares apomazaré azaramos trenzando cazoletea frizz destazar encauzar</Line>
+<Line>obedezcan garzo realzaría analizan azolaría jerezanas bizcares azocabais</Line>
+<Line>trenzarás revezase enfatizan frizziest gozarlo deslizaré drizas entapiza</Line>
+<Line>bizcaseis barnizad juzgares grandeza aljezones alquezará comizas ligazón</Line>
+<Line>mestizada apomazado desazogue roznaré regazares trozaran prontezas</Line>
+<Line>rizófagas lazará ataluzas paparazzo realzando lenizará comenzar</Line>
+<Line>embizques bizco minimizó rozarlo cobriza brutezas exorcizad azotaría</Line>
+<Line>venzurrone zamparás feminize segazón zapuzaré cabizbajo ensalzan punzabas</Line>
+<Line>esbozara zancajean zarandera tamizaban zarandaja soalzaran acorazara</Line>
+<Line>zarpas alanzaría tibieza bazucara trazaras lanzarlas solidez brutaliza</Line>
+<Line>capazos organizó dozens deszocan zapásemos enterezas pellizqué trabazón</Line>
+<Line>metodizan zanjo chapuzó cruzarás reluzcan trenzaras remozaban</Line>
+ </Level>
+ <Level>
+ <NewCharacters>A...Z</NewCharacters>
+<Line>Moor Parr Falwell Horthy Tabasco Rigoletto Charlene Pittman Celina</Line>
+<Line>Bernadina Garwood Cara Trujillo Tokay Meghann Daren Xanadu Bert Bertie</Line>
+<Line>empigüelo Karyn Nat Ulysses Rosales Liana Cossack Mitzi Isabella</Line>
+<Line>Stieglitz Tania Stefano Bone Hamlin Jocelin Mary engüera Lang Sabrina</Line>
+<Line>Sisile Salomone Paulette Klemens Guglielma Indra Fannie Karisa Emacs</Line>
+<Line>Arabia Capra Leander Raymund IMF Carlota Ulberto Reynard OfficeMax Fabe</Line>
+<Line>Danella Gabriel apacigüen Martie Ellesmere Samson Dominic Kimberley</Line>
+<Line>Medici Shayla Delaware Arman Alcatraz Veda Sabik Aldric Guayaquil</Line>
+<Line>Stevena Ethyl AAA Sardinia Gardie Pericles Ignacius Oort Garbo Averyl</Line>
+<Line>ANSIs Socorro Gerta Delbert Mesabi Federals Woolf Mueller Carina Yuanv</Line>
+<Line>Neolithic Marxist Ouija Allx Ernest NYSE Arapahos Randie Bellamy Aigneisv</Line>
+<Line>Shalne Lindsey Brunhilda Morganica Hockney Celesta Pietrek Sinkiang Kans</Line>
+<Line>Gucci PE Chickie JCS FDIC Thornie Belize Sikhism Laurie Elberta Calder</Line>
+<Line>Burr Ind Saw Edd Carie Melba Lydon Dionne Muhammad Clerc Kalli Havanas</Line>
+<Line>DDS Capetian Lindsey Diogenes Janice reargües reargüe Herrera Caresa</Line>
+<Line>vMorrow Saroyan Chev Phil Goff Apollos Liane Angelle Prudi Gentry Elysiav</Line>
+<Line>Vespasian Tandie Velasquez Bernardo Grass Rafaellle Norton Indira Alfy</Line>
+<Line>Moroccans Kelwin Yules Ernesta Pollocks Ada Ch Audra Superman Lao</Line>
+<Line>Rogerio Barron Barrera Dimitri Lister MP Devi Guenna Margot Lessie Emmi</Line>
+<Line>Guendolen Salerno Wimsey Minix Babel Hellenes Missy Uganda Leontyne Dyer</Line>
+ </Levels>
+</KTouchLecture> \ No newline at end of file
diff --git a/ktouch/training/english.ktouch.xml b/ktouch/training/english.ktouch.xml
new file mode 100644
index 00000000..fac1b427
--- /dev/null
+++ b/ktouch/training/english.ktouch.xml
@@ -0,0 +1,203 @@
+<KTouchLecture>
+ <Title>English (auto-generated)</Title>
+ <Comment>KTouch training file generated Fri Jun 14 19:46:08 2002
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>fj j f j f f fj f fj fj ffj f fjf f f jj f fj jf jf fj jfj fjf</Line>
+ <Line>ffj ffj fj ff f f ff fj fj ffjj jjjf j f jj fj jj jfj ff f ff ff</Line>
+ <Line>fj ffj ff jfj jf jff ffj f ff ffj f fjf j fj ffj fj jj ffj jj f</Line>
+ <Line>jfj jff j ffj ffjj ff j f fjf ffj jff ffj jf ffj jff fj fj f f f</Line>
+ <Line>f fj jff ffj fjf f j j jf jf j jfj fjf fj ff fj jfj jfj fj jff</Line>
+ <Line>fj f ffjj f fjf ffj jfj ff j ff jf jjjf jf j jff jfj j f jj f jfj</Line>
+ <Line>fj j jff jfj jfj jff jf fj jj j j fjf j fj j fj j f j f ff j ffjj</Line>
+ <Line>j jfj ffjj jfj f jfj f fj f f f jfj j jf jfj fj j jf f fjf fjf</Line>
+ <Line>jf ff ff fjf fjf fjf jfj jjjf j f jf jfj f jjjf f ff ff jf f fj</Line>
+ <Line>ffj fj fj jf f ff jf f j j jfj f jff fj j f fjf f jfj jf f jfj jjjf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>djd k djd k fdj k fdj k k jdd dd k kf dd k k dd k d fdfk k k kf</Line>
+ <Line>d kf fdfk k fdj k df jk jdd jkjd jjkk d k k d d d d k k d kf d</Line>
+ <Line>d dd k d jjd d d dkk jkjd k k k djd dkk kf fdj k fdfk k k fdj</Line>
+ <Line>k dkk d d df df df k k djd dd k d d d dd jdd d kf fdj k k d jkjd</Line>
+ <Line>k k k djd k d dd d jdd jjd d d d jdd d k k dd fdfk jjkk k fdfk</Line>
+ <Line>k d d fdfk jjkk kfd k k dd k k dkk jjd jjkk k kfd df kfd d d d</Line>
+ <Line>fdj df jdd k d jdd k d k k k jjkk dd d d k jk df k jjkk d k k k</Line>
+ <Line>jjkk d fdfk fdfk fdj d k d jjkk djd k k k k djd k d d d df k k djd</Line>
+ <Line>k kfd df k k k d k dd kfd df d kfd k k k kfd djd k k jk dd dd</Line>
+ <Line>df d d jk k kf jjd kf kf k df d k jkjd kf k jjd fdfk k k kfd d</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>s sl s fl skl s sl fl skl sfj l sk s sk ss s sfj jss l fs ss fs</Line>
+ <Line>sk jss sk s fl s l fs s fl jss sfj l s sk l sk s fs s ss l fl l</Line>
+ <Line>sf fl lll skl sfj sk dsk sk sfj ss sf l fl jssj fl l l jss sfj</Line>
+ <Line>sk sk s fl fl s jss s s s l fl jssj sl l l s fl sl l fs ss l fs</Line>
+ <Line>jss s dsk s jssj sk fs l l skl l fl l s l s s sl skl fl s s l skl</Line>
+ <Line>l fl s skl sk s l l jssj s sk s jss jss sfj sf sl sk s lll jssj</Line>
+ <Line>sl s s fl l lll fl l sk fl ss dsk fl fl fjjs l fl s s s l s jss</Line>
+ <Line>skl jss sfj l fl l sfj sfj skl l fl l sk fl fl sk ss l fs l sk l</Line>
+ <Line>sl fl skl l l sl s fl fjjs fjjs l fjjs l fl ss fl l sk s l l l</Line>
+ <Line>s s fjjs lll sk ss skl jssj skl fl l l skl fl l s dsk s s sl fl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ca</NewCharacters>
+ <Line>sca clac asa cascad sa al sca ass clac slac cak da fla c la fa ja</Line>
+ <Line>fa salad ca daf addl fa scal slak facad al flask lass ac sass lack</Line>
+ <Line>sac a c sla sca addl saf c aa fla fad salsa ad fla ad a ladl als</Line>
+ <Line>c facad da fla call scal fla sac c al daff flas as ca all ak ac</Line>
+ <Line>sadl cas ala c sak c jackas ca af caff aa aa ja sa afa sla lac ca</Line>
+ <Line>fla fadd fa ja la faff sca sal alkal fals lac fla sass cas slas</Line>
+ <Line>al fa clack af flak flas fla as af ass ass fad alack c sadl ass</Line>
+ <Line>sack sca add sa c ja al lack cas cla cas add c las sa ac jacka sass</Line>
+ <Line>cla sca cla ja c sak alack slak slas dadd slack alkal la la ak jc</Line>
+ <Line>ass sa sas scal cas fa salaa las fad lack a dad c a sca ad la sla</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>snaffl dan attack fann na scant fast snack taff ank sna att snac candl</Line>
+ <Line>tattl tan tac na lan snaf jat staccat na t can fact an fann catcall</Line>
+ <Line>ta tattl sta nast task cast tan cantata can n lankl slan tall sanda</Line>
+ <Line>sna flank fact tank cat catcall t cantat latt landfal tal can stanc</Line>
+ <Line>na snak knac ta annal attac t san canca stall san caftan ta ct</Line>
+ <Line>t scandal flank last dankl nat cattl stat skat stal stak cact</Line>
+ <Line>candl fat ana ta flatlan t tal tatt scant flatca dandl staf slat castl</Line>
+ <Line>fan scantl sna snatc talk sna sna flank cast dandl n task tak lastl</Line>
+ <Line>alt fan landlad tal ta stan lank flan tal tast sand sta landfall</Line>
+ <Line>knac landfal cat ants landlad na sata salt caftan anall nat can lastl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iv</NewCharacters>
+ <Line>cassi sic laddi affin canin flint inclinin vivain icil ni satinin</Line>
+ <Line>ci in cit divan finalis tankin sli instatin kil clinicall dis vill</Line>
+ <Line>vi lil caddis snifflin fit assail nif lanai kil addic lis ick dia</Line>
+ <Line>infantil satani kind nift jadin visitin stil idl littl si clinicia validat</Line>
+ <Line>ninn ti fil cavalcad sanit slackin catfis dinin astatin dadaist killin</Line>
+ <Line>fil sift vial sniffin fantasti lividl li invalid flick satinin di</Line>
+ <Line>affiancin dia finn inkin acidl final vannin tin itc italic instancin inla</Line>
+ <Line>insistin slavin vindictiv nai distall affianc ni stick ki sniff tid tilt</Line>
+ <Line>tacitl clannis jiltin failin ki stasi sanit fiddl savanna atil acclai</Line>
+ <Line>fiv satanicall lackadaisicall fascia ti sandin valis ai dids didacticall</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>dividend lite salesladie vie decam dissect skie enema cancel feminist</Line>
+ <Line>insentienc decedent fiesta saltcella demiste title steadines scammin fancie</Line>
+ <Line>envie fee descent se incivilitie amide site demitass lesse animatedl</Line>
+ <Line>select latencie naive mantle milkmaid fiftie distinctivel seventeent</Line>
+ <Line>mainmas finickies distinctivel filme jestin assesse insiste slate skillet</Line>
+ <Line>lacke manana inte ma falsett mate dietetic entitlemen vesicle stales</Line>
+ <Line>divvie cleanin enlivenin seeke titte tendenc mistil mi lifelin accidental</Line>
+ <Line>steak skimme fantasie divest sveltes devianc mistines sassie jade</Line>
+ <Line>finenes titte dismantle mentalis inadvisedl fannie installe disinfectan</Line>
+ <Line>midden divisivenes acclaim mf settee svelt animatedl teatime devastate</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>dare testifier eradicate terminat trafficke hadin inferenc franti</Line>
+ <Line>reservedl chef lathere marr atria trait distres hearse trance varnis chattin</Line>
+ <Line>fifer irise intern merite clicker hesitanc rhiniti crackhead dishe</Line>
+ <Line>saddler rancidit mandrak rattl threade cardinall larc trisectin intrinsi</Line>
+ <Line>recreatin stridde ester carcas thirst rifte rascal thres drinke indiscriminatel</Line>
+ <Line>clarete iridescenc refile resen reelectin airlift tetherin invert resale</Line>
+ <Line>feathere enfranchisemen rehea earthie fetche thick firecracker interlinke</Line>
+ <Line>redelive ethnicall tidemar indiscreetl cracklin menhade mishandlin catche</Line>
+ <Line>ransack headline crest inerran teare cradle sincerit hater firt dinner</Line>
+ <Line>rent snickerin recklessnes sharer thatche relinin refac heatin reinstatemen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>overcook rotat comi reconfirmatio reregistratio nomad management forklift</Line>
+ <Line>storme socialisti shoestring conma iodide lading incontinentl fervo</Line>
+ <Line>sag gentl mo legitimatin sociologicall dominanc font regicid gallantl</Line>
+ <Line>migh elongatio nonsmokin integran demoni maroo comicalit toccata</Line>
+ <Line>fag infliction shatteringl coalfield cloc almight remoldin tanglin</Line>
+ <Line>fago gonorrhea evocatio dialing solderin ciggie collide monarchie</Line>
+ <Line>correctiona conciliatio hok roilin integrate cosmologie demonstrate throttle</Line>
+ <Line>glister avitaminosi noddle odditie chiffo mg solstice steroida conge</Line>
+ <Line>theor ammoni microcos histologica notifier favor chromaticall chromosoma</Line>
+ <Line>songste negotiator diagnostic nova glande hornie concavit interconnection</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>archbishop parliamentar calibe respel tiebac bon semipro retrospectiv transpir</Line>
+ <Line>paren snappil absconde nobodie grosbeak podiatr precooke misinterpretatio</Line>
+ <Line>parad establishin oppos liprea abrasiv dabbl seraph precookin kissabl</Line>
+ <Line>embarkin breadth airdroppin permeabilit plainsme aberran bonnies gallbladder</Line>
+ <Line>phaeto beepe packhors deciphermen plastere bloodthirstie cachepo vibration</Line>
+ <Line>sandblas preme soppie dispos preppe bookmarke neighbore heptagona toboggane</Line>
+ <Line>despondenc grabber blearil birdbath boast hellebor phonic blint escapemen</Line>
+ <Line>horrible topographicall portende replier seborrhe peste debark composin</Line>
+ <Line>trombonis ben bootblac resistibl rebor pikin barnacle pentacle trespasse</Line>
+ <Line>sparre photocopie dolphin plantin pictographi brittl bipartit potat</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qu</NewCharacters>
+ <Line>thoroughnes recrudescin tunefulnes rigorousnes imprimatu rounde capsule</Line>
+ <Line>breakou reintroduce contentiousnes bullfinche biennium augmenter nurse</Line>
+ <Line>busb curse quipste munificen beautifie thankfu instruct tranquill</Line>
+ <Line>stoup inundation undeservin fluf quarto purloinin quaho unheate cherub</Line>
+ <Line>guffa sufficien ridicule unequivocall redistribute fulsomel herculea</Line>
+ <Line>portentousnes shogun dangerou gutties samurai knuckl racquetbal babushka emolumen</Line>
+ <Line>cuboi epilogue frui puddl auctio aqueou quot squint velu abuse pluckil</Line>
+ <Line>therapeuticall renucleate turnoff busties accusa gustil pluckines neutral nonintellectua</Line>
+ <Line>uncannil outcropping custodian rutties guardednes platitude grubb mus</Line>
+ <Line>skunk impugn nonplussin nuptial untrouble flounc unchronicle bushe</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wn</NewCharacters>
+ <Line>weed rotundin kidnap compartment retakin enlighten adjurin sharin</Line>
+ <Line>propositione driftne entitlemen debunk peasantr canvas insurgenc nullifie</Line>
+ <Line>halfpennie middleweigh licensin outdistance sunburst whelmin supplicatin</Line>
+ <Line>brinines opalescen chardonna aw salutatorian envelo futon outpatien indulgentl</Line>
+ <Line>fascination blundere constitutionalist reedines endure wavie allianc rustines</Line>
+ <Line>numskul refrigeratin repartitionin bookworm snowie annihilate noisom</Line>
+ <Line>unbiassedl widemouthe phrenologica grandniec manipulation contorte airines</Line>
+ <Line>institutionall accompanist ranke precedenc tackin squanderin sanitarie conjunctiv</Line>
+ <Line>eastboun downwar monste inkblot sarong nattere cinematographe punchbag</Line>
+ <Line>retransmittin sawhorse engineer counterpoise wigwa wakefu genr brainstorm</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cx</NewCharacters>
+ <Line>cull continu spectroscopi captionin complete pronounce accumulatio</Line>
+ <Line>seraphicall misconstruin conservativenes scrabblin cosmeticia deficiencie</Line>
+ <Line>copiousl chican dissociativel pronouncin congenitall extende cementer</Line>
+ <Line>poleax attachment recombine compatibilitie colorles obscenes spamblock</Line>
+ <Line>cinchin agrochemica nonreciproca cleare coastlin crumblines insurrectio</Line>
+ <Line>discounte preconditionin relocke complexion destructibl crawlin corrode</Line>
+ <Line>decommissione sec percusse discograph beneficia couple pixel officialis affixe</Line>
+ <Line>lurchin rapprochemen raccoon incom nic doctorin ratche falsificatio</Line>
+ <Line>ethnicall obsolesce unpunctualit effulgenc lunchroo chaoticall sackful</Line>
+ <Line>shucke microelectroni watchtowe occurrin processe electrocardiograph</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yz</NewCharacters>
+ <Line>skylight syllabicatin secularize pygm amazo fizze overemphasize summariz</Line>
+ <Line>heavyse appetize metaphysicall fraye psychoanalyticall economizer bricklayer</Line>
+ <Line>mestizo yashmak yukk hygromete glamorizatio synthesi dillydall yup wheezil</Line>
+ <Line>psychedelic burglariz phyl polytheis ethy nylon delaye psychosomatic highboy</Line>
+ <Line>polynomiall hysteresi polymerase pyrimidine bowdleriz sterilize gazetteere</Line>
+ <Line>playtim initializatio haphazar legitimatiz buzzard plasticizin sizzle</Line>
+ <Line>emblazone zoolog anglicize rhyme dyestuff credenz ray squeezebo swiz stargaze</Line>
+ <Line>baptiz mobilize throwaway oversizin dynast harmonize sublaye metalize</Line>
+ <Line>humanizatio buckeye overspecialize graybeard magazine clearway yellow enjoyment</Line>
+ <Line>layere flywa mizzen baptize capsiz styluse glaz synonymou bellyach</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>I U Frann Iss V Sophe Ma Blanch Janissar Karl Equuleu Jech Dia</Line>
+ <Line>Mariejeann Filofa Shoshann Cheeve Ludvi Stoicism Alabam Fo Belmon Al Peshawa</Line>
+ <Line>Episcopalia Tammi Huc Castill McDowel Sabrin Izanam Salina Soav Gerar Margarett</Line>
+ <Line>Blondell Austin Menande Vandal Winnifre Daun Porsch Thomis Noel TELNE</Line>
+ <Line>Row Ber Fraue Kenya Trix Pissar Bake Vandal Wale Jua Benghaz Ronal</Line>
+ <Line>Babylonia Jacobit Guamania Zebede Hagiograph Stou AWO Dustbuste Shani</Line>
+ <Line>Edgard Rigolett Danic Carr Donn Rosco Jazmi Ermini BB Coloradoa Hebrais</Line>
+ <Line>Stockhause Tolyatt Marshal VG Haga Kamek Gall Pilcomay Ballar Morto Renascenc</Line>
+ <Line>Hebride Tup Hoebar Tunisia El Crysta Cheyenn SD Mad SU Silvai Johnn</Line>
+ <Line>Vis Ramb Luge Demetriu Collie Nettl Dicken Joelyn Conservativ Fonzi</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/finnish.ktouch.xml b/ktouch/training/finnish.ktouch.xml
new file mode 100644
index 00000000..759b0ecd
--- /dev/null
+++ b/ktouch/training/finnish.ktouch.xml
@@ -0,0 +1,508 @@
+<KTouchLecture>
+ <Title>Finnish (auto-generated)</Title>
+ <Comment>KTouch training file generated March 22, 2006 by Ulla Lewman.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>ff jjj jf jfj j jff fjjf ff jfj j jff ff jjj fjj fjj fjf jfj jjj</Line>
+ <Line>f fjjf jjj fjjf jfj fjjf f j fjj jff j fjj jf jjj fjjf f f fjf</Line>
+ <Line>fjjf jff jjj ff jf fjjf fjjf f fjj fjj jf fjf j jj f j fjj jj jjj</Line>
+ <Line>f jjj f fjjf j j jjj f j jjj jj ff fjf fjj f f ff jjj jj fjf f</Line>
+ <Line>ff f fjjf fjj fjj f j fjf f jj jj jff jj jfj f jf jjj fjj j jjj</Line>
+ <Line>jfj fjjf f f fjf jj ff f j fjf fjj f jf j jf j fjj fjjf jj jff f</Line>
+ <Line>jff jff j f j f jff f jjj j fjf f fjjf j jff jj j f jf j ff jj fjj</Line>
+ <Line>ff jfj jfj j ff fjjf jj ff fjj f jff jff f fjf jj jj f jfj j fjj</Line>
+ <Line>jjj jff jj fjj jfj f fjj fjjf jj jj jf jff ff f jf jj ff fjjf j</Line>
+ <Line>jff fjf f f jfj fjjf f jj j fjj j fjj jf f f j ff jj j fjf jfj jj</Line>
+ <Line>jj jf j f j ff j fjjf jff f fjj jff j jf fjf j fjjf fjj j jj jf</Line>
+ <Line>fjj jfj jfj fjjf f f jjj jj fjj fjjf j fjjf jf fjjf jf f fjj j j</Line>
+ <Line>jjj jj jf j ff fjf jj jjj ff jf j jjj f ff ff j jf jjj jff jff f</Line>
+ <Line>jf j jfj fjj jfj fjjf fjj fjjf fjjf jj jjj ff jfj j jj f jj jfj</Line>
+ <Line>jff f f j j j f f jj jjj f fjj j fjjf fjj f fjjf fjf ff f jf fjjf</Line>
+ <Line>fjj fjj j f jf f fjjf ff jf ff jff jf j fjf f fjjf fjj j jff jj</Line>
+ <Line>f jf f fjjf jf jjj f fjjf fjjf j j f jfj f jjj j f fjjf f j jj</Line>
+ <Line>jj fjj fjjf f f jff jj jff f j jff f ff fjjf jf fjj fjj jf j jff</Line>
+ <Line>fjf jj jj jj jfj jf j jfj j fjjf jff ff fjj f j f j f f jj f fjj</Line>
+ <Line>jf jjj fjjf j f f jj jj jjj ff j fjf f fjj jfj jfj fjf jj jjj j</Line>
+ <Line>fjj jj jfj jjj jj jj f j j jff jjj jjj f jj jff f f f f fjf fjjf</Line>
+ <Line>jff j jjj fjjf ff fjjf j j fjf fjj jj j fjjf f jjj jfj jj fjjf fjf</Line>
+ <Line>fjj jjj j j jjj jf f f j fjj fjjf jfj fjj f ff j j jj jf jj jfj</Line>
+ <Line>jff fjj jf jj jf jf jj jj f fjjf jf j f fjjf ff jjj jf fjf jj fjjf</Line>
+ <Line>f jff f j ff fjj j fjj jj fjj jj jf j fjjf j jfj ff jf jf fjj</Line>
+ <Line>ff j ff f jj ff jfj jj j jfj jj f jj jj jf jf jj jjj jfj j jfj</Line>
+ <Line>jjj jfj jf jjj j j jf jfj fjj f jfj fjj ff jff fjj f j jjj jf f</Line>
+ <Line>jff fjf jf f jj j f j f jff ff jf jfj jjj jf ff ff jff f fjj jfj</Line>
+ <Line>j jfj jj jjj jf f fjjf j ff jjj jfj jff jff f fjjf fjj fjjf f</Line>
+ <Line>jfj jj f ff jff fjjf jff f jjj jfj jj j jfj ff fjj ff j f jj fjjf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>jjd fdfj rd djd jk jd k dd fjk fd fk k jfkd dkkf fk dkd dd jk k</Line>
+ <Line>dfj djd fkkk fk dff d dkkf fd fk fdfj fk k dkkf djd dff dkd dff</Line>
+ <Line>dkd kdk k dkkf k jk fkkk jd k jfkd fk fk jd k d dkd jd k dd rd dffd</Line>
+ <Line>d fk k k dff dff dd fk fk fd jd dd jjd rd dkd dkf kdk fdfj d kdk</Line>
+ <Line>djd k fk rd dd fk dff dff kdk dkd dkf d k jk jfkd jd jfkd d kdk</Line>
+ <Line>dkd kdk djd jd dkf dkkf fkkk dd djd fd dkf fk dff dkkf fk fk fdfj</Line>
+ <Line>fk fk rd jjd k k dkkf d rd dkd dd rd jjd fk fd fk k jk rd fd fd</Line>
+ <Line>djd k jjd djd fk k fjk k dd dfj kdk jd djd fk dfj fd k dffd jd djd</Line>
+ <Line>kdk dkd dd k fd fk jjd fjk fd rd fjk fk k dfj fd dd dkd d k dd kdk</Line>
+ <Line>fjk fk dkkf dd dkkf dd rd fd jd k jjd k dkf djd dkf k dkd d jd d</Line>
+ <Line>fjk dkkf dffd k d fdfj djd kdk fkkk d dfj jk fk jd jfkd jd kdk dffd</Line>
+ <Line>dd dkf dffd jk jk jd fd dkf k jd jfkd fdfj fkkk k dkf fdfj dfj</Line>
+ <Line>fd jd jd dd dd jd dd rd dkd dffd fd fkkk dffd dd fk jjd fk k k</Line>
+ <Line>d dfj fdfj k fk fk dkd dkkf dffd dffd k fkkk dkf jk dkd fdfj jfkd</Line>
+ <Line>jd dd jk fd dkf dkd dd k d k fdfj fdfj dd dffd djd dffd kdk dffd</Line>
+ <Line>fd jk dffd fk fd rd fdfj d fk d dff fkkk fk fk jd fkkk djd fk fdfj</Line>
+ <Line>jd jfkd dkkf fkkk dkkf kdk dd dfj k fk dfj fk jk fd jd k k kdk</Line>
+ <Line>k dfj dd k jfkd d fk jk rd fk k dffd fk djd jjd fk dkd dd dffd</Line>
+ <Line>fk fk kdk fdfj dfj fd fk dd dffd dd dkd fkkk k dkf dkkf k jfkd</Line>
+ <Line>d dfj k fk fdfj dff fk djd dd d dff k fd rd fdfj fk fd dkd djd</Line>
+ <Line>kdk fk fk dfj fk fdfj k dkf dkkf dffd k fk fk jfkd jk dffd fd dff</Line>
+ <Line>fk dkf fk dffd jd dfj d dkkf jd jjd fd fjk fd fk fk dff dffd fdfj</Line>
+ <Line>dkkf fd jd jfkd dffd d djd dkd fdfj fk dff fk fdfj jk fk dfj d dkf</Line>
+ <Line>rd rd jd rd jfkd dd jd k dffd fd dkd fk fk k dkd djd fk jjd jjd</Line>
+ <Line>k dd dd jd fk fk fk jfkd fd d fk fk d fkkk dkkf jjd dkf fdfj fkkk</Line>
+ <Line>djd k fk k jd dd dkd djd k kdk rd djd k jjd k jd dfj dfj dkf jjd</Line>
+ <Line>fk fd rd jd fdfj jk fk fjk rd k jd dkf rd dkd fkkk jfkd jjd jjd</Line>
+ <Line>fk jd fk jk dfj d fkkk k jjd jk fjk dd rd jd fdfj jd dfj jk dkkf</Line>
+ <Line>fkkk fk fk dffd fk dfj jd dd jk dfj fjk fd jfkd fk fd jd fd jd k</Line>
+ <Line>dffd rd dkd dd fk fk jk dffd fk dkd fjk jk k jk djd fdfj fk dd jd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>fl s l ldk l s slj s dks sf kl ll ls l ls dss lkj slk ks jl jjss</Line>
+ <Line>l slj jl lkj l ldf s ld ll l ll ldk jjdl dlkk fl rs dss fld fl</Line>
+ <Line>kl fl fl lkj fld ld fld js l dss kl jl jl ldk fld s ls s js kl</Line>
+ <Line>ll ld dss fld l rs sf dss ll jl kl ls slj kl ldf kl dss rs ls js</Line>
+ <Line>s dlkk js kl js ls fld jl jjdl ll jjdl ll rs ldf rs ld ldk slj</Line>
+ <Line>slj fl fld lkj rs ldf dlkk dss rs fl ld ldk kl dks fl sf dks ldk</Line>
+ <Line>slj kl sf dlkk fl s kl l ll fl slj ll s s s dds s sf fld ks ks s</Line>
+ <Line>ll dss s sf dks fl ldf dks rs ld s jjss ll l slk kl dks sf ll ldf</Line>
+ <Line>s ll dlkk rs jl l ll ls l ldk ldk js dss rs s slj l dks fld jl</Line>
+ <Line>ks dss dlkk ls kl ks kl js kl ldk kl ls l slk dlkk lkj slj dks</Line>
+ <Line>ld dks rs ldf dlkk ls s rs jjdl slk ldk slk dds lkj lkj s jjdl</Line>
+ <Line>fl l s kl slk jjss ls ll dss sf slj dlkk jl fl kl fl jl rs ls ll</Line>
+ <Line>lkj lkj ls lkj kl fl fl ll fl dks l dlkk kl s ldk fl fl ks l kl</Line>
+ <Line>ldf js slk fld dds l ldk ll dlkk jjss l lkj slk jl fl ldf ll fl</Line>
+ <Line>l fl jjss ls ldk ll dks kl slj ldf kl dlkk slk jjdl sf dlkk dlkk</Line>
+ <Line>fld ld s ls dlkk ld kl jl kl fl ls kl ls kl l sf l ls ldf dlkk kl</Line>
+ <Line>sf fl ks lkj fl jjdl ldk ls jjdl dlkk dlkk ldk rs sf slj ld s l</Line>
+ <Line>js ldf fld ldf dks ks ll jjdl slj fld dlkk s js l jjdl s s ks ld</Line>
+ <Line>ll lkj dds ldk ls fl ldk dss jl sf fld kl rs rs ll ldf s dks ls</Line>
+ <Line>ls dds slj dlkk jl l slk sf dks dks rs ldk jl dks l dlkk l ks rs</Line>
+ <Line>ks dks ks fld dds dss ldk kl s ks dks slk fl slj dds fl s js jjss</Line>
+ <Line>kl dks s fl rs s rs ldf ls sf ls ll rs sf dds dss jjdl l slk ldk</Line>
+ <Line>rs kl ld ll kl ll fl jjss ls ldf ll jjss kl ll jjdl jjss sf ld</Line>
+ <Line>jjdl ks ld js l slj jjdl fl sf lkj kl rs jjdl ks s dds dss fl slk</Line>
+ <Line>ll l l slj fl dss js lkj fld ks lkj ks ldk jjss ll ld l kl js fl</Line>
+ <Line>rs ls s s sf dds jl fld l lkj ls jl dss fl slk ldf jjdl l ks fl</Line>
+ <Line>fld lkj js s js ld slk dlkk jl ks l dds ld lkj ll jjss ld jjss s</Line>
+ <Line>dss s kl ldk dds fl s ldf kl sf slj kl sf lkj dss slk dss ls ls</Line>
+ <Line>fl sf kl ll kl ld jjss dds kl fld jjdl fl js jl sf kl kl jl jl</Line>
+ <Line>ldf ll dds dds s ll slk dks slj lkj fld kl ks rs fl kl ldk ld l</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ca</NewCharacters>
+ <Line>a a a c c c aa aa cc cc aca aaca caac ccaa acac aaaa cccc aaaa cccc aaaa</Line>
+ <Line>a c a c a c aa cc aa cc cc aa ja jjaa fafa ffaa ffcc ccfa afca cafa jafa caja </Line>
+ <Line>kafa kafa dafa dada ddaa ddcc d c a f j ccaa caac acca ddcc ccdd kaada</Line>
+ <Line>lala alal alla aall sasa asas acas casa lsca cafa caac aaac aaac ccca caac</Line>
+ <Line>call ascals slacks fas fads fad lack sads flask jackals flack kasata kaada</Line>
+ <Line>sass all salsa jackals cad lads flaks scald ca la asks flack lacks lalla alla</Line>
+ <Line>ask ad jackal fas las sad sass skas ck ca fad fad adj fas kc dadda cadda</Line>
+ <Line>jacks class lad scald cads jackal ad cads sack alas scald lacs flak lassa cc</Line>
+ <Line>alfalfa calls jacks ala dc lacks class lad clack a fads alacks ads jaffa kaffa</Line>
+ <Line>ads flask adds scalds c jacks jackals ascal cask ads aj add adds jakaa</Line>
+ <Line>akka scald calla salsas alls sac cads salads fads cask adds casks faffa alfa</Line>
+ <Line>asacs jackal lacks class clad ack dad slack fall alfalfas slacks laska dad</Line>
+ <Line>fad cal lad cal calla ad sad salads ska salad flack skas ca jacks laaka lakka sasal ads ad flak aka ala ac clad alacks ck jackal fall fas scads</Line>
+ <Line>call calla alfalfas calf falls flak lack flak flaks casks flak lass saada jakaa</Line>
+ <Line>sala class alla akka affa adda a askas scad acks ac scad lac skas scald</Line>
+ <Line>sacs lads ascals call scad call clads kcal salsa slack ascals dads</Line>
+ <Line>call c alfalfa sack alfalfas falls ask fas salsa asks class jack</Line>
+ <Line>asks alls alack calls alacks ads casks cs kc jackal lacs flak ascals</Line>
+ <Line>a fall ad ck kcal alfalfa ad a flaks sacks alas ca lad salsas</Line>
+ <Line>sac skas clads jacks assa aaaa alfalfas lacks ska alack flaks as ska</Line>
+ <Line>cads jacks ala flack falls cads fad scads lac ads ask callas scalds</Line>
+ <Line>ads skas salsas fall aka salsa flack alls flacks las salads cs salsas</Line>
+ <Line>acks flack sacks sass lacs cal flacks jacks ajaa sakka alack flacks</Line>
+ <Line>flack ask dad flacks ads kcal cal jack assa cads asks ala callas jacks</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 1</NewCharacters>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jfjf jkjk fkfk dkdk kdkd kfkf djdj kjkj jl lj sf fs j f k l</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jj ff kk dd ll ss cc aa j f k d l s c a jf jjff kd kkdd ls llss ca ccaa casa kasa</Line>
+ <Line>falla afa adda cjcj jcjc fccf cckk ddcc ccdd cdcd akka dada lask kask aaaa</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa alas kala dada ja asla dakk lalla caac acca alla akka</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jaffa kaffa faffa als kasaa kaada saada lalal laa laa</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jfjf jkjk fkfk dkdk kdkd kfkf djdj kjkj jl lj sf fs j f k l</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jj ff kk dd ll ss cc aa j f k d l s c a jf jjff kd kkdd ls llss ca ccaa casa kasa</Line>
+ <Line>falla afa adda cjcj jcjc fccf cckk ddcc ccdd cdcd akka dada lask kask aaaa</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa alas kala dada ja asla dakk lalla caac acca alla akka</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jaffa kaffa faffa als kasaa kaada saada lalal laa laa</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>tt t t tttt tt nn nn nt tn nntt ttnn ntnt tttn tnnn nntt tnnt nnnn tttt tntn </Line>
+ <Line>n n n t t t tt tt nn nn nntt nntt ntnt nttt nnnt tntn tt tt tt nn nn nn tntn</Line>
+ <Line>tasa tall tn flanks ananas sataa ands talc knack n cancans talk kantaa</Line>
+ <Line>canst fan asst stats at natl antaa stall alta ands snacks stand assn</Line>
+ <Line>ants alt tads cantata talcs natl attack knacks stalks tack taata ltd</Line>
+ <Line>tattan scan scandals fats tatsa tad talk stalks scats ankka aats daft</Line>
+ <Line>tn fatals fat nasal aft santas antal flan knacks natal at acts at</Line>
+ <Line>scats ts and stank act ct flans canal flan flans sata fats caftan</Line>
+ <Line>sank cant tads talcs fats act tacts tanks assn slat ansat flatlands</Line>
+ <Line>attacks kn as sn sandal alts antaa kattaa flats nack cat afts santa</Line>
+ <Line>laatta assn snack flatlands ansat cats stands asa assa ants cancans</Line>
+ <Line>talc flt tasks cancans ltd sandal canals stalks tat aslant tad flatlands</Line>
+ <Line>tans flank cast flatland tanks naatta snacks n sands talcs natal annal</Line>
+ <Line>attacks slants kana kansa ants act stanks tasks slants flanks flat</Line>
+ <Line>act clank fatal stalk laatta sand sandals fast tads tact fatals lanta</Line>
+ <Line>dank attacks attn caftan flatlands ctn kn tans tack fact flank kantaa</Line>
+ <Line>cats sandal stall land knack flanks at attan fats talcs catcall</Line>
+ <Line>fats aslant lat ct slats st scandal tank slants fatal fat stall sank</Line>
+ <Line>lats cantata acct tasks jct fast nd scandal fats stat lastata fatta</Line>
+ <Line>annan kattaa alta ankka scats ant fatals fast tantta fan tacks cast</Line>
+ <Line>clans alts casts flan fatal cans nasals caftan attn fans lats lastata</Line>
+ <Line>stanks ansa can kansat slats canals ltd kaada natal kana scans</Line>
+ <Line>stall flatland knacks aft canal tantta flats antaa daft salts tats snack</Line>
+ <Line>fats attn tack scandals knack tacts stands asst cats natl landfalls</Line>
+ <Line>fact ands ats nd tan stand caftan tacts can natal act satsata</Line>
+ <Line>scan daft ankka slants stat sank stanks tall lands flt stands saat</Line>
+ <Line>lanka flatlands sandal staff fats kt fat flank sandal staff kaataa</Line>
+ <Line>kantaa salt skat scants t t santa ct an flanks skandal flatlands</Line>
+ <Line>tads stand tat clanks at ands ansat alts ts snacks assn tanks</Line>
+ <Line>flatlands stack lands scandals scats cancan santa jct atlas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iv</NewCharacters>
+ <Line>i i i v v v iv iv vi vi iivv vvii viii iiiv vivi ivvi viiv iiii iiii vvvv vvvv ivvv viii</Line>
+ <Line>i i i v v v ivi ivi viv vivi iviv vvii ivvv iivv iiiv vivi iviv ivvi iivv iiii vvvv</Line>
+ <Line>saita saidat laiva cicada kissa viat knits stilt ails kills flail tail</Line>
+ <Line>canvass vatsa kiln tina askis tic silti liilat assails avials ninja lila</Line>
+ <Line>inka viisi faddists aktiivit kliffa clinicians dint saidat diivailla</Line>
+ <Line>distinct titaani kissa radians incl saidat classical classic i</Line>
+ <Line>tintata vasta fasaanit divaani ranka vastata nick siisti ills stints</Line>
+ <Line>salliva titaani kickstand fatalist classic tick clink flick slink attic</Line>
+ <Line>kinnas avata antaa finalisti sillat clink distaff did kicks tactics</Line>
+ <Line>aina fall lifts jail did isit raadit raisins ansaita tiltti tiistai cavils</Line>
+ <Line>killi tavallista fill finaali fatalistit distaff fills civilians visiitti</Line>
+ <Line>cit finalists statistic fantails skit intact faints vis ails viscid</Line>
+ <Line>distaffs kilts riff fains link sci ink diff sisals inland ii laidan ali</Line>
+ <Line>nails slit island install klinikan siviili sitaatti stiff aivan vans</Line>
+ <Line>filial canvass invalid flit aktiivi assistant installs raisins tactics</Line>
+ <Line>skiffs ti kickstand still skinflint alkali antava dials dills invalids</Line>
+ <Line>ivata klikata cacti raja lista saada isi kita skins assail vandaali</Line>
+ <Line>instant kinnas klassista classicists infants fill assist villa didst</Line>
+ <Line>knits ti stadias fiats saint ails kassa kissa sciatics ill fiats disdains</Line>
+ <Line>lain assist avid davit fantails ii landfills vial it ink jinns skids</Line>
+ <Line>avain aasi aivan astia lasti kicks dillis tilli taivaan sataa antics kaivaa</Line>
+ <Line>alava kaivata alla vaaka tasata maista kaista lasta lastata kiivas</Line>
+ <Line>anti vain avain ivata natina lainata aina kina kiva ivat niin laina</Line>
+ <Line>lasi silakka silava lava laiva laivalla laistaa vailla ilta cin cina finaali</Line>
+ <Line>lantti katti centti laina laita laivan laivat liina niin niini sain saan</Line>
+ <Line>kita kaita maita maata maat naatta niin kaiva kaivata ivata kaivata</Line>
+ <Line>lasi laasti laava aava naava anti lantti vaadin vailla villa alla aivan</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>vitsi eilen massiivinen villaiset leikki divaani akateeminen kateellinen</Line>
+ <Line>festivaali viesti sateliitti fani asteet fiini kaneli ale ladata vaskinen </Line>
+ <Line>jade made desi sieni seitti viini leimasin seniili limetti medikalisaatio</Line>
+ <Line>emali sataa messi missi esiliina taikina maa maailma satama melamiini</Line>
+ <Line>desimaali vintti matematiikka neiti kameli kaneli aneli saneli meni mies</Line>
+ <Line>taika laiva metallit maili mesi seleeni satellitti linssi ametisti</Line>
+ <Line>seesteinen eilen este sitten definsioida sekaisin linimentti kaste latte</Line>
+ <Line>eminenssi mestata entinen sekava milli lanta letit estetiikka dialektinen iske</Line>
+ <Line>silli messi selli made kade villa aneli se fennica satelliitit eilen leili</Line>
+ <Line>desi miina kiivas aisa lienee tankki desimaali aste viisi idea vastata maamaili</Line>
+ <Line>niin aaveet desimitta ainiaan te jaffa liemet mielet satelliitti asema satu</Line>
+ <Line>dementia aste seesteinen lakeija me aivastaa se kasetti aistia laakea asia</Line>
+ <Line>teak asiakas lasiastia destinaatio enkeli sekalainen eli kavalkadi avata alias</Line>
+ <Line>liemi manna aski ennen sama sana talli kieli mieli natina fasadi eines astia</Line>
+ <Line>lantti kaivata neidit data eleet fitnesslaji seteli divaani sateinen esiliina</Line>
+ <Line>calmette liikene este massiivinen innovaatio alias adjektiivi miesten niemet</Line>
+ <Line>afasia mielle seniili seisake villaliina finnit este asema enne idea salaatti</Line>
+ <Line>sametti akne alensi timantti este nakki makki seis lasi esine aivan anna leimata</Line>
+ <Line>seimi maitti fiini tiedemies kaventaa ideat addiktiivinen ase vaivata nainen</Line>
+ <Line>saviset sakset saidat laama dieetti kitata ies elitistinen askel nailon kina</Line>
+ <Line>kivi se daalia fitnes amme saalis lime ajaa esteet festivaali kennel taikina</Line>
+ <Line>data seitsen tie ne meilata desi esteet festina siveltimet enne lista teini</Line>
+ <Line>ideat eli elimet elin finaali eilinen nasta mesi vaate meteli ravata sienet</Line>
+ <Line>velka leili esine laita ies sideliina este kamina esine efekti laimea aste keila</Line>
+ <Line>sametti ne semifinaali sementti kani viila vie me astemitta alas sinivalas tiet</Line>
+ <Line>kaide esine laiva dialektinen sienet sini saate esteettinen aivan seis sentit</Line>
+ <Line>filmi kameli skeitti teddi leski kate eteinen alentaa evindenssi maaninen nalle</Line>
+ <Line>netti lasi laasti femma miina maine kisa fifa diiva kina siisti kiiski minne</Line>
+ <Line>maine meni natina niin fiini ivata neiti kelsi kassi siviili sivellin etsin kaista</Line>
+ <Line>ilkivalta seitti ivata laasti lantti kantti kanttiini kaste maistella maksaa maksa</Line>
+ <Line>kide diiva me te ne se iva kiva kiivailla miete asiakas vaadin kaadin kiiski menin</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 2</NewCharacters>
+ <Line>jaffa kaada fafa laaka lakka saada avain aasi aivan astia lasti anna antaa</Line>
+ <Line>vaiva sieti seiti lesti siika silakka salakka salainen salava maanalainen</Line>
+ <Line>salsa jalla kalla lalla sala salaa lasta saita maista kaista kaadin vaadin</Line>
+ <Line>aitaa raita kaita laita saita sananjalka alla matta mitta mesimarja alava</Line>
+ <Line>nainen sama sana jana natina fifa kisa kissa kide kade diiva kina lasi</Line>
+ <Line>laasti laita salva seisake miesasiakas amme ametisti aivan niin sali sama</Line>
+ <Line>lantti katti laine maine centti siisti kiiski aisti esine mesi miina niska</Line>
+ <Line>naskali netti fiini ivata kelsi kaali maali naali niin tina siviili sivellin</Line>
+ <Line>ilkivalta valtava laiva laina liina sima siima vaiva aitta aita laita niska</Line>
+ <Line>vitsi eilen massiivinen villaiset leikki divaani akateeminen kateellinen</Line>
+ <Line>talli malli mallikas veivata vaivata maittava mekkala miekka miekkakala</Line>
+ <Line>maittava maitse lattia salaatti melamiini mela mestata mies maalattia</Line>
+ <Line>mainita massiivinen matala neitonen neiti niitti tanssi taivas televiesti</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>h h hh hh h hhh r r rr rr rhhr hrrh hhrr hhrr rrhh hh rr hr hr rh rh hhrr</Line>
+ <Line>metallit miehet hakeva retiisi rehti hevonen herra hera meret hiki haave</Line>
+ <Line>firma itara marmeladi harmi hirtehinen eilinen rehellinen vaativa harmaa</Line>
+ <Line>hirvi harmillinen harmaavarpunen rahi rahti raha retki kirja kirjava karja</Line>
+ <Line>harja herjata hierarkia arkajalka harittaa harmittaa hiiva havaita haava</Line>
+ <Line>kahva faarao farmari harava hara haara lahja laari vesi kaahata karsina</Line>
+ <Line>emiiri rieha hantti merta hiiva harmittava harmahtava irvailla kirjava</Line>
+ <Line>rahakasa harja hairahtaa lahja car litra metri mitta merimaili marjamaa</Line>
+ <Line>hirvi hairahtaa rahi tahmea tahti hallita raikas rikas rakas ratsastaa aihe</Line>
+ <Line>karjamaja majava viiri veri narina saari saaret rehti retiisi ratti vihta sari</Line>
+ <Line>kaivata haitari hattara hatara rahakasa kasarmi karmi karmiva kamera</Line>
+ <Line>kerma kirva karsastaa ratsastaa rahastaa rahastaja raha rehti rahti meri</Line>
+ <Line>metalli tarha karhea erhe terve terveinen vene venhe vinha vanha virma</Line>
+ <Line>varma harha herja harja harmaa kirja karja sarja taara haara kaada leiri</Line>
+ <Line>ladata rahdata reimari raina raide riita itara harata vastaan rastas raikas</Line>
+ <Line>herne hirnahtaa hairahdella hidas hidastaa tahdikas tehdas erilainen eri</Line>
+ <Line>desilitra metrimitta mittari kreemi lammas hammas hammasharja riihi</Line>
+ <Line>karisma kari kiire itara kitara sitar mahti sieni kirja kirje siesta sierain</Line>
+ <Line>siisti kaari kitsas ritsa riita hiiva treeni trivia atria ateria ahteri siideri</Line>
+ <Line>eriste risteilee ristiriita rahi rahti ritarilinna kide kirmata karmiva kaari</Line>
+ <Line>ralli rilli laari laastari kaahari kiire kiirii kierre mielle marjastaa tarkastaa</Line>
+ <Line>tarha eristin helistin kiristin arka jalka firma liiteri hiiri saari naali maili</Line>
+ <Line>misteli riivin rihveli ristiriita risa kitarisa kasari kattila haili halata aari</Line>
+ <Line>hehtaari hilse hatara hairahtaa leiri iiris eriste haistaa lehti lahti kaksi</Line>
+ <Line>kisa kasa rasavilli viikari veijari reimari meri sarja harja karja marja rahi</Line>
+ <Line>kirjaraati ratti rahtilava laiva reimari harittaa aristaa saari armeija lahti</Line>
+ <Line>lehti leiri lirisee aristaa aristella eriste kirjava herjata kaavake saareke</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>oo gg oooo oooo gggg gggg gogo ogog ooog gggo oogg ggoo oggg ooog</Line>
+ <Line>o g o g gggo ggoo ooog oogg oggg oggg oo gg oo gg go go og og ooog</Line>
+ <Line>kongi king kangastaa gondoli onkia loimi liemi noki kangastaa koti</Line>
+ <Line>ommella ongella ongelma hangata hangoitella tori toivo vaiti hoiva</Line>
+ <Line>enkeli taivas honka lento soittaa soitto koitto kanalla hangata</Line>
+ <Line>osoite osoittaa osata ongelmat onkalo kailottaa lanka solkenaan solki</Line>
+ <Line>langoilla langettaa oiva osa asia osio looginen legioona leijona ja</Line>
+ <Line>koi naali lento ahkio sininen oranssi sose keltainen tanka soikea hoikka</Line>
+ <Line>hegemonia keto oiva hoiva mieto into ikoni ihminen normi sormi gogo</Line>
+ <Line>hormi hormoni roima reima hirvi harva orava meirami gondoli kodin</Line>
+ <Line>loisto liisteri farmari norja orja origami harjata raaste koira karaatti</Line>
+ <Line>eri veri arvo osinko oranki gorilla gerilla harja harjoitella looginen logo</Line>
+ <Line>loisto loinen merta meri mormooni hormooni harmooni rangaista rikos</Line>
+ <Line>onkia tonkia honka hiiva hoiva soiva oiva roima reima langoitta lento</Line>
+ <Line>harava osteri retiisi herra gondoli gondori kotka kiiski kioski kitara</Line>
+ <Line>reitti tatti tieto toimisto osoite orgaani organisaatio ergonominen irto</Line>
+ <Line>osasto osoittaa organisoida firma farmakologi onkologi osasto osoite</Line>
+ <Line>kongi king kangastaa gondoli onkia loimi liemi noki kangastaa koti</Line>
+ <Line>ommella ongella ongelma hangata hangoitella tori toivo vaiti hoiva</Line>
+ <Line>enkeli taivas honka lento soittaa soitto koitto kanalla hangata</Line>
+ <Line>osoite osoittaa osata ongelmat onkalo kailottaa lanka solkenaan solki</Line>
+ <Line>langoilla langettaa oiva osa asia osio looginen legioona leijona ja</Line>
+ <Line>koi naali lento ahkio sininen oranssi sose keltainen tanka soikea hoikka</Line>
+ <Line>hegemonia keto oiva hoiva mieto into ikoni ihminen normi sormi gogo</Line>
+ <Line>hormi hormoni roima reima hirvi harva orava meirami gondoli kodin</Line>
+ <Line>loisto liisteri farmari norja orja origami harjata raaste koira karaatti</Line>
+ <Line>eri veri arvo osinko oranki gorilla gerilla harja harjoitella looginen logo</Line>
+ <Line>loisto loinen merta meri mormooni hormooni harmooni rangaista rikos</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>b b b b p p p p bb pp pb bp bppp pbbb bbpp ppbb bbbp bbbp pbbb b b b b p p p p pp pp pp bb bb bb bob pop pappa pippa bibbi babba baba papa</Line>
+ <Line>bio boi pio poi abba baab appa paap ebbe eppe eeep eeeb bbpp bbpp</Line>
+ <Line>posti pois paisti pata poika appi apila oppilas pilari pila repale passi</Line>
+ <Line>biologi baari barbaari berberi baskeri bataatti biopassi bistro albatrossi</Line>
+ <Line>alabasteri boikotti ballistinen pomo pese bakteeri baletti baptismi</Line>
+ <Line>baretti basaari bbc boordi parkkipaikka pitsiliina patsas poiminta poro</Line>
+ <Line>pikantti pipana pirpana orpo ropo repo pimpeli pom potaska porkkana</Line>
+ <Line>pensas perjantai maanantai tiistai keskiviikko torstai viikko koppi poka</Line>
+ <Line>korppi kana palko pelko pensas pii paa pois popsi popsi porkkanaa </Line>
+ <Line>happo gongi bongata meridiaani pistin kaide koppelo pormestari optio</Line>
+ <Line>biologia bisarre biblia appi apila apteekki apea opettaja rosvo meirami</Line>
+ <Line>patologi paarma pasma rasva riski roiske harvinainen harras taivas loiva</Line>
+ <Line>sima rima riimi rimmata soma poro liirto hirvi harvinainen orvaskesi</Line>
+ <Line>satama laiva alas lasti laari pari kari marina narina nappanahka</Line>
+ <Line>nasta lasta kaste maista maksa posti perhe promootio baskeri bakteeri</Line>
+ <Line>kaareva lokari pala palaa pallo siili siviili viili villa kari paita maitse</Line>
+ <Line>meritse minne menet mies nainen poika lapsi perhe lapanen perna paras</Line>
+ <Line>paisti gorilla gerilla germaani harava orava orgaani energia faarao</Line>
+ <Line>opettaja oppilas rehtori lopettaa pormestari portti koppi korppi kaappi</Line>
+ <Line>kipsi kiire merimaili merisiili litra metri millimetri viivotin harppi happi</Line>
+ <Line>hepenet hiprakka promoottori pilli pilkka palkka rapa repale riisi reisi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 3</NewCharacters>
+ <Line>jaffa fafa ca ja jakaa sala faarao kaftaani laiva aasi lapsi lopettaa aivan lasta pasta vasta kasta paperi berberi baskeri sivellin reitti peitto keitto</Line>
+ <Line>katso lapanen gogo herra korppi kapalo sana kisa kissa risa rissa </Line>
+ <Line>lasi lapsi mesi meri vesi pesi keski kaski maski matsi neiti veitsi kaadin</Line>
+ <Line>keitto peitto pasta vasta vaaksa bataatti potaatti tomaatti persilja pari</Line>
+ <Line>kari kerppo kaari vaari laari saari vatsa katse parillinen perillinen</Line>
+ <Line>patsas gorilla gondooli kangas langat poisto esine pesto pasta pari</Line>
+ <Line>maine meni niin se he ne me te pappa abba taivas aasi avain aivan anna</Line>
+ <Line>amme seis silakka silava laiva loppiainen loma ruma siika onki kongi</Line>
+ <Line>ongelma probleemi promille partio kartio orgaani organisaatio osoite</Line>
+ <Line>ostos solki olki hangata hangoitella osa oiva logo pogo biologi posti</Line>
+ <Line>lento honka hieno hieho harja karja lahja sininen oranssi roosa patsas</Line>
+ <Line>baari paarit parit perinne paras leijona kaste raaste riski raita rinne</Line>
+ <Line>ongelmat heti hetki harja karja kirjava kana kotkottaa pihalla patsas</Line>
+ <Line>originaali virvoittaa langat perinne prosessi merkki gabardiini kangas</Line>
+ <Line>promille millimetri senttimetri desimetri dekametri metri hehtometri</Line>
+ <Line>kilometri aari hehtaari millilitra senttilitra desilitra litra dekalitra</Line>
+ <Line>hehtolitra tavu sana lista laki fasaani fasadi biologia geologia sello</Line>
+ <Line>viulu okariino basso kontrabasso basisti ksylofoni altto sopraano</Line>
+ <Line>baritoni metrosopraano fagotti fregatti gastronomia</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qux</NewCharacters>
+ <Line>q u x qq uu xx quxx qqxx uuuu uuuq uuuq uuux uuuu uu uu uu u u uuuu</Line>
+ <Line>qqqu qqqx qqxx qxxx xxxx xxxx xxxu xxxu xxuu xxxx xxqq xxqq quxx q x</Line>
+ <Line>q x q x u q x uq xxu qxxx quxu uqux xuqq uuuq uxux ux ux qx qx qx qx </Line>
+ <Line>uusi kuusi usko tuska uskalias ukset sukset saukko raukka kukka kuka</Line>
+ <Line>kulmikas kulakki kulma sulka ujo ruoka tule tuli tuoli suoli huoli ruuhka</Line>
+ <Line>tupa tuuli tuutti tutti tuttava tuottava tuotos tapaus kulrata kullata kuu</Line>
+ <Line>kuula kuolain huoli tuoli tuolla tauko toivo touko tuska vuoro vouti luoti</Line>
+ <Line>tuttava kuva suma suomia seura suu puu luu muu duuri fuuga kukkula</Line>
+ <Line>mukava sauna nauha nuha tunne aukko saukko tukos duuri kuuri tulos</Line>
+ <Line>tunne fauna floora ranne ruutana reuna lunnas lunnaat luutua sauna suu</Line>
+ <Line>tuttava kuutamo uhma uhkaus uusi untuva untuvikko biopolttoaine etuus</Line>
+ <Line>etanoli nuoli nuolla nuori nuotti nuotta vuosi vuoto kuona kuori kuuri kuu</Line>
+ <Line>kustannus uudistus suu queen mexx ex exhale examinia texmex xerox on kopio qu xavier kexi on suomeksi keksi ennen vanhaan kirjoitettiin ks x</Line>
+ <Line>silloin suksi olisi ollut suxi q on vieras kirjain samoin kuin x tarvitse q ja</Line>
+ <Line>x merkin kun kirjoitat ranskaa englantia tai ruotsia maukas muovailuvaha</Line>
+ <Line>vahva suomalainen tuo tuomari juo huokailu huokaus huomata huuhaa on</Line>
+ <Line>kumma juttu huhuilu huilu kumi kumina ruutana rauta hauta hautua</Line>
+ <Line>huhu huuli huhkia tuhka tuhkata hauras haudata duuma duuri durum</Line>
+ <Line>huima tuima luumu kuutamo puutarha puutarhuri puimuri kustannus</Line>
+ <Line>luusto vauras vieras vastaus voima vuori vuosi puoliso puolittaa paula</Line>
+ <Line>paalu valuutta valas huuma hauras hurja huima huoli huopa huveta</Line>
+ <Line>huono gulakki kustavilainen tuoli fuuga duuma quixotic on vieras sana</Line>
+ <Line>quiche on ranskalainen piiras quiet on hiljainen quid on slangisana ja tarkoittaa puntaa quintet on suomeksi kvintetti xylophone on tietenkin ksylofoni xenophobia tai xenofobia tarkoittaa vieraiden maiden tai</Line>
+ <Line>muukalaisten pelkoa outo on usein kummallinen juttu tuuli uusi kuusi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wäå</NewCharacters>
+ <Line>å å å å åå åå åå åååå åååå å å åå åå åå åå å åå å åå åååå å å å å å å å å å</Line>
+ <Line>w w w w ww ww ww ww wwww wwww åw åw åw åw åw åw åwwå wååw</Line>
+ <Line>wåwå wwåå wåwå wwåå ååww ååww åwåw åwwå wååw åwwå åååw ww</Line>
+ <Line>ä ä ä ä ää ää ää ääää ääää wääw äåäå åääå åäää ååää ääää ääää wwwä</Line>
+ <Line>sää tämä tällä hämärä häntä minä sinä hän me te he tämä tuo se nämä nuo ne ovat kaikki pronomineja</Line>
+ <Line>häät häätää häärätä häiritä häkki näkkileipä levätä kerätä kehrätä kerätä</Line>
+ <Line>kerä rääkätä ääri kääriä kärki härkä häkä jäkälä mätäs mässätä määrä</Line>
+ <Line>määränpää pää päättää päivä väri sääri sääli säilä eräs eristää erä kerä</Line>
+ <Line>på on ruotsiksi päällä west on länsi särki hämärä sääri räätäli häätää</Line>
+ <Line>häätää hällä väliä hässäkkä täysi rähjätä käsi käsitellä känsä häävieras</Line>
+ <Line>käsitellä käskyttää häärätä äiti mätäs älli tälli käsi älä kälättää ääri</Line>
+ <Line>äärimmäinen ääressä äkäinen säkä tähkä ässä värjätä värittää kääriä</Line>
+ <Line>kähertää käämi känsä käärepaperi helähtää käki käsi säilä sää mää bää</Line>
+ <Line>ääri räävi eräs erä metsä eläkeläinen päärme käärme äkseerätä älähtää</Line>
+ <Line>tämä täällä tässä määkiä mäkäräinen närästää nähdä älähtää kätevä</Line>
+ <Line>kääriä kääreessä äärellä käsitellä tärkeä täsmällinen päärme päärmätä</Line>
+ <Line>hävitä hävetä ällitälli täsmällinen kädellinen jämä jämähtää jäte jää jäät</Line>
+ <Line>määränpää päämäärä määrätä kääriä väärä värjätä värittää kädellinen</Line>
+ <Line>sääret säärintama sääliä säälittävä rämäpää päämäärä määrätä älähtää</Line>
+ <Line>äiti äimistellä älä kälättää kierrättää täsmällinen terävä väärä vierittää</Line>
+ <Line>hämärä häämatka älähtää lällällää lällättää metsästää mieltää mieleltään</Line>
+ <Line>äidin kääriä kieriä äimistellä tähkä tähkäpää ässä tässä täsmä täsmällinen</Line>
+ <Line>tähti tähdellinen tärinä kärpänen käskeä kähmiä käämi kääre kiire</Line>
+ <Line>räätäli rähjätä rähinä tärinä pärinä nätti jääräpää käsitellä kärjistää</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yzö</NewCharacters>
+ <Line>y y y y yyyy yyyy yy yy yyyy yy yyyy y y y y yy yyy yyyy yy y yyy y yyyy</Line>
+ <Line>z z z z z zz zz zz zzz zzz zzz zzzz zzz zz z z z z z yz yz yzyz yzyz yz zyyz</Line>
+ <Line>ö ö ö ö öö öö öö öö ööö ööö ööö öööö öööö ööö ööyy yyöö yöyö zyöz zyöz</Line>
+ <Line>syö työ öljy työntää örveltää örähdellä yllätys työläs tyypillinen jyrä</Line>
+ <Line>ryövätä ryöväri syöveri syötävä syömäri säröillä ääretön öljy öhöm tyrä</Line>
+ <Line>käytävä väylä törmätä työmaa työmies hyötykäyttö hyvä hyötytarha</Line>
+ <Line>hyödyllinen hyöty syömälakko työtön työllisyys kylvötyö öljytty pyörähtää</Line>
+ <Line>ystävällinen bazz bizz izzy käyskennellä käytävä käytös työpäivä</Line>
+ <Line>väläyttää käryttää kääryle jyrätä syynätä kyykäärme säärystin päärynä</Line>
+ <Line>älymystö älynystyrä kyynärä säynävä näyttävä näytelmä nyörittää pyörä</Line>
+ <Line>kyhmy tyhmyri kysta täysikuu täydennys pöytäliina syötävä hyytelö hörhö</Line>
+ <Line>törmäys tärinä täysi kädellinen käsitys täydennys kärsimys mysli</Line>
+ <Line>mysteeri myllerrys myllertää myönnytys nyöntää työntää työntäyteinen</Line>
+ <Line>syys syyskuu syli syöpä syöpäläinen kylmä kylmäkiskoinen kyynärä</Line>
+ <Line>kysymys kyynärpää kylmäkiskoinen syötävä syömäri yömyöhä myötä</Line>
+ <Line>myötäpäivä pyytää pyöräillä kytätä kylmäkiskoinen öljymäki öljytä yötyö</Line>
+ <Line>ystävällinen yrmy kyhmy ryömiä työmyyrä mäyräkoira käsikähmä ääri</Line>
+ <Line>pääri määritellä myönnytys sääri pyöräillä pyrähdys pyörähdys pöytä</Line>
+ <Line>tietyömaa käskyläinen pääskynen pärjäily värinä päästäinen päävärit</Line>
+ <Line>punainen sininen keltainen välivärit vihreä oranssi ruskea pastellivärit</Line>
+ <Line>vaaleanpunainen vaaleansininen vaaleanvihreä täsmällinen työmyyrä</Line>
+ <Line>ystävällisyys syksy talvi kevät kesä kyynärä kyöpeli hyötykäyttö sääty</Line>
+ <Line>vyötärö vyötiäinen ärjähtää kyynärä kypärä käyskennellä täydellinen</Line>
+ <Line>öylätti löyly löylykippo kytätä kyykäärme syömäpuikot työpäivä yksi</Line>
+ <Line>pysti yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän</Line>
+ <Line>kymmenen yksitoista yhdestoista kytätä käsitys käskennellä käärme</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>Anna Anastasia Aaro Barbara Bart Bernard Cecilia Charlot Chad Desiree</Line>
+ <Line>Daniel Dick Erja Eero Elvis Faruk Filemon Fiona Gabriel Gabby Gideon</Line>
+ <Line>Heikki Hanna Hilkka Iiro Irja Ilmari Jaana Janne Jouni Kaarina Kaapo</Line>
+ <Line>Kerttu Lauri Lotta Lyly Mirjami Monica Mauri Nyyrikki Nicky Niko</Line>
+ <Line>Ohto Orvokki Ossi Paavali Pauliina Päiviö Rafael Rudolf Ruben Sverker</Line>
+ <Line>Sven Sylvester Tage Torgny Theodor Ulf Uuno Ulrika Valdemar Väinämö</Line>
+ <Line>Vieno Wilhelmiina Wellamo Werneri Yngve Yrjö Yvonne Xenobia Xerxes</Line>
+ <Line>Xanadu Zowie Zacharias Zeppo Åke Åsa Ågot Ärjylä Äijä Äyräpää Öjvind</Line>
+ <Line>Örjan Östen Adlercreutz Ahlroos Aho Backman Berghäll Böstman Calas</Line>
+ <Line>Collander Chalyquinn Degerholm Doughan Dufva Eazaz Eerola Efrat</Line>
+ <Line>Fabert Fagerström Feldt Galetzky Gates Grönroos Haapalehto Hytönen</Line>
+ <Line>Häggblom Itälä Ivanoff Iwendorff Jäynäs Jäätteenmäki Jörgensen Kaabar</Line>
+ <Line>Kyllönen Könönen Lyyra Läykki Lääperi Maltzew Mäkäräinen Mölsy</Line>
+ <Line>Nykänen Nyqvist Näätänen Oravisto Ostroff Oyer Paader Packalen</Line>
+ <Line>Pöysti Qvanström Qvick Qvist Raade Riley Räsänen Salmi Szilvay Seger</Line>
+ <Line>Tanskanen Tyynelä Tähtinen Udd Uhlenius Uosukainen Vapaavuori Vuori</Line>
+ <Line>Vörlin Wahlberg Westberg Wäre Xerox Xue Xavier Ylenius Ylönen Yusuf</Line>
+ <Line>Zetterström Zucca Zeus Åberg Åbo Åström Ärölä Äyräpää Ämmälä Öberg</Line>
+ <Line>Österman Öörni</Line>
+ </Level>
+ <Level>
+ <NewCharacters>piste ja pilkku</NewCharacters>
+ <Line>. . . . . . . . . , , , , . , . , .. ,, .. ,, .,., ., ., ,. ,. ,. . . . . . . . ... ... ... , , , ,, ,, ,, .... ...</Line>
+ <Line>Muista käyttää pistettä aina lauseen lopuksi. Pisteen jälkeen on aina välilyönti. Lause alkaa aina isolla alkukirjaimella. Lause on yksi asia. Kirjoitan sinulle nyt muutaman esimerkin. Ulla ui. Uiminen on Ullasta hauskaa. Ainolla on aurinkoinen hymy. Aamu alkaa aamiaisella.Minä olen viisas kissa. Minä olen Sisu. Sano aa. Sano a. Sano apina.</Line>
+ <Line>Aasi ui. Susi ui. Sisu ui. Ullakon ovessa oli lappu. Alisa luki lapun</Line>
+ <Line>Runoissa käytetään välimerkkinä usein pilkkua. Seuraava runo on kopioitu Salaisesta aapisesta.</Line>
+ <Line>Joutsenen hoito</Line>
+ <Line>Näin näin näitkö sen,</Line>
+ <Line>linnun lennon valkoisen.</Line>
+ <Line>Ilmaa alla siipien,</Line>
+ <Line>joutsenen, niin, joutsenen.</Line>
+ <Line>Ee ee etelään,</Line>
+ <Line>etelään lennetään.</Line>
+ <Line>Uupuu voima siipien,</Line>
+ <Line>joutsenen, niin joutsenen.</Line>
+ <Line>Oo oo onnea,</Line>
+ <Line>onnea on matkalla.</Line>
+ <Line>Linnun siiven hoitelen,</Line>
+ <Line>jousenen, niin joutsenen.</Line>
+ <Line>Lee lee lempeä,</Line>
+ <Line>lempeä on käpälä.</Line>
+ <Line>Hellä hoito siipien,</Line>
+ <Line>joutsenen, niin joutsenen.</Line>
+ <Line>Nyt olet harjoitellut kaikki kirjoituksen merkit, niin isot kuin pienetkin kirjaimet. Vielä voit harjoitella numerot ja muut merkit. Opettajasi varmaankin seuraavaksi neuvoo sinua käyttämään @-merkkiä ja tavuviivaa. Samalla on hyvä opetella jokin tekstinkäsittelyohjelma. Onnea kirjoitustaidollesi ja voitkin pyytää nyt opettajaltasi todistus kymmensormisjärjestelmän osaamisesta.</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/finnish_for_kids.ktouch.xml b/ktouch/training/finnish_for_kids.ktouch.xml
new file mode 100644
index 00000000..e0dc8974
--- /dev/null
+++ b/ktouch/training/finnish_for_kids.ktouch.xml
@@ -0,0 +1,508 @@
+<KTouchLecture>
+ <Title>Finnish For Kids</Title>
+ <Comment>KTouch training file generated March 22, 2006 by Ulla Lewman.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>ff jjj jf jfj j jff fjjf ff jfj j jff ff jjj fjj fjj fjf jfj jjj</Line>
+ <Line>f fjjf jjj fjjf jfj fjjf f j fjj jff j fjj jf jjj fjjf f f fjf</Line>
+ <Line>fjjf jff jjj ff jf fjjf fjjf f fjj fjj jf fjf j jj f j fjj jj jjj</Line>
+ <Line>f jjj f fjjf j j jjj f j jjj jj ff fjf fjj f f ff jjj jj fjf f</Line>
+ <Line>ff f fjjf fjj fjj f j fjf f jj jj jff jj jfj f jf jjj fjj j jjj</Line>
+ <Line>jfj fjjf f f fjf jj ff f j fjf fjj f jf j jf j fjj fjjf jj jff f</Line>
+ <Line>jff jff j f j f jff f jjj j fjf f fjjf j jff jj j f jf j ff jj fjj</Line>
+ <Line>ff jfj jfj j ff fjjf jj ff fjj f jff jff f fjf jj jj f jfj j fjj</Line>
+ <Line>jjj jff jj fjj jfj f fjj fjjf jj jj jf jff ff f jf jj ff fjjf j</Line>
+ <Line>jff fjf f f jfj fjjf f jj j fjj j fjj jf f f j ff jj j fjf jfj jj</Line>
+ <Line>jj jf j f j ff j fjjf jff f fjj jff j jf fjf j fjjf fjj j jj jf</Line>
+ <Line>fjj jfj jfj fjjf f f jjj jj fjj fjjf j fjjf jf fjjf jf f fjj j j</Line>
+ <Line>jjj jj jf j ff fjf jj jjj ff jf j jjj f ff ff j jf jjj jff jff f</Line>
+ <Line>jf j jfj fjj jfj fjjf fjj fjjf fjjf jj jjj ff jfj j jj f jj jfj</Line>
+ <Line>jff f f j j j f f jj jjj f fjj j fjjf fjj f fjjf fjf ff f jf fjjf</Line>
+ <Line>fjj fjj j f jf f fjjf ff jf ff jff jf j fjf f fjjf fjj j jff jj</Line>
+ <Line>f jf f fjjf jf jjj f fjjf fjjf j j f jfj f jjj j f fjjf f j jj</Line>
+ <Line>jj fjj fjjf f f jff jj jff f j jff f ff fjjf jf fjj fjj jf j jff</Line>
+ <Line>fjf jj jj jj jfj jf j jfj j fjjf jff ff fjj f j f j f f jj f fjj</Line>
+ <Line>jf jjj fjjf j f f jj jj jjj ff j fjf f fjj jfj jfj fjf jj jjj j</Line>
+ <Line>fjj jj jfj jjj jj jj f j j jff jjj jjj f jj jff f f f f fjf fjjf</Line>
+ <Line>jff j jjj fjjf ff fjjf j j fjf fjj jj j fjjf f jjj jfj jj fjjf fjf</Line>
+ <Line>fjj jjj j j jjj jf f f j fjj fjjf jfj fjj f ff j j jj jf jj jfj</Line>
+ <Line>jff fjj jf jj jf jf jj jj f fjjf jf j f fjjf ff jjj jf fjf jj fjjf</Line>
+ <Line>f jff f j ff fjj j fjj jj fjj jj jf j fjjf j jfj ff jf jf fjj</Line>
+ <Line>ff j ff f jj ff jfj jj j jfj jj f jj jj jf jf jj jjj jfj j jfj</Line>
+ <Line>jjj jfj jf jjj j j jf jfj fjj f jfj fjj ff jff fjj f j jjj jf f</Line>
+ <Line>jff fjf jf f jj j f j f jff ff jf jfj jjj jf ff ff jff f fjj jfj</Line>
+ <Line>j jfj jj jjj jf f fjjf j ff jjj jfj jff jff f fjjf fjj fjjf f</Line>
+ <Line>jfj jj f ff jff fjjf jff f jjj jfj jj j jfj ff fjj ff j f jj fjjf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>jjd fdfj rd djd jk jd k dd fjk fd fk k jfkd dkkf fk dkd dd jk k</Line>
+ <Line>dfj djd fkkk fk dff d dkkf fd fk fdfj fk k dkkf djd dff dkd dff</Line>
+ <Line>dkd kdk k dkkf k jk fkkk jd k jfkd fk fk jd k d dkd jd k dd rd dffd</Line>
+ <Line>d fk k k dff dff dd fk fk fd jd dd jjd rd dkd dkf kdk fdfj d kdk</Line>
+ <Line>djd k fk rd dd fk dff dff kdk dkd dkf d k jk jfkd jd jfkd d kdk</Line>
+ <Line>dkd kdk djd jd dkf dkkf fkkk dd djd fd dkf fk dff dkkf fk fk fdfj</Line>
+ <Line>fk fk rd jjd k k dkkf d rd dkd dd rd jjd fk fd fk k jk rd fd fd</Line>
+ <Line>djd k jjd djd fk k fjk k dd dfj kdk jd djd fk dfj fd k dffd jd djd</Line>
+ <Line>kdk dkd dd k fd fk jjd fjk fd rd fjk fk k dfj fd dd dkd d k dd kdk</Line>
+ <Line>fjk fk dkkf dd dkkf dd rd fd jd k jjd k dkf djd dkf k dkd d jd d</Line>
+ <Line>fjk dkkf dffd k d fdfj djd kdk fkkk d dfj jk fk jd jfkd jd kdk dffd</Line>
+ <Line>dd dkf dffd jk jk jd fd dkf k jd jfkd fdfj fkkk k dkf fdfj dfj</Line>
+ <Line>fd jd jd dd dd jd dd rd dkd dffd fd fkkk dffd dd fk jjd fk k k</Line>
+ <Line>d dfj fdfj k fk fk dkd dkkf dffd dffd k fkkk dkf jk dkd fdfj jfkd</Line>
+ <Line>jd dd jk fd dkf dkd dd k d k fdfj fdfj dd dffd djd dffd kdk dffd</Line>
+ <Line>fd jk dffd fk fd rd fdfj d fk d dff fkkk fk fk jd fkkk djd fk fdfj</Line>
+ <Line>jd jfkd dkkf fkkk dkkf kdk dd dfj k fk dfj fk jk fd jd k k kdk</Line>
+ <Line>k dfj dd k jfkd d fk jk rd fk k dffd fk djd jjd fk dkd dd dffd</Line>
+ <Line>fk fk kdk fdfj dfj fd fk dd dffd dd dkd fkkk k dkf dkkf k jfkd</Line>
+ <Line>d dfj k fk fdfj dff fk djd dd d dff k fd rd fdfj fk fd dkd djd</Line>
+ <Line>kdk fk fk dfj fk fdfj k dkf dkkf dffd k fk fk jfkd jk dffd fd dff</Line>
+ <Line>fk dkf fk dffd jd dfj d dkkf jd jjd fd fjk fd fk fk dff dffd fdfj</Line>
+ <Line>dkkf fd jd jfkd dffd d djd dkd fdfj fk dff fk fdfj jk fk dfj d dkf</Line>
+ <Line>rd rd jd rd jfkd dd jd k dffd fd dkd fk fk k dkd djd fk jjd jjd</Line>
+ <Line>k dd dd jd fk fk fk jfkd fd d fk fk d fkkk dkkf jjd dkf fdfj fkkk</Line>
+ <Line>djd k fk k jd dd dkd djd k kdk rd djd k jjd k jd dfj dfj dkf jjd</Line>
+ <Line>fk fd rd jd fdfj jk fk fjk rd k jd dkf rd dkd fkkk jfkd jjd jjd</Line>
+ <Line>fk jd fk jk dfj d fkkk k jjd jk fjk dd rd jd fdfj jd dfj jk dkkf</Line>
+ <Line>fkkk fk fk dffd fk dfj jd dd jk dfj fjk fd jfkd fk fd jd fd jd k</Line>
+ <Line>dffd rd dkd dd fk fk jk dffd fk dkd fjk jk k jk djd fdfj fk dd jd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>fl s l ldk l s slj s dks sf kl ll ls l ls dss lkj slk ks jl jjss</Line>
+ <Line>l slj jl lkj l ldf s ld ll l ll ldk jjdl dlkk fl rs dss fld fl</Line>
+ <Line>kl fl fl lkj fld ld fld js l dss kl jl jl ldk fld s ls s js kl</Line>
+ <Line>ll ld dss fld l rs sf dss ll jl kl ls slj kl ldf kl dss rs ls js</Line>
+ <Line>s dlkk js kl js ls fld jl jjdl ll jjdl ll rs ldf rs ld ldk slj</Line>
+ <Line>slj fl fld lkj rs ldf dlkk dss rs fl ld ldk kl dks fl sf dks ldk</Line>
+ <Line>slj kl sf dlkk fl s kl l ll fl slj ll s s s dds s sf fld ks ks s</Line>
+ <Line>ll dss s sf dks fl ldf dks rs ld s jjss ll l slk kl dks sf ll ldf</Line>
+ <Line>s ll dlkk rs jl l ll ls l ldk ldk js dss rs s slj l dks fld jl</Line>
+ <Line>ks dss dlkk ls kl ks kl js kl ldk kl ls l slk dlkk lkj slj dks</Line>
+ <Line>ld dks rs ldf dlkk ls s rs jjdl slk ldk slk dds lkj lkj s jjdl</Line>
+ <Line>fl l s kl slk jjss ls ll dss sf slj dlkk jl fl kl fl jl rs ls ll</Line>
+ <Line>lkj lkj ls lkj kl fl fl ll fl dks l dlkk kl s ldk fl fl ks l kl</Line>
+ <Line>ldf js slk fld dds l ldk ll dlkk jjss l lkj slk jl fl ldf ll fl</Line>
+ <Line>l fl jjss ls ldk ll dks kl slj ldf kl dlkk slk jjdl sf dlkk dlkk</Line>
+ <Line>fld ld s ls dlkk ld kl jl kl fl ls kl ls kl l sf l ls ldf dlkk kl</Line>
+ <Line>sf fl ks lkj fl jjdl ldk ls jjdl dlkk dlkk ldk rs sf slj ld s l</Line>
+ <Line>js ldf fld ldf dks ks ll jjdl slj fld dlkk s js l jjdl s s ks ld</Line>
+ <Line>ll lkj dds ldk ls fl ldk dss jl sf fld kl rs rs ll ldf s dks ls</Line>
+ <Line>ls dds slj dlkk jl l slk sf dks dks rs ldk jl dks l dlkk l ks rs</Line>
+ <Line>ks dks ks fld dds dss ldk kl s ks dks slk fl slj dds fl s js jjss</Line>
+ <Line>kl dks s fl rs s rs ldf ls sf ls ll rs sf dds dss jjdl l slk ldk</Line>
+ <Line>rs kl ld ll kl ll fl jjss ls ldf ll jjss kl ll jjdl jjss sf ld</Line>
+ <Line>jjdl ks ld js l slj jjdl fl sf lkj kl rs jjdl ks s dds dss fl slk</Line>
+ <Line>ll l l slj fl dss js lkj fld ks lkj ks ldk jjss ll ld l kl js fl</Line>
+ <Line>rs ls s s sf dds jl fld l lkj ls jl dss fl slk ldf jjdl l ks fl</Line>
+ <Line>fld lkj js s js ld slk dlkk jl ks l dds ld lkj ll jjss ld jjss s</Line>
+ <Line>dss s kl ldk dds fl s ldf kl sf slj kl sf lkj dss slk dss ls ls</Line>
+ <Line>fl sf kl ll kl ld jjss dds kl fld jjdl fl js jl sf kl kl jl jl</Line>
+ <Line>ldf ll dds dds s ll slk dks slj lkj fld kl ks rs fl kl ldk ld l</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ca</NewCharacters>
+ <Line>a a a c c c aa aa cc cc aca aaca caac ccaa acac aaaa cccc aaaa cccc aaaa</Line>
+ <Line>a c a c a c aa cc aa cc cc aa ja jjaa fafa ffaa ffcc ccfa afca cafa jafa caja </Line>
+ <Line>kafa kafa dafa dada ddaa ddcc d c a f j ccaa caac acca ddcc ccdd kaada</Line>
+ <Line>lala alal alla aall sasa asas acas casa lsca cafa caac aaac aaac ccca caac</Line>
+ <Line>call ascals slacks fas fads fad lack sads flask jackals flack kasata kaada</Line>
+ <Line>sass all salsa jackals cad lads flaks scald ca la asks flack lacks lalla alla</Line>
+ <Line>ask ad jackal fas las sad sass skas ck ca fad fad adj fas kc dadda cadda</Line>
+ <Line>jacks class lad scald cads jackal ad cads sack alas scald lacs flak lassa cc</Line>
+ <Line>alfalfa calls jacks ala dc lacks class lad clack a fads alacks ads jaffa kaffa</Line>
+ <Line>ads flask adds scalds c jacks jackals ascal cask ads aj add adds jakaa</Line>
+ <Line>akka scald calla salsas alls sac cads salads fads cask adds casks faffa alfa</Line>
+ <Line>asacs jackal lacks class clad ack dad slack fall alfalfas slacks laska dad</Line>
+ <Line>fad cal lad cal calla ad sad salads ska salad flack skas ca jacks laaka lakka sasal ads ad flak aka ala ac clad alacks ck jackal fall fas scads</Line>
+ <Line>call calla alfalfas calf falls flak lack flak flaks casks flak lass saada jakaa</Line>
+ <Line>sala class alla akka affa adda a askas scad acks ac scad lac skas scald</Line>
+ <Line>sacs lads ascals call scad call clads kcal salsa slack ascals dads</Line>
+ <Line>call c alfalfa sack alfalfas falls ask fas salsa asks class jack</Line>
+ <Line>asks alls alack calls alacks ads casks cs kc jackal lacs flak ascals</Line>
+ <Line>a fall ad ck kcal alfalfa ad a flaks sacks alas ca lad salsas</Line>
+ <Line>sac skas clads jacks assa aaaa alfalfas lacks ska alack flaks as ska</Line>
+ <Line>cads jacks ala flack falls cads fad scads lac ads ask callas scalds</Line>
+ <Line>ads skas salsas fall aka salsa flack alls flacks las salads cs salsas</Line>
+ <Line>acks flack sacks sass lacs cal flacks jacks ajaa sakka alack flacks</Line>
+ <Line>flack ask dad flacks ads kcal cal jack assa cads asks ala callas jacks</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 1</NewCharacters>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jfjf jkjk fkfk dkdk kdkd kfkf djdj kjkj jl lj sf fs j f k l</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jj ff kk dd ll ss cc aa j f k d l s c a jf jjff kd kkdd ls llss ca ccaa casa kasa</Line>
+ <Line>falla afa adda cjcj jcjc fccf cckk ddcc ccdd cdcd akka dada lask kask aaaa</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa alas kala dada ja asla dakk lalla caac acca alla akka</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jaffa kaffa faffa als kasaa kaada saada lalal laa laa</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jfjf jkjk fkfk dkdk kdkd kfkf djdj kjkj jl lj sf fs j f k l</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jj ff kk dd ll ss cc aa j f k d l s c a jf jjff kd kkdd ls llss ca ccaa casa kasa</Line>
+ <Line>falla afa adda cjcj jcjc fccf cckk ddcc ccdd cdcd akka dada lask kask aaaa</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa alas kala dada ja asla dakk lalla caac acca alla akka</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ <Line>jaffa kaada fafa laaka lakka saada ca ja aa jj kk ss ll sala salaa lalla kalla</Line>
+ <Line>jalla falla cafca salsa jaffa kaffa faffa als kasaa kaada saada lalal laa laa</Line>
+ <Line>salsaa kasa kafka safka ff jj kk dd ll ss cc aa j f k d l s c a jaffa kaffa sala</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>tt t t tttt tt nn nn nt tn nntt ttnn ntnt tttn tnnn nntt tnnt nnnn tttt tntn </Line>
+ <Line>n n n t t t tt tt nn nn nntt nntt ntnt nttt nnnt tntn tt tt tt nn nn nn tntn</Line>
+ <Line>tasa tall tn flanks ananas sataa ands talc knack n cancans talk kantaa</Line>
+ <Line>canst fan asst stats at natl antaa stall alta ands snacks stand assn</Line>
+ <Line>ants alt tads cantata talcs natl attack knacks stalks tack taata ltd</Line>
+ <Line>tattan scan scandals fats tatsa tad talk stalks scats ankka aats daft</Line>
+ <Line>tn fatals fat nasal aft santas antal flan knacks natal at acts at</Line>
+ <Line>scats ts and stank act ct flans canal flan flans sata fats caftan</Line>
+ <Line>sank cant tads talcs fats act tacts tanks assn slat ansat flatlands</Line>
+ <Line>attacks kn as sn sandal alts antaa kattaa flats nack cat afts santa</Line>
+ <Line>laatta assn snack flatlands ansat cats stands asa assa ants cancans</Line>
+ <Line>talc flt tasks cancans ltd sandal canals stalks tat aslant tad flatlands</Line>
+ <Line>tans flank cast flatland tanks naatta snacks n sands talcs natal annal</Line>
+ <Line>attacks slants kana kansa ants act stanks tasks slants flanks flat</Line>
+ <Line>act clank fatal stalk laatta sand sandals fast tads tact fatals lanta</Line>
+ <Line>dank attacks attn caftan flatlands ctn kn tans tack fact flank kantaa</Line>
+ <Line>cats sandal stall land knack flanks at attan fats talcs catcall</Line>
+ <Line>fats aslant lat ct slats st scandal tank slants fatal fat stall sank</Line>
+ <Line>lats cantata acct tasks jct fast nd scandal fats stat lastata fatta</Line>
+ <Line>annan kattaa alta ankka scats ant fatals fast tantta fan tacks cast</Line>
+ <Line>clans alts casts flan fatal cans nasals caftan attn fans lats lastata</Line>
+ <Line>stanks ansa can kansat slats canals ltd kaada natal kana scans</Line>
+ <Line>stall flatland knacks aft canal tantta flats antaa daft salts tats snack</Line>
+ <Line>fats attn tack scandals knack tacts stands asst cats natl landfalls</Line>
+ <Line>fact ands ats nd tan stand caftan tacts can natal act satsata</Line>
+ <Line>scan daft ankka slants stat sank stanks tall lands flt stands saat</Line>
+ <Line>lanka flatlands sandal staff fats kt fat flank sandal staff kaataa</Line>
+ <Line>kantaa salt skat scants t t santa ct an flanks skandal flatlands</Line>
+ <Line>tads stand tat clanks at ands ansat alts ts snacks assn tanks</Line>
+ <Line>flatlands stack lands scandals scats cancan santa jct atlas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iv</NewCharacters>
+ <Line>i i i v v v iv iv vi vi iivv vvii viii iiiv vivi ivvi viiv iiii iiii vvvv vvvv ivvv viii</Line>
+ <Line>i i i v v v ivi ivi viv vivi iviv vvii ivvv iivv iiiv vivi iviv ivvi iivv iiii vvvv</Line>
+ <Line>saita saidat laiva cicada kissa viat knits stilt ails kills flail tail</Line>
+ <Line>canvass vatsa kiln tina askis tic silti liilat assails avials ninja lila</Line>
+ <Line>inka viisi faddists aktiivit kliffa clinicians dint saidat diivailla</Line>
+ <Line>distinct titaani kissa radians incl saidat classical classic i</Line>
+ <Line>tintata vasta fasaanit divaani ranka vastata nick siisti ills stints</Line>
+ <Line>salliva titaani kickstand fatalist classic tick clink flick slink attic</Line>
+ <Line>kinnas avata antaa finalisti sillat clink distaff did kicks tactics</Line>
+ <Line>aina fall lifts jail did isit raadit raisins ansaita tiltti tiistai cavils</Line>
+ <Line>killi tavallista fill finaali fatalistit distaff fills civilians visiitti</Line>
+ <Line>cit finalists statistic fantails skit intact faints vis ails viscid</Line>
+ <Line>distaffs kilts riff fains link sci ink diff sisals inland ii laidan ali</Line>
+ <Line>nails slit island install klinikan siviili sitaatti stiff aivan vans</Line>
+ <Line>filial canvass invalid flit aktiivi assistant installs raisins tactics</Line>
+ <Line>skiffs ti kickstand still skinflint alkali antava dials dills invalids</Line>
+ <Line>ivata klikata cacti raja lista saada isi kita skins assail vandaali</Line>
+ <Line>instant kinnas klassista classicists infants fill assist villa didst</Line>
+ <Line>knits ti stadias fiats saint ails kassa kissa sciatics ill fiats disdains</Line>
+ <Line>lain assist avid davit fantails ii landfills vial it ink jinns skids</Line>
+ <Line>avain aasi aivan astia lasti kicks dillis tilli taivaan sataa antics kaivaa</Line>
+ <Line>alava kaivata alla vaaka tasata maista kaista lasta lastata kiivas</Line>
+ <Line>anti vain avain ivata natina lainata aina kina kiva ivat niin laina</Line>
+ <Line>lasi silakka silava lava laiva laivalla laistaa vailla ilta cin cina finaali</Line>
+ <Line>lantti katti centti laina laita laivan laivat liina niin niini sain saan</Line>
+ <Line>kita kaita maita maata maat naatta niin kaiva kaivata ivata kaivata</Line>
+ <Line>lasi laasti laava aava naava anti lantti vaadin vailla villa alla aivan</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>vitsi eilen massiivinen villaiset leikki divaani akateeminen kateellinen</Line>
+ <Line>festivaali viesti sateliitti fani asteet fiini kaneli ale ladata vaskinen </Line>
+ <Line>jade made desi sieni seitti viini leimasin seniili limetti medikalisaatio</Line>
+ <Line>emali sataa messi missi esiliina taikina maa maailma satama melamiini</Line>
+ <Line>desimaali vintti matematiikka neiti kameli kaneli aneli saneli meni mies</Line>
+ <Line>taika laiva metallit maili mesi seleeni satellitti linssi ametisti</Line>
+ <Line>seesteinen eilen este sitten definsioida sekaisin linimentti kaste latte</Line>
+ <Line>eminenssi mestata entinen sekava milli lanta letit estetiikka dialektinen iske</Line>
+ <Line>silli messi selli made kade villa aneli se fennica satelliitit eilen leili</Line>
+ <Line>desi miina kiivas aisa lienee tankki desimaali aste viisi idea vastata maamaili</Line>
+ <Line>niin aaveet desimitta ainiaan te jaffa liemet mielet satelliitti asema satu</Line>
+ <Line>dementia aste seesteinen lakeija me aivastaa se kasetti aistia laakea asia</Line>
+ <Line>teak asiakas lasiastia destinaatio enkeli sekalainen eli kavalkadi avata alias</Line>
+ <Line>liemi manna aski ennen sama sana talli kieli mieli natina fasadi eines astia</Line>
+ <Line>lantti kaivata neidit data eleet fitnesslaji seteli divaani sateinen esiliina</Line>
+ <Line>calmette liikene este massiivinen innovaatio alias adjektiivi miesten niemet</Line>
+ <Line>afasia mielle seniili seisake villaliina finnit este asema enne idea salaatti</Line>
+ <Line>sametti akne alensi timantti este nakki makki seis lasi esine aivan anna leimata</Line>
+ <Line>seimi maitti fiini tiedemies kaventaa ideat addiktiivinen ase vaivata nainen</Line>
+ <Line>saviset sakset saidat laama dieetti kitata ies elitistinen askel nailon kina</Line>
+ <Line>kivi se daalia fitnes amme saalis lime ajaa esteet festivaali kennel taikina</Line>
+ <Line>data seitsen tie ne meilata desi esteet festina siveltimet enne lista teini</Line>
+ <Line>ideat eli elimet elin finaali eilinen nasta mesi vaate meteli ravata sienet</Line>
+ <Line>velka leili esine laita ies sideliina este kamina esine efekti laimea aste keila</Line>
+ <Line>sametti ne semifinaali sementti kani viila vie me astemitta alas sinivalas tiet</Line>
+ <Line>kaide esine laiva dialektinen sienet sini saate esteettinen aivan seis sentit</Line>
+ <Line>filmi kameli skeitti teddi leski kate eteinen alentaa evindenssi maaninen nalle</Line>
+ <Line>netti lasi laasti femma miina maine kisa fifa diiva kina siisti kiiski minne</Line>
+ <Line>maine meni natina niin fiini ivata neiti kelsi kassi siviili sivellin etsin kaista</Line>
+ <Line>ilkivalta seitti ivata laasti lantti kantti kanttiini kaste maistella maksaa maksa</Line>
+ <Line>kide diiva me te ne se iva kiva kiivailla miete asiakas vaadin kaadin kiiski menin</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 2</NewCharacters>
+ <Line>jaffa kaada fafa laaka lakka saada avain aasi aivan astia lasti anna antaa</Line>
+ <Line>vaiva sieti seiti lesti siika silakka salakka salainen salava maanalainen</Line>
+ <Line>salsa jalla kalla lalla sala salaa lasta saita maista kaista kaadin vaadin</Line>
+ <Line>aitaa raita kaita laita saita sananjalka alla matta mitta mesimarja alava</Line>
+ <Line>nainen sama sana jana natina fifa kisa kissa kide kade diiva kina lasi</Line>
+ <Line>laasti laita salva seisake miesasiakas amme ametisti aivan niin sali sama</Line>
+ <Line>lantti katti laine maine centti siisti kiiski aisti esine mesi miina niska</Line>
+ <Line>naskali netti fiini ivata kelsi kaali maali naali niin tina siviili sivellin</Line>
+ <Line>ilkivalta valtava laiva laina liina sima siima vaiva aitta aita laita niska</Line>
+ <Line>vitsi eilen massiivinen villaiset leikki divaani akateeminen kateellinen</Line>
+ <Line>talli malli mallikas veivata vaivata maittava mekkala miekka miekkakala</Line>
+ <Line>maittava maitse lattia salaatti melamiini mela mestata mies maalattia</Line>
+ <Line>mainita massiivinen matala neitonen neiti niitti tanssi taivas televiesti</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>h h hh hh h hhh r r rr rr rhhr hrrh hhrr hhrr rrhh hh rr hr hr rh rh hhrr</Line>
+ <Line>metallit miehet hakeva retiisi rehti hevonen herra hera meret hiki haave</Line>
+ <Line>firma itara marmeladi harmi hirtehinen eilinen rehellinen vaativa harmaa</Line>
+ <Line>hirvi harmillinen harmaavarpunen rahi rahti raha retki kirja kirjava karja</Line>
+ <Line>harja herjata hierarkia arkajalka harittaa harmittaa hiiva havaita haava</Line>
+ <Line>kahva faarao farmari harava hara haara lahja laari vesi kaahata karsina</Line>
+ <Line>emiiri rieha hantti merta hiiva harmittava harmahtava irvailla kirjava</Line>
+ <Line>rahakasa harja hairahtaa lahja car litra metri mitta merimaili marjamaa</Line>
+ <Line>hirvi hairahtaa rahi tahmea tahti hallita raikas rikas rakas ratsastaa aihe</Line>
+ <Line>karjamaja majava viiri veri narina saari saaret rehti retiisi ratti vihta sari</Line>
+ <Line>kaivata haitari hattara hatara rahakasa kasarmi karmi karmiva kamera</Line>
+ <Line>kerma kirva karsastaa ratsastaa rahastaa rahastaja raha rehti rahti meri</Line>
+ <Line>metalli tarha karhea erhe terve terveinen vene venhe vinha vanha virma</Line>
+ <Line>varma harha herja harja harmaa kirja karja sarja taara haara kaada leiri</Line>
+ <Line>ladata rahdata reimari raina raide riita itara harata vastaan rastas raikas</Line>
+ <Line>herne hirnahtaa hairahdella hidas hidastaa tahdikas tehdas erilainen eri</Line>
+ <Line>desilitra metrimitta mittari kreemi lammas hammas hammasharja riihi</Line>
+ <Line>karisma kari kiire itara kitara sitar mahti sieni kirja kirje siesta sierain</Line>
+ <Line>siisti kaari kitsas ritsa riita hiiva treeni trivia atria ateria ahteri siideri</Line>
+ <Line>eriste risteilee ristiriita rahi rahti ritarilinna kide kirmata karmiva kaari</Line>
+ <Line>ralli rilli laari laastari kaahari kiire kiirii kierre mielle marjastaa tarkastaa</Line>
+ <Line>tarha eristin helistin kiristin arka jalka firma liiteri hiiri saari naali maili</Line>
+ <Line>misteli riivin rihveli ristiriita risa kitarisa kasari kattila haili halata aari</Line>
+ <Line>hehtaari hilse hatara hairahtaa leiri iiris eriste haistaa lehti lahti kaksi</Line>
+ <Line>kisa kasa rasavilli viikari veijari reimari meri sarja harja karja marja rahi</Line>
+ <Line>kirjaraati ratti rahtilava laiva reimari harittaa aristaa saari armeija lahti</Line>
+ <Line>lehti leiri lirisee aristaa aristella eriste kirjava herjata kaavake saareke</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>oo gg oooo oooo gggg gggg gogo ogog ooog gggo oogg ggoo oggg ooog</Line>
+ <Line>o g o g gggo ggoo ooog oogg oggg oggg oo gg oo gg go go og og ooog</Line>
+ <Line>kongi king kangastaa gondoli onkia loimi liemi noki kangastaa koti</Line>
+ <Line>ommella ongella ongelma hangata hangoitella tori toivo vaiti hoiva</Line>
+ <Line>enkeli taivas honka lento soittaa soitto koitto kanalla hangata</Line>
+ <Line>osoite osoittaa osata ongelmat onkalo kailottaa lanka solkenaan solki</Line>
+ <Line>langoilla langettaa oiva osa asia osio looginen legioona leijona ja</Line>
+ <Line>koi naali lento ahkio sininen oranssi sose keltainen tanka soikea hoikka</Line>
+ <Line>hegemonia keto oiva hoiva mieto into ikoni ihminen normi sormi gogo</Line>
+ <Line>hormi hormoni roima reima hirvi harva orava meirami gondoli kodin</Line>
+ <Line>loisto liisteri farmari norja orja origami harjata raaste koira karaatti</Line>
+ <Line>eri veri arvo osinko oranki gorilla gerilla harja harjoitella looginen logo</Line>
+ <Line>loisto loinen merta meri mormooni hormooni harmooni rangaista rikos</Line>
+ <Line>onkia tonkia honka hiiva hoiva soiva oiva roima reima langoitta lento</Line>
+ <Line>harava osteri retiisi herra gondoli gondori kotka kiiski kioski kitara</Line>
+ <Line>reitti tatti tieto toimisto osoite orgaani organisaatio ergonominen irto</Line>
+ <Line>osasto osoittaa organisoida firma farmakologi onkologi osasto osoite</Line>
+ <Line>kongi king kangastaa gondoli onkia loimi liemi noki kangastaa koti</Line>
+ <Line>ommella ongella ongelma hangata hangoitella tori toivo vaiti hoiva</Line>
+ <Line>enkeli taivas honka lento soittaa soitto koitto kanalla hangata</Line>
+ <Line>osoite osoittaa osata ongelmat onkalo kailottaa lanka solkenaan solki</Line>
+ <Line>langoilla langettaa oiva osa asia osio looginen legioona leijona ja</Line>
+ <Line>koi naali lento ahkio sininen oranssi sose keltainen tanka soikea hoikka</Line>
+ <Line>hegemonia keto oiva hoiva mieto into ikoni ihminen normi sormi gogo</Line>
+ <Line>hormi hormoni roima reima hirvi harva orava meirami gondoli kodin</Line>
+ <Line>loisto liisteri farmari norja orja origami harjata raaste koira karaatti</Line>
+ <Line>eri veri arvo osinko oranki gorilla gerilla harja harjoitella looginen logo</Line>
+ <Line>loisto loinen merta meri mormooni hormooni harmooni rangaista rikos</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>b b b b p p p p bb pp pb bp bppp pbbb bbpp ppbb bbbp bbbp pbbb b b b b p p p p pp pp pp bb bb bb bob pop pappa pippa bibbi babba baba papa</Line>
+ <Line>bio boi pio poi abba baab appa paap ebbe eppe eeep eeeb bbpp bbpp</Line>
+ <Line>posti pois paisti pata poika appi apila oppilas pilari pila repale passi</Line>
+ <Line>biologi baari barbaari berberi baskeri bataatti biopassi bistro albatrossi</Line>
+ <Line>alabasteri boikotti ballistinen pomo pese bakteeri baletti baptismi</Line>
+ <Line>baretti basaari bbc boordi parkkipaikka pitsiliina patsas poiminta poro</Line>
+ <Line>pikantti pipana pirpana orpo ropo repo pimpeli pom potaska porkkana</Line>
+ <Line>pensas perjantai maanantai tiistai keskiviikko torstai viikko koppi poka</Line>
+ <Line>korppi kana palko pelko pensas pii paa pois popsi popsi porkkanaa </Line>
+ <Line>happo gongi bongata meridiaani pistin kaide koppelo pormestari optio</Line>
+ <Line>biologia bisarre biblia appi apila apteekki apea opettaja rosvo meirami</Line>
+ <Line>patologi paarma pasma rasva riski roiske harvinainen harras taivas loiva</Line>
+ <Line>sima rima riimi rimmata soma poro liirto hirvi harvinainen orvaskesi</Line>
+ <Line>satama laiva alas lasti laari pari kari marina narina nappanahka</Line>
+ <Line>nasta lasta kaste maista maksa posti perhe promootio baskeri bakteeri</Line>
+ <Line>kaareva lokari pala palaa pallo siili siviili viili villa kari paita maitse</Line>
+ <Line>meritse minne menet mies nainen poika lapsi perhe lapanen perna paras</Line>
+ <Line>paisti gorilla gerilla germaani harava orava orgaani energia faarao</Line>
+ <Line>opettaja oppilas rehtori lopettaa pormestari portti koppi korppi kaappi</Line>
+ <Line>kipsi kiire merimaili merisiili litra metri millimetri viivotin harppi happi</Line>
+ <Line>hepenet hiprakka promoottori pilli pilkka palkka rapa repale riisi reisi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ei uusia 3</NewCharacters>
+ <Line>jaffa fafa ca ja jakaa sala faarao kaftaani laiva aasi lapsi lopettaa aivan lasta pasta vasta kasta paperi berberi baskeri sivellin reitti peitto keitto</Line>
+ <Line>katso lapanen gogo herra korppi kapalo sana kisa kissa risa rissa </Line>
+ <Line>lasi lapsi mesi meri vesi pesi keski kaski maski matsi neiti veitsi kaadin</Line>
+ <Line>keitto peitto pasta vasta vaaksa bataatti potaatti tomaatti persilja pari</Line>
+ <Line>kari kerppo kaari vaari laari saari vatsa katse parillinen perillinen</Line>
+ <Line>patsas gorilla gondooli kangas langat poisto esine pesto pasta pari</Line>
+ <Line>maine meni niin se he ne me te pappa abba taivas aasi avain aivan anna</Line>
+ <Line>amme seis silakka silava laiva loppiainen loma ruma siika onki kongi</Line>
+ <Line>ongelma probleemi promille partio kartio orgaani organisaatio osoite</Line>
+ <Line>ostos solki olki hangata hangoitella osa oiva logo pogo biologi posti</Line>
+ <Line>lento honka hieno hieho harja karja lahja sininen oranssi roosa patsas</Line>
+ <Line>baari paarit parit perinne paras leijona kaste raaste riski raita rinne</Line>
+ <Line>ongelmat heti hetki harja karja kirjava kana kotkottaa pihalla patsas</Line>
+ <Line>originaali virvoittaa langat perinne prosessi merkki gabardiini kangas</Line>
+ <Line>promille millimetri senttimetri desimetri dekametri metri hehtometri</Line>
+ <Line>kilometri aari hehtaari millilitra senttilitra desilitra litra dekalitra</Line>
+ <Line>hehtolitra tavu sana lista laki fasaani fasadi biologia geologia sello</Line>
+ <Line>viulu okariino basso kontrabasso basisti ksylofoni altto sopraano</Line>
+ <Line>baritoni metrosopraano fagotti fregatti gastronomia</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qux</NewCharacters>
+ <Line>q u x qq uu xx quxx qqxx uuuu uuuq uuuq uuux uuuu uu uu uu u u uuuu</Line>
+ <Line>qqqu qqqx qqxx qxxx xxxx xxxx xxxu xxxu xxuu xxxx xxqq xxqq quxx q x</Line>
+ <Line>q x q x u q x uq xxu qxxx quxu uqux xuqq uuuq uxux ux ux qx qx qx qx </Line>
+ <Line>uusi kuusi usko tuska uskalias ukset sukset saukko raukka kukka kuka</Line>
+ <Line>kulmikas kulakki kulma sulka ujo ruoka tule tuli tuoli suoli huoli ruuhka</Line>
+ <Line>tupa tuuli tuutti tutti tuttava tuottava tuotos tapaus kulrata kullata kuu</Line>
+ <Line>kuula kuolain huoli tuoli tuolla tauko toivo touko tuska vuoro vouti luoti</Line>
+ <Line>tuttava kuva suma suomia seura suu puu luu muu duuri fuuga kukkula</Line>
+ <Line>mukava sauna nauha nuha tunne aukko saukko tukos duuri kuuri tulos</Line>
+ <Line>tunne fauna floora ranne ruutana reuna lunnas lunnaat luutua sauna suu</Line>
+ <Line>tuttava kuutamo uhma uhkaus uusi untuva untuvikko biopolttoaine etuus</Line>
+ <Line>etanoli nuoli nuolla nuori nuotti nuotta vuosi vuoto kuona kuori kuuri kuu</Line>
+ <Line>kustannus uudistus suu queen mexx ex exhale examinia texmex xerox on kopio qu xavier kexi on suomeksi keksi ennen vanhaan kirjoitettiin ks x</Line>
+ <Line>silloin suksi olisi ollut suxi q on vieras kirjain samoin kuin x tarvitse q ja</Line>
+ <Line>x merkin kun kirjoitat ranskaa englantia tai ruotsia maukas muovailuvaha</Line>
+ <Line>vahva suomalainen tuo tuomari juo huokailu huokaus huomata huuhaa on</Line>
+ <Line>kumma juttu huhuilu huilu kumi kumina ruutana rauta hauta hautua</Line>
+ <Line>huhu huuli huhkia tuhka tuhkata hauras haudata duuma duuri durum</Line>
+ <Line>huima tuima luumu kuutamo puutarha puutarhuri puimuri kustannus</Line>
+ <Line>luusto vauras vieras vastaus voima vuori vuosi puoliso puolittaa paula</Line>
+ <Line>paalu valuutta valas huuma hauras hurja huima huoli huopa huveta</Line>
+ <Line>huono gulakki kustavilainen tuoli fuuga duuma quixotic on vieras sana</Line>
+ <Line>quiche on ranskalainen piiras quiet on hiljainen quid on slangisana ja tarkoittaa puntaa quintet on suomeksi kvintetti xylophone on tietenkin ksylofoni xenophobia tai xenofobia tarkoittaa vieraiden maiden tai</Line>
+ <Line>muukalaisten pelkoa outo on usein kummallinen juttu tuuli uusi kuusi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wäå</NewCharacters>
+ <Line>å å å å åå åå åå åååå åååå å å åå åå åå åå å åå å åå åååå å å å å å å å å å</Line>
+ <Line>w w w w ww ww ww ww wwww wwww åw åw åw åw åw åw åwwå wååw</Line>
+ <Line>wåwå wwåå wåwå wwåå ååww ååww åwåw åwwå wååw åwwå åååw ww</Line>
+ <Line>ä ä ä ä ää ää ää ääää ääää wääw äåäå åääå åäää ååää ääää ääää wwwä</Line>
+ <Line>sää tämä tällä hämärä häntä minä sinä hän me te he tämä tuo se nämä nuo ne ovat kaikki pronomineja</Line>
+ <Line>häät häätää häärätä häiritä häkki näkkileipä levätä kerätä kehrätä kerätä</Line>
+ <Line>kerä rääkätä ääri kääriä kärki härkä häkä jäkälä mätäs mässätä määrä</Line>
+ <Line>määränpää pää päättää päivä väri sääri sääli säilä eräs eristää erä kerä</Line>
+ <Line>på on ruotsiksi päällä west on länsi särki hämärä sääri räätäli häätää</Line>
+ <Line>häätää hällä väliä hässäkkä täysi rähjätä käsi käsitellä känsä häävieras</Line>
+ <Line>käsitellä käskyttää häärätä äiti mätäs älli tälli käsi älä kälättää ääri</Line>
+ <Line>äärimmäinen ääressä äkäinen säkä tähkä ässä värjätä värittää kääriä</Line>
+ <Line>kähertää käämi känsä käärepaperi helähtää käki käsi säilä sää mää bää</Line>
+ <Line>ääri räävi eräs erä metsä eläkeläinen päärme käärme äkseerätä älähtää</Line>
+ <Line>tämä täällä tässä määkiä mäkäräinen närästää nähdä älähtää kätevä</Line>
+ <Line>kääriä kääreessä äärellä käsitellä tärkeä täsmällinen päärme päärmätä</Line>
+ <Line>hävitä hävetä ällitälli täsmällinen kädellinen jämä jämähtää jäte jää jäät</Line>
+ <Line>määränpää päämäärä määrätä kääriä väärä värjätä värittää kädellinen</Line>
+ <Line>sääret säärintama sääliä säälittävä rämäpää päämäärä määrätä älähtää</Line>
+ <Line>äiti äimistellä älä kälättää kierrättää täsmällinen terävä väärä vierittää</Line>
+ <Line>hämärä häämatka älähtää lällällää lällättää metsästää mieltää mieleltään</Line>
+ <Line>äidin kääriä kieriä äimistellä tähkä tähkäpää ässä tässä täsmä täsmällinen</Line>
+ <Line>tähti tähdellinen tärinä kärpänen käskeä kähmiä käämi kääre kiire</Line>
+ <Line>räätäli rähjätä rähinä tärinä pärinä nätti jääräpää käsitellä kärjistää</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yzö</NewCharacters>
+ <Line>y y y y yyyy yyyy yy yy yyyy yy yyyy y y y y yy yyy yyyy yy y yyy y yyyy</Line>
+ <Line>z z z z z zz zz zz zzz zzz zzz zzzz zzz zz z z z z z yz yz yzyz yzyz yz zyyz</Line>
+ <Line>ö ö ö ö öö öö öö öö ööö ööö ööö öööö öööö ööö ööyy yyöö yöyö zyöz zyöz</Line>
+ <Line>syö työ öljy työntää örveltää örähdellä yllätys työläs tyypillinen jyrä</Line>
+ <Line>ryövätä ryöväri syöveri syötävä syömäri säröillä ääretön öljy öhöm tyrä</Line>
+ <Line>käytävä väylä törmätä työmaa työmies hyötykäyttö hyvä hyötytarha</Line>
+ <Line>hyödyllinen hyöty syömälakko työtön työllisyys kylvötyö öljytty pyörähtää</Line>
+ <Line>ystävällinen bazz bizz izzy käyskennellä käytävä käytös työpäivä</Line>
+ <Line>väläyttää käryttää kääryle jyrätä syynätä kyykäärme säärystin päärynä</Line>
+ <Line>älymystö älynystyrä kyynärä säynävä näyttävä näytelmä nyörittää pyörä</Line>
+ <Line>kyhmy tyhmyri kysta täysikuu täydennys pöytäliina syötävä hyytelö hörhö</Line>
+ <Line>törmäys tärinä täysi kädellinen käsitys täydennys kärsimys mysli</Line>
+ <Line>mysteeri myllerrys myllertää myönnytys nyöntää työntää työntäyteinen</Line>
+ <Line>syys syyskuu syli syöpä syöpäläinen kylmä kylmäkiskoinen kyynärä</Line>
+ <Line>kysymys kyynärpää kylmäkiskoinen syötävä syömäri yömyöhä myötä</Line>
+ <Line>myötäpäivä pyytää pyöräillä kytätä kylmäkiskoinen öljymäki öljytä yötyö</Line>
+ <Line>ystävällinen yrmy kyhmy ryömiä työmyyrä mäyräkoira käsikähmä ääri</Line>
+ <Line>pääri määritellä myönnytys sääri pyöräillä pyrähdys pyörähdys pöytä</Line>
+ <Line>tietyömaa käskyläinen pääskynen pärjäily värinä päästäinen päävärit</Line>
+ <Line>punainen sininen keltainen välivärit vihreä oranssi ruskea pastellivärit</Line>
+ <Line>vaaleanpunainen vaaleansininen vaaleanvihreä täsmällinen työmyyrä</Line>
+ <Line>ystävällisyys syksy talvi kevät kesä kyynärä kyöpeli hyötykäyttö sääty</Line>
+ <Line>vyötärö vyötiäinen ärjähtää kyynärä kypärä käyskennellä täydellinen</Line>
+ <Line>öylätti löyly löylykippo kytätä kyykäärme syömäpuikot työpäivä yksi</Line>
+ <Line>pysti yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän</Line>
+ <Line>kymmenen yksitoista yhdestoista kytätä käsitys käskennellä käärme</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>Anna Anastasia Aaro Barbara Bart Bernard Cecilia Charlot Chad Desiree</Line>
+ <Line>Daniel Dick Erja Eero Elvis Faruk Filemon Fiona Gabriel Gabby Gideon</Line>
+ <Line>Heikki Hanna Hilkka Iiro Irja Ilmari Jaana Janne Jouni Kaarina Kaapo</Line>
+ <Line>Kerttu Lauri Lotta Lyly Mirjami Monica Mauri Nyyrikki Nicky Niko</Line>
+ <Line>Ohto Orvokki Ossi Paavali Pauliina Päiviö Rafael Rudolf Ruben Sverker</Line>
+ <Line>Sven Sylvester Tage Torgny Theodor Ulf Uuno Ulrika Valdemar Väinämö</Line>
+ <Line>Vieno Wilhelmiina Wellamo Werneri Yngve Yrjö Yvonne Xenobia Xerxes</Line>
+ <Line>Xanadu Zowie Zacharias Zeppo Åke Åsa Ågot Ärjylä Äijä Äyräpää Öjvind</Line>
+ <Line>Örjan Östen Adlercreutz Ahlroos Aho Backman Berghäll Böstman Calas</Line>
+ <Line>Collander Chalyquinn Degerholm Doughan Dufva Eazaz Eerola Efrat</Line>
+ <Line>Fabert Fagerström Feldt Galetzky Gates Grönroos Haapalehto Hytönen</Line>
+ <Line>Häggblom Itälä Ivanoff Iwendorff Jäynäs Jäätteenmäki Jörgensen Kaabar</Line>
+ <Line>Kyllönen Könönen Lyyra Läykki Lääperi Maltzew Mäkäräinen Mölsy</Line>
+ <Line>Nykänen Nyqvist Näätänen Oravisto Ostroff Oyer Paader Packalen</Line>
+ <Line>Pöysti Qvanström Qvick Qvist Raade Riley Räsänen Salmi Szilvay Seger</Line>
+ <Line>Tanskanen Tyynelä Tähtinen Udd Uhlenius Uosukainen Vapaavuori Vuori</Line>
+ <Line>Vörlin Wahlberg Westberg Wäre Xerox Xue Xavier Ylenius Ylönen Yusuf</Line>
+ <Line>Zetterström Zucca Zeus Åberg Åbo Åström Ärölä Äyräpää Ämmälä Öberg</Line>
+ <Line>Österman Öörni</Line>
+ </Level>
+ <Level>
+ <NewCharacters>piste ja pilkku</NewCharacters>
+ <Line>. . . . . . . . . , , , , . , . , .. ,, .. ,, .,., ., ., ,. ,. ,. . . . . . . . ... ... ... , , , ,, ,, ,, .... ...</Line>
+ <Line>Muista käyttää pistettä aina lauseen lopuksi. Pisteen jälkeen on aina välilyönti. Lause alkaa aina isolla alkukirjaimella. Lause on yksi asia. Kirjoitan sinulle nyt muutaman esimerkin. Ulla ui. Uiminen on Ullasta hauskaa. Ainolla on aurinkoinen hymy. Aamu alkaa aamiaisella.Minä olen viisas kissa. Minä olen Sisu. Sano aa. Sano a. Sano apina.</Line>
+ <Line>Aasi ui. Susi ui. Sisu ui. Ullakon ovessa oli lappu. Alisa luki lapun</Line>
+ <Line>Runoissa käytetään välimerkkinä usein pilkkua. Seuraava runo on kopioitu Salaisesta aapisesta.</Line>
+ <Line>Joutsenen hoito</Line>
+ <Line>Näin näin näitkö sen,</Line>
+ <Line>linnun lennon valkoisen.</Line>
+ <Line>Ilmaa alla siipien,</Line>
+ <Line>joutsenen, niin, joutsenen.</Line>
+ <Line>Ee ee etelään,</Line>
+ <Line>etelään lennetään.</Line>
+ <Line>Uupuu voima siipien,</Line>
+ <Line>joutsenen, niin joutsenen.</Line>
+ <Line>Oo oo onnea,</Line>
+ <Line>onnea on matkalla.</Line>
+ <Line>Linnun siiven hoitelen,</Line>
+ <Line>jousenen, niin joutsenen.</Line>
+ <Line>Lee lee lempeä,</Line>
+ <Line>lempeä on käpälä.</Line>
+ <Line>Hellä hoito siipien,</Line>
+ <Line>joutsenen, niin joutsenen.</Line>
+ <Line>Nyt olet harjoitellut kaikki kirjoituksen merkit, niin isot kuin pienetkin kirjaimet. Vielä voit harjoitella numerot ja muut merkit. Opettajasi varmaankin seuraavaksi neuvoo sinua käyttämään @-merkkiä ja tavuviivaa. Samalla on hyvä opetella jokin tekstinkäsittelyohjelma. Onnea kirjoitustaidollesi ja voitkin pyytää nyt opettajaltasi todistus kymmensormisjärjestelmän osaamisesta.</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/french.ktouch.xml b/ktouch/training/french.ktouch.xml
new file mode 100644
index 00000000..1c1b7efb
--- /dev/null
+++ b/ktouch/training/french.ktouch.xml
@@ -0,0 +1,932 @@
+<KTouchLecture>
+ <Title>French (auto-generated)</Title>
+ <Comment>Trainingfile generated Mon Oct 1 08:14:15 2001
+Program written by Håvard Frøiland
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>jf fjf fj fj jf jfj fjf fj fjf jfj jfj fj</Line>
+ <Line>fjf jfj jf jf fj fj jfj fj jfj fjf jfj jf</Line>
+ <Line>jfj jfj jfj jfj jf fjf jfj jf fj fjf fj jfj</Line>
+ <Line>jfj jf fjf fj jfj fj jfj jf fjf fjf jf jf</Line>
+ <Line>jfj jf jfj jfj jfj fj jf fjf jfj jfj jfj jfj</Line>
+ <Line>fjf jf jf jf fjf jfj fjf fj jfj fj jfj jfj</Line>
+ <Line>jfj jf jf fj fjf fj fj fjf fj jfj jfj jf jf</Line>
+ <Line>fjf fjf jf fjf fj jf jfj fj jf jfj jf fjf</Line>
+ <Line>jf fj jf jfj fjf jf jf jfj jf fj jfj fj fjf</Line>
+ <Line>fj fjf jfj fjf jfj fjf jfj jfj jfj jf jfj</Line>
+ <Line>jfj jfj fj jf jf fj fjf fj fjf fjf fjf jfj</Line>
+ <Line>fjf jfj fj jfj fj jfj fj jfj jf jfj jfj jfj</Line>
+ <Line>fjf fj fj fj jf fj fj jfj jfj jfj jfj jfj</Line>
+ <Line>fjf jfj jf jfj fj jfj jfj jf fjf jf jfj jf</Line>
+ <Line>jfj jf jfj jfj jf jfj jfj jfj fjf jf jf fjf</Line>
+ <Line>jfj jfj jfj fj jfj jfj fj fjf jf jfj jf fj</Line>
+ <Line>fj jfj fj jf jf jf jf jf fj jf jf fj jfj jfj</Line>
+ <Line>jf jf jfj fj fjf fj fjf fj fjf fjf fjf jfj</Line>
+ <Line>fj fjf fj jfj jf fjf jfj fj jfj jfj jfj jf</Line>
+ <Line>jfj fjf jf jfj jfj fjf jfj jf fjf fj jfj jfj</Line>
+ <Line>fjf fj jfj fj jfj jfj fj fj fj fjf jfj fj</Line>
+ <Line>fj fj fjf fj fjf jf fj fj fjf jfj jfj fjf</Line>
+ <Line>jf fj jfj jfj fjf jfj jfj fj fjf fj fjf fjf</Line>
+ <Line>jfj jf jfj jf fjf jfj jfj jf jf fj fj jfj</Line>
+ <Line>fj fjf fj jf jf jf fjf fj jfj fjf jf jf jf</Line>
+ <Line>jfj jfj jfj fjf jf jfj jfj jf jfj fjf jfj</Line>
+ <Line>fj fj jfj fj jfj jf fj jfj fjf jfj jfj jfj</Line>
+ <Line>fjf fjf jf jf fj jf jf jfj fjf fjf fj fj fjf</Line>
+ <Line>jfj jfj jfj fj fjf fjf fjf jfj jfj jf jfj</Line>
+ <Line>fjf fj fj jfj jfj jf fj jfj fjf jfj jfj jf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>mq</NewCharacters>
+ <Line>qmq qmq qmq qm qm mq qmq mq mm mqm mm qm qm</Line>
+ <Line>qmq mm mq qm mm mqm mq qm qmq mqm mq mm mm</Line>
+ <Line>qmq qmq qm mq mm mm mm mqm qm qm mqm mm mqm</Line>
+ <Line>mqm mqm mqm qmq qmq mq mqm mm qm mqm qm mqm</Line>
+ <Line>qmq mq mm mm mq mm mqm qmq mq qmq qmq mq qmq</Line>
+ <Line>mq qm mm qmq qm qm mq qmq qmq mm qm mm qm</Line>
+ <Line>qm qm qmq mqm qmq mqm qmq qmq mqm mm mqm mm</Line>
+ <Line>qmq qmq qmq qm qmq qm mqm mq qm mq qm qmq</Line>
+ <Line>qm mm mqm mq qm qm mqm mqm qmq qm mq qm mm</Line>
+ <Line>mm mm qm mm qm qm mqm mm mm qmq qmq qm mq</Line>
+ <Line>mm qmq qm mq qm qmq mq mm mm mqm mq qm mq</Line>
+ <Line>mm qmq qm mq mqm qm mq qmq mq mqm mq mqm mqm</Line>
+ <Line>mq qm mq mqm qm mq mq qmq mq mqm qm qm qm</Line>
+ <Line>qm qmq qm mqm mm qm mq mq qm mqm qm mqm qm</Line>
+ <Line>mqm mm mqm mm qm mqm mq mqm mm mqm mqm mm</Line>
+ <Line>mq qmq qm mqm mm mqm qmq mqm mm qm mqm mq</Line>
+ <Line>mqm mqm mqm mq mm mm qm mqm qmq qmq qm mq</Line>
+ <Line>qm mqm mqm mq mq mq mq qm qmq mqm qmq mqm</Line>
+ <Line>mq mqm mq mq mm mqm qm qm mq qmq qm mq qmq</Line>
+ <Line>mqm mqm mqm qm mm mqm qmq qm mq qmq qm mq</Line>
+ <Line>mm qmq mm qm mqm qm mqm mm mqm mqm qmq mm</Line>
+ <Line>qmq mm mq qm qm mq mq mm mqm mqm qm qm mq</Line>
+ <Line>mm qmq mq qmq mq qm mqm qmq mq mm mq qm qm</Line>
+ <Line>mq mm qmq mm qmq qm mm mm qmq mq mm mm mm</Line>
+ <Line>mqm qm mq mm qm mm qmq mqm mqm qmq qmq mq</Line>
+ <Line>mqm mm mm mqm mq qm qmq mq mm mqm qmq qm qm</Line>
+ <Line>qmq mq qm qmq mm qm mq qm qm mq qmq qm qmq</Line>
+ <Line>mq mm mqm mm mm mm qmq mm mqm mm mq mq mm</Line>
+ <Line>mq mqm qmq mqm mm mqm mqm mq mq mqm mqm qm</Line>
+ <Line>qmq qmq qm mqm mm mq qmq qmq mqm mqm qmq qm</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>kdk dkd km dk km km dk km dk dm kd kd kdk</Line>
+ <Line>km dk kdk kd km km dm kdk kd kdk kdk dk kd</Line>
+ <Line>dk dkd dkd dm dm dm dkd km dk dk kdk dkd dm</Line>
+ <Line>km dkd kd dm dm km dk kdk dm kd kd dm dkd</Line>
+ <Line>dk dk dm kdk dk dk kd dm dk kd dm km km dk</Line>
+ <Line>dm dk km km kd dk dm kd kd dkd dk dkd dkd</Line>
+ <Line>kdk km kdk dm dm dkd dm kdk dm kd kdk km dk</Line>
+ <Line>kdk km kd dk dm dm kdk dkd km dkd dm km dkd</Line>
+ <Line>dm kdk dm dkd dm dk dk dk kd kd dm dm kdk</Line>
+ <Line>km kd dm dkd kdk kdk dk kdk dkd dk kdk kd</Line>
+ <Line>km dk dkd dkd dm dk dkd dk kd kd dk dk kdk</Line>
+ <Line>kdk kdk kdk kdk dk dm dk kdk dm dm km dk kd</Line>
+ <Line>dk km dk km dm kd dm dkd km km km kdk kd km</Line>
+ <Line>kdk dk kd dm km kdk kdk kd km dk kdk dk dk</Line>
+ <Line>dk dm kdk kdk dk dk km dm kd km km dkd dkd</Line>
+ <Line>dkd kdk dm km kd kdk dm dk dk dkd dkd dkd</Line>
+ <Line>km kdk dm kd dkd kd dk dkd dkd km km km kdk</Line>
+ <Line>km dm dk dkd dkd km kd dm km km dm kd km dk</Line>
+ <Line>kdk dk km dm kd dk dm kd km kd kdk dk dkd</Line>
+ <Line>dk kd dk dkd km kd dm dk km dkd kdk dkd kdk</Line>
+ <Line>dk dkd kdk dm km km dk dkd km kdk km dkd kdk</Line>
+ <Line>dkd dkd dm dm dk kd kd kdk km km dkd dkd kd</Line>
+ <Line>dk dk dkd dm dkd dm kdk kd dm kd dm dk km</Line>
+ <Line>dkd dkd kdk dk kd kd dm dm dm kd kd dm dkd</Line>
+ <Line>km km dk kdk dm dkd dkd dkd kdk kd kdk km</Line>
+ <Line>dk dk dm kd dkd dkd dkd kd kd dm kd kd km</Line>
+ <Line>kd kd dm dk kd kdk dm km km kdk km dk dm dk</Line>
+ <Line>dkd kd km kdk dk kd kdk kdk dkd dm kd dkd</Line>
+ <Line>kd dm km dk km km dk dkd dm dk kd dm kd km</Line>
+ <Line>kdk dm kd dk kd km kdk dm dk km dm dkd kd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>sl sls ls ls sls ls lsl lsl lsl sls ls sl</Line>
+ <Line>sls sl sl sls sl sl lsl sl sl sl sl ls lsl</Line>
+ <Line>sl sl sls ls lsl sls sls sl lsl lsl lsl lsl</Line>
+ <Line>sls lsl sls ls lsl lsl lsl sl sl sl lsl lsl</Line>
+ <Line>sl ls ls lsl sls sl sls lsl sls ls ls sl sls</Line>
+ <Line>lsl sls sls sls sls sl ls sl ls sl sl ls ls</Line>
+ <Line>sls sl sls sl sl ls sl sl lsl ls sls sl lsl</Line>
+ <Line>ls sl ls sls ls lsl sl lsl sl lsl ls sls sl</Line>
+ <Line>ls lsl lsl ls ls sl sls lsl lsl lsl lsl sl</Line>
+ <Line>sl lsl sl ls ls sl sl sls sl lsl lsl ls ls</Line>
+ <Line>sls sls ls lsl ls sls ls ls sl sl ls lsl lsl</Line>
+ <Line>lsl sls lsl sls lsl sl sls sl sl sls sls sls</Line>
+ <Line>sl lsl sls sl ls sls ls lsl lsl lsl lsl sl</Line>
+ <Line>lsl lsl lsl ls ls sls ls lsl sl ls sls sl</Line>
+ <Line>sls ls sls lsl lsl sl sls sl ls ls sls sl</Line>
+ <Line>lsl sls ls sls sl lsl ls sl lsl lsl sls lsl</Line>
+ <Line>sls lsl sls ls ls sl sls sls sl ls sls sl</Line>
+ <Line>sl sl sls sls sl ls lsl sl lsl lsl lsl sl</Line>
+ <Line>lsl ls sls lsl lsl sl sls sls sl sl lsl sl</Line>
+ <Line>lsl sl lsl ls sl sls sls lsl lsl ls sls sl</Line>
+ <Line>ls sl sls ls sl sls sl sl sls lsl sl sls sl</Line>
+ <Line>lsl ls sls sl lsl lsl ls ls lsl sl sls sls</Line>
+ <Line>lsl sls sl ls ls sls sl sls sl sl ls lsl sls</Line>
+ <Line>sl sls sls sls ls lsl sls sl sls ls ls sl</Line>
+ <Line>sl sl sl lsl ls ls lsl sls sl lsl lsl ls ls</Line>
+ <Line>sl sls sl sl sl ls lsl lsl sls sls ls sl sl</Line>
+ <Line>sl ls sls sl sl lsl lsl lsl sls lsl lsl sls</Line>
+ <Line>sls sl sl sl sls sls lsl ls lsl ls sls lsl</Line>
+ <Line>ls sls sls lsl sls ls ls lsl ls lsl sl sls</Line>
+ <Line>sls sl sl sl ls sl lsl lsl lsl sl sl sls lsl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ie</NewCharacters>
+ <Line>ie effiles effiles id ifs ides ifs ie il id</Line>
+ <Line>ides il esse ides il id es ides effile ils</Line>
+ <Line>if ils idem idem il elle elle elle effiles</Line>
+ <Line>ie id effiles effiles ie ie if effiles elle</Line>
+ <Line>il effile elles effile if ils idem ils ides</Line>
+ <Line>ides es ides es id ie effiles esses id il</Line>
+ <Line>ils elles effile ifs if effiles if il elles</Line>
+ <Line>ils effile ils esse esses if esse ie esse</Line>
+ <Line>if ifs il esses elle esses effile effiles</Line>
+ <Line>effile ides ides il effile es es effile elle</Line>
+ <Line>il ides ides elle esse ie ifs esses idem id</Line>
+ <Line>es if ils idem id elles elles if id effiles</Line>
+ <Line>if es ides esses effiles effile esses elles</Line>
+ <Line>es elles ils ils esse ie elles if ie il ie</Line>
+ <Line>idem esse es elles effile ides if effiles</Line>
+ <Line>esse id ie ils elle if es ifs effile es id</Line>
+ <Line>elles if if if elle ides if ils elles il esse</Line>
+ <Line>esses esses if ie ides es effiles elles elles</Line>
+ <Line>id if esses ides ides es effiles es ie elles</Line>
+ <Line>ifs elles ie esse effile esse il if esses</Line>
+ <Line>es ils elle ie il idem ie effile effiles effiles</Line>
+ <Line>effiles esse es effile elle effiles idem esse</Line>
+ <Line>esse effiles esse ils if ils ifs ides ils</Line>
+ <Line>effile effile esse esses es esses ils es if</Line>
+ <Line>ie es es effiles elles esses id effile esses</Line>
+ <Line>effiles ides elle id id id esses idem ifs</Line>
+ <Line>id es if ides ie es il esses if es il il id</Line>
+ <Line>id ils ils ie il id id if if es esses ides</Line>
+ <Line>ifs if effile id elles ifs esse esses esse</Line>
+ <Line>il esses ides elle elles esses esse es if</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ur</NewCharacters>
+ <Line>remiser usuelles redise resquilleuse relieurs</Line>
+ <Line>urique relire refermer remises usuels refiler</Line>
+ <Line>relies rediffuser refleurir relieuses rediffuser</Line>
+ <Line>relise usuels remises rude rieurs requises</Line>
+ <Line>remisier relier rudesses russifier rumeurs</Line>
+ <Line>ruer requiems requiems resquilleuse rieur</Line>
+ <Line>reflues relies remise usuelle requiems rues</Line>
+ <Line>reluire rieur refiler relus ruelles refleurir</Line>
+ <Line>redresseur rimes refuses resserres relie relief</Line>
+ <Line>rifler remis ruser ruser referme rifles relique</Line>
+ <Line>relues resquilleuse rifle rieurs resquilleur</Line>
+ <Line>redresser reluquer refermes rifles rieuse</Line>
+ <Line>relis redis rides ruser ruelles relues rue</Line>
+ <Line>remue ruelles resserre ridelle redise relie</Line>
+ <Line>requiems rues ridelle rediffuses relu usures</Line>
+ <Line>rieurs ressers reluise relires refleurir resquilleur</Line>
+ <Line>riser relises risques relise ri ridelles refermes</Line>
+ <Line>remis rires ressemeler russe uses resquilleuse</Line>
+ <Line>redresser resserrer resquilleuse remise relis</Line>
+ <Line>redresseur ur refuser relises usuriers relieur</Line>
+ <Line>redises ris refluer requiers russifier ruser</Line>
+ <Line>rieuses usuelle relieur relieur usures relires</Line>
+ <Line>riser risquer uses relue relues rediffuses</Line>
+ <Line>reliures resquilleurs remisiers remuer ruelle</Line>
+ <Line>rieurs refleurir relire rimeur rediffuse reliques</Line>
+ <Line>rue reliefs rimes relu requis reluquer ridelle</Line>
+ <Line>remuer relieuse ries reliques rudesses relique</Line>
+ <Line>refermes ruisselle refiler russe reliure risquer</Line>
+ <Line>refuser relues relieuse refiles redresse rudes</Line>
+ <Line>remisier ridelle relief ur ressuer risques</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hg</NewCharacters>
+ <Line>glu girelles hideuses glus huisserie gigue</Line>
+ <Line>glu grise gruger huis gigue herse hg huilerie</Line>
+ <Line>heure greffeurs guise gel geler griefs hurleurs</Line>
+ <Line>hies guerriers gifler gemme geler hideuse</Line>
+ <Line>grises huisseries gifles huiliers huileuses</Line>
+ <Line>gemmer huisserie herser greffiers grimer grille</Line>
+ <Line>humide hume glus grille grille gris grigris</Line>
+ <Line>gifle greffe gifle gigue humide geler grilles</Line>
+ <Line>humes gril huissiers griffures grise hues</Line>
+ <Line>huilerie huilier greffier grille gueuler griffus</Line>
+ <Line>grils glisses germes hideuses hurle herses</Line>
+ <Line>hl griller heureuses gueuse griefs grues hurleurs</Line>
+ <Line>huiliers gemmer grilles huileries gigue heureuses</Line>
+ <Line>griffure greffes heur huileuse grumeler guerriers</Line>
+ <Line>huissiers gifler gigue grues glisse huiler</Line>
+ <Line>griffe hululer griffures griffus hl humes</Line>
+ <Line>griller guerres huiles griffes humilie grille</Line>
+ <Line>griser huiliers guerres hg humides hululer</Line>
+ <Line>griffures huilier gemme gemme germe huissiers</Line>
+ <Line>griller hideuse gifle humeur gril griffe glisser</Line>
+ <Line>humer gigue grumeleuse gemme grils gel germe</Line>
+ <Line>hurler hululer greffeur humus humeurs huilerie</Line>
+ <Line>hurleurs hier humilies hideuses humes greffer</Line>
+ <Line>humilies grise guerres grumeleuses guerrier</Line>
+ <Line>heureuses greffiers humidifie griffe greffe</Line>
+ <Line>griffues greffeur grumes grumeleuse gris humide</Line>
+ <Line>germe huis guerrier gifle huileuse hier heures</Line>
+ <Line>guides grimer gril gruger hue gueuse griffue</Line>
+ <Line>grigris gueuler grils huileuse guerres huilerie</Line>
+ <Line>hurleur girls gifler grues guerrier huileuse</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nb</NewCharacters>
+ <Line>nuis building bis bure nique brimes bruis</Line>
+ <Line>nuises building belliqueuse brusquer brunisses</Line>
+ <Line>bielle brigues nubiles bleue berne bernes</Line>
+ <Line>bulbeuses bielle blinder bile nuises brindilles</Line>
+ <Line>brimes biner bibles bulbe brumer nuis neige</Line>
+ <Line>brefs beurrer biner bilingue nique nu bimensuelle</Line>
+ <Line>bilieuse beurre ne bruisse blinde bridgeurs</Line>
+ <Line>briseur biser brumeuse burin bruines brui</Line>
+ <Line>bimensuel berges buffles belliqueuse bruie</Line>
+ <Line>bridgeuse bergeries buffle belliqueuse bulle</Line>
+ <Line>biner bines nurse biner nuisibles bruire briefings</Line>
+ <Line>brin blinder brun bibliques brumeuse brus</Line>
+ <Line>berges brus nuque beugler biser bure nerf</Line>
+ <Line>bleuis briefings bruine briseurs bruie bru</Line>
+ <Line>nubile bd bisques bu nuise briseuse bimensuelle</Line>
+ <Line>brise nids brunis bleuies bridgeuses briseuses</Line>
+ <Line>briser nuques bises nul burlesques bille belliqueuses</Line>
+ <Line>bluffs belle belles bien brique briffer bluffeuses</Line>
+ <Line>biser nie bible buses brisures brime brunis</Line>
+ <Line>bimensuelles bibliques bifurque bille bisque</Line>
+ <Line>briefing bien briguer brunisse brun brun bel</Line>
+ <Line>bd bilingue biner brins bille bridger bleues</Line>
+ <Line>burlesque blesse nuque beiges brindilles brider</Line>
+ <Line>briseur brus bleue blesses nihilisme briffer</Line>
+ <Line>nubiles bleuir bimensuelles nuisible biser</Line>
+ <Line>bleue berniques brusquer briquer brises nuire</Line>
+ <Line>brumes bines buse nurses bris bienheureuse</Line>
+ <Line>nie nb biffe bilingues bifurque berline bridger</Line>
+ <Line>bruns bridger bleuies briseuses brins buriner</Line>
+ <Line>buis belges bridgeur brefs brunie nuisibles</Line>
+ </Level>
+ <Level>
+ <NewCharacters>vi</NewCharacters>
+ <Line>immeuble vengeur individuel imbues vienne</Line>
+ <Line>vieillesse vieillies vivrier vernisses veineuses</Line>
+ <Line>indien infini vide infime vendus visuelles</Line>
+ <Line>verbeuses ivres invendu infime insigne viriliser</Line>
+ <Line>indivis ils verdisse venimeuses immeuble immuniser</Line>
+ <Line>insurger infirme vermeille infirmeries imbu</Line>
+ <Line>venelles innerver ville verdir imbue verves</Line>
+ <Line>verdie vilenies vieillir vigueur indique visible</Line>
+ <Line>insuline verser visibles vienne injurieuse</Line>
+ <Line>veiller vineuse vieillis inique insensibilise</Line>
+ <Line>irrigue illisible veines imbibes visqueuse</Line>
+ <Line>indiques injurier indemniser venges issue</Line>
+ <Line>vessies immense vis innerver viveur vienne</Line>
+ <Line>immerges injurieuses indu vivre vendeuse injure</Line>
+ <Line>viriles indien verdi vermeilles verseurs venges</Line>
+ <Line>immeuble vieille ibid inhumes invendus veuves</Line>
+ <Line>indivises injurieuse viens insubmersible ils</Line>
+ <Line>indigner veneurs vieller irrigue verves vengeurs</Line>
+ <Line>virus vif inhumes verreries indigner vivier</Line>
+ <Line>verbeuses venges velus indemnise velu versifier</Line>
+ <Line>velue villes indemnises venimeuses inversible</Line>
+ <Line>infime vilenie indues vif influes verse vendre</Line>
+ <Line>insuline ivre vessies venues veiner visse</Line>
+ <Line>insuffles veinule vermeil infliger vers invendus</Line>
+ <Line>veiller vrilles vendue insubmersibles veulerie</Line>
+ <Line>venus veules insidieuses viriliser velue indigne</Line>
+ <Line>vendre indigne verdure induise ignifuge verbeuse</Line>
+ <Line>insinues insubmersible viseurs veineuses verreries</Line>
+ <Line>vermeilles vrilles innerver vrilles velue</Line>
+ <Line>vilebrequin insigne influer vermeil inversibles</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cp</NewCharacters>
+ <Line>persifle perse cheminer pures ce permissives</Line>
+ <Line>cf crue cule publies cru pneu cerf civiques</Line>
+ <Line>chiffreurs penche cil crique peuplier pendre</Line>
+ <Line>pies pileuse cendre pupilles clip chefs chique</Line>
+ <Line>presse percluse premier chier cliver permise</Line>
+ <Line>censeurs cierges celer cuirs pleuve chlinguer</Line>
+ <Line>perses pensums pleurer perruches prieur clicher</Line>
+ <Line>peurs peine pelucheuse peu peluche plisser</Line>
+ <Line>pure pures cercle prime penseur crispe crucifier</Line>
+ <Line>pilles pingre pend chevilles pins chiner crises</Line>
+ <Line>chevelu clefs persil cerise ceindre culmines</Line>
+ <Line>pulpes puises ch plumier peignes puisses pleines</Line>
+ <Line>clins cueillis cidreries culminer puer cursif</Line>
+ <Line>persifleur presser creuse crisse cr pires</Line>
+ <Line>cribler plis cibler chimiques celles penche</Line>
+ <Line>cuisses cire cimes peser cursives prescrive</Line>
+ <Line>cellier cf cessible pudeurs cendres curling</Line>
+ <Line>chirurgie piper cupule prescris perses chiffre</Line>
+ <Line>puisque cerise chemiserie culminer clefs cuiller</Line>
+ <Line>cidrerie prives perdue peler chemises perdues</Line>
+ <Line>cuis chiquer perses plumiers pendes pierres</Line>
+ <Line>pullule prieures presser curseur perfide pucelles</Line>
+ <Line>pressens piges cursifs cessible peuplier pucelles</Line>
+ <Line>pied chevelures prend presse cuis princesses</Line>
+ <Line>pernicieuses cc ciseleur principes pends chevelus</Line>
+ <Line>pendus cliniciens pressure peureuses purifie</Line>
+ <Line>pincer perdes perfidies crises purin pellicule</Line>
+ <Line>celles ciseleurs prunelles pelucheuses perces</Line>
+ <Line>cueillie cercles pressurise cure pressure</Line>
+ <Line>crieuses piliers cheminer celui puisque cerfeuils</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yt</NewCharacters>
+ <Line>tics titube triture teneurs truelles yt tentures</Line>
+ <Line>ternis tintements ternie tripier tribunes</Line>
+ <Line>truquent teste treille tresse teintes terril</Line>
+ <Line>tuteurer truisme ternie timides tel tuner</Line>
+ <Line>test tutelles terrir testeurs terrienne temple</Line>
+ <Line>titubent tienne ternit teinture terril tunisienne</Line>
+ <Line>teinture testes triplent turbulent tilleuls</Line>
+ <Line>tierces terril turpitudes terreuses tigresses</Line>
+ <Line>turbulente tirent turcs tritures triquer tels</Line>
+ <Line>tuteurer tumeurs tricycle tertres tireurs</Line>
+ <Line>teckel tireuses trente trempes tunnel trusts</Line>
+ <Line>teinturerie titrer tek terrestre ternis treillis</Line>
+ <Line>turlupiner tuile trimestriellement tergiverser</Line>
+ <Line>tics truculence tildes teindre terminer tu</Line>
+ <Line>trier techniquement tigresse tricheurs truismes</Line>
+ <Line>triture testicules tient trembles tels turques</Line>
+ <Line>turbulences tinter terrils tuilerie techniciennes</Line>
+ <Line>turent timidement truculente tisseurs testicules</Line>
+ <Line>terrifies triptyques teinturiers treuil terrier</Line>
+ <Line>titrer tut te trichent ternirent trucs trembles</Line>
+ <Line>tint tertres typiquement tripiers tempes tunisiens</Line>
+ <Line>terrisses tubes triperies teintes thermes</Line>
+ <Line>tendresse trichent techniquement tierce tenues</Line>
+ <Line>trinquer thermes type tenter teintes treilles</Line>
+ <Line>tirettes trimestriellement tumeur titiller</Line>
+ <Line>temples timbrer tests tuber tumultes tuiler</Line>
+ <Line>tendrement tiers typiquement thermies tricherie</Line>
+ <Line>terrifies telluriques trimestres termites</Line>
+ <Line>teindre trimer trimestriel tintements ternissent</Line>
+ <Line>trustes titubent trier terris tic tente titres</Line>
+ </Level>
+ <Level>
+ <NewCharacters>où</NewCharacters>
+ <Line>oblongue onduleuses offenserons omettrons</Line>
+ <Line>overdose obtention omnipotence ornithologie</Line>
+ <Line>orties ornithologiste offusquer observons</Line>
+ <Line>objecteurs outres omnipotente obscurcissons</Line>
+ <Line>obtuse omit onduleront offriront ogresse omnipotents</Line>
+ <Line>obstruent oiseliers obliquerions occupions</Line>
+ <Line>officiers origines oiseleur obnubiler obscurcirons</Line>
+ <Line>offensons offset onduler oenilisme optes offenserons</Line>
+ <Line>oserions opinion oblong opteront omise offerts</Line>
+ <Line>oiselet ouvriers orientes offertes odieuses</Line>
+ <Line>occupes obtenions ouvrier occultons oublies</Line>
+ <Line>occulte oh ou oppresserons occiput ormoies</Line>
+ <Line>onguents omettront oseille obstruerons orgie</Line>
+ <Line>odieuse ongle ornement obscurcis ondine obligerions</Line>
+ <Line>orientrice opticien obscurci opposerons outils</Line>
+ <Line>oublient offenseur olympiennes omettront occiput</Line>
+ <Line>obturerons obtenue octobres oserions ohms</Line>
+ <Line>oiseuse optionnel oignons oreillon oie optimiste</Line>
+ <Line>oedipiennes ombres omnisciente objet obtiendrions</Line>
+ <Line>oenologue omnisports omis ordonnes obnubileront</Line>
+ <Line>obscurcirent ordurier oignon octogones ouverture</Line>
+ <Line>obtenons outil osier osciller or orneront</Line>
+ <Line>ouvrier opposer offrir obturent ohm ogresse</Line>
+ <Line>opprimer orchestres obtiendront obstructionnistes</Line>
+ <Line>oniriques opulent où olympiens oppositionnels</Line>
+ <Line>opinons oh omnidirectionnel offenserions obscurcissons</Line>
+ <Line>ostensible opprimerions obsession olympiennes</Line>
+ <Line>oppriment omnipotence onduleuses observerions</Line>
+ <Line>objecter octroyons oubliettes obstinons orientrice</Line>
+ <Line>officiellement obtenus onduleuse omettrons</Line>
+ </Level>
+ <Level>
+ <NewCharacters>az</NewCharacters>
+ <Line>algorithmique abonnerions admirassions alignassions</Line>
+ <Line>articulant astreindrai arraisonnas acculturerions</Line>
+ <Line>allaiterai accoleras agencerons appareillaient</Line>
+ <Line>attendrirez abstiendrons aiguillerez aviserais</Line>
+ <Line>alimentaient agglutinait antilopes algorithmes</Line>
+ <Line>autoroute actionnaire attesteriez abaissons</Line>
+ <Line>admettrons argumenterai affectionne altruistes</Line>
+ <Line>aventuraient averti amputant approvisionnasse</Line>
+ <Line>affermiraient alliions accusait accolades</Line>
+ <Line>abondions attendrisses allumerais assiste</Line>
+ <Line>assagira assombririons aspirerez attitudes</Line>
+ <Line>aiguilleter adonnons approprieriez affermirai</Line>
+ <Line>assommiez ainsi aiguiserait affranchirai apache</Line>
+ <Line>appareillera assemblerai atteindrai accoua</Line>
+ <Line>assainissement apprivoisaient abandonnait</Line>
+ <Line>accouderai accouchas appropriant asseyiez</Line>
+ <Line>amalgame acclimateriez augmentasses avirons</Line>
+ <Line>avoisinais allumions affairerez accentues</Line>
+ <Line>apercevons apache accumulassiez aveuglants</Line>
+ <Line>attirera accidentels austral alunissiez aplatiront</Line>
+ <Line>accentuaient aplatisses alerte aquarelliste</Line>
+ <Line>assouplissaient annoncerait avalerait ahurisses</Line>
+ <Line>ancien assembliez aurez authentifiaient affronterez</Line>
+ <Line>atouts assailliraient accointances amincissions</Line>
+ <Line>aubades asiatique avaliserais approvisionnasse</Line>
+ <Line>acuponcteurs agenouillez accueillerons agenouilleront</Line>
+ <Line>angoissasses appareillera achalandai actionneraient</Line>
+ <Line>abdiqueras affolerions anticonstitutionnelle</Line>
+ <Line>acculons absorba abjurais amenuisassions augures</Line>
+ <Line>aiguisons assentiment additionnais anglophones</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wx</NewCharacters>
+ <Line>watt wallons watts whiskies wagon wallons</Line>
+ <Line>wx watt whiskies warranter wagonnet xylophone</Line>
+ <Line>wagonnet wallons wallonnes wagonnet watt wallon</Line>
+ <Line>waters wallonne watts wagon wallonnes wallonne</Line>
+ <Line>wagonnet xylophones whisky xylophone watt</Line>
+ <Line>wallonnes xylophones xylophone wx wx wx wx</Line>
+ <Line>xylophone watt watt wx wagonnet wallonne xylophones</Line>
+ <Line>wallonnes whisky wallons wallon watts wallonne</Line>
+ <Line>wagon xylophones xylophone wallonnes wallons</Line>
+ <Line>whisky wallon wagonnet warranter wagons wallonne</Line>
+ <Line>xylophones wagonnets whisky xylophones whiskies</Line>
+ <Line>watts wallon watt whiskies warranter watt</Line>
+ <Line>xylophones wallonnes warranter xylophone waters</Line>
+ <Line>wallonne wagons wallon wagon wallonne waters</Line>
+ <Line>xylophone warranter watts whiskies watts wallons</Line>
+ <Line>xylophone xylophones whisky wallonne watt</Line>
+ <Line>warranter wagonnets wallonnes watt watt wx</Line>
+ <Line>wallonnes wallonne watt xylophone warranter</Line>
+ <Line>wagonnet wagonnet wagon wagon wagon wallon</Line>
+ <Line>wagon wagonnet wallonnes wallons whiskies</Line>
+ <Line>whisky wx wagons whiskies xylophone whiskies</Line>
+ <Line>wallonne watts wagon whiskies wallonne wallonnes</Line>
+ <Line>wagon wagons wallonnes wallonnes wx wx wallons</Line>
+ <Line>wagonnet wallonne wagons wagonnet wagonnet</Line>
+ <Line>wallonne wagonnets wagonnet wallonnes watts</Line>
+ <Line>wagons watts warranter wagons wallon xylophone</Line>
+ <Line>wagonnets xylophone watts wallonne wallons</Line>
+ <Line>wagons wx wx wagons waters wagon wagonnet</Line>
+ <Line>waters wagon waters watt wagonnet wallons</Line>
+ <Line>wallonne wallonnes waters xylophones wallon</Line>
+ </Level>
+ <Level>
+ <NewCharacters>JF</NewCharacters>
+ <Line>Florient Jobin Jacquelin Foisy Japon Jones</Line>
+ <Line>France France Jacques Francine Foisy Fafard</Line>
+ <Line>Jobin Jacquelin Fafard Fourier Jones Frank</Line>
+ <Line>Jobin Forget Jobin Fernand Jackson Jeannine</Line>
+ <Line>Japon Juneau Florient Foisy Foisy Freedman</Line>
+ <Line>Julian Freedman Freedman Jackson John Jacques</Line>
+ <Line>Forget Jupiter Freedman Jill Florient John</Line>
+ <Line>Freedman Jacobsen Fourier France Florient</Line>
+ <Line>Fernet Forget Florient Jamie Forget Jackson</Line>
+ <Line>Jacquelin Fernand Forget Jacobsen Jacobsen</Line>
+ <Line>Jacques Freedman Japon Freedman Juneau Jacques</Line>
+ <Line>Jamie Francine Fernet Jocelyne France Frank</Line>
+ <Line>Japon John Fernet Jocelyne Joynes Fernet Jacquelin</Line>
+ <Line>Foisy Fernand Francine Freedman Frank Joynes</Line>
+ <Line>Jamie Jude Julian Foisy Joynes Jude Jacobsen</Line>
+ <Line>Florient Florient Japon Jacques Francine Fafard</Line>
+ <Line>Jeannine Foisy Fourier Juneau France Japon</Line>
+ <Line>Francine Jeannine Juneau Jacobsen Jacobsen</Line>
+ <Line>Jacobsen Francine Fernet Frank Juneau Jupiter</Line>
+ <Line>Fourier Fourier Jobin Juneau Foisy Joynes</Line>
+ <Line>Freedman Francine Jocelyne Jones Jude Jackson</Line>
+ <Line>Jacques Forget Florient Jackson Fernand Jacques</Line>
+ <Line>Julien Jamie Jeannine John Fourier Florient</Line>
+ <Line>Juneau Florient Japon John Jacquelin Jeannine</Line>
+ <Line>Forget Forget Jeannine Jacquelin France Jamie</Line>
+ <Line>Florient Jones Jude Freedman Jacquelin Jamie</Line>
+ <Line>Frank Julien Foisy Jacquelin France Jacques</Line>
+ <Line>Julien Juneau France Jill Freedman France</Line>
+ <Line>Joynes Jackson John Julien Juneau Jeannine</Line>
+ <Line>John France Jobin Jude Fernet Florient Florient</Line>
+ </Level>
+ <Level>
+ <NewCharacters>MQ</NewCharacters>
+ <Line>Masson Mme Mongenot Mathematica Monique Mike</Line>
+ <Line>Marseille Mireille Minneapolis Mike Matlab</Line>
+ <Line>Mahoney Manseau Marseille Marseille Morissette</Line>
+ <Line>Masson Monique Mme Martin Mme Mike Marseille</Line>
+ <Line>Masson Marseille Monique Mme Marielle Morissette</Line>
+ <Line>Martin Mme Mulhouse Martin Marcoux Morin Marielle</Line>
+ <Line>Monique Marcel Minneapolis Morin Martin Moshe</Line>
+ <Line>Mireille Messier Manseau Maltais Mike Marseille</Line>
+ <Line>Mme Maltais Monique Mme Marseille Masson Mike</Line>
+ <Line>Marcel Mireille Maltais Moshe Marseille Mongenot</Line>
+ <Line>Moshe Martin Morissette Mongenot Mathematica</Line>
+ <Line>Messier Martin Mulhouse Manseau Monique Moshe</Line>
+ <Line>Maltais Marcoux Marcoux Mulhouse Mireille</Line>
+ <Line>Mathematica Martin Mireille Masson Marielle</Line>
+ <Line>Moshe Morissette Matlab Masson Messier Marielle</Line>
+ <Line>Manseau Marcoux Mahoney Mireille Marcoux Morin</Line>
+ <Line>Morin Marielle Maltais Masson Masson Matlab</Line>
+ <Line>Morin Mathematica Marcel Minneapolis Michel</Line>
+ <Line>Morin Messier Martin Manseau Minneapolis Marcel</Line>
+ <Line>Marseille Monique Marielle Matlab Mulhouse</Line>
+ <Line>Matlab Mulhouse Messier Mongenot Maltais Marcel</Line>
+ <Line>Mahoney Mathematica Marcoux Mireille Mulhouse</Line>
+ <Line>Mathematica Moshe Minneapolis Marielle Marseille</Line>
+ <Line>Morin Mireille Mahoney Mireille Marseille</Line>
+ <Line>Marielle Marcel Minneapolis Monique Mme Mahoney</Line>
+ <Line>Mongenot Marcel Manseau Masson Mme Matlab</Line>
+ <Line>Mathematica Mongenot Mahoney Mulhouse Minneapolis</Line>
+ <Line>Matlab Maltais Morissette Mireille Masson</Line>
+ <Line>Morin Morissette Marcel Matlab Michel Minneapolis</Line>
+ <Line>Marseille Martin Mahoney Mahoney Mike Masson</Line>
+ </Level>
+ <Level>
+ <NewCharacters>KD</NewCharacters>
+ <Line>Dionne King Doyon Dodge Dorval Doris Domey</Line>
+ <Line>Dorval Denise Kent Drouin Dominique Dorval</Line>
+ <Line>Doyon Doyon Doyon Dick Kansas Decelles Drouin</Line>
+ <Line>Desjardins Dodge Kuenning Dorval Denis King</Line>
+ <Line>Dominique Drouin Decelles Kent Denise Drouin</Line>
+ <Line>Drouin Dominique Dorval Doris King Doris Dionne</Line>
+ <Line>Dorval King Kuenning Doyon Doyon Dorval Denise</Line>
+ <Line>Denise Kansas Khan Dodge Desjardins Dick Dionne</Line>
+ <Line>Kuenning Dorval Kent Desjardins Decelles Dorval</Line>
+ <Line>Doyon Dick Dick King Drouin Kent Denis Domey</Line>
+ <Line>Domey Dorval Dumoulin Kuenning Doyon Doyon</Line>
+ <Line>Dorval Denise Domey Khan Doris Desjardins</Line>
+ <Line>King Kent Desjardins Dominique Doyon Dumoulin</Line>
+ <Line>Decelles Doris Decelles Dionne Dionne Dionne</Line>
+ <Line>Dionne Dionne Kansas Doris Doyon Drouin Kent</Line>
+ <Line>Khan Desjardins Dick Doris Denis Doyon Dionne</Line>
+ <Line>Dominique Khan Dorval King Khan Doyon Domey</Line>
+ <Line>Dick Doris Khan Dumoulin Doyon Dick Kansas</Line>
+ <Line>Dodge Dionne Kent Dumoulin Khan Kuenning Doyon</Line>
+ <Line>Dumoulin Dodge Doris Kuenning Kent Desjardins</Line>
+ <Line>Dumoulin Doris Doyon Drouin King Dumoulin</Line>
+ <Line>Desjardins Kent Kuenning Doyon Dionne Doris</Line>
+ <Line>Kansas Dorval Decelles Drouin Dorval Disney</Line>
+ <Line>Kansas Dominique Kansas Denise Kent Dionne</Line>
+ <Line>Kent Khan Decelles Dominique Desjardins Desjardins</Line>
+ <Line>Dominique Decelles Kuenning Kuenning Dominique</Line>
+ <Line>Dick Doyon King Dodge Dorval Dumoulin Decelles</Line>
+ <Line>Daniel Daniel Disney Dodge Dumoulin Dick Denis</Line>
+ <Line>Denise Dominique Drouin Doris Disney Kuenning</Line>
+ <Line>Dominique Daniel Kansas Domey Denise Kansas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>LS</NewCharacters>
+ <Line>Lamothe Laval LaSalle Lucie Sorel LaSalle</Line>
+ <Line>Laugier Lavoie Lessard Lapointe Lucie Laroche</Line>
+ <Line>Lachapelle Sirois Ltd Sherbrooke Lapointe</Line>
+ <Line>Sun Stephen Steele Laval LaSalle Sacramento</Line>
+ <Line>Leclerc Longueuil Laval Suzanne Sacramento</Line>
+ <Line>Lepage Lepage Lecavalier Sun Lessard Strasbourg</Line>
+ <Line>Laflamme Steele Sirois Sherbrooke Leclerc</Line>
+ <Line>Leblanc Steele Ltd Lachapelle Lucie Smith</Line>
+ <Line>Laval Smith Lavoie Strasbourg Sun Leclerc</Line>
+ <Line>Lavoie Lepage Letarte Steele Ltd Ltd Strasbourg</Line>
+ <Line>Sacramento Lepage Sirois Sirois Leblanc Laroche</Line>
+ <Line>Sacramento Ltd Letarte Seattle Sherbrooke</Line>
+ <Line>Longueuil LaSalle Leclerc Longueuil Letarte</Line>
+ <Line>Lafontaine Linda Lafontaine Smith Lessard</Line>
+ <Line>Strasbourg Shawinigan Lamothe Letarte Lamothe</Line>
+ <Line>Laval Laurendeau Lamothe Laval Steele Lepage</Line>
+ <Line>Lessard Lafontaine Laflamme Laflamme Laroche</Line>
+ <Line>Sherbrooke Longueuil Sorel Longueuil Laurendeau</Line>
+ <Line>Lessard Soucy LaSalle Laval Louise LaSalle</Line>
+ <Line>Lavoie Lapointe Sorel Louis Soucy Laval Lessard</Line>
+ <Line>Louise Lapointe Ltd Laroche Steele Laval Letarte</Line>
+ <Line>Louise Sun Letarte Sacramento Lamothe Lucie</Line>
+ <Line>Laroche Shawinigan Louise Sun Letarte Lavoie</Line>
+ <Line>Lafontaine Louis Lecavalier Louise Shawinigan</Line>
+ <Line>Laval Laflamme Laval Lepage Lucie Sherbrooke</Line>
+ <Line>Lucie Laugier Stephen Lucie Leclerc Louis</Line>
+ <Line>Laroche Longueuil Sun Leblanc Stephen Steele</Line>
+ <Line>Laugier LaSalle Letarte Seattle Strasbourg</Line>
+ <Line>Lessard Louise Letarte Lessard Ltd Sherbrooke</Line>
+ <Line>Sherbrooke Shawinigan Lecavalier Laurendeau</Line>
+ </Level>
+ <Level>
+ <NewCharacters>IE</NewCharacters>
+ <Line>EDF IMSL IMSL Internet Internet IMSL Ethernet</Line>
+ <Line>Inc Interleaf EDF Internet Inmos EDF IEEE</Line>
+ <Line>Internet IMSL IMSL EDF Inc IEEE Emacs Ethernet</Line>
+ <Line>Europe IEEE Internet Interleaf Isabelle EDF</Line>
+ <Line>Ethernet Inmos Inc Interleaf Isabelle IMSL</Line>
+ <Line>Intel Emacs Internet IMSL Emacs Intel Inmos</Line>
+ <Line>Interleaf Interleaf Intel IEEE Internet Europe</Line>
+ <Line>Inmos Isabelle Europe Isabelle EDF Isabelle</Line>
+ <Line>Internet IMSL Emacs Intel Inc Inmos Emacs</Line>
+ <Line>Inmos Inmos IMSL EDF Isabelle Ethernet Intel</Line>
+ <Line>IMSL EDF Interleaf Europe Intel Interleaf</Line>
+ <Line>Europe EDF EDF Inmos Interleaf Internet IEEE</Line>
+ <Line>Europe IMSL Emacs Internet Interleaf Isabelle</Line>
+ <Line>Interleaf Inmos Isabelle Emacs Ethernet EDF</Line>
+ <Line>Europe Inc IMSL Intel Europe Ethernet Europe</Line>
+ <Line>Interleaf Isabelle Isabelle Intel Isabelle</Line>
+ <Line>Internet Internet Europe Inc Internet Inmos</Line>
+ <Line>IEEE Intel Ethernet Intel EDF Isabelle IEEE</Line>
+ <Line>EDF IEEE Interleaf Intel Interleaf Inc Emacs</Line>
+ <Line>Interleaf IMSL Interleaf Europe EDF Europe</Line>
+ <Line>Ethernet Europe Internet Emacs Intel IEEE</Line>
+ <Line>Interleaf Emacs IEEE Internet Europe Inmos</Line>
+ <Line>EDF Internet Interleaf IMSL Emacs IEEE Inmos</Line>
+ <Line>Intel IEEE Inc Intel IEEE Inmos Intel Intel</Line>
+ <Line>Emacs Emacs Internet IMSL IEEE Inmos Europe</Line>
+ <Line>Intel Interleaf Inc Inmos Emacs IEEE EDF IEEE</Line>
+ <Line>Internet IMSL Europe Internet Intel IMSL Europe</Line>
+ <Line>Inc Ethernet Inc Inc IMSL IEEE Inmos Europe</Line>
+ <Line>Isabelle Europe IEEE Emacs EDF Emacs Ethernet</Line>
+ <Line>Interleaf Europe Ethernet Interleaf Emacs</Line>
+ </Level>
+ <Level>
+ <NewCharacters>UR</NewCharacters>
+ <Line>Roy Utah Rubin Rioux Ringuet Renato Unix Ricard</Line>
+ <Line>Rochefort Rubin Rioux Rioux Rochefort Roger</Line>
+ <Line>Rioux Romano Uintas Ronald Rubin Roger Uintas</Line>
+ <Line>Romano Robert Ronald Riopelle Ricard Robert</Line>
+ <Line>Ringuet Rochefort Robert Unix Roger Riopelle</Line>
+ <Line>Uintas Renato Ronald Roger Roberge Rochefort</Line>
+ <Line>Uintas Rioux Uintas Riopelle Romano RMS Rioux</Line>
+ <Line>Utah Renato Roy Uintas Roy Ronald Rochefort</Line>
+ <Line>Ringuet Romano Rochefort Rioux Roger Roy Uintas</Line>
+ <Line>Roy Rioux Re RMS Re Robert Roberge Roger Uintas</Line>
+ <Line>Utah RMS Riopelle Roberge RMS Romano Riopelle</Line>
+ <Line>Roger Ringuet Uintas Raymond Ricard Ronald</Line>
+ <Line>Roger Ronald Uintas Riopelle Roy Re Roger</Line>
+ <Line>Utah Uintas Ricard Romano Renato Romano Uintas</Line>
+ <Line>Rubin Raymond Re RMS Robert Roy RMS Uintas</Line>
+ <Line>Unix Renato Uintas Romano Raymond Rioux Roy</Line>
+ <Line>RMS Roy Ricard Ringuet Robert Ricard Re Robert</Line>
+ <Line>Roberge Rochefort Rubin Roger Ringuet Roy</Line>
+ <Line>Re Ricard Raymond Raymond Raymond Romano Rioux</Line>
+ <Line>Uintas Uintas Re Ringuet Roger Uintas Rubin</Line>
+ <Line>Roberge Re Raymond Riopelle Roy RMS Ringuet</Line>
+ <Line>Roberge Romano Ringuet Uintas Ricard Roy RMS</Line>
+ <Line>Roberge Re Utah Roberge Raymond Robert Ricard</Line>
+ <Line>RMS Roger Ringuet Robert RMS Ringuet Romano</Line>
+ <Line>Rubin Raymond RMS Rioux Raymond Romano Rioux</Line>
+ <Line>Renato Renato Utah Romano Rochefort Roy Rochefort</Line>
+ <Line>Ronald Rochefort Roger Renato Rochefort Romano</Line>
+ <Line>Uintas Ronald Roger Unix Roberge Robert Re</Line>
+ <Line>Renato Ronald Roberge Rioux Utah Ricard Roger</Line>
+ <Line>Romano RMS Re Roberge Robert Renato Unix Roger</Line>
+ </Level>
+ <Level>
+ <NewCharacters>HG</NewCharacters>
+ <Line>Guy Houde George Georges Hubert Greg Hubert</Line>
+ <Line>Georges Girard Horne George Greg Gregory Gilles</Line>
+ <Line>Georges Hollerbach Goodwin Gatien Gratton</Line>
+ <Line>George Gauthier Harwell GKS Gavrel Gaston</Line>
+ <Line>Greg Hollerbach Gatien Harwell Gilles Guy</Line>
+ <Line>Georges Gaston Gendron George Gagnon Georges</Line>
+ <Line>Houde Geoffray Hubert Gavrel Gentilly George</Line>
+ <Line>Gauthier Hayward Gordon Gratton Gosselin Harry</Line>
+ <Line>Girard Gilles Greg Hubert Girard Gilles Hollerbach</Line>
+ <Line>Georges GKS Greg Gatien George Geoff Gordon</Line>
+ <Line>Hayward Gauthier Horne Guy Gendron Gordon</Line>
+ <Line>Goodwin Goodwin Guy Geoffray Hz Gosselin Gauthier</Line>
+ <Line>Hubert Geoffray Georges Gendron Hz Gavrel</Line>
+ <Line>Gaston Hayward Horne Gavrel Hz GKS Hayward</Line>
+ <Line>Ginette Gendron Houde Geoffray Geoffray Georges</Line>
+ <Line>Harry Hubert Gaston Gentilly GKS Harry Geoffray</Line>
+ <Line>Greg Gordon Geoffray GKS Gagnon Gaston Gratton</Line>
+ <Line>Goodwin Gatien Gregory Georges Gordon Gentilly</Line>
+ <Line>GKS Guy Hz Geoff Gilles Geoff Gosselin Gaston</Line>
+ <Line>Gagnon Horne Gendron Gatien Harwell Gilles</Line>
+ <Line>Gatien Gaston Georges Gosselin Hz Gregory</Line>
+ <Line>Houde GKS Georges Ginette Gagnon Geoff Gaudreault</Line>
+ <Line>Gaston Guy Goodwin Gaston Greg Gratton Gauthier</Line>
+ <Line>Geoffray Hz GKS Horne Gaston Gordon Gavrel</Line>
+ <Line>Gatien Harry Geoffray Geoffray Georges Harry</Line>
+ <Line>Geoff Harwell Harry Hubert GKS Geoffray Hollerbach</Line>
+ <Line>Horne Gendron Gilles Hz Gatien Gatien Goodwin</Line>
+ <Line>Gordon Gaudreault Girard Hollerbach GKS Girard</Line>
+ <Line>Gordon Goodwin Gilles Guy Georges Houde Houde</Line>
+ <Line>Geoff Hubert Ginette Gratton Girard Gentilly</Line>
+ </Level>
+ <Level>
+ <NewCharacters>NB</NewCharacters>
+ <Line>Bousquet Boston BSD Bellemarre Barry Browne</Line>
+ <Line>Brosseau Nelligan Boston Nelligan NFS Bousquet</Line>
+ <Line>Beaulac Bescherelle Nelligan Boston Beaulac</Line>
+ <Line>BSD Bellevue Bourassa Brosseau Beaulac BSD</Line>
+ <Line>Bernard Beaudoin Blais Nestor Boston Bousquet</Line>
+ <Line>Browne Browne Blais Nicole Nelligan Borduas</Line>
+ <Line>Browne Bousquet Bellevue Bousquet Bellemarre</Line>
+ <Line>Beaudoin Bousquet Nicole NFS Brian Bellemarre</Line>
+ <Line>Boston Browne Benoit Borduas Boucherville</Line>
+ <Line>Boyer NFS Nicole Bousquet Beaudoin Bescherelle</Line>
+ <Line>Beaudoin Boucherville Boily Brian Bescherelle</Line>
+ <Line>Bousquet Benoit Borduas Barry Blais Barry</Line>
+ <Line>Nicole Beaulac Boyer Brosseau Nestor Bourassa</Line>
+ <Line>Brosseau Bellemarre Borduas NFS Bourassa Boivin</Line>
+ <Line>Beaudoin Boyer Barry Beaudoin Bourassa Boily</Line>
+ <Line>Nelligan Benoit Nestor Bellevue Boily Bernard</Line>
+ <Line>Bentz Benoit Bellemarre Brosseau Barry Beaudoin</Line>
+ <Line>Brian Browne NFS Boivin Benoit Nestor Browne</Line>
+ <Line>Brosseau Brian Boily Barry Bousquet Boucherville</Line>
+ <Line>Beaulac Browne Bourassa NFS Boucherville Bentz</Line>
+ <Line>Nelligan Brown Borduas Beaudoin Bellevue BSD</Line>
+ <Line>Bescherelle Bescherelle Bernard Brown Nestor</Line>
+ <Line>Boivin Beaulac Bellevue Boivin Bernard Bescherelle</Line>
+ <Line>Bousquet Blais Boucherville BSD Bentz Blais</Line>
+ <Line>Boyer Boivin Boivin Bellemarre Boston Borduas</Line>
+ <Line>Brian Beaulac Boucherville Nagle Benoit Bousquet</Line>
+ <Line>Boyer NFS Boily Brown Benoit Nagle Bernard</Line>
+ <Line>BSD Barry Barry Beaudoin Boyer Nestor Bescherelle</Line>
+ <Line>Bellemarre NFS Nagle Nestor Blais Boucherville</Line>
+ <Line>Bentz Boston Brian Beaulac Brown Bellevue</Line>
+ </Level>
+ <Level>
+ <NewCharacters>VI</NewCharacters>
+ <Line>Vancouver Verville Internet Isabelle Viger</Line>
+ <Line>VLSI Vancouver Verville Vancouver Isabelle</Line>
+ <Line>Vancouver Isabelle Vancouver Intel Inmos Verville</Line>
+ <Line>VME Interleaf Isabelle VHS Interleaf Viger</Line>
+ <Line>Varennes IEEE Interleaf VME Viger Inmos Interleaf</Line>
+ <Line>Interleaf IEEE Isabelle Victoriaville Victoriaville</Line>
+ <Line>Inmos Inmos VME VME VLSI Verville Victoriaville</Line>
+ <Line>VHS Internet Varennes Varennes VHS Viger Vancouver</Line>
+ <Line>Inc IEEE Victoria Interleaf Isabelle Vincent</Line>
+ <Line>IEEE Isabelle Viger Isabelle VHS Viger Isabelle</Line>
+ <Line>VLSI IMSL Viger VME Internet Verville VLSI</Line>
+ <Line>Victoria IMSL IEEE Isabelle Vincent Victoria</Line>
+ <Line>VLSI Interleaf Victoriaville Victoria Vancouver</Line>
+ <Line>Verville Interleaf Viger Verville Isabelle</Line>
+ <Line>Verville VHS Vincent Intel Victoria Intel</Line>
+ <Line>Interleaf Intel Vancouver IEEE Inc Victoriaville</Line>
+ <Line>Victoriaville Verville IEEE Internet IEEE</Line>
+ <Line>Inmos Vincent Viger IEEE Internet Intel VHS</Line>
+ <Line>Inmos IEEE Interleaf Inmos Vancouver Verville</Line>
+ <Line>VHS Isabelle Interleaf Intel VME Victoria</Line>
+ <Line>Interleaf VHS VLSI Isabelle VLSI VLSI Varennes</Line>
+ <Line>VME IMSL Vancouver Victoria Inmos VME VME</Line>
+ <Line>Verville Vincent Vancouver Inmos Intel IEEE</Line>
+ <Line>Internet Intel Internet Inmos Vincent Isabelle</Line>
+ <Line>VME Vincent IEEE IMSL IEEE VME Vincent Intel</Line>
+ <Line>Victoriaville Internet Vancouver Inmos Vancouver</Line>
+ <Line>Interleaf IEEE Varennes Inmos Vincent Isabelle</Line>
+ <Line>Vincent Vancouver Intel Victoria IMSL Isabelle</Line>
+ <Line>Inmos Isabelle VLSI Victoriaville VHS Inc</Line>
+ <Line>Interleaf Inmos IMSL IMSL Varennes Vincent</Line>
+ </Level>
+ <Level>
+ <NewCharacters>CP</NewCharacters>
+ <Line>Phaneuf CPU Corp Corp PostScript Cloutier</Line>
+ <Line>Christian PostScript Provost Poussart Paul</Line>
+ <Line>Paul PERL Phaneuf Christian Cousineau Croteau</Line>
+ <Line>Corp Californie Coulombe Cadieux Cousineau</Line>
+ <Line>Cloutier Christian Cousineau Comeau Colombie</Line>
+ <Line>Christian Provost CCD Chambly Californie PCL</Line>
+ <Line>Phaneuf Cloutier Casavant Paul Cloutier Canada</Line>
+ <Line>Pronovost Paul CCD Chambly Carole Pellan Chambly</Line>
+ <Line>PERL CCD Poussart Cambridge Coulombe Claude</Line>
+ <Line>Claude Charron Californie Paul Charles PostScript</Line>
+ <Line>Corp CCD Provost Phaneuf Claude Christian</Line>
+ <Line>CERN Charles Casavant Californie PostScript</Line>
+ <Line>Papineau Poussart PCL Cambridge Casavant Pellan</Line>
+ <Line>Pennsylvanie PERL Cadieux Chambly PostScript</Line>
+ <Line>Pellan CERN Phil PCL Cloutier Cousineau Pennsylvanie</Line>
+ <Line>PostScript Phaneuf Poussart PostScript Claude</Line>
+ <Line>Charles Pennsylvanie Californie Pennsylvanie</Line>
+ <Line>Charron Croteau Canada Pennsylvanie CPU Chambly</Line>
+ <Line>Colombie Canada PERL CDN Pronovost Poussart</Line>
+ <Line>Casavant Claude Colombie Poussart Cloutier</Line>
+ <Line>Papineau Comeau Pennsylvanie Californie Christian</Line>
+ <Line>CERN CDN Poussart CDN Carole Papineau Chambly</Line>
+ <Line>Christian CDN PostScript Chambly Coulombe</Line>
+ <Line>CERN Californie Charles Pellan Corp Californie</Line>
+ <Line>Comeau Chambly CCD Poussart PostScript Californie</Line>
+ <Line>Pronovost Charron Pronovost Cousineau PostScript</Line>
+ <Line>Phaneuf Cousineau CCD Comeau Phil CDN CERN</Line>
+ <Line>Christian Croteau CERN CDN Paul Carole PostScript</Line>
+ <Line>Californie Pierrefonds CCD CDN CERN Claude</Line>
+ <Line>Papineau Carole Charron PERL Croteau Casavant</Line>
+ </Level>
+ <Level>
+ <NewCharacters>YT</NewCharacters>
+ <Line>Yves Turcotte Tessier TCP Tokyo Tokyo Turcotte</Line>
+ <Line>Tokyo Yvan TCP Yolande Toronto TCP TCP Tokyo</Line>
+ <Line>Todd Yves Todd Thierry Tremblay TCP Tessier</Line>
+ <Line>Turcotte Yves Toulouse Toulouse Turcotte Thierry</Line>
+ <Line>Tremblay Yvan Tanguay Todd TCP Thierry Yves</Line>
+ <Line>Tremblay Tokyo Todd Toulouse Thierry Thibault</Line>
+ <Line>Yvan Toulouse Texas Thibault Todd Tremblay</Line>
+ <Line>Tremblay Thibault Turcotte Texas Texas Tanguay</Line>
+ <Line>Toulouse Thierry Toronto Tessier Turcotte</Line>
+ <Line>Toulouse Tanguay Todd Toulouse TCP Yves Texas</Line>
+ <Line>Toronto Todd Yves Yolande Yolande Thibault</Line>
+ <Line>TCP Tessier Tanguay Yolande Toronto TCP Texas</Line>
+ <Line>Yves Texas Toronto Thierry Todd Toronto Toulouse</Line>
+ <Line>Yvan Thierry Texas TCP Toulouse Texas Thibault</Line>
+ <Line>TCP Yolande Yolande Yolande Todd Thierry TCP</Line>
+ <Line>Tanguay Yolande Toulouse TCP Turcotte Toronto</Line>
+ <Line>Tanguay Thibault Tokyo Toulouse Yolande Yves</Line>
+ <Line>Tessier Yolande Texas Toulouse Yvan Turcotte</Line>
+ <Line>Toulouse Tanguay Tessier TCP Toulouse Toronto</Line>
+ <Line>Yvan Yves Todd Tessier Toulouse Todd Yvan</Line>
+ <Line>Toulouse Thierry Tremblay Yolande Turcotte</Line>
+ <Line>Yves Tokyo Yves Tessier Yvan Tessier Thibault</Line>
+ <Line>Yves Tremblay Thierry Tanguay TCP Turcotte</Line>
+ <Line>Toronto TCP Tanguay Tokyo Tokyo Thibault Thierry</Line>
+ <Line>Tessier Tokyo Tessier Texas Tanguay Thibault</Line>
+ <Line>Todd Tanguay Todd Thierry Turcotte Texas Yolande</Line>
+ <Line>Todd Tokyo Thierry Yves Tessier Thibault Todd</Line>
+ <Line>TCP Thibault Yves Thierry Turcotte Toronto</Line>
+ <Line>Thierry Texas Todd Toronto Texas Yvan TCP</Line>
+ <Line>Yolande Tanguay Tessier TCP Todd Tessier Thibault</Line>
+ </Level>
+ <Level>
+ <NewCharacters>OÙ</NewCharacters>
+ <Line>Ottawa Owen Owen Owen Ottawa Ontario Owen</Line>
+ <Line>Ontario Ouellet Ozias Ouellet Owen Ouellet</Line>
+ <Line>Ottawa Owen Ouellet Ontario Owen Ozias Owen</Line>
+ <Line>Ontario Owen Ottawa Ontario Ouellet Ottawa</Line>
+ <Line>Ouellet Ouellet Ozias Ouellet Ozias Ouellet</Line>
+ <Line>Owen Ozias Ouellet Ottawa Ottawa Ouellet Ouellet</Line>
+ <Line>Owen Ozias Ouellet Ottawa Ottawa Owen Ottawa</Line>
+ <Line>Ottawa Ouellet Ozias Ontario Ouellet Owen</Line>
+ <Line>Ontario Owen Ouellet Ontario Ozias Ouellet</Line>
+ <Line>Ontario Owen Ouellet Owen Ouellet Ouellet</Line>
+ <Line>Ozias Ontario Owen Ouellet Ontario Owen Owen</Line>
+ <Line>Owen Owen Ottawa Ozias Owen Ontario Ontario</Line>
+ <Line>Ouellet Ottawa Ozias Ontario Ottawa Ottawa</Line>
+ <Line>Ouellet Ottawa Ouellet Ottawa Owen Ozias Ozias</Line>
+ <Line>Ouellet Ozias Ottawa Ouellet Owen Owen Owen</Line>
+ <Line>Ouellet Ouellet Owen Ouellet Ouellet Ottawa</Line>
+ <Line>Owen Ozias Ottawa Ouellet Ottawa Owen Owen</Line>
+ <Line>Ontario Ouellet Ozias Ouellet Ouellet Ontario</Line>
+ <Line>Ontario Owen Ouellet Ottawa Ontario Ouellet</Line>
+ <Line>Ontario Ouellet Ontario Ouellet Owen Ontario</Line>
+ <Line>Ontario Ouellet Ouellet Ozias Ouellet Owen</Line>
+ <Line>Ontario Ottawa Ozias Ontario Ozias Ozias Ontario</Line>
+ <Line>Ottawa Ozias Ottawa Ottawa Ottawa Owen Owen</Line>
+ <Line>Ozias Ouellet Ottawa Owen Ouellet Owen Owen</Line>
+ <Line>Ozias Ouellet Owen Ottawa Ozias Owen Owen</Line>
+ <Line>Owen Ouellet Ottawa Ouellet Ottawa Ontario</Line>
+ <Line>Ozias Ouellet Ottawa Ottawa Ottawa Ontario</Line>
+ <Line>Ozias Ozias Owen Ozias Ozias Ozias Ozias Ontario</Line>
+ <Line>Ontario Ottawa Ontario Ontario Ouellet Ozias</Line>
+ <Line>Ouellet Owen Owen Owen Owen Owen Owen Ozias</Line>
+ </Level>
+ <Level>
+ <NewCharacters>AZ</NewCharacters>
+ <Line>AAAI Audy AAAI April AutoCAD Anjou Allemagne</Line>
+ <Line>Alain AAAI Alain Adoncourt Auclair AAAI Audy</Line>
+ <Line>Angleterre Apple ANSI Archibald Amadeus Alfred</Line>
+ <Line>Zawinski Angleterre Archibald Auclair ASCII</Line>
+ <Line>Alain Zawinski Allemagne Alexandria Abbott</Line>
+ <Line>Audy Angleterre Apple Aikin Anjou Amadeus</Line>
+ <Line>Aubertin AutoCAD Anjou Amadeus ASCII Abbott</Line>
+ <Line>Alexandrie Alfred April Angleterre Audy Angleterre</Line>
+ <Line>AAAI Zawinski Angie Abbott Adoncourt Adoncourt</Line>
+ <Line>Archibald Alexandria Audy Apple Apple ACM</Line>
+ <Line>Alfred Allemagne ASCII Archibald Audy ACM</Line>
+ <Line>Abbott Auclair Anjou Angie Alexandrie AAAI</Line>
+ <Line>ASCII Allemagne Amadeus Audy April Zawinski</Line>
+ <Line>ACM Angleterre Archibald Angie Allemagne AutoCAD</Line>
+ <Line>Aikin Anjou Allemagne Alfred Adoncourt Alain</Line>
+ <Line>Alfred Angleterre Archibald Angie ANSI Aubertin</Line>
+ <Line>Apple Anjou Adoncourt Amadeus Amadeus Amadeus</Line>
+ <Line>Adoncourt Apple Alfred ASCII Allemagne Aikin</Line>
+ <Line>Allemagne Allemagne ANSI Anjou Alain ACM April</Line>
+ <Line>Adoncourt Audy Angie Angleterre Abbott ACM</Line>
+ <Line>Alain Allemagne Archibald Alexandrie ACM Zawinski</Line>
+ <Line>Apple Anjou AAAI Archibald Auclair Allemagne</Line>
+ <Line>Anjou ASCII ASCII AAAI Alexandria Auclair</Line>
+ <Line>Alexandrie April AutoCAD Anjou AAAI Anjou</Line>
+ <Line>Adoncourt Allemagne Alexandria Aikin April</Line>
+ <Line>Amadeus Aikin ANSI Alfred Amadeus ANSI Alfred</Line>
+ <Line>ACM Alexandria Auclair AAAI ACM Anjou ACM</Line>
+ <Line>Audy AAAI ASCII Archibald ASCII Adoncourt</Line>
+ <Line>Archibald Anjou Auclair Angleterre Audy Aikin</Line>
+ <Line>April Anjou ANSI ACM Allemagne Alexandrie</Line>
+ </Level>
+ <Level>
+ <NewCharacters>WX</NewCharacters>
+ <Line>Wilfrid Williams Wright Wilfrid Williams William</Line>
+ <Line>Wilfrid Wright William Wilfrid Wright Williams</Line>
+ <Line>Wilfrid Williams Williams Williams William</Line>
+ <Line>Wright Wright Wright Williams Williams William</Line>
+ <Line>William William Williams Wright William Williams</Line>
+ <Line>Wright William William Wright Wilfrid Wright</Line>
+ <Line>Wright Williams Wilfrid William Wright William</Line>
+ <Line>William Wright Williams William Wright Williams</Line>
+ <Line>Wilfrid Wright Williams Williams Wright Wilfrid</Line>
+ <Line>Wright Wilfrid Wright Williams Wilfrid William</Line>
+ <Line>Williams Williams Williams Wright Wright William</Line>
+ <Line>Wright Wright William Williams William Wilfrid</Line>
+ <Line>William Williams Wilfrid Wright Wright Williams</Line>
+ <Line>Wright Williams Williams Wright Wilfrid Williams</Line>
+ <Line>Wilfrid Williams William Williams Williams</Line>
+ <Line>Wright William Wilfrid Wright Wright Wilfrid</Line>
+ <Line>Wright William Williams Wright Williams Wilfrid</Line>
+ <Line>William William Williams William Wright Wright</Line>
+ <Line>William Williams William Wright Williams William</Line>
+ <Line>Wilfrid Williams Wright William William Williams</Line>
+ <Line>Wright William Wright Williams William William</Line>
+ <Line>William Wilfrid Williams Wright Wilfrid Wilfrid</Line>
+ <Line>Williams Wright Williams Williams William</Line>
+ <Line>Wright Williams Williams Williams Wright Williams</Line>
+ <Line>Williams Wilfrid Wilfrid Wilfrid Wilfrid Wright</Line>
+ <Line>Williams William William William Wilfrid Wright</Line>
+ <Line>Williams Wright Wilfrid William Williams Williams</Line>
+ <Line>Wright William Wilfrid William William William</Line>
+ <Line>Williams Wilfrid William Wilfrid William Wilfrid</Line>
+ <Line>Wilfrid Wright Wright William Williams Wilfrid</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/french2.ktouch.xml b/ktouch/training/french2.ktouch.xml
new file mode 100644
index 00000000..00c49fc9
--- /dev/null
+++ b/ktouch/training/french2.ktouch.xml
@@ -0,0 +1,470 @@
+<KTouchLecture>
+ <Title>French (auto-generated)</Title>
+ <Comment>Trainingfile genereated in October 2001
+Program written by Håvard Frøiland
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>ff jf jj jj ff j jf jj jf fj jf fj jf fj ff</Line>
+ <Line>ff fj jj f fj f j f jj f jf f jf ff j fj ff</Line>
+ <Line>fj j fj fj jf ff j jj fj jj jf ff j jf jj f</Line>
+ <Line>ff f ff fj f j fj ff jf f f jf f j ff ff ff</Line>
+ <Line>j fj jf jj fj jj fj f jf ff ff jj j jj fj f</Line>
+ <Line>jf jj f jf ff jj j j ff jf jj ff fj fj ff j</Line>
+ <Line>jf ff jf jj jj ff jf j ff ff fj ff fj jf fj</Line>
+ <Line>j jj j jf j j j fj jf j ff f ff jf jj ff ff</Line>
+ <Line>jj jf jj jf j j fj j f jj f jj f jj f ff jf</Line>
+ <Line>fj j j jj jj fj ff fj jj f f fj f f j jf jj</Line>
+ <Line>fj jj f f ff j ff f ff f ff f f ff fj j f f</Line>
+ <Line>jf ff jj jf fj fj jf jj f fj jj fj ff fj ff</Line>
+ <Line>jj fj f jj jj ff ff jj ff jj f ff jj jf f j</Line>
+ <Line>jj ff f fj j fj j jj j jf j f fj j fj fj ff</Line>
+ <Line>j fj jj f jf fj ff jf jf ff jf f jf fj jj f</Line>
+ <Line>jf jj jf jf j jj j fj f jf jj jj fj jf j fj</Line>
+ <Line>fj jj j jj j ff jj fj j fj f j ff jj f f jf</Line>
+ <Line>fj fj fj j jj j j j ff f jj j j jf ff ff jj</Line>
+ <Line>jj f jj jf jj ff ff ff j jj fj j ff ff ff j</Line>
+ <Line>jf fj f j ff jf jf ff jf j fj jj jj f fj jf</Line>
+ <Line>ff jj j j jf f fj jf j ff ff fj ff jj jf jf</Line>
+ <Line>jf fj fj j f f f fj jf jf j f jf ff fj j fj</Line>
+ <Line>jj jf f ff fj fj j fj jf jj jf j j jj fj ff</Line>
+ <Line>jf ff f jf f jj jj j f ff jj f jf ff jj j f</Line>
+ <Line>jf ff f f jf j fj jj f f f jf jj jj jf f fj</Line>
+ <Line>fj fj fj jf j ff jf jj fj fj fj fj j jj f f</Line>
+ <Line>ff j jf j jj jf jf ff jf jj fj f j jj fj ff</Line>
+ <Line>j j j fj f jj jj jj fj jf j jf j jf fj f fj</Line>
+ <Line>f jf jf j jj j fj fj ff jj jj jj j fj ff fj</Line>
+ <Line>ff fj fj fj jf jf jj jj jj f f f jj j fj jj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>dk d d k k dk dd k kd kk dd dk k dd k kd dk</Line>
+ <Line>kk kk dd k kd kk dd dk kk dd kd dd dk dd kd</Line>
+ <Line>dk dd kk kk dk dk dd dd k dd dk dk kk kk kk</Line>
+ <Line>k dk kd k kk dd dd dk kd dk dk dk dk d dk k</Line>
+ <Line>d kk dk kk dk kd kd dk d kk kd dk kd d kd k</Line>
+ <Line>kd d kk dk kk dk kd kd dd d d dk dk k kk dk</Line>
+ <Line>dd kk kd kd dd dd dd dd kk kd dk k kd dd kd</Line>
+ <Line>dd dd k kd kk kk dd k kk dd k kd dk dk dk k</Line>
+ <Line>k kd kd dk dd k dk dd d kd k dk dk kk dk kd</Line>
+ <Line>dk dk k d kd d dd dk kk dd dd k kd kd kk dk</Line>
+ <Line>dd d k dd kd dd kk kd k dd d dd dk kk dd kd</Line>
+ <Line>k k k dk k d k dd d dk d kd dk dd d dk d kd</Line>
+ <Line>kd kd k k dd dk k d kd kk kk kd dd d dk k d</Line>
+ <Line>dk kk k dd dk kd d kk kk kk kk dd k kk k kk</Line>
+ <Line>k dk d d d k d dk d dd dd d dd kd k dk k dk</Line>
+ <Line>kd kk dd dk dk kk k k dk dk d dd kd k dk kd</Line>
+ <Line>k kk dk kd k kk k k kk k kk d dd dd dk k kk</Line>
+ <Line>dk dd k k d dk dd dk dk kk dd kk kd kd d dk</Line>
+ <Line>d kd k kk kk dk kd d k kd dd d d k kk dk dd</Line>
+ <Line>dd dd d kd kk kk d dk kk kk dd d kk dd d kk</Line>
+ <Line>k kk d kk k k dd kk d dd d kd kk kd kd dk d</Line>
+ <Line>k dk d d kd d dk d dd dk k kk dk k dd kk dk</Line>
+ <Line>d dk kd k kd d k kd d dk d kd d kk kk kk dd</Line>
+ <Line>dd d d dk k dd d kd dk dk kk dk kd kk dk dd</Line>
+ <Line>k kk kd kd d kk kd kk dd d kk kk dk dk dk k</Line>
+ <Line>dk dk kk d kk dk d d k kk dd kk k kk k d dd</Line>
+ <Line>d kd k k k dk dd k dk kk dd d k dk dk dd kk</Line>
+ <Line>kk dk kk kk kk d dk dk kk kk k d dd kd k kd</Line>
+ <Line>kd kd dk d k dd dk d kk kk kd kd kd k dk dd</Line>
+ <Line>dd kd dd kk kd kd k k k dk k d kk kd kd k d</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>ss l s s l ss s ll sl ll s l ss ll l ss s l</Line>
+ <Line>ss sl ll ls ll ss ll ls s ss l ll s ls sl s</Line>
+ <Line>ls sl ll ls sl l s s ll ls ss sl s ls sl ls</Line>
+ <Line>ls l l ll ss ss sl s s ls ls ss ll ll ls ls</Line>
+ <Line>ls l sl ss l ss l ll s ls ls sl ll ss ss sl</Line>
+ <Line>l l ss ss l ls s s ll sl l ls ls ls sl ss s</Line>
+ <Line>sl s ll ll l ss ls ls ls ss ss l ss ss s ss</Line>
+ <Line>ss l ll ss sl l s s sl s ll l ll ls ss s sl</Line>
+ <Line>ll ss sl sl ls sl ss ls ss l s ll s s ll ls</Line>
+ <Line>l ll ss l ss ls sl l ss ll ss s sl l ll s l</Line>
+ <Line>ls ss sl ls ss ss ls ss s s s ls ss sl ls l</Line>
+ <Line>sl sl ls sl ll ls sl sl ll sl ss s ll ll ls</Line>
+ <Line>ll s s ls sl s s l l ls s ls ll l l l ll sl</Line>
+ <Line>sl s s sl ss ss ls ls ll ls l ls ss ss sl s</Line>
+ <Line>s s ls ls s sl ss sl ss sl sl ss ll ls sl l</Line>
+ <Line>s sl ll ss sl sl l ss s sl l ll sl ss ls ll</Line>
+ <Line>l ll s sl l ll ls sl ll ls s ll ss sl s s s</Line>
+ <Line>l l ll sl s ll ss ll ll ll s sl l l ll ss l</Line>
+ <Line>s ls ss l ss ls ss ss sl ll ss l sl l s l s</Line>
+ <Line>l sl ls ll sl s ls s sl l ls sl ss s l ss s</Line>
+ <Line>s l l sl l sl l ll ss s ll l sl ll ls sl ls</Line>
+ <Line>ss s l l ll ls ll ll ll ls ll l ls ss ls sl</Line>
+ <Line>l ss sl l l ls l s l s ss ss ll ls ls sl ll</Line>
+ <Line>ls ll sl ll ls ls sl ss l ll s ls l ll l ss</Line>
+ <Line>s s l sl s ls ll sl s sl s ll l ll sl ls ls</Line>
+ <Line>l l ss ls ll ll sl ls ss sl ls ll sl ls l s</Line>
+ <Line>ll ls sl l ll ls sl l ls ll ll l sl ss ls l</Line>
+ <Line>ls sl ss ss s ll ls sl ll ss sl ls sl ls ls</Line>
+ <Line>s ss l s ll ls ss ll sl sl sl sl s ss ss ls</Line>
+ <Line>ls sl l s ll ss sl ls sl sl sl ss l l ls sl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qm</NewCharacters>
+ <Line>qmls qmd mll mm qmls qmd qmd qmd mq m q qll</Line>
+ <Line>q q qmd mf qdd mll mll mf qmd ms qm q qm ql</Line>
+ <Line>q mq mf qmd qs qll qmls qm q qmls ms qdd qm</Line>
+ <Line>mf mm qdd mll qm qdd m qs m mm qm qmd ms qm</Line>
+ <Line>ms msk mm qdd qll qdd qmls qm mm qll qm qsk</Line>
+ <Line>qll qm mm qqf qll q mll mq mll mf mf qm qmd</Line>
+ <Line>qmd qmd ms qmls mm ms ms qmls qmls mq ms qm</Line>
+ <Line>qm q qs q mfq mll mf mll qll qll qq qll qdq</Line>
+ <Line>mm qmls ms m mm qm mll qs q qdd mq ms mq qm</Line>
+ <Line>qs mll q mll qs m mq qsk qmls qsk mq qdd qf</Line>
+ <Line>qm m qmd m q ms qq qll qll qm q qq qq q qmd</Line>
+ <Line>qm qll qll qmd qsk qmls qdd ms mf mm qq mqm</Line>
+ <Line>mll mf mm qs qs mq mm ms mq qq qll m msm qm</Line>
+ <Line>quel quand que quoi quid quels qui qui quel</Line>
+ <Line>quand quoi pourquoi quel quid quelles quand</Line>
+ <Line>quel quarks qui quoi que quel quid quoi que</Line>
+ <Line>quoique quota quotient quelle quitter quels</Line>
+ <Line>quant quark quelle quand quartier questions</Line>
+ <Line>quota question qualités quelle quand quelle</Line>
+ <Line>pourquoi quand quelles qui quelque que quoi</Line>
+ <Line>quand quarts quartiers qualité moment quart</Line>
+ <Line>quais quoi mes moi que quoi qui masque quoi</Line>
+ <Line>quand mas quoi quai masse met quel quoi qui</Line>
+ <Line>quai masque qui question quelle qualité qui</Line>
+ <Line>quelconque mission maman quartier mesquines</Line>
+ <Line>mois mer mon ma mes mas mime moment montres</Line>
+ <Line>mot mosquée masse moquette maquette mon mes</Line>
+ <Line>mise question moque mesquin messe met merde</Line>
+ <Line>marques masque massifs marquis maroquinerie</Line>
+ <Line>maniaque maman marquants masque musique moi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ai</NewCharacters>
+ <Line>ia il la ai ai ii aa i a a i ia ai al il sa</Line>
+ <Line>ai ia ii aa ai ai aa al il la sa si ali sal</Line>
+ <Line>aii aai iia iai aia iaa iia aai iai aaa iii</Line>
+ <Line>i aa i ami aa ia ail aa aa si sa i ii a ils</Line>
+ <Line>ada ami mai fais fila mali kaki sa si saisi</Line>
+ <Line>ail lésa lira liai lassai assit laisse sali</Line>
+ <Line>si sa sais sali lissa liasse saisie cil ada</Line>
+ <Line>dit dadas daim dard daim mal sida lait mali</Line>
+ <Line>dada dis mal mali daim raid la il mal drain</Line>
+ <Line>ail aide il cil lac mai a il lit lait la ai</Line>
+ <Line>dalle dada dirige lit lait la lit papa plia</Line>
+ <Line>aide sida danse la il ami mai mal lime aile</Line>
+ <Line>saisi sali cil essai salles liasses sa aise</Line>
+ <Line>ait sais sida mai lame malle cime visa aide</Line>
+ <Line>base site sadique masque insaisissable lait</Line>
+ <Line>tata taille mimais mai malle lits liasse la</Line>
+ <Line>acquis ailes alim lassais ami lait mali las</Line>
+ <Line>malais mille massifs malaises masques maint</Line>
+ <Line>main maille mai magie mais mal malaise amis</Line>
+ <Line>mais mari misait massais maltais maille mai</Line>
+ <Line>taxait tas tassait tard tilt tari tandis ta</Line>
+ <Line>taie taillis tamis tirais tissa taris taies</Line>
+ <Line>lassai liais lirai lissai limai mais malais</Line>
+ <Line>si sais missile laisses lirais quai marquis</Line>
+ <Line>magie mimais sali liasse aide tari main mai</Line>
+ <Line>lait sida tari mari mai plia mimais malaise</Line>
+ <Line>daim ami sali ail plia quai visa parlais ai</Line>
+ <Line>saisies insistance instant aide ail lait si</Line>
+ <Line>tassai drain mimai liasse lassai raid essai</Line>
+ <Line>saisies mali lima malade imite quai liquida</Line>
+ <Line>raid lissai misait drain alim lait marquise</Line>
+ </Level>
+ <Level>
+ <NewCharacters>en</NewCharacters>
+ <Line>en ne ee nn n e ne ee ne en nn en n en ne n</Line>
+ <Line>e e ee nn ne en nn e ee ne en ne e n e ee e</Line>
+ <Line>ne ee nn e n ne nn e en ee ne e e n nn e ne</Line>
+ <Line>ene ee een n nn nne en eee e nen en nnn nen</Line>
+ <Line>e enn nee ee ne n ne e ne ene ne e n en een</Line>
+ <Line>une lent net en naine ne nem yen dent tente</Line>
+ <Line>ment ne en dent lent aine laine en dent zen</Line>
+ <Line>tente plein ment ne enfle entente en yen en</Line>
+ <Line>entend lents dents ment jeunes mental entre</Line>
+ <Line>en net tente kendo sonne mine nue lune dent</Line>
+ <Line>tonne dément nie attend une zen prune lunes</Line>
+ <Line>yen fente naine laine mente enfle kendo yen</Line>
+ <Line>prune vente plein pente entente descente ne</Line>
+ <Line>mène sens danse lance encens enceinte enfle</Line>
+ <Line>enfer ennui entend sens lent neige nef yens</Line>
+ <Line>nerf net yen nulle norme nue en entente zen</Line>
+ <Line>peine lune pension lente dune zone conne ne</Line>
+ <Line>laine dents grogne encens kendo fine dîners</Line>
+ <Line>mine pente attente prend net ment enfle une</Line>
+ <Line>lent entend donne kendo tonne aine sens yen</Line>
+ <Line>monde jeune années damner lorgne unie zones</Line>
+ <Line>veine dune vanne lune melon danse sens nues</Line>
+ <Line>plainte tente scène mine longue nulle prune</Line>
+ <Line>teinte ceinte kendo quelconque dent lent en</Line>
+ <Line>entente unie internet pente enfle lance yen</Line>
+ <Line>net mine donne nulle jeune entente pensions</Line>
+ <Line>prune laine dune lune sonne aine lent neige</Line>
+ <Line>yen jeune dent tenues sens ment unie encens</Line>
+ <Line>zone grogne donne prend tente aine sens une</Line>
+ <Line>ennui descente norme nulle laine entre lent</Line>
+ </Level>
+ <Level>
+ <NewCharacters>vu</NewCharacters>
+ <Line>uu v u uv uu vu vv u v u u vv uv vu vu u vv</Line>
+ <Line>u v v uv vv u vv uu vu u v uv u v vv u v vu</Line>
+ <Line>u u v vv uv u v uu uv vu vv v u uv u v uv v</Line>
+ <Line>vu v vu uv u v vu uv u v vu vu uv vv uu v u</Line>
+ <Line>vv vuv vu vv vuv u vvu uuv uvu vvv v uvu vu</Line>
+ <Line>vvv uu v uu v vuv uuu u v vu u vvu uuv vu v</Line>
+ <Line>vous venue louve neuve ouvert ventrus vague</Line>
+ <Line>valve vue trouve veneur vous louve vue venu</Line>
+ <Line>veuves mauves viseur vous vertus vogue veau</Line>
+ <Line>vermoulu virtuel louve ventouse verrue visu</Line>
+ <Line>vigoureux vive violeur couvre virus vivaces</Line>
+ <Line>ouvre venus véreux verrou vieux voulu vogue</Line>
+ <Line>vaurien voeu voué valve usuel voleurs velus</Line>
+ <Line>vêtu venteux louve venu vague vue vous viva</Line>
+ <Line>vulcanologue usure unique ululer tutu virus</Line>
+ <Line>voyou neuve vertus vague ouvre venu vain vu</Line>
+ <Line>vous valide valeur vil vaisseau usuel veine</Line>
+ <Line>viva virtuose vu voleur vulgaire voué mauve</Line>
+ <Line>duvet devenu viseur ouvre velu voeu vu vêtu</Line>
+ <Line>pauvre ventouse venteux ouverts voulu virus</Line>
+ <Line>vulnérables voyeur volute veuves voyou visu</Line>
+ <Line>revenu vagues vue oeuvre virtuel vous vogue</Line>
+ <Line>verrue trouve valeur ventrus vulgaire voûte</Line>
+ <Line>voulu viva voeu vigoureux couvre vil douves</Line>
+ <Line>violeurs veneur mauve virtuoses viseur velu</Line>
+ <Line>vogue usuel virus virtuel vous louve duvets</Line>
+ <Line>vulcanologue vaisseau vaurien ventouse veuf</Line>
+ <Line>vivaces vêtu neuve vu venteux vague ventrus</Line>
+ <Line>ululer voyou pauvre voulu viva usuel valeur</Line>
+ <Line>velu ouvre oeuvre parvenu veneur trouvé vus</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ir</NewCharacters>
+ <Line>revivre lire traiter injurier partir rideau</Line>
+ <Line>ruine brebis revivifier ruffians rire trier</Line>
+ <Line>livre croire briller trains citrons vriller</Line>
+ <Line>savoir trouille marquis cirer frise couvrir</Line>
+ <Line>mendier tirs suivre virus palefrenier foire</Line>
+ <Line>traiter prise gris brise triste cri moindre</Line>
+ <Line>joindre virtuelles lier nier prier irriguer</Line>
+ <Line>lire torride brique carrière irriter citron</Line>
+ <Line>vrille dire trier irradier briller inverser</Line>
+ <Line>tirailler brebis savoir isoler livre croire</Line>
+ <Line>paraître virer crier marquis vivre résister</Line>
+ <Line>tristes giratoire naître rire ruine moindre</Line>
+ <Line>irréel frises gris nier suivre empire foire</Line>
+ <Line>rite rallier espoir joindre imbiber croiser</Line>
+ <Line>venir vierge sentir lire cirer finir virale</Line>
+ <Line>obtenir trouille partir servir frire poires</Line>
+ <Line>trier vivre marquis citron livre frise pire</Line>
+ <Line>torride nier brider pris palefrenier ruiner</Line>
+ <Line>vigoureux trahir devoir savoir brebis virus</Line>
+ <Line>vivre devoir giratoire plaisir brique crier</Line>
+ <Line>irritation carie vaurien relier renier rire</Line>
+ <Line>briller moindres griser jouir tenir nourrir</Line>
+ <Line>suivre foire tristes croire mendier railler</Line>
+ <Line>frise carrière virtuel tir torride irradier</Line>
+ <Line>croiser cirer vrilles courrier spolier dire</Line>
+ <Line>quartier nier tiers citron brouille vierges</Line>
+ <Line>savoir partir brebis rouille joindre irréel</Line>
+ <Line>lire irriguer ruine rire trier pris marquis</Line>
+ <Line>brique tir palefrenier empire brille bribes</Line>
+ <Line>vivre traîtres moindre brider foire traiter</Line>
+ </Level>
+ <Level>
+ <NewCharacters>oc</NewCharacters>
+ <Line>officier courses confiner considérer écoles</Line>
+ <Line>octet couper conspire once couleur concerne</Line>
+ <Line>officier conjurer clore convaincre conclure</Line>
+ <Line>occasions action couler coude couche octane</Line>
+ <Line>contraindre octobre couper couvent couffins</Line>
+ <Line>comprendre constituer froc cousin concevoir</Line>
+ <Line>corriger confiner cours coco locaux console</Line>
+ <Line>concession convenir toucher octane couloirs</Line>
+ <Line>coïncidence occulte obscur confusion cochon</Line>
+ <Line>couffin toc occurrence économie coi confier</Line>
+ <Line>compagnies croix octets communiste oculaire</Line>
+ <Line>corridor occident courses conférer conclure</Line>
+ <Line>locataire couvents octave coursier découper</Line>
+ <Line>conjurer couple continuer courage convertir</Line>
+ <Line>condition constatations couver cocu occuper</Line>
+ <Line>octogone couffins concéder océan orchestrer</Line>
+ <Line>connu contour cordon coquelicot convoi écho</Line>
+ <Line>coco écope confiner conscience coque douche</Line>
+ <Line>confier occulte couloir octave cours cobalt</Line>
+ <Line>octet éclore commode code octobre combattre</Line>
+ <Line>concevoir conclusion douceur cloche touches</Line>
+ <Line>social écorces commettre combinaison courir</Line>
+ <Line>coucou occuper comprendre coopérer cor coup</Line>
+ <Line>coque col connaître obscur conseil octogone</Line>
+ <Line>occident concours action continuer colloque</Line>
+ <Line>courage occasionnel conjure convenir cloque</Line>
+ <Line>couver orchestre conclure communiste couple</Line>
+ <Line>confusions oculaires corriger coco confiner</Line>
+ <Line>octave conscience couloirs compagnie locaux</Line>
+ <Line>courses ocre couler croix octet coïncidence</Line>
+ </Level>
+ <Level>
+ <NewCharacters>pq</NewCharacters>
+ <Line>prix plaquer pardon quelque propose preuves</Line>
+ <Line>plus procéder provoquer peler pauvres passe</Line>
+ <Line>pourpre procession pinte produit quai poire</Line>
+ <Line>persuade période qui princesse poison perçu</Line>
+ <Line>quand parler professeurs préférer poursuite</Line>
+ <Line>précédant parce que providence propositions</Line>
+ <Line>barque prisonnier préparer possède principe</Line>
+ <Line>quitter processions quart préjudice profond</Line>
+ <Line>pape pavé précède applique populaire plaine</Line>
+ <Line>qui profond plaque quatre persévère produit</Line>
+ <Line>coupe pervers pourpre plus quilles pantalon</Line>
+ <Line>poursuivi personnes peuple presse pâle quai</Line>
+ <Line>places quitte pardon claque pin procure pop</Line>
+ <Line>plaît pull plein préface paye profère quand</Line>
+ <Line>profane quid pâte pense prie quelque papier</Line>
+ <Line>pourquoi queue pire pinson prouve populaire</Line>
+ <Line>persuades poison pipe pause croupe question</Line>
+ <Line>traque propulsion pièces place prude quelle</Line>
+ <Line>protester quark professionnel préfère coque</Line>
+ <Line>qualité passe pousse populace quinte quatre</Line>
+ <Line>pin poème quinze papillon quelconque poison</Line>
+ <Line>pratique psychotique principe problématique</Line>
+ <Line>quitte poulpe publicité plan poids préparer</Line>
+ <Line>pépin quoi propice quota quoique pile pense</Line>
+ <Line>trafiques pôles plaine quinze place attaque</Line>
+ <Line>pop tronque planque glauque publique plaque</Line>
+ <Line>papa prise pénal peler propre quart puisque</Line>
+ <Line>parque quelque peuple piquer pluie pupilles</Line>
+ <Line>pape quota troque réplique trappe psychique</Line>
+ <Line>remarques problématique techniques quantité</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wm</NewCharacters>
+ <Line>mai mamie moi mince masse mine walkman dame</Line>
+ <Line>mime wagon modèle missile watt moine mortes</Line>
+ <Line>mari melon marche western milice ment mille</Line>
+ <Line>moulin mièvre moutarde méchant whisky motte</Line>
+ <Line>wallon multiple mousse comme femme homme me</Line>
+ <Line>militaire milieu mode marque médical morale</Line>
+ <Line>menu manches manteau trame pomme mémé palme</Line>
+ <Line>mystique temps témoin mutant mare misérable</Line>
+ <Line>mélodie wagon musique mesures mineur majeur</Line>
+ <Line>moteur matrice ma marbre mignon miette maux</Line>
+ <Line>moderne maître mazout monter molaire napalm</Line>
+ <Line>mois monopole monstre mer moment wallon mai</Line>
+ <Line>lampe moisi meurtre western lendemain momie</Line>
+ <Line>uniquement maintenue commerciaux simplement</Line>
+ <Line>permettent remerciement commence facilement</Line>
+ <Line>documents sympathique demandez probablement</Line>
+ <Line>comment programmeur programme soigneusement</Line>
+ <Line>nombre commercial permet commune watt moyen</Line>
+ <Line>graduellement wagon western ami temps monde</Line>
+ <Line>noms mot camion mes actuellement empaqueter</Line>
+ <Line>documents mais palme fondamental exactement</Line>
+ <Line>sommets gratuitement micro milliard minimal</Line>
+ <Line>maintenue lime segmentation dynamiques lame</Line>
+ <Line>finalement mécanismes chargements employant</Line>
+ <Line>watt moutarde mesquin mollusque mat murmure</Line>
+ <Line>maintenir mis moins milliards aiment magies</Line>
+ <Line>myrte modère wagons miroirs midi comprendre</Line>
+ <Line>palme machine sommes principalement maximal</Line>
+ <Line>moyen whisky amener meilleur wallon message</Line>
+ <Line>système forme limite walkman moment segment</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>septembre combinaisons disponible ressemble</Line>
+ <Line>possible impensable problèmes indispensable</Line>
+ <Line>objectifs publier base abandonner bulletins</Line>
+ <Line>publiquement publicité publiques robustesse</Line>
+ <Line>applicable pop portable incompatible boucle</Line>
+ <Line>double responsables papa probables beaucoup</Line>
+ <Line>acceptables objets publication biprocesseur</Line>
+ <Line>pin capable exécutables disponible portable</Line>
+ <Line>responsables compatible susceptible baliser</Line>
+ <Line>indisponible bout coupable besoin librement</Line>
+ <Line>publics probable contribuer basique notable</Line>
+ <Line>membre semblent base table brille buts pôle</Line>
+ <Line>bureau joignable inutilisables bleu tableau</Line>
+ <Line>incontournables place abonner bande robuste</Line>
+ <Line>bonne librairies instable double bienvenues</Line>
+ <Line>propulser plante tube rassembler absolument</Line>
+ <Line>combat substitutions bienheureux attribuant</Line>
+ <Line>barbare symbolique propose produit prononce</Line>
+ <Line>bien procurer précéder principe presse bois</Line>
+ <Line>réparable prenable bribes punissable barbes</Line>
+ <Line>baron particulier brute partageable plaisir</Line>
+ <Line>portables bleu performance publiable parfum</Line>
+ <Line>intangibles capables brique binaire brasier</Line>
+ <Line>globalement aimable librairies distribution</Line>
+ <Line>bouchable instalable publication abandonner</Line>
+ <Line>hebdomadaire obligatoires visible plaquable</Line>
+ <Line>bible basilique but ressemble objectivement</Line>
+ <Line>répréhensibles brume barre boire acceptable</Line>
+ <Line>passable repérable braise pliable parfaites</Line>
+ <Line>souhaitable pourpre personne banquet papier</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ty</NewCharacters>
+ <Line>installez style tu description type analyse</Line>
+ <Line>concert soyons formatage compte hyène autre</Line>
+ <Line>haute dynamique tarte temporaire symbolique</Line>
+ <Line>continue moyen partition hypertexte système</Line>
+ <Line>prototypes nettoyage interne cycle ennuyeux</Line>
+ <Line>gyroscope temps lynx cryptographie royaumes</Line>
+ <Line>rudoyer jury spatial cette kystes volleyeur</Line>
+ <Line>routines psychologie voyou anonyme traduite</Line>
+ <Line>documentation fondateur essayons hydroptère</Line>
+ <Line>toute yoga kyrielle tel yaourt tante tester</Line>
+ <Line>votre dystrophie payer utiliser ayez rythme</Line>
+ <Line>comportement hypnose mythe alternatifs chat</Line>
+ <Line>attente incluent xylophone joint sélectives</Line>
+ <Line>sympathiques tristesse voyez trois tournant</Line>
+ <Line>ayant stylo participants tous activité type</Line>
+ <Line>yacht hypnose noyaux distribuent exactement</Line>
+ <Line>mettre paralysant portent tarte conflictuel</Line>
+ <Line>toit pays envoyer syntaxe centaine descente</Line>
+ <Line>traiter royal délayer toilettes typographie</Line>
+ <Line>tonne tour voyons hydraulique physique tant</Line>
+ <Line>hyperbole balayer synchronisation duettiste</Line>
+ <Line>raclette doyen tourment contribuer terrible</Line>
+ <Line>travail violette douillette typique attaque</Line>
+ <Line>tente ayons thym puissant tinter territoire</Line>
+ <Line>copyright toiles hypocrisie touchant whisky</Line>
+ <Line>renvoyer typique transmission ténor vedette</Line>
+ <Line>citoyens dynamo total thyroïde soyez voyage</Line>
+ <Line>torture dynastie pratiquement textile matin</Line>
+ <Line>fuyant belette essaye faite incroyable tête</Line>
+ <Line>constitue dévoyer futurs noyer yeux gymnase</Line>
+ </Level>
+ <Level>
+ <NewCharacters>zx</NewCharacters>
+ <Line>extraire peureux exact zèle expliquer mixer</Line>
+ <Line>mixte fixer originaux exploiter exclus yeux</Line>
+ <Line>zigouiller hexagones noyaux canaux ceux six</Line>
+ <Line>exécutable exprimer digitaux fabuleux mieux</Line>
+ <Line>montez lisez zodiaque demandez sentez excès</Line>
+ <Line>soixante recopiez savez xénophobe commencez</Line>
+ <Line>verrez maximum zaïrois poux saisissez jetez</Line>
+ <Line>ajoutez exemple suivez soumettez renseignez</Line>
+ <Line>linux proximité excuses nouveaux exposition</Line>
+ <Line>zébu sauvez devriez complexe extraordinaire</Line>
+ <Line>consultez relancez connexion zone existante</Line>
+ <Line>explosif obtenez disposez xylophone examens</Line>
+ <Line>pensez zinc expose vouliez destinez normaux</Line>
+ <Line>explicitement aviez choisissez zeste foncez</Line>
+ <Line>choix recevrez expansion commerciaux zouave</Line>
+ <Line>donnez rendez principaux ennuyeux remarquez</Line>
+ <Line>zambien excellente bureaux peux expressions</Line>
+ <Line>laissez dizaine explicatif suffixe extrêmes</Line>
+ <Line>externe latex expérimenter projetez heureux</Line>
+ <Line>seriez trouverez vieux index mexicains lynx</Line>
+ <Line>aimez exporter travaillez taux exige zigzag</Line>
+ <Line>maintenez payez zizanie fournissez poseriez</Line>
+ <Line>veuillez indiquez zoo gardez voix soyez dix</Line>
+ <Line>apprendrez comptez envoyez rapportez copiez</Line>
+ <Line>auxquels unix connaissez prévoyez extérieur</Line>
+ <Line>voulez aidez généreux essayez naviguez axés</Line>
+ <Line>trouvez excités utilisez proposez rejoignez</Line>
+ <Line>réseaux expédiez respectez assurez spéciaux</Line>
+ <Line>prenez pressez zooms idéaux spécifiez zèbre</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/german.ktouch.xml b/ktouch/training/german.ktouch.xml
new file mode 100644
index 00000000..1f5abade
--- /dev/null
+++ b/ktouch/training/german.ktouch.xml
@@ -0,0 +1,310 @@
+<KTouchLecture>
+ <Title>Deutsch (Kurs in 9 Teilen)</Title>
+ <Comment>Deutsche Trainings-Datei für KTouch, Autor unbekannt
+
+Beinhaltet recht lange Level, keine Sonderzeichen oder Zahlen</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>Grundstellung</NewCharacters>
+ <Line>f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff</Line>
+ <Line>j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj</Line>
+ <Line>fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj</Line>
+ <Line>d d d d d d ddd ddd ddd d d d d d d ddd fff jjj ddd fff jjj dddff</Line>
+ <Line>djd djd djd jdj jdj jdj dfd dfd dfd fdf fdf fdf ddf ffd jdd djdfd</Line>
+ <Line>k k k k k k kkk kkk kkk k k k k k k kkk ddd fff jjj kkk ddd jkjkj</Line>
+ <Line>kdk kdk kdk dkd dkd dkd dkd jkj jkj jkj fkf fkf fkf kdk dkd jkjkj</Line>
+ <Line>a a a a a a aaa aaa aaa a a a a a a aaa aaa aaa a a a a a a a aaa</Line>
+ <Line>aaa jjj kkk aaa fff aaa ddd aaa jjj kkk aaa fff aaa ddd aaa fafaf</Line>
+ <Line>ö ö ö ö ö ö ööö ööö ööö ö ö ö ö ö ö ööö ööö ööö ö ö ö ö ö ö öööjj</Line>
+ <Line>ööö fff ddd ööö jjj kkk ööö fff ööö ddd ööö jjj ööö kkk ööö föfjö</Line>
+ <Line>fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd fjfjf</Line>
+ <Line>aaa ööö ddd kkk fff jjj aaa ööö ddd kkk fff jjj aaa ööö ddd aöaöa</Line>
+ <Line>adf ökj adf ökj adf ökj adf ökj adf ökj adf ökj adf ökj adf ökjök</Line>
+ <Line>fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköjk</Line>
+ <Line>fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff</Line>
+ <Line>fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd</Line>
+ <Line>s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss</Line>
+ <Line>sss jjj sss kkk sss ööö sss jjj sss ddd sss aaa sss ddd sss jjjss</Line>
+ <Line>l l l l l l lll lll lll l l l l l l lll lll lll l l l l l l l lll</Line>
+ <Line>lll fff lll ddd lll sss lll aaa lll jjj lll kkk lll ööö lll fffll</Line>
+ <Line>asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdfj</Line>
+ <Line>fdsa jklö fdsa jklö fdsa jklö fdsa jklö fdsa jklö fdsa jklö fdsaj</Line>
+ <Line>asdf jklö fdsa jklö asdf jklö fdsa jklö asdf jklö fdsa jklö asdfj</Line>
+ <Line>fdsa ölkj asdf jklö fdsa ölkj asdf jklö fdsa ölkj asdf jklö fdsaö</Line>
+ <Line>la la la ka ka ka sö sö sö dö dö dö la la la ka ka ka sö sö la ka</Line>
+ <Line>al al al ak ak ak ös ös ös öd öd öd al al al ak ak ak ös ös öd öd</Line>
+ <Line>ja ja ja da da da ja ja ja da da da ja ja ja da da da ja ja da da</Line>
+ <Line>öd öd öd ja ja ja öd öd öd da da da öd öd öd ja ja ja öd öd ja ja</Line>
+ <Line>fad fad fad fad las las las las fad fad fad fad las las las ja öd</Line>
+ <Line>als als als als fad fad fad fad las las las las als als als öd ja</Line>
+ <Line>lös lös lös lös als als als als fad fad fad fad las las las ja öd</Line>
+ <Line>das das das das als als als als das als das als das als das da ja</Line>
+ <Line>las las las las das das das das las das las das las das las öd da</Line>
+ <Line>lös lös lös lös fad fad fad fad lös fad lös fad lös fad lös ja öd</Line>
+ <Line>da das da das da das las ja las ja las ja öd ja las das fad ja öd</Line>
+ <Line>ja lös ja lös ja lös lös da fad da fad da öd öd fad lös dad öd ja</Line>
+ <Line>öd fad öd fad öd fad das ja das ja das ja da da lös fad lös ja öd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>e und i</NewCharacters>
+ <Line>asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö</Line>
+ <Line>das dass lös fad dass lös als dass las lös fad dass als dass dass</Line>
+ <Line>ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde</Line>
+ <Line>ded ded dea dea des des def def ded ded dea dea des des def defed</Line>
+ <Line>ede ede ede edj edj edk edl edö edf eds ede ede edj edj edk edled</Line>
+ <Line>öde öde öde ade ade ade öle öle öle ade ade öde öde ade ade alles</Line>
+ <Line>alle alle alle lade lade lade alle alles lade lade alles lade las</Line>
+ <Line>löse löse löse jede jede jede löse löse jede jede löse jede alles</Line>
+ <Line>kik kik kik kif kid kis kia kik kia kis kid kif kik kis kia kikik</Line>
+ <Line>kik kik kiö kiö kil kil kik kik kij kij kik kil kiö kil kij kikik</Line>
+ <Line>iki iki ikf ikd iks ikj ikl ikö ikf ded kik ded kik ded kik dedki</Line>
+ <Line>sie sie sie sei sei sei sie sie sei sei sie sie sei sei seid seid</Line>
+ <Line>die die die sie sie sie die die sie sie die die sie sie die diese</Line>
+ <Line>seid seid seid dies dies dies seid seid dies dies seid dies diese</Line>
+ <Line>fiel fiel fiel lief lief lief fiel fiel lief lief fiel lief leise</Line>
+ <Line>feil feil feil fiel fiel fiel lief lief fiel fiel feil feil fidel</Line>
+ <Line>seid seid seid fiel fiel feil feil seid seid lief lief fiel fidel</Line>
+ <Line>dies dies lief feil seid seid feil lief fiel dies seid dies leise</Line>
+ <Line>ideal ideal ideal fidel fidel fidel ideal ideal fidel fidel ideal</Line>
+ <Line>leise leise leise ideal ideal ideal leise leise ideal leise fidel</Line>
+ <Line>alles alles alles leise leise leise alles alles leise alles leise</Line>
+ <Line>feil feil feil seid seid seid dies dies dies fiel fiel fiel fidel</Line>
+ <Line>seid fiel dies feil dies fiel seid feil fiel seid dies seid leise</Line>
+ <Line>diese diese diese leise leise leise diese diese leise leise diese</Line>
+ <Line>leise leise diese diese lasse lasse leise lasse diese lasse leise</Line>
+ <Line>diese leise lasse diese leise lasse lasse leise diese leise lasse</Line>
+ <Line>ideal ideal ideal fidel fidel fidel ideal ideal fidel fidel ideal</Line>
+ <Line>alles alles alles ideal ideal ideal alles alles ideal ideal alles</Line>
+ <Line>las lasse das dass las lasse das dass las lasse das dass las dass</Line>
+ <Line>jede jede ödes ödes dass dass jede jede ödes ödes dass dass lasse</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Komma</NewCharacters>
+ <Line>asdf jklö desa kilö fesa jilö asdf jklö desa kilö fesa jilö desak</Line>
+ <Line>als die all sie sei das las die all als sei sie las das all leise</Line>
+ <Line>kik k,k kik k,k k,ö k,l k,k k,j k,k k,l k,ö k,j kik k,k k,ö kik,k</Line>
+ <Line>ak, sk, dk, fk, jk, lk, ök, ak, sk, dk, fk, jk, lk, lk, ak, sk,kö</Line>
+ <Line>da, da, da, ja, ja, ja, je, je, je, öd, öd, öd, da, ja, je, dies,</Line>
+ <Line>sie, sie, sie, sei, sei, sei, sie, sie, sei, sei, sie, sei, dies,</Line>
+ <Line>fiel, fiel, fiel, feil, feil, feil, fiel, fiel, feil, feil, fiel,</Line>
+ <Line>es sei, löse es, lade es, sei leise, sei fidel, lies leise, dies,</Line>
+ <Line>sie sei fidel, lies das alles leise, es sei ideal, lies es, fiel,</Line>
+ <Line>lade es, lade dies, lade dies allei, löse dies, löse alles, seid,</Line>
+ <Line>fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsaj</Line>
+ <Line>ded kik def kij des kil dea kiö ded kik def kij des kil dea kikde</Line>
+ <Line>da, da, ja, ja, es, es, öd, öd, je, je, es, es, da, da, öd, lade,</Line>
+ <Line>da, ja, ed, öd, je, ed, da, öd, ed, je, da, je, ja, öd, da, löse,</Line>
+ <Line>elf, elf, des, des, öde, öde, ade, ade, des, des, öde, elf, ödes,</Line>
+ <Line>elf, des, öde, ade, des, öde, elf, ade, des, elf, öde, ade, seid,</Line>
+ <Line>seid, seid, dies, dies, eile, eile, dies, dies, seid, seid, eile,</Line>
+ <Line>seid, dies, eile, dies, seid, eile, dies, eile, seid, dies, seid,</Line>
+ <Line>fiel, fiel, lief, lief, feil, feil, fiel, fiel, lief, lief, feil,</Line>
+ <Line>fiel, lief, feil, fiel, lief, feil, lief, fiel, lief, feil, lief,</Line>
+ <Line>lies, lies, jede, jede, lade, lade, alle, alle, jede, jede, lade,</Line>
+ <Line>lies, jede, lade, alle, jede, lies, alle, lade, lies, jede, lies,</Line>
+ <Line>leise, leise, alles, alles, fidel, fidel, leise, leise, je, alle,</Line>
+ <Line>leise, alles, fidel, alles, fidel, leise, alles, leise, je, lies,</Line>
+ <Line>löse es, löse das, löse alles, löse das, löse es, löse das, löse,</Line>
+ <Line>lies alles, lies das alles, sei leise, sie las leise, ideal, lies</Line>
+ <Line>jede las leise, jede las das alles leise, es sei ideal, als, jede</Line>
+ </Level>
+ <Level>
+ <NewCharacters>r und u</NewCharacters>
+ <Line>asdf, jklö, desa, jilö, fesa, jilö, asdf, jklö, desa, kilö, desa,</Line>
+ <Line>da, ja, es, öd, je, es, da, öd, je, ja, es, öd, ja, je, da, ödes,</Line>
+ <Line>ded frf frf frf frj frk frl fri frf frd frs fra frf fri fra dedfr</Line>
+ <Line>dir dir dir dar dar dar dir dir dar dar dir dar dir dar dir leere</Line>
+ <Line>leer leer leer reif reif reif leer leer reif reif leer reif reife</Line>
+ <Line>aller aller aller reise reise reise aller aller reise reise aller</Line>
+ <Line>freie freie freie klare klare klare freie freie klare klare freie</Line>
+ <Line>jeder jeder jeder raffe raffe raffe jeder jeder raffe raffe jeder</Line>
+ <Line>kik juj juj juj juf jud jus jua juj juk jul juö juj juk jul kikju</Line>
+ <Line>aus aus aus auf auf auf aus aus auf auf aus auf aus auf aus laufe</Line>
+ <Line>faul faul faul rufe rufe rufe faul faul rufe rufe faul rufe faule</Line>
+ <Line>kaufe kaufe kaufe laufe laufe laufe kaufe kaufe laufe laufe kaufe</Line>
+ <Line>dulde dulde dulde freue freue freue dulde dulde freue freue dulde</Line>
+ <Line>flaue flaue flaue dulde dulde klare klare flaue dulde klare flaue</Line>
+ <Line>sause sause sause sauer sauer sauer raufe raufe raufe sause sauer</Line>
+ <Line>sauer sauer raufe raufe sause sause sauer raufe sause sauer raufe</Line>
+ <Line>dar darauf darauf darauf daraus daraus daraus darauf daraus drauf</Line>
+ <Line>dir dauere dauere dauere leeres leeres leeres dauere leeres leere</Line>
+ <Line>rar erlasse erlasse erlasse erfasse erfasse erfasse erlasse fasse</Line>
+ <Line>liefere liefere liefere darauf darauf darauf liefere leider lasse</Line>
+ <Line>leider leer, leider flau, leider faul, leider leer, liefere alles</Line>
+ <Line>alles frei, alles klar, alles reif, alles leer, erfasse das, klar</Line>
+ <Line>er rufe, er rufe es, er rufe dir, er dulde es, sie dulde es, dass</Line>
+ <Line>er lasse, er lasse es, er erlasse das, er fasse, er erfasse alles</Line>
+ <Line>alles klar, alles frei, alles reif, alles leer, erfasse das klar,</Line>
+ <Line>er dulde, er dulde es, rede leise, sie rief aus, er liefere alles</Line>
+ <Line>er kaufe, kaufe alles, kaufe alles auf, sie kaufe alles auf, alle</Line>
+ <Line>liefere dies, liefere alles, liefere es, liefere alles aus, rufe,</Line>
+ <Line>rufe das aus, rufe dies aus, rufe dies alles aus, rufe aus, alles</Line>
+ <Line>erlasse es, erlasse dies, erlasse dieses, leider dies alles leer,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>g und h</NewCharacters>
+ <Line>asdedfrf ölkikjuj frfdedsa jujkiklö asdedfrf ölkikjuj jk,kl kik,k</Line>
+ <Line>frei, leer, lies, klar, darf, faul, frei, leer, lies, klar, darf,</Line>
+ <Line>fgf fgf fgf fgö fgl fgk fgj fgf fga fgs fgd fgf fga fgs fgd fgfgf</Line>
+ <Line>gfa gfs gfd gfg gri gri gru gru gre gre gri gru gre gri gru grgrg</Line>
+ <Line>lag lag lag gar gar gar lag lag gar gar lag lag gar gar lag klage</Line>
+ <Line>klug klug klug sage sage sage klug klug sage sage klug sage kluge</Line>
+ <Line>grau grau grau karg karg karg grau grau karg karg geau karg graue</Line>
+ <Line>griff griff griff grell grell grell griff griff grell grell griff</Line>
+ <Line>jhj jhj jhj jha jhs jhd jhf jhj jhö jhl jhk jhö jhl jhk jhö jhjhj</Line>
+ <Line>hjö hjl hjk hjö hjl hjk hjö jhj jhk jhl jhö hjö hjl hjk hjh öjhjö</Line>
+ <Line>aha aha aha sah sah sah her her her aha aha sah sah her her helle</Line>
+ <Line>ehe ehe ehe ihr ihr ihr ehe ehe ihr ihr her her sah ehe ihr ihrer</Line>
+ <Line>kahl kahl kahl fahl fahl fahl kahl kahl fahl fahl kahl kahl kahle</Line>
+ <Line>hell hell hell ihre ihre ihre sehr sehr sehr hell ihre sehr helle</Line>
+ <Line>ruhig ruhig ruhig fahre fahre fahre ruhig ruhig fahre fahre ruhig</Line>
+ <Line>leihe leihe leihe siehe siehe siehe leihe leihe siehe siehe leihe</Line>
+ <Line>herauf herauf heraus heraus herauf herauf heraus herauf geduldige</Line>
+ <Line>gehöre gehöre gehöre ruhige ruhige ruhige gehöre ruhige religiöse</Line>
+ <Line>lehre lehre lehre heile heile heile lehre lehre heile heile lehre</Line>
+ <Line>helle helle helle graue graue graue helle helle graue graue helle</Line>
+ <Line>sehr diesig, sehr eifrig, sehr gierig, sehr grell, er lieh alles,</Line>
+ <Line>gerade heraus, gerade erfuhr er es, gerade lieh er das alles aus,</Line>
+ <Line>es sei eilig, es sei sehr eilig, es sei eiliger, er erfahre dies,</Line>
+ <Line>siehe her, siehe herauf, siehe hierher, es lag, das lag hier aus,</Line>
+ <Line>erledige das, erledige alles, erledige es freudig, höre eilig auf</Line>
+ <Line>hilf ihr, es sei sehr heil, dies sei ruhig, sie sei hier ruhiger,</Line>
+ <Line>das sei sehr hell, das sei arg, sie erfuhr es, er erfuhr es hier,</Line>
+ <Line>er fuhr ruhig, er fuhr ruhiger, lege es heraus, hier lag das aus,</Line>
+ <Line>sie las eifrig, sie las das alles sehr eifrig, er las das eifrig,</Line>
+ <Line>das sei grell, dies sei greller, da lag es, er griff es hier auf,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>t und z</NewCharacters>
+ <Line>frfgf jujhj asded ölkik jk,kö frfgf jujhj asded ölkik jk,kö frf,f</Line>
+ <Line>jage, half, lege, hell, sage, kahl, fege, sehr, rege, hilf, grau,</Line>
+ <Line>frf ftf ftf ftf frf fta fts ftd fta fts ftd tfö tfl tfk tfj frftf</Line>
+ <Line>hat hat hat tut tut tut hat hat tut tut hat tut tut hat tut hatte</Line>
+ <Line>gut gut gut tat tat tat gut gut tat tat gut tat tat gut tat gutes</Line>
+ <Line>kalt kalt kalt tief tief tief laut laut laut hart hart hart kalte</Line>
+ <Line>riet riet riet erst erst erst riet riet erst erst riet erst erste</Line>
+ <Line>alte alte alte fast fast fast alte alte fast fast alte fast altes</Line>
+ <Line>juj jzj jzj jzj juj jzj jzö jzl jzk jzö jzl jzk jzö zjl zjk jujzj</Line>
+ <Line>kurz kurz kurz zart zart zart kurz kurz zart zart kurz zart kurze</Line>
+ <Line>zielt zielt zielt sitzt sitzt sitzt zielt zielt sitzt sitzt zielt</Line>
+ <Line>geizig geizig geizig zögert zögert zögert geizig zögert zersetzte</Line>
+ <Line>zerfiel zerfiel zerfiel zergeht zergeht zergeht zerfiel zerstreut</Line>
+ <Line>hitzige hitzige hitzige heftige heftige heftige hitzig dreisitzig</Line>
+ <Line>jetzt jetzt jetzt ritzt ritzt ritzt jetzt jetzt ritzt ritzt jetzt</Line>
+ <Line>zerstreut zerstreut zerstreut zersetzte zersetzte zerstreut zerrt</Line>
+ <Line>ehrgeizig ehrgeizig ehrgeizig ersetztes ersetztes kulturell sitzt</Line>
+ <Line>zuletzt zuletzt zuletzt zuerst zuerst zuerst zuletzt zuerst herzu</Line>
+ <Line>reduziert reduziert reduziert kulturell kulturell kulturell ziert</Line>
+ <Line>heftig gestört, heute erzielt, heftig gestört, er zahlt es jetzt,</Line>
+ <Line>erst reduziert, es ist heiter, erst reduziert, sie zögerte jetzt,</Line>
+ <Line>zuerst ersetzt, sie liest gut, zuerst ersetzt, er ist jetzt hier,</Line>
+ <Line>zeige das, zeige es klar, du hast gehört, du hattest alles gehört</Line>
+ <Line>leite es, leite es gut, leite alle gut, er hat alles gut geleitet</Line>
+ <Line>er zahlte es, er zahlte alles aus, er zahlte alles erst jetzt aus</Line>
+ <Line>sie teilt es auf, er teilt es jetzt auf, er teilt jetzt alles auf</Line>
+ <Line>er hat alles ersetzt, sie hatte alles gut ersetzt, er hatte dies,</Line>
+ <Line>du hast alles gehört, du hattest alles gut gehört, sie sagte aus,</Line>
+ <Line>sie sagte es klar, sie sagte das alles sehr klar, er hört darauf,</Line>
+ <Line>er hat gezahlt, er hat jetzt gezahlt, sie hat es jetzt ausgezahlt</Line>
+ </Level>
+ <Level>
+ <NewCharacters>v und m</NewCharacters>
+ <Line>asded frfgf ölkik jujhj frftf jujzj jk,kö ök,kj frftf jujzj jk,kö</Line>
+ <Line>satt, zart, gute, zage, rate, zart, riet, zage, treu, zart, rate,</Line>
+ <Line>frf fvf fvf fvf fvö fvl fvk fvj fva fvs fvd fvf fvd fvs fvs fvfvf</Line>
+ <Line>viel viel viel vier vier vier viel viel vier vier viel vier viele</Line>
+ <Line>verlas verlas verlas versah versah verlas verfasse verliere viele</Line>
+ <Line>verzeiht verzeiht verkehrt verkehrt verödet verödet verödet aktiv</Line>
+ <Line>verzagte verzagte verzagte verhörte verhört verhört verdaut aktiv</Line>
+ <Line>aktiver aktiver aktiver relativ relativ relativ aktiv vegetatives</Line>
+ <Line>juj jmj jmj jmj jma jms jmd jmf jmö jml jmk jmj jmö jml jmk jmjmj</Line>
+ <Line>dem dem dem kam kam kam mag mag mag dem dem kam kam mag mag mager</Line>
+ <Line>mir mir mir arm arm arm mit mit mit mir mir arm arm mit mit armes</Line>
+ <Line>mehr mehr mild mild male male mehr mild male male mild mehr milde</Line>
+ <Line>merke merke immer immer fremd fremd merke immer fremd merke fremd</Line>
+ <Line>filme filme emsig emsig mager mager filme emsig mager filme emsig</Line>
+ <Line>vermeide vermeide vermerke vermerke vermeide vermerke jedem merke</Line>
+ <Line>vermehrt vermehrt vermehrt verfilme verfilme verfilme milde filme</Line>
+ <Line>verfiel immer mehr, verlief immer mild, verriet heute immer mehr,</Line>
+ <Line>vieles ist gefilmt, vielerlei merkt er, er vermittelte mir alles,</Line>
+ <Line>vermittle es heute, sie verliert heute, höre jetzt aufmerksam zu,</Line>
+ <Line>hier malt er emsig, du vermittelst das, sie ist hier völlig fremd</Line>
+ <Line>merke dir dies gut, verkaufe das heute, verleihe das alles heute,</Line>
+ <Line>er hat das gemerkt, er verkaufte alles, sie verliest jetzt alles,</Line>
+ <Line>melde es mir heute, melde es ihm, melde es heute, meldet es jetzt</Line>
+ <Line>lies aufmerksam, lies immer aufmerksam, leite es jetzt aufmerksam</Line>
+ <Line>vermittle es, vermittle es ihm, vermeide das, vermeide dies heute</Line>
+ <Line>er vermag es, dies ist relativ, er verteilte meist alles sehr gut</Line>
+ <Line>dies ist seltsam, diea alles ist sehr seltsam, verleihe es heute,</Line>
+ <Line>hier verkauft er viel, sie verkaufte hier mehr, das mag er jetzt,</Line>
+ <Line>sie vermittelt es, sie vermittelte es mehrmals, merke dir das gut</Line>
+ <Line>er merkt alles, er vermerkte das meiste, sie verlieh heute alles,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>b und n</NewCharacters>
+ <Line>frf fvf juj jmj frfvf jujmj fgf jhj frf fvf juj jmj k,k k,ö frfvf</Line>
+ <Line>am, im, mit, mir, mag, mal, mehr, viel, immer, jedem, damit, mir,</Line>
+ <Line>fvf fbf fbf fbf fbö fbl fbk fbj fvf fbf fbd fbs fba fbs fbd fvfbf</Line>
+ <Line>bis bis bis bei bei bei bis bis bis bei bei bis bis bei bis bilde</Line>
+ <Line>beim beim halb halb aber aber bald bald beim halb aber bald halbe</Line>
+ <Line>fbfrf fbfr fbr bri briet briet breit breit brav brav breite brave</Line>
+ <Line>frfbf frfb frb arb arbeite arbeite arbeitet verdarb verdarb erbe,</Line>
+ <Line>fbftf fbft fbt ibt gibt gibt gibt lebt lebt lebt labt lebte labte</Line>
+ <Line>jmj jnj jnj jnj jna jns jnd jnf jnö jnl jnk jnj njö jnl njk jnjnj</Line>
+ <Line>den den den ein ein ein neu neu neu den den ein ein neu neu einen</Line>
+ <Line>sein sein kein kein lang lang mein mein sein kein lang mein seine</Line>
+ <Line>allen allen gegen gegen einen einen allen gegen einen allen gegen</Line>
+ <Line>gehen gehen dient dient ihren ihren gehen dient ihren gehen dient</Line>
+ <Line>sagen sagen sehen sehen keine keine sagen sehen keine sagen sehen</Line>
+ <Line>geben geben geben haben haben haben geben geben haben haben geben</Line>
+ <Line>neben neben neben leben leben leben neben neben leben leben neben</Line>
+ <Line>binden binden binden darben darben darben binden darben mag binde</Line>
+ <Line>antik antik antik beige beige beige antik antik beige beige antik</Line>
+ <Line>unfair unfair unfair genial genial genial unfair genial unfair ab</Line>
+ <Line>abstrakt abstrakt abstrakt basieren basieren basieren abstrakt ab</Line>
+ <Line>sie halten nun immer daran fest, sie halten nun immer daran fest,</Line>
+ <Line>er behandelt es als eilig, sie behandeln es heute als sehr eilig,</Line>
+ <Line>sie dankten, sie bieten, sie sehen es ein, sie bitten jetzt darum</Line>
+ <Line>sie senden, sie geben, sie kennen, sie beten, sie behandelten es,</Line>
+ <Line>sie können es, sie kann viel, sie könnten es aber heute verlieren</Line>
+ <Line>jetzt bitten sie darum, jetzt hört sie, jetzt lernen sie es aber,</Line>
+ <Line>er arbeitet mit, sie arbeitet nit, alle arbeite, jetzt immer mit,</Line>
+ <Line>er diktiert gut, sie diktiert gut, alle diktieren jetzt aber gut,</Line>
+ <Line>er behandelt es, sie behandelt es, alle behandeln es jetzt eilig,</Line>
+ <Line>er lernt eifrig, sie lernt eifrig, alle lernen jetzt aber eifrig,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Punkt</NewCharacters>
+ <Line>asdfbf ölkjnj fbfdsa jnjklö frfded jujkik fvfbfv jmjnjm k,k k,k,k</Line>
+ <Line>an, ab, in, im, er, es, an, ab, in, im, er, es, an, ab, in, ihre,</Line>
+ <Line>jmj k,k l.l l.l l.l l.a l.s l.d l.f l.j l.k l.ö l.j l.k l.j l.l.l</Line>
+ <Line>ab, ab. er, er. im, im. in, in. ab. er. im. in. ab. er. im. Aber.</Line>
+ <Line>bis, bis. die, die. mir, mir. sei, sei. mir, mir. die, die. Dies.</Line>
+ <Line>ihr, ihr. ihn, ihn. her, her, hin, hin. ihr. ihn. her. hin. Nein.</Line>
+ <Line>vier, vier. viel, viel. gelb, gelb. vier. viel. gelb. viel. Gelb.</Line>
+ <Line>können, können. stehen, stehen. binden, binden. sein. Anderseits.</Line>
+ <Line>eignen, eignen. dienen, dienen. andere, andere. kein. Verbreitet.</Line>
+ <Line>gemein, gemein. gesagt, gesagt. besser, besser. nein. Verbessert.</Line>
+ <Line>stellt, stellt. breite, breite. dauert, dauert. fein. Unangenehm.</Line>
+ <Line>bringt, bringt. bittet, bittet. meinte, meinte. neue. Verkauften.</Line>
+ <Line>sie können es erfahren, bestimmt können sie heute alles erfahren.</Line>
+ <Line>sie sind gut trainiert, allerdings sind jetzt alle gut trainiert.</Line>
+ <Line>alle arbeiten gern mit, seitdem arbeitete sie aber immer gut mit.</Line>
+ <Line>es ist ganz klar bestimmt, das ist jetzt aber ganz klar bestimmt.</Line>
+ <Line>sie könnte dazu beitragen, sie hatte immer viel dazu beigetragen.</Line>
+ <Line>frf juj ftf jzj fgf jhj fvf jmj fbf jnj frf juj ftf jzj fgf jujzj</Line>
+ <Line>fbfvfdsa jnjmjklö fbfvfdsa jnjmjklö fbfvfdsa jnjmjklö fbfvf jnjmj</Line>
+ <Line>ftfrfded jzjujkik ftfrfded jzjujkik ftfrfded jzjujkik ftfrf jzjvj</Line>
+ <Line>aber dann jede sein kein mein mehr denn hier bald gute halb beste</Line>
+ <Line>neue seid vier fest halt lebe gebe hebe alle leer kann ihre neues</Line>
+ <Line>feine danke blaue liebe bitte genau lange gegen sende gönne reine</Line>
+ <Line>jetzt merke nehme ganze hatte dabei lerne kenne darum kaufe binde</Line>
+ <Line>klage, klage. neues, neues. altes, altes. meine, meine. sein, ja.</Line>
+ <Line>bauen, bauen. trage, trage. fahre, fahre. denke, denke. dein, ab.</Line>
+ <Line>sagen, sagen. hörte, hörte. halbe, halbe. fange, fange. mein, an.</Line>
+ <Line>bestimmt hielt sie daran fest. bestimmt halten sie es jetzt fest.</Line>
+ <Line>dies ist ganz klar festgelegt. es ist jetzt aber klar festgelegt.</Line>
+ <Line>er kann hierzu aber beitragen. alle könnten heute dazu beitragen.</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/german.neo.ktouch.xml b/ktouch/training/german.neo.ktouch.xml
new file mode 100644
index 00000000..f82c471c
--- /dev/null
+++ b/ktouch/training/german.neo.ktouch.xml
@@ -0,0 +1,889 @@
+<KTouchLecture>
+ <Title>Deutsch (NEO-Schnellschreiblayout)</Title>
+ <Comment>Created 2005 by Hanno Behrens &lt;Hanno.Behrens@gmx.de>
+Homepage: http://pebbles.schattenlauf.de/
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>e und n</NewCharacters>
+ <Line>e e e e e e eee eee eee e e e e e e eee eee eee e e e e e e e eee</Line>
+ <Line>n n n n n n nnn nnn nnn n n n n n n nnn nnn nnn n n n n n n n nnn</Line>
+ <Line>eee nnn eee nnn nnn eee nnn eee ene ene ene nen nen nen ene nenen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>starke Mittelfinger: ar</NewCharacters>
+ <Line>a a a a a a aaa aaa aaa a a a a a a aaa eee nnn aaa eee nnn aaaee</Line>
+ <Line>ana ana ana nan ana ana ana ana ana eae eae eae aae eea naa anaea</Line>
+ <Line>r r r r r r rrr rrr rrr r r r r r r rrr aaa eee nnn rrr aaa nrnrn</Line>
+ <Line>rar rar rar ara ara ara ara nrn nrn nrn ere ere ere rar ara nrnrn</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bewegliche kleine Finger: ud</NewCharacters>
+ <Line>u u u u u u uuu uuu uuu u u u u u u uuu uuu uuu u u u u u u u uuu</Line>
+ <Line>uuu nnn rrr uuu eee uuu aaa uuu nnn rrr uuu eee uuu aaa uuu eueue</Line>
+ <Line>d d d d d d ddd ddd ddd d d d d d d ddd ddd ddd d d d d d d dddnn</Line>
+ <Line>ddd eee aaa ddd nnn rrr ddd eee ddd aaa ddd nnn ddd rrr ddd edend</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>eee nnn aaa rrr uuu ddd eee nnn aaa rrr uuu ddd eee nnn aaa enene</Line>
+ <Line>uuu ddd aaa rrr eee nnn uuu ddd aaa rrr eee nnn uuu ddd aaa ududu</Line>
+ <Line>uae drn uae drn uae drn uae drn uae drn uae drn uae drn uae drndr</Line>
+ <Line>eau nrd eau nrd eau nrd eau nrd eau nrd eau nrd eau nrd eau nrdnr</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wiederholung</NewCharacters>
+ <Line>eee nnn aaa rrr uuu ddd eee nnn aaa rrr uuu ddd eee nnn aaa rrree</Line>
+ <Line>eau nrd eau nrd eau nrd eau nrd eau nrd eau nrd eau nrd eau nrdea</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Ringfingertraining: it</NewCharacters>
+ <Line>i i i i i i iii iii iii i i i i i i iii iii iii i i i i i i i iii</Line>
+ <Line>iii nnn iii rrr iii ddd iii nnn iii aaa iii eee iii aaa iii nnnii</Line>
+ <Line>t t t t t t ttt ttt ttt t t t t t t ttt ttt ttt t t t t t t t ttt</Line>
+ <Line>ttt eee ttt aaa ttt iii ttt uuu ttt nnn ttt rrr ttt ddd ttt eeett</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Grundstellung</NewCharacters>
+ <Line>uiae nrtd uiae nrtd uiae nrtd uiae nrtd uiae nrtd uiae nrtd uiaen</Line>
+ <Line>eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiun</Line>
+ <Line>uiae nrtd eaiu nrtd uiae nrtd eaiu nrtd uiae nrtd eaiu nrtd uiaen</Line>
+ <Line>eaiu dtrn eaiu nrtd eaiu dtrn uiae nrtd eaiu dtrn uiae nrtd eaiud</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wichtige Silben</NewCharacters>
+ <Line>tu tu tu ru ru ru er er er en en en tu tu tu ru ru ru er er tu ru</Line>
+ <Line>ut ut ut ur ur ur re re re ne ne ne ut ut ut ur ur ur re re ut ur</Line>
+ <Line>de de de da da da di di di du du du de de di di da da du du de de</Line>
+ <Line>un un un ur ur ur an an an er er er ta ta ta re re re te te te un</Line>
+ <Line>in in in ti ti ti un un un ri ri ri na na na er er er ni ni ni da</Line>
+ <Line>eu eu eu nd nd nd au au au in in in ei ei ei au au au ie ie ie au</Line>
+ </Level>
+ <Level>
+ <NewCharacters>3er-Gruppen</NewCharacters>
+ <Line>eid eid eid eid und und und und eid eid eid eid und und und er au</Line>
+ <Line>ein ein ein ein den den den den ein ein ein ein den den den da du</Line>
+ <Line>der der der der ein ein ein ein die die die die und und und er au</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>aua aua aua aua ein ein ein ein aua ein aua ein aua ein aua er da</Line>
+ <Line>und und und und aua aua aua aua und aua und aua und aua und du in</Line>
+ <Line>der der der der und und und und der aua der aua der aua der da du</Line>
+ <Line>da dia da dia da dia und ei und ei und ei du ei und dia eid da du</Line>
+ <Line>in der in der in der der er und er und er du du und der und er in</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>eee nnn aaa rrr iii ttt uuu ddd eee nnn aaa rrr iii ttt uuu dddee</Line>
+ <Line>uuu ddd iii ttt aaa rrr eee nnn uuu ddd iii ttt aaa rrr eee nnnee</Line>
+ <Line>eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiu nrtd eaiue</Line>
+ <Line>uiae dtrn uiae dtrn uiae dtrn uiae dtrn uiae dtrn uiae dtrn uiaee</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Konsonant: l</NewCharacters>
+ <Line>uiae dtrn eaiu nrtd uiae dtrn eaiu nrtd uiae dtrn eaiu nrtd uiaed</Line>
+ <Line>ala ala ala aln alr alt ale ala dal dal dal ual ual ual dal dalai</Line>
+ <Line>ali ali ali dal dal dal ual ual lal lal lal lan lar lat lae laila</Line>
+ <Line>edel edel null null edel edel adel lade lade edel edel edel lauer</Line>
+ <Line>dal dal ual ual ali ali dal dal dal ual ali dal ual ali dal aulen</Line>
+ <Line>dal ali ali ual dal ual dal ual ual ali ulla ulla eile eile laden</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>nil nil nil url url url nil nil url url nil url nil url nil uller</Line>
+ <Line>elt elt elt alt alt alt elt elt alt alt elt alt elt alten eternal</Line>
+ <Line>lied lied lied delle delle delle lied lied delle lied delle luder</Line>
+ <Line>alle alle alle alte alte alte alle alle alte alte alle alle alten</Line>
+ <Line>alle alle alte alte alle alle alte alte alle alle alte alte allen</Line>
+ <Line>elle elle tilde tilde elle elle tilde tilde elle elle tilde tilde</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Konsonant: g</NewCharacters>
+ <Line>rgr rgr rgr rge rga rga rgn rgt rgu rgi rga rge rgn rgt rgd rguen</Line>
+ <Line>alg alg alg gel gel gel alg alg gel alg tag tag tal tal tag tagen</Line>
+ <Line>egal egal alge alge egal egal alge alge lage lage glut glut glute</Line>
+ <Line>gle gle gle gli gli gli glu glu gle gle leg leg lag lag lug luger</Line>
+ <Line>lag lag gel gel lig lig gal gal leg leg gul gul lug lug gut guter</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>geile geile geile liege liege liege diele diele diele geile geile</Line>
+ <Line>geile geile liege liege diele diele geile geile liege liege diele</Line>
+ <Line>geile liege diele geile liege diele geile liege diele geile liege</Line>
+ <Line>alge alge alge geld geld geld alge alge alge geld geld geld algen</Line>
+ <Line>geld geld alge alge geld geld alge alge geld geld alge alge gelde</Line>
+ <Line>igel igel igel liga liga liga igel igel igel liga liga liga igeln</Line>
+ <Line>igel liga igel liga igel liga igel liga igel liga igel liga igeln</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>ein teil ein teil glut trug lieder trug leider in gina in den tag</Line>
+ <Line>lieder trugen glut trugen glut in gina glutural glitt gina in den</Line>
+ <Line>tag alle glieder gleiten glitternd gleite glitternd lila gina lau</Line>
+ <Line>lauer regen gina gleite glitternd in der liege liegend in den ein</Line>
+ <Line>nur nie regen nur liegen nie regen der glitter in gina leg nieder</Line>
+ <Line>leg nieder nur glitter in geld glitter in geld in geld niege gina</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>eaiu nrtd uiae dtrn eaiu nrtd uiae dtrn eaiu nrtd uiae dtrn</Line>
+ <Line>ala rgr ale rgn ali rgt alu rgd ala rgr ale rgn ali rgt alu</Line>
+ <Line>au nu li da nl li au da li nl au nl nu da au li nu nl li au</Line>
+ <Line>alt gut die all tat den tun gau tau nun lag nie ein aal und</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: c</NewCharacters>
+ <Line>ece ece ece ecn ecr ect ecn ecr eca eci ecu eca eci ecu eca</Line>
+ <Line>eci ecn ecr ect ecd ecu eci eca ecn agc agc agc auc auc euc</Line>
+ <Line>agc auc auc auc agc agc cuc cuc auc agc auc agc cuc cuc agc</Line>
+ <Line>celle celle celle cent cent cent clan clan clan cut cut cut</Line>
+ <Line>cecilie cecilie cecilie cure cure cure curie curie cut cure</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>celle celle celle creature creature creature celle celle ecu</Line>
+ <Line>celle celle creature creature celle celle creature cent cent</Line>
+ <Line>celle cent celle cent celle cent celle cent celle cent celle</Line>
+ <Line>cut cut cat cat car car cut cut cut cut cut cat cat car cart</Line>
+ <Line>cecilie cecilie cure cure cecilie cecilie cent cent cent cut</Line>
+ <Line>cad cad cad cd cd cd cat cat cat cd cd cd cad cad cad cd cut</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: h</NewCharacters>
+ <Line>nhn nhn nhn nhe nha nhi nhe nha nhd nht nhr nhe nha nhi nhd</Line>
+ <Line>nhn nht nht nhd nhn nhr nht nhd nhe nha nhi nhu nhn nhr nht</Line>
+ <Line>auch auch auch hauch hauch hauch rauch rauch rauch auch cha</Line>
+ <Line>che cha chi chu che cha chi chu rauh rauh rauh haut cha chu</Line>
+ <Line>hai hai hai hau hau hau heu heu heu hier hier hier hut haut</Line>
+ <Line>heute heute heute haut haut haut rah rah rauch rauche heute</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>ruhig ruhig ruhig lehnt lehnt lehnt ruhig ruhig lehnt lehnt</Line>
+ <Line>reihe reihe reihe licht licht licht reihe reihe licht licht</Line>
+ <Line>uhren uhren uhren ihrer ihrer ihrer uhren uhren ihrer ihrer</Line>
+ <Line>leicht leicht leicht ruhige ruhige ruhige taucht ruhige hut</Line>
+ <Line>leicht leicht leicht ruhige ruhige ruhige taucht ruhige hit</Line>
+ <Line>ahnung ahnung ahnung lehrer lehrer lehrer ahnung lehrer hut</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>er rauche er rauche ein er dulde ihn er rauche den lehrer an</Line>
+ <Line>und in china die lehrer in china dehnt endlich dehnt endlich</Line>
+ <Line>alle und alle und helle in china dicht in china ehre alle er</Line>
+ <Line>der gau hellt in china der lehrer heute leiht gina die uhren</Line>
+ <Line>die uhren und dehnt die uhren die reihen der uhren niege die</Line>
+ <Line>lerche dreht runden in china der lila und niegen gina truhen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>uiae dtrn uiae dtrn eaiu dtrn eaiu dtrn uiae nrtd eaiu dtrn</Line>
+ <Line>ecu nhd eci nht eca nhr ecu nhd eci nht eca nhr ecu nhd eci</Line>
+ <Line>au ah lc li nl nu uhi uhe ilg igl die der da du er alle den</Line>
+ <Line>leer licht laut tand regt naht iren halt ente hund lira ring</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Vokal: o</NewCharacters>
+ <Line>eoe eoe eoe eod eot eor eon eoe eou eoi eoa eoi eoa eoe eou</Line>
+ <Line>oeu oei oea oed oet oer oeu oei tuo tuo ouc ouc ouc tuo tuo</Line>
+ <Line>otto otto otto toto toto toto doch doch doch lohn lohn lohn</Line>
+ <Line>gong gong gong tore tore tore rico rico rico toll toll toll</Line>
+ <Line>ohio horn hugo lord cool ahoi lago dorn tone loch tour ohne</Line>
+ <Line>ohio horn hugo lord cool ahoi lago dorn tone loch tour ohne</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>hallo hallo hallo tango tango tango hallo hallo tango tango</Line>
+ <Line>carol carol carol tutor tutor tutor carol carol tutor tutor</Line>
+ <Line>hallo tango carol tutor hallo tango carol tutor hallo tango</Line>
+ <Line>goedel goedel goedel drohung drohung goedel drohung drohung</Line>
+ <Line>dolch dolch dolch theorie theorie dolch theorie dolch dolch</Line>
+ <Line>goedel drohung theorie goedel drohung theorie goedel goedel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Konsonant: s</NewCharacters>
+ <Line>nsn nsn nsn nsu nsi nsa nse nsa nsd nst nsr nsd nst nsr nsd</Line>
+ <Line>snd snt snr snd snt snr snd snt snr snr snt snd snr snt snd</Line>
+ <Line>ast ast ast eis eis eis ast eis das das das aus aus aus das</Line>
+ <Line>das aus aus das aus sie sie sie uns uns uns sie sie uns uns</Line>
+ <Line>ist ist ist sind sind dies dies hast hast hast hast ins ins</Line>
+ <Line>seid seid seid sein sein sein seid seid sein sein seit seit</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>oslo oslo oslo gast gast gast oslo oslo oslo gast gast gast</Line>
+ <Line>soll soll soll dies dies dies soll soll soll dies dies dies</Line>
+ <Line>oslo gast soll dies oslo gast soll dies oslo gast soll dies</Line>
+ <Line>steht steht steht geist geist geist steht steht geist geist</Line>
+ <Line>reise reise reise gleis gleis gleis reise reise gleis gleis</Line>
+ <Line>seins seins seins alles alles alles seins seins alles alles</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>es sei eilig es sei sehr eilig es sei eiliger er erstehe es</Line>
+ <Line>sieh heraus sieh hierher sieh hinein er lag erledige das es</Line>
+ <Line>niste hier lies hier lasse sie lesen sei doch sicher hier</Line>
+ <Line>es sei elias es sei heller satin suche sie hier ist soldat</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ece nhn ala rgr ece nhn eoe nsn ala rgr ece nhn eoe nsn ala</Line>
+ <Line>eceoe nhnsn eceoe nhnsn eceoe nhnsn eceoe nhnsn eceoe nhnsn</Line>
+ <Line>ost her los ist sog lag ost her los ist sog lag ost her lag</Line>
+ <Line>sehe lido icon gras cash doch sehe lido icon gras cash doch</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Konsonant: w</NewCharacters>
+ <Line>ece ewe ewe ewe ece ewe ece ewe ece ewe ewe ewe ece ewe ece</Line>
+ <Line>ewu ewi ewa ewu ewi ewa ewu ewi ewu ewi ewa ewu ewi ewa ewu</Line>
+ <Line>wed wet wer wen wed wet wer wen wed wet wer wen wed wet wer</Line>
+ <Line>wer wer wer was was was wer wer wer was was was wer wer wer</Line>
+ <Line>wie wie wie wut wut wut wie wie wie wut wut wut wie wie wie</Line>
+ <Line>wer was wie wut wut wie was wer wer was wie wut wut wie was</Line>
+ <Line>wache wache wache gewalt schwan gewalt schwan gewalt schwan</Line>
+ <Line>etwas etwas etwas wunsch darwin wunsch darwin wunsch darwin</Line>
+ <Line>sowie sowie sowie ingwer anwies ingwer anwies ingwer anwies</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>etwa etwa etwa wust wust wust etwa etwa etwa wust wust wust</Line>
+ <Line>wild wild wild wege wege wege wild wild wild wege wege wege</Line>
+ <Line>ewig ewig ewig show show show ewig ewig ewig show show show</Line>
+ <Line>gewehr gewehr gewehr darwin darwin darwin gewehr gewehr was</Line>
+ <Line>wucher wucher wucher erwies erwies erwies wucher wucher wie</Line>
+ <Line>gewehr darwin wucher erwies gewehr darwin wucher erwies wen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wichtiger Konsonant: k</NewCharacters>
+ <Line>nhn nkn nkn nkn nhn nkn nhn nkn nhn nkn nkn nkn nhn nkn nhn</Line>
+ <Line>nkd nkt nkr nkd nkt nkr nkd nkt nkr nkd nkt nkr nkd nkt nkr</Line>
+ <Line>knd knt knr kne kna kni knu knd knt knr kne kna kni knu knd</Line>
+ <Line>ack ack ack kat kat kat ack kat ack kat ack kat ack kat ack</Line>
+ <Line>kork kork kork kork keile keile kork kork keile keile keile</Line>
+ <Line>kick kick kick kick keile keile kick kick keile keile keile</Line>
+ <Line>kelch kelch kelch kiste kiste kelch kelch kelch kiste kiste</Line>
+ <Line>erika erika erika denken denken erika denken denken denkend</Line>
+ <Line>danke danke danke gockel gockel danke gockel gockel dankend</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>etikett etikett etikett reitet reitet reitet dritte dritter</Line>
+ <Line>hektik hektik heiter heiter heute heute heutig geistig keck</Line>
+ <Line>risiko risiko risiko stickig stickig stickig stickig risiko</Line>
+ <Line>grotesk grotesk grotesk trinkgeld trinkgeld warnstreik keks</Line>
+ <Line>erkundet erkundet erkundet dekadentes dekadentes dekadentes</Line>
+ <Line>kirche kirche kirche ikarus ikarus kirche ikarus reki kirre</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>er hinkte hin deckte erst sie konnte hocken er knackte es</Line>
+ <Line>leite es leite es gut leite alle gut er hat gut geleitet er</Line>
+ <Line>sie teilte es aus sie teilte alles aus sie hat es geteilt</Line>
+ <Line>sie ist keck er weckte sie sachte keiner kann klagen keiner</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ali rgt eci nht ewi nkt eoi nst ali rgt eci nht ewi nkt eoi</Line>
+ <Line>ecewe nhnkn ewece nknhn ecewe nhnkn ecewe nhnkn ecewe nhnkn</Line>
+ <Line>gut hat tut tat raten kate streute satte hatte siehe klasse</Line>
+ <Line>kann guckt ewig geklaut geteilt gelitten gewundene geheilte</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: p</NewCharacters>
+ <Line>ece epe epe epe epd ept epr epn epu epi epa epe epa epi epu</Line>
+ <Line>ped pet per pen peu pei pea peu ped pet per pen pee pea pei</Line>
+ <Line>span spar spin spuk spiel sporn spreu sport sprit spion pol</Line>
+ <Line>knappe spielt speist sprechen platt planen poliert spanisch</Line>
+ <Line>kuppe tippt saphir kopiert april chips pest pils plan raupe</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>park park parole parole park park parole parole park partei</Line>
+ <Line>spinat spinat sport sport spinat spinat sportlich sportlich</Line>
+ <Line>pilger pillen pinie pirat poren pokal poker pointe post pol</Line>
+ <Line>prawda prawda prawda purpur purpur purpur prawda purpur pin</Line>
+ <Line>chopin tippst kippst spiel spinat spreu sport kasper kapsel</Line>
+ <Line>april april apache apache alpen alpen april apache purpurne</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: m</NewCharacters>
+ <Line>nhn nmn nmn nmn nmu nmi nma nme nmd nmt nmr nmn nmd nmt nmn</Line>
+ <Line>nmu nmi nma nme nmn nmr nmt nmd um um um um im im im im arm</Line>
+ <Line>kam kam kam dem dem dem kam dem mir mir mir mag mag mag mir</Line>
+ <Line>male male male mild milde milde am mehr mehr mehr arme arme</Line>
+ <Line>male mehr mild male mehrere milde malen mehrere milder mehr</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>merke merke merke meide meide meide merke merke meide meide</Line>
+ <Line>reime reime reime melde melde melde reime reime melde melde</Line>
+ <Line>immer immer immer mager mager mager immer immer mager mager</Line>
+ <Line>merke merke merke tempo tempo tempo merke merke tempo tempo</Line>
+ <Line>emsig emsig emsig palme palme palme emsig emsig palme palme</Line>
+ <Line>leime leime leime umher umher umher leime leime umher umher</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>peter mag es melde es mir er kam er tauschte es sie passte</Line>
+ <Line>er hatte es gesagt sei schnell klapperte es er klapperte er</Line>
+ <Line>mehrmals passiert immer gemerkt sie ist sehr anschmiegsam</Line>
+ <Line>er mag es er hatte es gesagt er pausierte war talentiert es</Line>
+ <Line>spam spam spam and eggs and spam some ham and a lot spam</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ece epe nhn nmn ecepe nhnmn eoe nsn ece epe nhn nmn ece epe</Line>
+ <Line>uiaepe dtrnmn ala rgr uiaepe dtrnmn ala rgr uiaepe dtrnmn a</Line>
+ <Line>mit mir mag mal mehr spiel immer mit mir mag mal impuls mit</Line>
+ <Line>die der das dem am im hiermit damit die der das dem am mehr</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: z</NewCharacters>
+ <Line>epe eze eze eze ezd ezt ezr ezn epe eze eza ezi ezu ezi eza</Line>
+ <Line>zer zer zer zir zir zer zir zage zage zage zage ziehe ziehe</Line>
+ <Line>ziege ziege zage zage ziehe ziehe ziehe zerrt zerrte zerrte</Line>
+ <Line>zielet zielet sitzt sitzt sitzt ritzte ritzte letzte letzte</Line>
+ <Line>zunge zunge zunge schmerz schmerz schmerz zunge zunge zagte</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>katze katze katze zarte zarte zarte katze katze zarte zarte</Line>
+ <Line>prinz prinz prinz zarin zarin zarin prinz prinz zarin zarin</Line>
+ <Line>katze zarte prinz zarin katze zarte prinz zarin katze zarte</Line>
+ <Line>zeigen zeigen zeigen ritzel ritzel ritzel zeigen ritzel zum</Line>
+ <Line>zieren zieren zieren kratzte kratzte kratzte zieren kratzte</Line>
+ <Line>zeigen ritzel zieren kratzte zeigen ritzel zierten kratzten</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: b</NewCharacters>
+ <Line>nmn nbn nbn nbn nbu nbi nba nbe nbd nbt nbr nbn nbd nbt nbr</Line>
+ <Line>bnb bei bei bei bau bau bau bei bei bau bau bei bau bei bau</Line>
+ <Line>aber aber aber bald bald bald bann bann bann blau blau blau</Line>
+ <Line>beide beide beide klebet klebet klebet beiden beiden klebet</Line>
+ <Line>bekam bekam bekam liebe lieber lieber dabei dabei bittet ab</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>biete biete biete halbe halbe halbe biete biete biete halbe</Line>
+ <Line>bitte bitte bitte lebet lebet lebet bitte bitte lebet lebet</Line>
+ <Line>biete halbe bitte lebet biete halbe bitte lebet biete halbe</Line>
+ <Line>lieber lieber lieber blauer blauer lieber lieber blauer bat</Line>
+ <Line>gelber gelber gelber selber selber selber gelber selber bis</Line>
+ <Line>lieber blauer gelber selber selber gelber blauer lieber bei</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>sie zankten sie bieten sie sehen es ein sie bitten darum es</Line>
+ <Line>sie zahlen sie geben sie kennen sie beten sie behandeln sie</Line>
+ <Line>sie zampelten sie konnte es sie hatte es aber gelernt es</Line>
+ <Line>nun bittet sie darum zum schluss dann sie hatte es gelernt</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ece nhn ewe nkn eoe nsn epe nmn eze nbn ece nhn ewe nkn eoe</Line>
+ <Line>uiaeze dtrnbn ezeaiu nbnrtd uiaeze dtrnbn ezeaiu nbnrtd uia</Line>
+ <Line>an ab in im bis neu bei nie an ab in im bis neu bei nie bar</Line>
+ <Line>aber neue denn kann dann denn aber neue denn kann dann denn</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neues Satzzeichen: ,</NewCharacters>
+ <Line>nmn r,r r,r r,r r,u r,i r,a r,e r,d r,t r,n r,d r,t r,t r,n</Line>
+ <Line>da, da, da, na, na, na, da, da, na, na, da, da, na, na, da,</Line>
+ <Line>aber, aber, aber, neues, neues, dann, dann, dann, aber, da,</Line>
+ <Line>bilde, jene, jene, jene, meine, meine, bis, ein, sein, bis,</Line>
+ <Line>bis, ein, sein, kein, dein, in, aus, ans, sein, bald, leer,</Line>
+ <Line>an, mir, sei, denn, mehr, hier, am, aus, bis, ein, sei, an,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>sie sagen mir, sie sagen dir, sie sagen ihr, sie sagen mir,</Line>
+ <Line>sie holen es, geben sie es, legen sie es, dann sagst du an,</Line>
+ <Line>senden sie es, senden sie es ab, senden sie es nun bald ab,</Line>
+ <Line>sie stellen aus, sie stellen es aus, stelle es bald hierher</Line>
+ <Line>sie brachte mir, sie brachte es bald, sie brachte es zuerst</Line>
+ <Line>sie hat es bemerkt, sie hatte bemerkt, sie bemerkten alles,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neues Satzzeichen: .</NewCharacters>
+ <Line>mnm r,r t.t t.t t.u t.i t.a t.e t.d t.t t.n t.r t.d t.n t.r</Line>
+ <Line>t.n es. es. es. er. er. er. es. er. an. an. an. es. er. an.</Line>
+ <Line>eine. eine. eine. eines. eines. bald. bald. sitzt. bald. an</Line>
+ <Line>aber. aber. aber. holt. holt. dar. dar. dar. her. her. hin.</Line>
+ <Line>kaute. mir. mir. mir. dir. dir. melde. ihr. ihr. ihre. des.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>klage, klage. klage, klage. klage, klage. klage, klage. an.</Line>
+ <Line>neues, neues. altes, altes. neues, neues. altes, altes. in.</Line>
+ <Line>meine, meine. deine, deine. meine, meine. deine, deine. am.</Line>
+ <Line>bauen, bauen. nenne, nenne. bauen, bauen. nenne, nenne. im.</Line>
+ <Line>ihren, ihren. gerne, gerne. ihren, ihren. gerne, gerne. da.</Line>
+ <Line>seine, seine. keine, keine. seine, seine. keine, keine. um.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>sie sahen es, sie konnten es, sie meinten es, dann sah sie.</Line>
+ <Line>sie legen aus, sie sagen aus, sie horchen mit, sie merkten.</Line>
+ <Line>sie dachte mit, sie horchte aus, sie nimmt mit, sie bindet.</Line>
+ <Line>alles sagen es, alle haben es, alles hegen es, alles sagen.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ala rgr ece nhn ewe nkn eoe nsn epe nmn eze nbn r,r t.t ala</Line>
+ <Line>eweze nknbn eweze nknbn eweze nknbn eweze nknbn eweze nknbn</Line>
+ <Line>in zu er an es im da um du am wo die der und den das seinen</Line>
+ <Line>sie ist des mit dem ein was als man aus nur bei hat mir ihm</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Linker Umschalter</NewCharacters>
+ <Line>nNe nNe Ne Ne Ne Nest Nest Nest</Line>
+ <Line>rRa rRa Ra Ra Ra Rest Rest Rest</Line>
+ <Line>lLa lLa La La La Land Land Land</Line>
+ <Line>dDa dDa Da Da Da Dach Dach Dach</Line>
+ <Line>Nest Rest Land Dach, Nest Rest,</Line>
+ <Line>das Nest, das Nest, dieses Nest</Line>
+ <Line>mit Rest, mit Rest, unser Rest,</Line>
+ <Line>das Land, das Land, unser Land,</Line>
+ <Line>das Dach, das Dach, dieses Dach</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>Haus Hase Haar Hass Halt Hast Halm Hand Hang Harz Hausstand</Line>
+ <Line>Zahl Zahn Zaum Zaun Zeit Zelt Zeug Ziel Zier Zink Zeitungen</Line>
+ <Line>Uter Ulla Ulmen Urteil Urlaub Urheber Uhr Uhrzeiger Unkraut</Line>
+ <Line>Mann Maus Mahl Mais Mark Mein Mehl Mai Mus Mut Maler Makler</Line>
+ <Line>Naht Name Nase Narr Neid Niere Namen Nager Natur Niederlage</Line>
+ <Line>Idee Ihre Irre Inder Islam Inhalt Inland Irrtum Intelligenz</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Groß und klein im Wechsel</NewCharacters>
+ <Line>das Haus, der Hase, das Haar, die Haut, der Halt, die Hast,</Line>
+ <Line>der Halm, die Hand, der Hang, das Harz, die Zahl, der Zaun,</Line>
+ <Line>die Zeit, das Zeug, das Ziel, das Zink, der Ural, die Ulme,</Line>
+ <Line>der Mann, die Maus, das Mahl, der Mais, die Mark, der Main,</Line>
+ <Line>das Mehl, die Naht, der Name, die Nase, der Narr, der Neid,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Kurze Trainingssätze</NewCharacters>
+ <Line>Paul nimmt teil. Hans lernt eisern. Ute arbeitet schon mit.</Line>
+ <Line>Helene kam bald. Ideen hatten alle. Ihre Woche sagt mir zu.</Line>
+ <Line>Man sagte Karl. Nimm Kurz nun mit. Unser Haus steht schon.</Line>
+ <Line>Uns sagt sie es. Paul trank Bier. Ihr Name ist unbekannt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Unser Sicherheitstest</NewCharacters>
+ <Line>Herr Hauser bat uns, ihm bald das Bestellte zu senden.</Line>
+ <Line>Schon bittet er ihn, die Lage aber sehr genau zu studieren.</Line>
+ <Line>Unsere Idee hatte allen anderen Interessenten gut getan.</Line>
+ <Line>Hole nun die neuen Zeitungen am besten bei Herrn Meisters.</Line>
+ <Line>Ihr Name ist nun in Wehr, Hamburg und Dresden sehr bekannt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>Nu Ru Tu Du Ku Hu Bu Mu Gu Nu Ru Tu Du Ku Hu Bu Mu Gu Nu Ru</Line>
+ <Line>Wagt Paul Land Pole Zahn Ulk Name Mann Idee Paar Kind Lamm</Line>
+ <Line>in Ulm, bis Kiel, aus Leer, in Linz, bis Mainz, in Hamburg,</Line>
+ <Line>in Idstein, aus Immenstadt, bis Pilsen, aus Wahl, in Kassel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Rechter Umschalter</NewCharacters>
+ <Line>eEd eEd Ed Ed Ed Edel Edel Edel</Line>
+ <Line>aAd aAd Ad Ad Ad Adel Adel Adel</Line>
+ <Line>iId iId Id Id Id Inge Inge Inge</Line>
+ <Line>uUd uUd Ud Ud Ud Udel Udel Udel</Line>
+ <Line>Edel Adel Inge Udel, Edel, Adel</Line>
+ <Line>das Edel, der Adel, dieser Adel</Line>
+ <Line>die Inge, die Inge, diese Inge,</Line>
+ <Line>der Udel, der Udel, dieser Udel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>Gold Glas Gabe Gans Gang Gast Geld Grog Gut Gas Georg Gatte</Line>
+ <Line>Tube Turm Tier Teil Takt Teig Taue Teer Tat Tal Trieb Tasse</Line>
+ <Line>Ruhe Ruhm Rind Ritt Rose Rahm Rast Rabe Rum Rat Ruder Reise</Line>
+ <Line>Wadi Ware Wehr Wien Woge Wurm Wust Wand Weg Wal Wachs Worte</Line>
+ <Line>Bild Bier Bude Bund Beil Bart Baum Bank Bau Bai Bibel Beere</Line>
+ <Line>Eile Eier Ebbe Ewok Ehre Emma Emmi Else Eis Eid Esche Enkel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Groß und klein im Wechsel</NewCharacters>
+ <Line>die Gabe, die Gans, der Gang, der Gast, das Geld, aus Graz,</Line>
+ <Line>der Guss, das Glas, das Tier, der Turm, der Teil, der Takt,</Line>
+ <Line>der Teig, die Taue, die Tube, der Teer, die Ruhe, der Ruhm,</Line>
+ <Line>das Rind, der Ritt, der Rhein, der Rahm, die Rast, der Rabe,</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Kurze Trainingssätze</NewCharacters>
+ <Line>Willi nahm teil. Beate ist eisern. Rainer arbeitet bei uns.</Line>
+ <Line>Sie kann rennen. Alle rieten dazu. Er konnte heute kommen.</Line>
+ <Line>Der Rat ist gut. Bitte wiegen Sie. Der Papst hat abgesagt.</Line>
+ <Line>Er teilt es ein. Bedenke es immer. Sprechen Sie mit Walter.</Line>
+ <Line>Reise nach Trier. Bestelle es bald. Gib mir die Ersatzteile</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>Der Betrag des Essener Kunden ist in einer Woche bezahlt.</Line>
+ <Line>Der Berner Spediteur hat uns das neue Arbeitsblatt gesandt.</Line>
+ <Line>Alle Schreiben, die Sie erhalten haben, sind nicht unterschrieben.</Line>
+ <Line>Der Bekannte aus dem IRC behauptete, er tippe sehr schnell.</Line>
+ <Line>Es ist immer ratsam, gute Gedanken ganz genau zu merken.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ece nhn ala rgr epe nmn ala r,r ece nhn ala rgr epe nmn ala</Line>
+ <Line>ecepe nhnmn alala rgr,r ecepe nhnmn alala rgr,r ecepe nhnmn</Line>
+ <Line>nicht eines durch haben diese hatte seine unter ihnen meine</Line>
+ <Line>Herrn Recht Leben Jahre Seite Macht Waage Augen Pater Stadt</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: v</NewCharacters>
+ <Line>ece nhn ivi ivi ivi ivd ivt ivr</Line>
+ <Line>ece ala ivi ivi ivu iva ive ivi</Line>
+ <Line>ved vad vid vud ved vad vid vud</Line>
+ <Line>viel viele viele vier vier vier</Line>
+ <Line>vieles vieles vieler vieler ver</Line>
+ <Line>verh verk verl verz vers verdau</Line>
+ <Line>verlas verlas verlas verlas ver</Line>
+ <Line>versah versah versah versah ver</Line>
+ <Line>verzeih verzeih verzeih verzeih</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>viel viele vieler vieles viel viele vieler vieles viel viel</Line>
+ <Line>voll volle voller volles voll volle voller volles voll voll</Line>
+ <Line>verliere verliere verliere verloren verloren verloren volle</Line>
+ <Line>verlieh verlieh verlieh verleihe verleihe verleihe verliert</Line>
+ <Line>verlade verlade verlade verlasse verlasse verlasse veredelt</Line>
+ <Line>vorkasse vorkasse vorlassen vorlassen verlassen verlassen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe f (o)</NewCharacters>
+ <Line>nhn rgr tft tft tft tfu tfi tfa</Line>
+ <Line>nhn rgr tft tft tfd tfr tfn tft</Line>
+ <Line>fiel fiel lief, lief frei frei,</Line>
+ <Line>folgen, flogen, duftet, kaufst,</Line>
+ <Line>deftig, anrief, haufen, farben,</Line>
+ <Line>furios, impfen, frevle, stumpf,</Line>
+ <Line>oft folgt auf frohsinn flunkern</Line>
+ <Line>friere muffig greife laufen frei</Line>
+ <Line>pfeife impfen zapfte stopft fun</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>vorfinden vorwerfen fortlaufen fortsetzen fortbewegen Fluch</Line>
+ <Line>pfeifen fangen pflegen rupfen stopfen tapfer klopfen impfen</Line>
+ <Line>Fort Pfote Gipfel Trumpf Pfand Pfau Schopf Ofen Dorf Stoffe</Line>
+ <Line>Freunde fand ich fortan folgsame friedliche insofern Furcht</Line>
+ <Line>ferner fanden Erfolge vom Stoffe viele Frauen mit geflochten</Line>
+ <Line>farbenfrohen Frohsinn, mit feuerroten Frisuren auf Pferden.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>13 Ein Umlaut: ä (c) </NewCharacters>
+ <Line>eceala nhnrgr ecergr nhnrgr eceala nhnrgr eceala nhnrgr ece</Line>
+ <Line>epu nmd ezu nbd eou nsd ewu nkd epu nmd ezu nbd eou nsd ewu</Line>
+ <Line>eine aber denn sein sind habe dies kann mehr sehr hier ihre</Line>
+ <Line>Dank Ehre Eile Ende Gabe Kern Raum Ruhe Rang Ruhm Saal Sieg</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Erster Umlaut: ä</NewCharacters>
+ <Line>epe nmn r,r aäa aäa aäu aäi aäe</Line>
+ <Line>wäre sähe läge wäre sähe hätten</Line>
+ <Line>kämen lägen wären nähme während</Line>
+ <Line>lässig mächtig allmählich gäben</Line>
+ <Line>ändern gänzlich fänden spärlich</Line>
+ <Line>älter ständig städtisch nämlich</Line>
+ <Line>häusliche erhältliche nächtlich</Line>
+ <Line>sächliche tägliche hinlängliche</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>älter abgewälzt später gläubig kräftiger nächstens zunächst</Line>
+ <Line>geändert verändert wärmen länger ländliche pubertär wählbar</Line>
+ <Line>prächtig gesprächig umständliche erträgliche tätige tätlich</Line>
+ <Line>in der Nähe, im März, die Wände, alle Ämter, bei der Kälte,</Line>
+ <Line>alle Ärzte, auf den Bäumen, wichtige Päckchen, diese Räume,</Line>
+ <Line>diese Wärme, an solchen Plätzen, mehrere Käufer, die Häuser</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Rechtschreibklippen</NewCharacters>
+ <Line>gar gären, die Gebärde, malen Gemälde, Gram grämen, hämisch</Line>
+ <Line>Haar Härchen, zäh Zähheit, laden lädt, klar klären, Märchen</Line>
+ <Line>Kran Kräne, Name nämlich, Paar Pärchen, säen Sämann, Dänen.</Line>
+ <Line>ähnliches allmähliche, Draht Drähte, fahren Fähre, Fähnchen</Line>
+ <Line>gähnen, gewahr gewähren Gewähr, Kahn Kähne, Naht Nähte, sah</Line>
+ <Line>sähen, spähen spähte spähten, Stahl Stähle stählern stählen</Line>
+ <Line>Kapitän wägbare Moräne Sekretäre Militär Wartesäle Bläschen</Line>
+ <Line>Atmosphäre Choräle Dänemark Dämon Trainer Training, Airbus.</Line>
+ <Line>Gäste Geste, Lärchen Lerchen, Schwämme Schwemme, Ähre Ehre.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Geläufigkeitssätze</NewCharacters>
+ <Line>Später wollen wir uns nämlich ebenfalls damit beschäftigen.</Line>
+ <Line>Unser Einzelhändler mächte seine Geschäftsumsätze steigern.</Line>
+ <Line>Seit längerer Zeit haben wir unsere Geschäftszeit geändert.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ivi tft ala rgr ece nhn ewe nkn eoe nsn epe nmn eze nbn aäa</Line>
+ <Line>aäa r,r epe nmn eze nbn eoe nsn ewe nkn ece nhn ala rgr ivi</Line>
+ <Line>vor von wie war was vor wenn wird wurde waren wollen werden</Line>
+ <Line>vom oft von vom oder noch vorn doch schon ohne wohl sondern</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: q</NewCharacters>
+ <Line>ece ala ivi uqu uqu uqu uqd uqt</Line>
+ <Line>ece ala ivi uqu uqu uqe uqa uvi</Line>
+ <Line>qui quo qua que qui quo qua que</Line>
+ <Line>quer quer quoll quer quer quoll</Line>
+ <Line>quitt quitt quillt quitt quillt</Line>
+ <Line>bequem bequem, bequeme bequemer</Line>
+ <Line>Qualm Quarz Qualm Quarz Quartal</Line>
+ <Line>Qual Quell Quote Quelle Quadrat</Line>
+ <Line>Quantum Quadern Quittung Quaste</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>die Quelle kennen, die Quelle nennen, diese Quellenangaben,</Line>
+ <Line>den Eingang quittieren, sofort quittieren, diese Quittungen</Line>
+ <Line>im vorigen Quartal, im letzten Quartal, im vorigen Quartal.</Line>
+ <Line>Die Polster sind bequem, jedoch auch qualitativ ansprechend</Line>
+ <Line>Auf die Anzeige haben sich qualifizierte Bewerber gemeldet.</Line>
+ <Line>Die Querverbindung wurde im vorigen Quartal fertiggestellt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: j</NewCharacters>
+ <Line>nhn rgr tft djd dju djd dju dji</Line>
+ <Line>nhn rgr tft djd djd djn djr djt</Line>
+ <Line>jaule, jobben, jähem, jäten, ja</Line>
+ <Line>bejahen, jemand, judith, junges</Line>
+ <Line>jährt, jäten, jenem, jemals, je</Line>
+ <Line>jobben, jubeln, jährt, verjagt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>jemand juchzt junge jemals gejuckt jäten jährig jähem jaule</Line>
+ <Line>Jahren Jauche Jonas Objekt Juli Jubilar Joghurt Jacke Jäger</Line>
+ <Line>Fjord Neujahr Juwelen Jumbos Julia Jaffa Banjo Ehejahr Juni</Line>
+ <Line>Der jungen Juwelendiebin Julia juckten die Finger auf Jalta</Line>
+ <Line>In Jordanien jubelt die Menge, als die Justiztagung jährte.</Line>
+ <Line>In der Kammer der Jacht findet jeder seine Koje wie jemals.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Sicherheitstest</NewCharacters>
+ <Line>Wir hatten dem Postboten den Empfang des Paketes quittiert.</Line>
+ <Line>Im jüngsten Quartal konnten wir alle Preise stabil halten.</Line>
+ <Line>Sie beobachteten den Stand des Quecksilbers im Thermometer.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>uquivialaece djdtftrgrnhn uquivialaece djdtftrgrnhn uquivia</Line>
+ <Line>epeaäanmnr,r epeaäanmnr,r epeaäanmnr,r epeaäanmnr,r epeaäan</Line>
+ <Line>beim fast gibt drei kaum alte geht neue seit viel soll etwa</Line>
+ <Line>Gast Geld Gott Glas Graf Gang Gold Grab Gram Golf Glut Gabe</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: y</NewCharacters>
+ <Line>eoe dyd dyd dyd dyn dyr dyt dyd</Line>
+ <Line>nd ny nd ny nd ny nd ny nd nynd</Line>
+ <Line>sys rhy zyl bay typ hyg sym phy</Line>
+ <Line>bayerisch, bayerisch, bayerisch</Line>
+ <Line>typisch typische am typischsten</Line>
+ <Line>sympathisch, am sympathischsten</Line>
+ <Line>Type, Syrien, Analyse, Zylinder</Line>
+ <Line>Payern, Symbol, Hygiene, Physik</Line>
+ <Line>System, Dynamo, Symbol, Symbole</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>System Typhus Physik Psyche Dynamo Hockey Syrien Zypern Typ</Line>
+ <Line>Cowboy Analyse Boykott Rhythmus Zylinder Paraguay Sympathie</Line>
+ <Line>Airways, Baby, Embryo, Layout, Society, Bypass, Party, Maya</Line>
+ <Line>Boy, Cowboy, City, Jury, Whiskey stammen aus dem Englischen</Line>
+ <Line>Dieser Kongress soll in einer bayerischen Stadt stattfinden</Line>
+ <Line>Im März will Herr Meyer zur Kur nach Bad Oeynhausen fahren.</Line>
+ <Line>Zeigen Sie auf der Karte Bayreuth, Speyer, Rheydt und Sylt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: ü</NewCharacters>
+ <Line>epe aäa iüi iüi iüi iüd iüt iür</Line>
+ <Line>epe aäa iüi iüi iüe iüa iüu iüi</Line>
+ <Line>für für für für für für für für</Line>
+ <Line>für dafür wofür für dafür wofür</Line>
+ <Line>übe über über über über überaus</Line>
+ <Line>darüber vorüber darüber darüber</Line>
+ <Line>würde würden würde würdet würde</Line>
+ <Line>müsse müssen müsse müssen müsse</Line>
+ <Line>dürfe dürft dürfen dürfe dürfte</Line>
+ <Line>zurück zurückging zurückstellen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>blühe blühen blühten kühl kühle kühler kühlen glühen glühte</Line>
+ <Line>kühn kühne kühner kühnste mühen mühten bemüht rühmt berühmt</Line>
+ <Line>Haustür Wagentür Türheber Güte Güter Güterzüge Glückwünsche</Line>
+ <Line>Sämtliche Nürnberger Kunden loben die verzügliche Qualität.</Line>
+ <Line>Jetzt würden wir uns natürlich über eine Bestellung freuen.</Line>
+ <Line>Für Ihre Glückwünsche zu unserem Jubiläum danken wir Ihnen.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ecewe nhnkn epeze nmnbn alaäa rgr,r iviüi tft.t ecewe nhnkn</Line>
+ <Line>uqu djd ydy ivi tft ala rgr ece nhn epe nmn aäa r,r iüi t.t</Line>
+ <Line>dahin sowie daran guten klein unser stets denkt alten jedem</Line>
+ <Line>Tafel Tante Tisch Tigel Träne Trost Tempo Traum Tritt Tasse</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: ß</NewCharacters>
+ <Line>ewe dßd dßd dßd dßn dßr dßt dßd</Line>
+ <Line>ßdn ßdr ßdt ßdn ßdr ßdt ßdn ßdr</Line>
+ <Line>ußd ißd aßd eßd oßd ußd ißd aßd</Line>
+ <Line>saß fuß saß fuß saß fuß saß fuß</Line>
+ <Line>gruß fließen, ließen gießen saß</Line>
+ <Line>außen außer draußen äußerte ruß</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>größer größere größeren größer größere größeren, am größten</Line>
+ <Line>Maß Fuß Gruß weißt schweißt heiß reißt beißt meist heißt es</Line>
+ <Line>groß bloß Stoß großartig großmütig mäßig unmäßig übermäßig,</Line>
+ <Line>Ihre großartigen Erfolge haben uns außerordentlich gefreut.</Line>
+ <Line>Die Firma Strauß hatte bisher bloß kleine Aufträge erteilt.</Line>
+ <Line>Übermäßiger Genuss von Süßigkeiten ist so gewiss schädlich.</Line>
+ <Line>Sie haben bestimmt große Erfolge, wenn Sie regelmäßig üben.</Line>
+ <Line>Ein gleichmäßiger Schreibfluss ist das große Erfolgsrezept.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir wiederholen</NewCharacters>
+ <Line>ecepe nhnmn alaäa rgr,r iviüi tft.t ecepe nhnmn alaäa rgr,r</Line>
+ <Line>Qual Qualm Quarz Quelle Quere Quote Quantum Qualität Quaste</Line>
+ <Line>Pol Paul Post Paar Papa Peter Paket Päckchen Politik Pfähle</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: ö</NewCharacters>
+ <Line>epe aäa iüi uöu uöu uöd uöt uör</Line>
+ <Line>epe aäa iüi uöu uöe uöa uöi uöu</Line>
+ <Line>jör jör öle öle öre öre öde öde</Line>
+ <Line>Öle wölben störte gröle Wörter böig Röcke Köcher Höhe tötet</Line>
+ <Line>dösen Einöde möchte blöde öde Wölfe Böcke Böe Götzen Knödel</Line>
+ <Line>krönen höhnen völlig vögeln öffne ölig Löwe Rohöl Köter Öde</Line>
+ <Line>BAfÖG Dörfer blöße Bögen Röhren Römer Stör Flöße spröde Öle</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>Pöbel löten krönen Anhöhe Ölbild wölben können Likör Löcher</Line>
+ <Line>möchte blöder Rapsöl Malmö Köder Ölhahn zuhört röter flöten</Line>
+ <Line>gedöst Knöpfe Blöcke Tenöre Öffner Ölzeug Walöl Wölfe Römer</Line>
+ <Line>Tölpel Körbe Körner Löwin höhnen Böhmen Chöre Dörfer Könige</Line>
+ <Line>Göre Gönner Höhlen Köder Möbel Lötpin Löhne Mönche Köln Öle</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Neuer Buchstabe: x</NewCharacters>
+ <Line>nmn r,r t.t dxd dxd dxn dxr dxt</Line>
+ <Line>nmn r,r t.t dxd dxe dxa dxi dxu</Line>
+ <Line>uxd ixd axd exd oxd nxd rxr txd</Line>
+ <Line>fix fix fix fix lax lax lax lax</Line>
+ <Line>exakt exakt mixen mixen gemixte</Line>
+ <Line>boxte boxte extre extra taxiert</Line>
+ <Line>Box Box Jux JUx Fox Fox Exempel</Line>
+ <Line>Text Text Index Index Explosion</Line>
+ <Line>Reflex Reflex Komplex Taxi Taxi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>extra mixen extrem extern maximal flexibel fixiert exklusiv</Line>
+ <Line>Fixum Praxis Dioxin Examen Mixtur Export Experte Expedition</Line>
+ <Line>Max Alex Axel Felix Yaver Xenia Beatrix Alexandra Luxemburg</Line>
+ <Line>Herr Felix Flex ist jetzt unser neuer Mitarbeiter in Texas.</Line>
+ <Line>Die Exportgesellschaft exportiert aber auch nach Luxemburg.</Line>
+ <Line>Die Textilfabrik Rex sucht qualifizierte Textprogrammierer.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wiedergabe des x</NewCharacters>
+ <Line>Manchmal schreiben wir x, dann wieder cks, gs, ks oder chs.</Line>
+ <Line>Im Aufsatzheft hat Alex unsauber geschrieben und gekleckst.</Line>
+ <Line>Carmen will in Luxemburg auch Keks und echten Lachs kaufen.</Line>
+ <Line>Er sollte sich allerdings nicht ins Bockshorn jagen lassen.</Line>
+ <Line>Sicherlich fliegst du an Pfingsten mit Beatrix nach Mexiko.</Line>
+ <Line>Die Heizung der Arztpraxis wurde jetzt auf Koks umgestellt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Das letzte Zeichen: -</NewCharacters>
+ <Line>djd dßd djd d-d d-n d-r d-t d-n</Line>
+ <Line>-dn -dr -dt -dn -dr -dt -dn -dn</Line>
+ <Line>u-d i-d a-d e-d o-d u-d i-d a-d</Line>
+ <Line>hö- ren, mer- ken, er- war- ten</Line>
+ <Line>sa- gen, tra- gen, an- fra- gen</Line>
+ <Line>emp- fahl, emp- fing, emp- fand</Line>
+ <Line>imp- fen, impf- te, schimp- fen</Line>
+ <Line>be- stes, fe- ste, ge- ra- stet</Line>
+ <Line>bak- ken, glük- ken, strik- ken</Line>
+ <Line>grü- ßen, flie- ßen, schie- ßen</Line>
+ <Line>La- dung, Fü- gung, Zei- tungen</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Wir üben</NewCharacters>
+ <Line>her- aus, her- ein, her- um, her- an, her- über, her- unter</Line>
+ <Line>hin- auf, hin- über, hin- aus, hin- unter, hin- ein- gehen,</Line>
+ <Line>dar- aus, dar- über, dar- auf, dar- unter, dar- auf- legen.</Line>
+ <Line>wor- in, wor- an, wor- um, wor- unter, wor- auf, wor- über,</Line>
+ <Line>Leh- re- rin, Schü- le- rin, Se- kre- tä- rin, Bäk- ke- rei</Line>
+ <Line>Kon- di- to- rei, Metz- ge- rei, Schrei- ne- rei, Si- gnal.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Shell-Einleitung</NewCharacters>
+ <Line>Es ist wichtig, auf einer Tastatur nicht nur effizient die</Line>
+ <Line>Texteingabe zu beherrschen, sondern auch die Eingabe von</Line>
+ <Line>üblichen Befehlen schnell und sicher zu erledigen. Fehler</Line>
+ <Line>bei diesen Eingaben können teilweise verheerend sein, des-</Line>
+ <Line>halb achten Sie im Folgenden auf ihre Fehlerfreiheit.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Unixbefehle</NewCharacters>
+ <Line>ls ls ls ls ls ls cd cd cd cd cd cd ls cd ls cd ls cd</Line>
+ <Line>ll awk ll awk dir cp cd cp cd cp cd rm mkdir rm mkdir</Line>
+ <Line>cd .. rm cd .. rm vi vi vi cc cc cc ls cd vi cc ls cd</Line>
+ <Line>nmap awk ifconfig traceroute ls awk cd traceroute dev</Line>
+ <Line>cd /proc/</Line>
+ <Line>cd ..</Line>
+ <Line>cd ~</Line>
+ <Line>cd ~/Documents</Line>
+ <Line>cd /tmp</Line>
+ <Line>less README</Line>
+ <Line>./configure</Line>
+ <Line>./configure</Line>
+ <Line>ssh ftp telnet cd ftp ssh cd telnet ping bing ping rm</Line>
+ <Line>finger ping su rm su finger ping rm less README w3mir</Line>
+ <Line>lynx vi lynx lynx grep tar for grep export for grep l</Line>
+ <Line>ps ps ps kill awk kill ps awk ps ps top ln ps awk cat</Line>
+ <Line>cat ln ps cat awk less make cc awk mv cp mv cp cd cat</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Glückwunsch</NewCharacters>
+ <Line>Herzlichen Glückwunsch zum Erlernen des NEO-Tastaturlayouts</Line>
+ <Line>Ich hoffe, die Lektionen haben trotz der Mühe ein wenig</Line>
+ <Line>Spaß gemacht. Natürlich muss jetzt noch viel geübt werden.</Line>
+ <Line>Die bisher erlernten Schriftzeichen müssen gefestigt werden,</Line>
+ <Line>dazu schreiben Sie am besten von anderen Lektionen die</Line>
+ <Line>Fließtext-Übungen mit KTouch ab. So können Sie immer</Line>
+ <Line>kontrollieren, wie schnell Ihr Schreiben geworden ist.</Line>
+ <Line>Es stehen natürlich noch die Lektionen für die Ziffern aus,</Line>
+ <Line>jedoch unterscheidet sich die Ziffernreihe grundsätzlich</Line>
+ <Line>nicht mit den Reihen der herkömmlichen Tastatur, weshalb</Line>
+ <Line>die Lektionen der normalen Tastatur empfohlen werden kann.</Line>
+ <Line>Das NEO-Layout besitzt eine große Anzahl von Sonderzeichen,</Line>
+ <Line>die Sie mit Hilfe der Alt-Gr-Taste, auch zusammen mit der</Line>
+ <Line>Hochstelltaste erreichen können. Des weiteren finden Sie</Line>
+ <Line>auf der Akzenttaste und der Tilde-Taste sogenannte Dead-</Line>
+ <Line>keys, die vor eine Taste gedrückt, diese modifizieren.</Line>
+ <Line>Außerdem gibt es für jede Taste eine Alternativ-Belegung,</Line>
+ <Line>mit griechischen Zeichen oder anderen häufig gebräuchlichen.</Line>
+ <Line>Leider funktioniert KTouch nicht mit den Dead-Keys der</Line>
+ <Line>Akzente, weshalb die Lektionen für das NEO-Keyboard hier</Line>
+ <Line>endet. Den Umgang mit den Sonderzeichen übt man auch besser</Line>
+ <Line>außerhalb dieses Programmes. Üben Sie damit!</Line>
+ <Line>Spielen Sie damit ein wenig. Werden Sie schneller als je</Line>
+ <Line>zuvor. Viel Spaß!</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/german.number.ktouch.xml b/ktouch/training/german.number.ktouch.xml
new file mode 100644
index 00000000..81bdeaa8
--- /dev/null
+++ b/ktouch/training/german.number.ktouch.xml
@@ -0,0 +1,279 @@
+<KTouchLecture>
+ <Title>Deutsch (Ziffernblock)</Title>
+ <Levels>
+ <Level>
+ <NewCharacters>45</NewCharacters>
+ <Line>45</Line>
+ <Line>544</Line>
+ <Line>55</Line>
+ <Line>545</Line>
+ <Line>555</Line>
+ <Line>545</Line>
+ <Line>4</Line>
+ <Line>5</Line>
+ <Line>45</Line>
+ <Line>45</Line>
+ <Line>54</Line>
+ <Line>5</Line>
+ <Line>45</Line>
+ <Line>5</Line>
+ <Line>45</Line>
+ <Line>4</Line>
+ <Line>5</Line>
+ <Line>44545</Line>
+ <Line>4545</Line>
+ <Line>454</Line>
+ <Line>545</Line>
+ <Line>45</Line>
+ <Line>5</Line>
+ <Line>455</Line>
+ <Line>55</Line>
+ <Line>44</Line>
+ <Line>545</Line>
+ <Line>45</Line>
+ </Level>
+ <Level>
+ <NewCharacters>06</NewCharacters>
+ <Line>5460</Line>
+ <Line>50606</Line>
+ <Line>06504</Line>
+ <Line>4605</Line>
+ <Line>060</Line>
+ <Line>6</Line>
+ <Line>06</Line>
+ <Line>06</Line>
+ <Line>465</Line>
+ <Line>40</Line>
+ <Line>06</Line>
+ <Line>04</Line>
+ <Line>6540</Line>
+ <Line>6</Line>
+ <Line>06</Line>
+ <Line>06460</Line>
+ <Line>540</Line>
+ <Line>6</Line>
+ <Line>04</Line>
+ <Line>06</Line>
+ <Line>065</Line>
+ <Line>46006</Line>
+ <Line>406405065</Line>
+ <Line>0</Line>
+ <Line>6</Line>
+ <Line>546</Line>
+ <Line>0</Line>
+ <Line>60</Line>
+ <Line>5404</Line>
+ <Line>06</Line>
+ <Line>5</Line>
+ <Line>4065</Line>
+ <Line>04</Line>
+ <Line>566</Line>
+ <Line>00</Line>
+ <Line>460</Line>
+ </Level>
+ <Level>
+ <NewCharacters>19</NewCharacters>
+ <Line>190</Line>
+ <Line>1</Line>
+ <Line>9</Line>
+ <Line>01</Line>
+ <Line>94</Line>
+ <Line>6091</Line>
+ <Line>99</Line>
+ <Line>01</Line>
+ <Line>90</Line>
+ <Line>94</Line>
+ <Line>590</Line>
+ <Line>490491</Line>
+ <Line>095</Line>
+ <Line>09401</Line>
+ <Line>90</Line>
+ <Line>49</Line>
+ <Line>56</Line>
+ <Line>04091</Line>
+ <Line>6460</Line>
+ <Line>9109</Line>
+ <Line>564</Line>
+ <Line>9</Line>
+ <Line>1</Line>
+ <Line>9</Line>
+ <Line>109</Line>
+ <Line>19</Line>
+ <Line>0490</Line>
+ <Line>9601</Line>
+ <Line>45</Line>
+ <Line>40</Line>
+ <Line>9</Line>
+ <Line>16</Line>
+ <Line>150</Line>
+ <Line>41</Line>
+ <Line>51</Line>
+ <Line>115</Line>
+ <Line>901</Line>
+ <Line>610</Line>
+ <Line>91</Line>
+ <Line>51</Line>
+ <Line>641</Line>
+ <Line>019</Line>
+ </Level>
+ <Level>
+ <NewCharacters>37</NewCharacters>
+ <Line>73</Line>
+ <Line>13</Line>
+ <Line>7</Line>
+ <Line>3</Line>
+ <Line>1643</Line>
+ <Line>53197</Line>
+ <Line>71</Line>
+ <Line>3</Line>
+ <Line>7</Line>
+ <Line>167</Line>
+ <Line>43</Line>
+ <Line>063</Line>
+ <Line>303</Line>
+ <Line>7</Line>
+ <Line>137</Line>
+ <Line>9413</Line>
+ <Line>176</Line>
+ <Line>734</Line>
+ <Line>973</Line>
+ <Line>43</Line>
+ <Line>3</Line>
+ <Line>7</Line>
+ <Line>716</Line>
+ <Line>09037</Line>
+ <Line>3737</Line>
+ <Line>03</Line>
+ <Line>3703</Line>
+ <Line>0379</Line>
+ <Line>73</Line>
+ <Line>1973</Line>
+ <Line>031</Line>
+ <Line>79</Line>
+ <Line>737</Line>
+ <Line>913467</Line>
+ <Line>9037</Line>
+ <Line>513</Line>
+ <Line>05497</Line>
+ <Line>1334</Line>
+ <Line>64377</Line>
+ </Level>
+ <Level>
+ <NewCharacters>82</NewCharacters>
+ <Line>26</Line>
+ <Line>829</Line>
+ <Line>216</Line>
+ <Line>438</Line>
+ <Line>72</Line>
+ <Line>15648</Line>
+ <Line>282</Line>
+ <Line>838</Line>
+ <Line>02</Line>
+ <Line>82</Line>
+ <Line>8314</Line>
+ <Line>6192</Line>
+ <Line>87</Line>
+ <Line>237</Line>
+ <Line>803187</Line>
+ <Line>32</Line>
+ <Line>182</Line>
+ <Line>7</Line>
+ <Line>283</Line>
+ <Line>2812</Line>
+ <Line>878</Line>
+ <Line>823</Line>
+ <Line>6248</Line>
+ <Line>220</Line>
+ <Line>28</Line>
+ <Line>83</Line>
+ <Line>28</Line>
+ <Line>2741</Line>
+ <Line>82</Line>
+ <Line>38</Line>
+ <Line>58</Line>
+ <Line>82</Line>
+ <Line>2828</Line>
+ <Line>42820</Line>
+ <Line>882028</Line>
+ <Line>823</Line>
+ <Line>52</Line>
+ <Line>849</Line>
+ <Line>329</Line>
+ <Line>883</Line>
+ <Line>28</Line>
+ </Level>
+ <Level>
+ <NewCharacters>+</NewCharacters>
+ <Line>1+42</Line>
+ <Line>4+4</Line>
+ <Line>14+5+8</Line>
+ <Line>5+5+6</Line>
+ <Line>85+54</Line>
+ <Line>54+4</Line>
+ <Line>54+8</Line>
+ <Line>7+8</Line>
+ <Line>5+45</Line>
+ <Line>47+54</Line>
+ <Line>8+54</Line>
+ </Level>
+ <Level>
+ <NewCharacters>,</NewCharacters>
+ <Line>5,44</Line>
+ <Line>5+5,5</Line>
+ <Line>5,665</Line>
+ <Line>6,6+6</Line>
+ <Line>64,64</Line>
+ <Line>4,6</Line>
+ <Line>5,4+0,4</Line>
+ <Line>6,6+0,00</Line>
+ <Line>5+465,56+5,4</Line>
+ <Line>46,4+4654,4</Line>
+ <Line>4,3</Line>
+ <Line>4,5</Line>
+ <Line>23,4</Line>
+ </Level>
+ <Level>
+ <NewCharacters>/</NewCharacters>
+ <Line>4/5+6,0/7</Line>
+ <Line>5/6</Line>
+ <Line>6/8,6+5</Line>
+ <Line>4/5</Line>
+ <Line>4,7/4</Line>
+ <Line>4/5</Line>
+ <Line>34/3,4</Line>
+ <Line>3+3/2</Line>
+ <Line>2/9</Line>
+ <Line>9/3/9</Line>
+ </Level>
+ <Level>
+ <NewCharacters>*</NewCharacters>
+ <Line>4*3*3</Line>
+ <Line>4*5</Line>
+ <Line>7*5</Line>
+ <Line>5*4*0,6</Line>
+ <Line>2*4/3</Line>
+ <Line>5*7/2</Line>
+ <Line>5,5*1,2</Line>
+ <Line>2*3*2*7</Line>
+ <Line>4,5*65*2</Line>
+ <Line>5*6</Line>
+ </Level>
+ <Level>
+ <NewCharacters>-</NewCharacters>
+ <Line>45-65</Line>
+ <Line>3,54-45,2</Line>
+ <Line>8-9-0,01</Line>
+ <Line>-9+5-</Line>
+ <Line>-65-0,5</Line>
+ <Line>45-65</Line>
+ <Line>6,5-5,6</Line>
+ <Line>9,5-6,4</Line>
+ <Line>4-4-5</Line>
+ <Line>2-5*3</Line>
+ <Line>3+4-3</Line>
+ <Line>-5</Line>
+ <Line>-1+7</Line>
+ <Line>-6*5-1</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/german2.ktouch.xml b/ktouch/training/german2.ktouch.xml
new file mode 100644
index 00000000..e201a0ce
--- /dev/null
+++ b/ktouch/training/german2.ktouch.xml
@@ -0,0 +1,1107 @@
+<KTouchLecture>
+ <Title>Deutsch (aus dem Programm Tipptrainer)</Title>
+ <Comment>German training file
+adapted by Sven Gohlke &lt;sven@clio.in-berlin.de>
+for ktouch from a training file distributed by
+Andreas Kalbitz &lt;felix@pingos.schulnetz.org>
+for Tipptrainer V0.4 http://www.pingos.schulnetz.org/tipptrainer
+distributed under the GPL2
+Version: 0.1 beta
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>Grundhaltung</NewCharacters>
+ <Line>ff jj ff jj ff jj ff jj ff jj ff jj ff jj ff jj ff jj ff jj</Line>
+ <Line>fj jf fj jf fj jf fj fj jf fj jf jf fj jf fj jf jf jf jf fj</Line>
+ <Line>ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj ffj</Line>
+ <Line>jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf jjf</Line>
+ <Line>jfj jfj fjf jfj fjf jfj fjf jfj fjf fjf fjf fjf fjf fjf fjf</Line>
+ <Line>fff jjj fff jjj fff jjj fff jjj fff jjj fff jjj fff jjj fff</Line>
+ <Line>fjf jfj jfj jfj fjf fjf jfj fjf jfj fjf jfj jfj jfj fjf fjf</Line>
+ <Line>dd kk dd kk dd kk dd kk dd kk dd kk dd kk dd kk dd kk dd kk</Line>
+ <Line>dk dk dk kd kd kd kd dk dk dk dk kd kd kd kd dk dk kd kd dk</Line>
+ <Line>ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk ddd kkk ddd</Line>
+ <Line>ddk ddk kkd ddk kkd ddk ddk kkd kkd ddk ddk ddk ddk kkd kkd</Line>
+ <Line>dkd kdk dkd dkd kdk dkd kdk dkd dkd kdk dkd dkd kdk kdk dkd</Line>
+ <Line>dkk kkd dkd dkk kkd dkd kkd dkd kkd dkd kdk kdk dkd kdk dkd</Line>
+ <Line>ddd kkk dkd kdk dkk kdd ddd ddd kkk dkd kdk kdk dkd kkk ddd</Line>
+ <Line>ss ll ss ll ss ll ss ll ss ll ss ll ss ll ss ll ss ll ss ll</Line>
+ <Line>ls sl ls sl sl ls sl ls sl sl sl sl ls ls sl ls sl ls sl ls</Line>
+ <Line>ssl ssl lss lss lss lss lss lss lss lss lss ssl ssl ssl ssl</Line>
+ <Line>lsl sls lsl lsl ssl sls lsl sls sls lss lsl sls sls lsl sls</Line>
+ <Line>ssl lsl lsl sls lss lls lll sls lsl sls lsl sls sls sls sls</Line>
+ <Line>lsl sls lsl lls lsl ssl sls lls lls lsl lls lsl sls lsl lls</Line>
+ <Line>lll sss lsl lll lsl sss lsl ssl ssl lsl lls lll sss lsl ssl</Line>
+ <Line>aö öa aö aö öa aö öa öa aö aö aö öa öa öa aö aö öa öa aö aö</Line>
+ <Line>öa aa öö aö öö aa öö öö aa öa öa öa öa aö aö öö aa öö aö öa</Line>
+ <Line>aöa öaö aöa aöa öaö aöa aaö aaö aaö ööa aaö öaa öaö ööa aöa</Line>
+ <Line>ööö aaa aöa ööö aöa aaa öaö aöa aöa öaö aöa aöa öaö aöa öaö</Line>
+ <Line>aöa ööö aaa aöa aöa aöa öaö aöa aöa aöa öaö aöa aöa ööö aöa</Line>
+ <Line>aaö aaö aaö öaö aöa ööö aöa ööö ööö ööa ööa aaö öaö aöa ööa</Line>
+ <Line>aöa aaa öaö aöö ööa aöö ööa aaö öaa aöö öaa aöa öaö aaö öaa</Line>
+ <Line>asdf jklö asdf jklö asdf jklö ölkj fdsa ölkj fdsa asdf jklö</Line>
+ <Line>asdf ölkj asdf ölkj asdf ölkj asdf ölkj asdf ölkj asdf jklö</Line>
+ <Line>askj asjk askj askj asjk asjk asjk asjk asjk askj askj asjk</Line>
+ <Line>lsöa lsöa lsöa aösl aösl aösl aösl aösl aösl aösl aösl aösl</Line>
+ <Line>alsö aösl lsöa löls löss skök lsöa slöa löal ölsö slaö söal</Line>
+ <Line>aösk alsk aöls aöls aöld aösl aösk asök öska alök asld öskö</Line>
+ <Line>dask klsa klsd dlsa öldk dkls ölsa klsa klas lkas slak skal</Line>
+ <Line>fksk dksl jfjf skdj dsaj jafj jsdj fjdk jfkd fjdk fjdk fjdk</Line>
+ <Line>fkds kldj jkld fdsa fdsa fdsa fdsa jkls sakd dsaö jkdk djfk</Line>
+ <Line>slaö aljs sdkf dkls kkls llsk söak dlsd sldl dlsl dsld dlsl</Line>
+ <Line>dlld ldld sösl alsö dlfk fldk fkld kfal fals lssa lass lass</Line>
+ <Line>lsls ldfj kalf klas lkas jdks lsak kdfj alsj lkdf kjja jaja</Line>
+ <Line>falk lfds fall lfds jfks fall falk fall fals slak dlsa lsdf</Line>
+ <Line>jkak kaks lkak ksda kdls lsdf dsaj kjlj lökd fksl slkd jkls</Line>
+ <Line>ffkd kdkk dkks saak sask ssas dsas klöl dsas lkkl lkjk lkjl</Line>
+ <Line>aösl ssas llkö kkök ölkj lkjl ölkö ölöa ölks öklj jlkk lkds</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>sla las laa aal sla lsa las sas lsa laa las all als ass als</Line>
+ <Line>all als las all als las all als las all als las all als las</Line>
+ <Line>sla sal sla sla saa sas asa lal ala als sss lsa sla sll sla</Line>
+ <Line>las als all las als all las als las als all als all las als</Line>
+ <Line>sls lsl lal sas lls ala lal las asl las sal las als all sla</Line>
+ <Line>als all las als all las als all las all all als als las las</Line>
+ <Line>fad das sad lös las lad lad aal fas kal sal fas dsa dks fda</Line>
+ <Line>fall lass kalk lass klas salö salk laös llsa llsa ölsa lsaö</Line>
+ <Line>ösal löss ösks öskl öslk lsal löas klsa löls löls klsa klös</Line>
+ <Line>kalk kalk fall fall falk lass lssa lass kalk falk fass sass</Line>
+ <Line>safd safd klöa aölk lsal lsas slas lsls fjdl alsa jaja jdld</Line>
+ <Line>jldd kjsk klas kalk saal lass fakl sall lall ladd ladd dsal</Line>
+ <Line>falk kalk falk kalk saal kalk falk saal kalk fall saal fall</Line>
+ <Line>falk fall fals kall kalk saal falk lass kalk löss lass fall</Line>
+ <Line>falk kalk fall löss kalk fall saal fall löss saal fall falk</Line>
+ <Line>lass fall lass falk kalk saal fall löss kalk kalk saal fall</Line>
+ <Line>falls kafka kajak kajak falls falls kafka kajak kajaj kafka</Line>
+ <Line>kafka falls kajak falls kafka falls kajak kafka falls kajak</Line>
+ <Line>falls als falk kalk kafka das all das lass das las als kalk</Line>
+ <Line>öl als löss kafka kajak öl als all falk löss lass las kajak</Line>
+ <Line>all das öd all dass das öl kafka lass das ja kalk öl ja las</Line>
+ <Line>all das saal falk kalk kajak kafka saal falls das dass lass</Line>
+ <Line>als all das öl falls all das öl ja als all das öl kafka las</Line>
+ <Line>falls falk all das las das öl als all kalk fall saal las ja</Line>
+ <Line>ja ja sass da als all das öl kafka las falk sass da als all</Line>
+ <Line>das öl lass das all kafka las all falls all das öl as ja da</Line>
+ <Line>da das alls kafka las kalk fall saal falls all das öl ja ja</Line>
+ </Level>
+ <Level>
+ <NewCharacters>i und e</NewCharacters>
+ <Line>de ki de ki de ki de ki de ki de ki di ke di ke di ke di ke</Line>
+ <Line>dak dik dak dek dak dik kid kid dik eki ede kde dek dei die</Line>
+ <Line>sei sie lie ise asi esi ase las lie fie kis eis ise ike eki</Line>
+ <Line>jie jei eij eej jee jii sii ees iis ais iis ssi sse sie ies</Line>
+ <Line>kei iek kii kee eke ike adi ida ede ese see ise isa sai sae</Line>
+ <Line>lee lei lie lle ill eel sea eas ase lea kea jea sik aik eik</Line>
+ <Line>kade lade jade lade kiss lies like daks jade jedi kadi sadi</Line>
+ <Line>kess lass löss lies siel alle fell fiel fail siel fiel feil</Line>
+ <Line>seil lies keil like feil fiel jail dail das is fis ais lief</Line>
+ <Line>fiel fall feil dies seil jade keks siek jedi fade sade lade</Line>
+ <Line>file seil siel fiel jail lade like jedi kadi eile alle eile</Line>
+ <Line>siele lalle falle kalle seile feile leise keile lalle falle</Line>
+ <Line>alles kalles elle felle fiele öse seile keile fiele die eis</Line>
+ <Line>lasse fasse kasse sasse löse sie lasse fasse kasse asse die</Line>
+ <Line>isa kies alias salsa else fels als je ja sass iss kiss esse</Line>
+ <Line>lasse kasse kaffee affe safe lief ilse kleie eise seile sie</Line>
+ <Line>ade alle lies alias alles falle felle kalle kill keil kille</Line>
+ <Line>elle alle delle seile eile keile kiel fiel siel adidas lies</Line>
+ <Line>ja das alles dies lies sie alle eile leise feile delle asse</Line>
+ <Line>kasse lasse diese dieses dies lies fiese lade sade fade eis</Line>
+ <Line>jail file alias kiss sed deal seal lease fade ill fill feel</Line>
+ <Line>kaffee fiel alles eile kalle feile sie seil seile kasse eis</Line>
+ <Line>ja sei da fallada kafka saal öle öse als alles fiel siel es</Line>
+ <Line>lade es fade saal es das fass es ja fiese liese lies dallas</Line>
+ <Line>das da die sei jede jedes diese sei seife eides filiale eis</Line>
+ <Line>dies des seide dieses fidel lief des alles lies das kleides</Line>
+ </Level>
+ <Level>
+ <NewCharacters>g und h</NewCharacters>
+ <Line>fgf fgf jhj jhj fgf jhj jhj fgf jhj fgf jhj fgf jhj fgf jhj</Line>
+ <Line>fggf jhhj fgjh fgjh fgjh fghj jhgf fghj fgjh fghj gfhj fgjh</Line>
+ <Line>fgf gfg jhj hjh gfh jhg fgj jhg fgh jhg hgf ghf hgf ghf fjh</Line>
+ <Line>fga agf gfa fga fag fga fga afg fag fag fag gaf gfa gag gfa</Line>
+ <Line>jag ajg jag ajg ajg gaj jag jga jga gja fgj gjf ajf agj ajg</Line>
+ <Line>öjh hjö hjö öjh jöh jöh hjö jhö öjh öjh jöh jöh jhö ögö öhö</Line>
+ <Line>afg öhj agh öhg agj öhj gaj höj gaj hög hag ögh öhg ahg öhh</Line>
+ <Line>haag haff haag haff haag haff fahl half fahl half hasl lasa</Line>
+ <Line>kahl lags slag glas alga gala agfa haff haag glas lags gasa</Line>
+ <Line>gesa sage hage jage fehl fahl hege gehe hege gehe sehe hase</Line>
+ <Line>hass fahl kahl kehl kiel geil lieg heil hies dega gade jage</Line>
+ <Line>jagd jögh hals gels gisa löse geis sieg igel lieg lage gala</Line>
+ <Line>egel flegel fahles kahles sage es kegel segel jagd laage he</Line>
+ <Line>hegel flegel kegel fahle ihle ahle alge felge selige heilig</Line>
+ <Line>heilige eilig seele gelee heel heals hall he his heise leis</Line>
+ <Line>geisel feige fehle helfe half fege diggi daggi jiggi jag is</Line>
+ <Line>geige feige liege fliege siege diehle fiele galle falle heg</Line>
+ <Line>hilfe heile half fall gehe giga glas flies dies see eisiges</Line>
+ <Line>die eisige see die alge das fass das glas das glas seidiges</Line>
+ <Line>gaffe haff kaff die alge die felge siege sage gehe sehe es</Line>
+ <Line>she is his he is she lies es gase gas hass fass lass kahles</Line>
+ <Line>gisela höhle sah diese höhle geöle hase jade jage lage heil</Line>
+ <Line>hadi sage lass das fass dies seidige kleid gehe hege gelege</Line>
+ <Line>geklage gelage sage die sage gejage klage felge helge leide</Line>
+ </Level>
+ <Level>
+ <NewCharacters>w und o</NewCharacters>
+ <Line>sws lol sws lol sws lol sws lol was los was los was los was</Line>
+ <Line>was sws los lol sws lol was los wag weg wog log los weh wie</Line>
+ <Line>log los was wow lol sws wow sow saw osw aso oso los kos jas</Line>
+ <Line>kdw dwk jdw wdj okw wok wie aol das los leo loe lei wei wie</Line>
+ <Line>gold geld soll will kilo lose kose wald jagd wage lage lego</Line>
+ <Line>hose hase lode ewig soda dose wild will soll wald feil woll</Line>
+ <Line>weise leise heise hose lose wiese waffel wieso weil was wie</Line>
+ <Line>wiege weise will logo leise wiese wiese wieso wald was wohl</Line>
+ <Line>waage wiege agil wog was wieso wald waldig wilde kilo wieso</Line>
+ <Line>jage wildes wild wald was sah sie wie log sie was wieso log</Line>
+ <Line>isa die wiese lag weg wie weil sie wo sowieso lolö öle ölig</Line>
+ <Line>loewe leise lose gosse gasse hose dose diese woge loge wade</Line>
+ <Line>wash fish who is who was whose fool while whole who goes he</Line>
+ <Line>goes she goes goal she saw dow kill as file off while whole</Line>
+ <Line>false welsh wise whis joda jedi fish flash dog ale while we</Line>
+ <Line>wie weise wieso kafka was las als da was fiel die hose lose</Line>
+ <Line>die gosse sie wog je dose kaffee das was sie sah die kladde</Line>
+ <Line>sie fiel da die wade kafka fade das die lade los es wog was</Line>
+ <Line>kafka las die kladde als was fiel was wog das löss wege weg</Line>
+ <Line>öle die waage das wog kafka las wie las kafka die kladde da</Line>
+ <Line>wieso lass sie wog diese kasse affe wog die waage log sowas</Line>
+ <Line>die wiege die waage das segel flog die woge die jagd so wie</Line>
+ <Line>das wild floh es goss waldig eisig als die wiese wie willig</Line>
+ </Level>
+ <Level>
+ <NewCharacters>r und u</NewCharacters>
+ <Line>frf frf juj juj juj frf fuj juf uuj uuj fuf uuf ruu uru ufr</Line>
+ <Line>fra aua fau fra fru jau jar dau dar sau sua sar sra öuö rör</Line>
+ <Line>ded kik juj ded frf ase ras juk kuj fuj ruf dei ser usl öre</Line>
+ <Line>war wor rio rus ras ral rel ril rol ole oli koi oki dok rod</Line>
+ <Line>eul eur edu sui seu weu leu keu heu geu feu deu aeu are dar</Line>
+ <Line>frau ursl fahr wahr wehr wors wurs juss juhu uhus guss fuss</Line>
+ <Line>raus haus laus daus wars waru daru karu saru laru jaru ufos</Line>
+ <Line>gard hars kars lars jare jarr jeuh jerr kerr herr gerr gurr</Line>
+ <Line>darauf klaus uwes rufe jeder rief alles rief sehr ruf werke</Line>
+ <Line>darauf dass klaus das rief wolle rolle solle kuddel suddel</Line>
+ <Line>alles was das haus so liege der wille der frau der herr aus</Line>
+ <Line>rief das alles was die seele jaja ferkel hase wolf uhu eule</Line>
+ <Line>rehe jage wild gewehr erlege kugel wars kugel flog reh floh</Line>
+ <Line>hase lief wolf rief war es der wolf der da so rief der hase</Line>
+ <Line>luise las das auf was fiel so fiel der herr das war wohl so</Line>
+ <Line>wer lief der rief regel gewehr soll der hase wohl war es da</Line>
+ <Line>hallo wer war diese halli hallo hallöle hallali hirse hafer</Line>
+ <Line>rede lies sage wage rufe lusiese sie war es kuss fred gelle</Line>
+ <Line>wars ulli sage es liese war es dieses haus klaus rede ruhig</Line>
+ <Line>ruhe wer da rief das lief so weil das haus ruhig lag es war</Line>
+ <Line>wage es war dusselig es war eisig weil luise da war egal du</Line>
+ <Line>will es kalle oder ole hose aus wolle kleid seidig haus aus</Line>
+ <Line>löss fiel kafka was er rede ruhig lies es ruhig aller regel</Line>
+ <Line>das regal das fiel der saal war leer wars fred wars ole was</Line>
+ <Line>war luise wer ulli wer dario alles lief als das regal fiel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>aufs dies jura soda hier ufer haus erde frau juda judo joda</Line>
+ <Line>ruhe rase glas gras fass fuss ewig jahr rede klar aula fuhr</Line>
+ <Line>lauf lief rauf rief dorf darf half hilf hole sole rose lose</Line>
+ <Line>hose ferse hirse kriese kreise leise heise weise aus garaus</Line>
+ <Line>weise welle welse ferse wohlig wasserglas wasserfass wildes</Line>
+ <Line>frage gelage heraus wieso darf fasse wasser lasse oswald wo</Line>
+ <Line>war da was wieso war der das eilig wohlig ruhig eisig hals</Line>
+ <Line>hilfe kalle saal solle wolle wille wild wilde wildes waldig</Line>
+ <Line>wollo kohle sohle dohle gejohle logo sog flog woge jod hose</Line>
+ <Line>jagd gewehr eule geheule keule kuhle soul klaue wohlig hole</Line>
+ <Line>war er das war sie das wer war das wohl wieso war es so</Line>
+ <Line>weise leise reise heise kriese wiese ferse hirse garaus was</Line>
+ <Line>also was soll das weil das so sei klar das war so ja das</Line>
+ <Line>was so war was soll er was will er wer will es wer soll es</Line>
+ <Line>er soll was sie soll was sah er was so sah es aus was wohl</Line>
+ <Line>sie wolle was so er sah wer will das da wer soll wer ursel</Line>
+ <Line>alles war da was fiel das war gerade gefiel er jodele wolle</Line>
+ <Line>walle walle falle gefiel gefahr gewehr wars wurde gulli</Line>
+ <Line>woge flog sog sauge lauge klaue dau gerade gelage woge woge</Line>
+ <Line>wage sage frage frau herr hausfrau hausherr heraus goldig</Line>
+ <Line>falke eule uhu juhu also falls das so war war es so klar</Line>
+ </Level>
+ <Level>
+ <NewCharacters>t und z</NewCharacters>
+ <Line>ft ft ft ft ft ft jz jz jz jz jz jz ft jz ft jz ft jz ft jz</Line>
+ <Line>ftf jzj ftf jzj ftz jzt ftz jtz fzt jtz ftz fjt fjz fjt fjz</Line>
+ <Line>dzd fzf dzf dzd dzd szs aza ata sts sts ktk tlt ltl ötö özi</Line>
+ <Line>zög zöge zog log lok teig teil tide tage tag zarge zag zuse</Line>
+ <Line>ast last hast fast hatz fatz latz katz katze satz satz jazz</Line>
+ <Line>zu zur zeit ziel zahl ziel zeit teil teile heil feile zeile</Line>
+ <Line>ziele ketzer satz heile zeile ziele teile tief tage lage zu</Line>
+ <Line>dutze kartzer kratze kratzer latz garz jetzt kerze kurz zur</Line>
+ <Line>zeit seit der zeit zeisig ziele zahl zahle dutze kratze tue</Line>
+ <Line>zarge zulu taz fratz jazz katze kurzer kurz letzte lust las</Line>
+ <Line>zog er gefasst lasst trage frage trug zur hetze falz fetter</Line>
+ <Line>herr fette öle zola ritze der herr zog das heraus gezielter</Line>
+ <Line>welt erde orte worte warte zarte witze werte harte karte zu</Line>
+ <Line>der zug zog er flog sie lief es geht halt das halt auf zoo</Line>
+ <Line>wetter wettere watte lagert wagt es gelegt gelege fegt dies</Line>
+ <Line>löss fiel saugt es auf fegt es auf liest er was er las das</Line>
+ <Line>wieso liest er das wer sagt etwas gesagt getagt gewagt erze</Line>
+ <Line>löst es auf gelöst geht er wer wagt geht wer zaudert steht</Line>
+ <Line>fast gewagt ist gesagt tag tue eis taut auf zahl das eis da</Line>
+ <Line>kafka liest der titel ist das tier war da weil dies tier da</Line>
+ <Line>war fiel der krug alles lief half saugte sagte rief geht</Line>
+ <Line>also daher wer geht geht jetzt er liest die kladde wer hört</Line>
+ <Line>da zu er hör sie hört kafka liest zola elise fragt fritz da</Line>
+ <Line>der was hörte wartete kafka sagt zu elise geht jetzt frau</Line>
+ <Line>es stört wer da fragt die woge erstarrt alles stille</Line>
+ <Line>elise geht es war kafkas wille sie geht als der krug grade</Line>
+ <Line>fiel der saft lief der autor rief alles eilte dazu jetzt</Line>
+ <Line>war ruh</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>der die das wer wie was wo der die das wer wie was wo da so</Line>
+ <Line>sehr steil sehr stark her klar sogar das der das die daraus</Line>
+ <Line>dass das dass das es was klar sogar das dies wie es ist sag</Line>
+ <Line>sah sehe sieh daraus woraus des dies dar wer wo was weg war</Line>
+ <Line>der die das des dies diese dieser dar daraus der der dieses</Line>
+ <Line>wer wieso war was wo woraus wort worte wolle wollte soll es</Line>
+ <Line>sollte hole holte hals halt halte falte kalte altere walter</Line>
+ <Line>walte wer will wer soll wer ist wer hat er hatte sie hat du</Line>
+ <Line>du hast du sollst du willst du holst du sagst du sagtest es</Line>
+ <Line>was sagt er da was hat er da was soll das da was will er da</Line>
+ <Line>wer will das wer soll das wer hat das wer sagt das was sagt</Line>
+ <Line>sie sie sagt was er hat er sagt dass du das sagtest was sie</Line>
+ <Line>gesagt hat er sagte dass sie es ja gesagt hat gesagt hat er</Line>
+ <Line>heute dass sie es gesagt hat sie tat wieso sie das tat weil</Line>
+ <Line>sie das tat was er sagte ja er sagte was sie tat es tat weh</Line>
+ <Line>heute hat er heu geharkt das gras war heu heutzutage hat er</Line>
+ <Line>alles was er will jeder hat was er will jeder ist wer wieso</Line>
+ <Line>er das ist was er ist ist klar weil er isst was er ist weil</Line>
+ <Line>es so gut ist dass er es isst wo er es sieht dazu sagte sie</Line>
+ <Line>dass er heute isst was sie will lege die karte auf die erde</Line>
+ <Line>wo geht es zur see wie geht es heute geht es gut es geht so</Line>
+ <Line>so wie das geht geht es gut gut gesagt der fluss das wasser</Line>
+ <Line>löse das seil jetzt ist es so weit auf dieser welt sagt sie</Line>
+ <Line>alles was sie weiss was weiss sie alles wer wusste das</Line>
+ </Level>
+ <Level>
+ <NewCharacters>q und p</NewCharacters>
+ <Line>qp pq qp pq qp pq qp qp pq qp qp pq pq qp pq qp qp qp pq pq</Line>
+ <Line>qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu qu</Line>
+ <Line>pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr pr</Line>
+ <Line>op op op op op op op op op op op op op op op op op op op op</Line>
+ <Line>qua quo qua quo qua qua quo que que qua quo que qui qui quo</Line>
+ <Line>pra pra pro pro pro pro pre pri pre pra pro pra pre pri pru</Line>
+ <Line>pod qua pas pes pis pid pad ped pre pfa pfe pfi pfo pal ple</Line>
+ <Line>pli ple pla pek pik pak pok pei peu pou pol puk pfu pfr pfu</Line>
+ <Line>faq fap dap kap lap laq leq geq seq que hap kap sap paw wap</Line>
+ <Line>quer quar quap quir quet quel qual quod quen quer quar quas</Line>
+ <Line>pros pras pris prid prod prad prol pril pral peil pfei pfah</Line>
+ <Line>pfla pflo plat plas plea plig plik plag pleg plus plei plie</Line>
+ <Line>quil quik quas wapp weap wipp lipp dipp sipp hipp kipp ripp</Line>
+ <Line>qual real praktik praktiker pelle pille palle qualle quelle</Line>
+ <Line>prall aufprall spiel gefiel progress proto prater prall pro</Line>
+ <Line>prof prokura prokurist predator presse erpresser protze opa</Line>
+ <Line>oper opera portal portiert apropos quelle portierte plagiat</Line>
+ <Line>plage pflug egge quast quest top hopper plaque platz pfeile</Line>
+ <Line>quoll geplagt gesagt gefragt preis preise leise quassele op</Line>
+ <Line>oper rap rippe rappe ertappt getappt getippt tip wippe pril</Line>
+ <Line>prasse presse klappe klappere geklappert depp stupid steppe</Line>
+ <Line>stop stoppt alle er ist gestoppt sie isst er stopft tropfte</Line>
+ <Line>das wasser tropft der wasserfall gefoppt poppig pope papier</Line>
+ <Line>pappe lappe radikal gerappt gerafft das wasser quillt leise</Line>
+ <Line>heraus aqua aquarell artist produkt palette preise pflaster</Line>
+ <Line>paragraph perl protokoll sparpreis kapitalgruppe post paare</Line>
+ <Line>quadrat quadrate quadratur des kreises philosoph pause quiz</Line>
+ <Line>porto partie partei plato padua parkplatz professor pariser</Line>
+ <Line>reprise die quelle des flusses die weserquelle europapokale</Line>
+ </Level>
+ <Level>
+ <NewCharacters>v und m</NewCharacters>
+ <Line>vm mv vm mv fv jm mj vf fm vj jv mf vf gv jm hm mj mh mg vh</Line>
+ <Line>vi va ve vr vg vi vu vo av ev iv uv ov uv me ma mo mi me mu</Line>
+ <Line>vim vam mer mar mir mei mol mal mie mig mag mog meh muh mau</Line>
+ <Line>vau vei vie vor vol val jav jov jev jam mai maj mer wem vim</Line>
+ <Line>viel vase vers mehr maar mit voll pomm luv rom reim warm am</Line>
+ <Line>vom wem dem ihm rum mull male maus mais mies muss kaum moos</Line>
+ <Line>viel oval volk vater immer mehr immer mehr meister viele im</Line>
+ <Line>vieles muss meise mehr mus meer viele klammer wieviel warum</Line>
+ <Line>mitte mittel matte matt platt platte watte quaddel mast mus</Line>
+ <Line>vertrag kaum verzug vermerk zuvor zuviel jemals vorteil ihm</Line>
+ <Line>vorgemerkt vorgesagt vor dem saal im stall muster kohlmeise</Line>
+ <Line>makulatur mogelei malerei verse ferse merke markiert markus</Line>
+ <Line>mimik hervor herum vertreter wurde mehrere verkauf verglast</Line>
+ <Line>fremde vögel vogel des vogels vögel klaus kommt aus amerika</Line>
+ <Line>es stimmt die stimme der stummel verlade gestammelt stummer</Line>
+ <Line>kummer fummel hummel summe summt krumm kram er kramt lahmer</Line>
+ <Line>verkehr verkehrt herum umfahre marktplatz wer mag apfelmus</Line>
+ <Line>lava magma mutter vater gemerkt vermerkt vermarktet versagt</Line>
+ <Line>vermisst vermiest verklagt verzagt er verzog werktags werft</Line>
+ <Line>er vertrat klaus vertrat fred vera vertritt maria uta reimt</Line>
+ <Line>verse paul liest verse vom autor kafka goethes verse las er</Line>
+ <Line>am mittag wer liest zolas werke daheim liest sie heim jedem</Line>
+ <Line>etwas mit viel gehalt die werte qualle im meer klammtal die</Line>
+ <Line>quasselstrippe warum streift der kater herum es ist so kalt</Line>
+ <Line>die katze sitzt im haus herum sie miaut zu laut verwahre es</Line>
+ </Level>
+ <Level>
+ <NewCharacters>n und b</NewCharacters>
+ <Line>bn nb bn nb nb bn bn nb nb bn nb bn gn gn gb hb bh jb fn bf</Line>
+ <Line>gn fn gb bg fb hb bh jb bj kb bk db bd sb bs ab ba lb bl bö</Line>
+ <Line>öb bo bu bi no nu ni ne be br bw kb bk bt tb zb bz ln nl vn</Line>
+ <Line>jnj jnj njn fbf bfb fbf bfb jnj njn bfj njf gbt bgt nju njh</Line>
+ <Line>hun han kan fan bus und ohn pon ihn ein nie nun neu nah den</Line>
+ <Line>din win pin uin ein nau bau bew beo boh bog bag big gib gab</Line>
+ <Line>geb fab dab sab kab lab lan dan san wan han zen ren wen tun</Line>
+ <Line>nein wein kein bein bier kein tier aber ober bald bild blei</Line>
+ <Line>blau blue baff biff bahn sein wein wohn wien sinn fein kein</Line>
+ <Line>neid pein rein eine leim fein huhn hahn nuss bann kann wann</Line>
+ <Line>dann mann nein bett bass biss boss blau wald bald halt salz</Line>
+ <Line>beginn gewinn allein negation blamage bagage tonnage gebete</Line>
+ <Line>gebeten sagen fragen plagen nagen neige trinken singen sang</Line>
+ <Line>klang fang den ball alle singen den song alles nur sinnlose</Line>
+ <Line>singerei er hat viel zu tun die tante kommt zu ihm umziehen</Line>
+ <Line>der umzug kostet viel geld seine einnahmen waren angemessen</Line>
+ <Line>zu lies das manual sagt man rtm die informationen findet er</Line>
+ <Line>dort zuerst wer liest lernt er sie liest viel uta lernt was</Line>
+ <Line>man tun muss um arbeiten zu können könnte sein dass er nein</Line>
+ <Line>sagt aber fragen ist besser als warten wen interessiert das</Line>
+ <Line>alles was man lesen kann hilft beim lernen fahrt ski in den</Line>
+ <Line>bergen beine festhalten er will reinen wein wann wird er es</Line>
+ <Line>lesen kafka soll seine verse lesen alle wollen ihn hören da</Line>
+ <Line>er so eine tiefe stimme hat eva strittmatter liest viel aus</Line>
+ <Line>erbe ihres mannes aber die eigenen verse sind ebenso gut zu</Line>
+ <Line>lesen ist heine vergessen keine ahnung ist heine bekannt</Line>
+ </Level>
+ <Level>
+ <NewCharacters>c und ,</NewCharacters>
+ <Line>c, c, ,c dc cd k, ,k k, ,k cd dc ck kc d, ,d ck k, c, d, k,</Line>
+ <Line>, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,</Line>
+ <Line>ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck</Line>
+ <Line>cd, cd, cd, cd, cd, cd, cd, cd, cd, cd, cd, cd, cd, cd, cd,</Line>
+ <Line>dcd k,k dcd k,k dcd k,k dcd k,k dcd k,k dcd k,k dcd k,k dcd</Line>
+ <Line>sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch</Line>
+ <Line>sch, sch, sch, ch, ch, ch, ch, ch, ch, ch, ch, ch, ch, sch,</Line>
+ <Line>ddcc dcdc dccd cddc dcdc cddc dccd cddc cdcd ddcc ddcc dccd</Line>
+ <Line>k,,k k,k, ,,kk k,k, kk,, k,k, k,k, ,k, k k,k, k,k, ,k,k ,kk</Line>
+ <Line>ac ac ca ca acdc dcca ac acdc acdc ak,k ak,k ak,k k,ak k,,k</Line>
+ <Line>fc cf fccf fccf fcf fcf cfc fcf fcf fccf cffc cffc cfcf cfc</Line>
+ <Line>lcl lcl clc llcc clc clc lcl lcl cllc lach lach wache mache</Line>
+ <Line>ach auch doch dach ich mich sich nicht euch ich welch solch</Line>
+ <Line>solche molche welche jene, welche der, die, auch, wenn nun,</Line>
+ <Line>da sobald, wenn, dann gerade, als je mehr, desto besser, so</Line>
+ <Line>wie du, na dann, ich bin, glaube ich wer glaubt, der ist</Line>
+ <Line>dick lack leck auch dich doch deck lech dach loch doch noch</Line>
+ <Line>buch fluch such versuch betrug falsch pflicht verzicht auch</Line>
+ <Line>versuchung besuch tuch tauche seuche verflucht gedichte chi</Line>
+ <Line>eva liest gedichte die ich schon lange kenne, doch schön</Line>
+ <Line>sind sie doch auch, wenn der saal nicht voll ist, wird er</Line>
+ <Line>seine verse lesen kommt das komma da hin, oder da hin ich</Line>
+ <Line>will gerne kommes setzen, doch ich mache das sicher immer</Line>
+ <Line>falsch na schön, wenn es sein muss, dann auch mit kommata</Line>
+ <Line>schick, schlank, schnick, schnack, schön, schade, schwer,</Line>
+ <Line>schlank, schön, schöner, schneller, zu schnell, schriftlich</Line>
+ <Line>hilfreich ist, wenn man die regeln zur kommasetzung kennt</Line>
+ <Line>auch wenn der rechner streikt, musst du die ruhe bewahren</Line>
+ </Level>
+ <Level>
+ <NewCharacters>x und .</NewCharacters>
+ <Line>x. x. x. x. x. x. x. x. x. x. x. x. x. x. x. x. x. x. x. x.</Line>
+ <Line>x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x x.x</Line>
+ <Line>xx.. xx.. xx.. xx.. xx.. xx.. x.. xx.. xx.. xx.. xx.. xx..</Line>
+ <Line>axa ö.ö axa ö.ö axa ö.ö axa ö.ö axa ö.ö axa ö.ö axa ö.ö axa</Line>
+ <Line>axt exe axt exe ol. ol. mol. mal. mel. en. en. en. ein. en.</Line>
+ <Line>fax max axt axt. fax. max. a..a s..s d..d f..f j..j k..k xx</Line>
+ <Line>exe exa ex dax sax fax nux lux mux tux exakt lexikon lexik</Line>
+ <Line>tux. taxi text textur taxen taxator taxameter saxophon lexx</Line>
+ <Line>tux. tex. exakt. explosion. exorbitant. mexiko. exempel. ex</Line>
+ <Line>tux luxemburg. fix. fax. fixum. fixieren. extrakt. extra.</Line>
+ <Line>tux nixe verflixt fixen ein problem fixen. fix. max. lol l.</Line>
+ <Line>tux. den text revidieren. xerxes, der perserkönig war nicht</Line>
+ <Line>in luxemburg, sagt er. felix lebt nicht am existenzminimum.</Line>
+ <Line>linux linux linux linux linux linux linux linux linux linux</Line>
+ <Line>tux tux tux tux tux tux tux tux tux tux tux tux tux tux tux</Line>
+ <Line>taxi fahren ist toll. linus begann mit linux als student.</Line>
+ <Line>auch heute arbeiten viele studenten an der entwicklung von</Line>
+ <Line>software, die unter linux laufen soll. exakt nach dem start</Line>
+ <Line>blieb der wagen stehen. der fahrer schloss erstmal alle</Line>
+ <Line>fenster. er war programmierer, doch er kannte linux nicht.</Line>
+ <Line>nach der explosion war der saal leer. kafka las erstmal die</Line>
+ <Line>verse nicht mehr weiter, bis sich die aufregung legte. text</Line>
+ <Line>der text aus dem lexikon ist nicht ausreichend. deshalb las</Line>
+ <Line>sie auch noch die entschrechenden seiten im internet. ende.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>y und -</NewCharacters>
+ <Line>y- y- y- y- y- y- y- y- y- y- y- y- y- y- y- y- y- y- y- y-</Line>
+ <Line>y- y- y- y- y- y- y- -y -y -y -y -y -y -y -y -y -y -y -y -y</Line>
+ <Line>ö-ö ö-ö ö-ö ö-ö -ö- ö-ö -ö- ö-ö -ö- ö-ö -ö- ö-ö -ö- ö-ö -ö-</Line>
+ <Line>aya yay aya yay aya aya yay yay aya yay yay aya yay yay aya</Line>
+ <Line>fsdaya jklö-ö fsdaya jklö-ö fsdaya jklö-ö fsadya jkl-ö-ö a-</Line>
+ <Line>sys l-l sys l-l sys l-l sys l-l sys l-l sys l-l sys l-l sys</Line>
+ <Line>dyn k-m dyn k-n dyn k-n syd ky- syf k-d syg k-h syn jn- hay</Line>
+ <Line>asyl asyl sylt sylt type type asyl sylt sys- teme syn- oden</Line>
+ <Line>bay- ern ana- lyse hygiene dynamo gymnastik lyzeum ly- zeum</Line>
+ <Line>bayern analyse hy- giene dy- namo gym- nastik synode system</Line>
+ <Line>yeti - yak - synthetisches - synergetisch - sylt asyl typen</Line>
+ <Line>yast - yet another setup tool</Line>
+ <Line>sympathisch sympathie hypothek lyon</Line>
+ <Line>als der pc noch nicht das standard-schreibmittel war, und</Line>
+ <Line>förmliche texte in die schreibmaschiene gehackt wurden,</Line>
+ <Line>stellte man mittels bindestrich sicher, dass der rechte</Line>
+ <Line>rand relativ einheitlich wurde. die wörter wurden nach sil-</Line>
+ <Line>ben getrennt. der bindestrich kann aber auch zwischen zwei</Line>
+ <Line>hauptwörtern stehen, um diese zu verbinden, wie in</Line>
+ <Line>kaffee-ersatz. wer sich mit sport auskennt, orientiert sich</Line>
+ <Line>an den punktetabellen, wenn er die ergebnisse verschiedener</Line>
+ <Line>mannschaften vergleichen will. dort wird der bindestrich</Line>
+ <Line>verwendet, um zu zeigen, wer gegen wen spielt.</Line>
+ <Line> herta bsc - fortuna köln</Line>
+ <Line>in verbindungen wie gertrud-meier-platz oder</Line>
+ <Line>nord-ostsee-kanal wird der mittelstrich ohne leerzeichen</Line>
+ <Line>verwendet. als gedankestrich taucht er auf, wenn man ein</Line>
+ <Line>paar stichworte logisch voneinander absetzen möchte.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ü und ä</NewCharacters>
+ <Line>öüä öüä öüä öäü öäü üäö äüö öäü öüä äöü üöä äüö öäü öäü üöä</Line>
+ <Line>öüö öüö öüö öüö öüö öüö öüö üöü üöü üöü üöü öüö üöü öüö üöü</Line>
+ <Line>öäö öäö äöä äöä äöä öäö öäö öäö äöä öäö öäö öäö öäö äöä äöä</Line>
+ <Line>äüä äüä äüä äüö äüä üäü üäü öüö öäü üäü üäü öäü öäü üöä äüö</Line>
+ <Line>möhre mähre fähre führe würde könnte müsste hätte täte gäbe</Line>
+ <Line>wäre sähe läge säge wäge mägen lägen lügen rügen trügen übt</Line>
+ <Line>geübt gepflügt - übt bemüht, berühmt, gerühmt, gesühnt über</Line>
+ <Line>flögen die vögel über die meere</Line>
+ <Line>und sähen die mähre,</Line>
+ <Line>gefolgt von dem bären,</Line>
+ <Line>dann würden sie stürzen hinab auf den bösen,</Line>
+ <Line>zum töten bereiten, verfressenen räuber,</Line>
+ <Line>ihn zausen und hacken,</Line>
+ <Line>mit schnäbeln zwacken,</Line>
+ <Line>ihn stechen und jagen</Line>
+ <Line>bis er zög von dannen</Line>
+ <Line>mit hungrigem magen...</Line>
+ <Line>gesöff, krüge, züge, betrügen, gähnen, erwähnen, gröhlen,</Line>
+ <Line>gesänge, gelänge, begänne, zöliakie, zünglein, zündhölzer,</Line>
+ <Line>gezündet, verzückt, glücklich, verrückt, bedrückt, rücken,</Line>
+ <Line>genügend, berühren, verführen, verfahren, für wen, wofür,</Line>
+ <Line>dafür, die tür, das gebälk, etwas gebäck, äpfel, überlegen</Line>
+ <Line>übermütig, gäbelchen, geflügel, gebügelt, verbrüht, bäume,</Line>
+ <Line>verprügelt, die äste, das geäst, die jäger, flöhe fliehen,</Line>
+ <Line>konfitüre, marmelade, breitmaulfrösche ängstigen sich vor</Line>
+ <Line>störchen, die lärche, die lerche, schübe, zöge, träge, er-</Line>
+ <Line>träglich, nachgeäfft, geschäft, kräftig, beschäftigt, über</Line>
+ <Line>von früh bis spät, qualitätsartikel zur verfügung stellen.</Line>
+ <Line>die fläche der europäischen gemeinschaft beträgt...</Line>
+ <Line>vorwärts und rückwärts gelesen ergäbe der text dieser lek-</Line>
+ <Line>tion keinen sinn.</Line>
+ <Line>...ach so, vögel ärgern keine bären.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ß</NewCharacters>
+ <Line>äß äß äß öß üß öß üß öß üß äß üß öß üß üß äß öß üß äß öß üß</Line>
+ <Line>ßt ßt ßt ße ßt ße ßa ßt ße ßd ßt üß ßt üß ßt üßt üßt äße aß</Line>
+ <Line>öpüß ßpüo ßopä ö-ßp ßpä- öäüß -ö-ß ß--ü öäüß ßüäö ßäöß äßüö</Line>
+ <Line>müssen büßt füße süße küssen rüssel schüssel grüßt müßig aß</Line>
+ <Line>er aß es, sie saß, er vergaß ganz, sie besaß alles, straßen</Line>
+ <Line>gießen, begießen, genießen, zerfließen, zerfloss, schießend</Line>
+ <Line>saß der jäger auf seinem gesäß, das gefäß, das fass, größer</Line>
+ <Line>achtung - achtung - achtung -</Line>
+ <Line>nach der neuen rechtschreibregel gilt gerade das ß als kri-</Line>
+ <Line>tisch. schrieb man bisher wörter, deren infinitiv ein ss</Line>
+ <Line>enthielt in der gebeugten form mit ß, so muss man nun acht</Line>
+ <Line>geben. es heißt weiterhin füße, während es neuerdings fasst</Line>
+ <Line>heißt. die regel ist nicht sehr schwer. klingt der vokal</Line>
+ <Line>vor dem s-laut lang, schreibt man ein ß, klingt er kurz,</Line>
+ <Line>dann benutzt man ss. also fassen, fasst, das fass, gefasst,</Line>
+ <Line>müssen, muss, schluss, kuss - aber - fuß, füße, süß, groß,</Line>
+ <Line>gemäß. auch bei den doppelvokalen tritt das ß in auf. also</Line>
+ <Line>heiß, weiß, äußerst, außen, genießen, fließen, fleißig.</Line>
+ <Line>viel spaß und weiterhin genüssliches üben.</Line>
+ <Line>er maß ab, das maß aller dinge,</Line>
+ <Line>hass, muss, misslingen, essbar, größer, schößlinge, mäßig,</Line>
+ <Line>gleichmäßig, das postschließfach, expressgüter, man stößt,</Line>
+ <Line>planmäßig, regelmäßig, gemäß, das gefäß, stöße, die größte</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Capslock</NewCharacters>
+ <Line>ALLES WAS HIER STEHT IST, MIT FESTGESTELLTER UMSCHALTTASTE</Line>
+ <Line>LINKS GESCHRIEBEN. DABEI BLEIBEN AUCH PUNKT UND KOMMA, SO-</Line>
+ <Line>WIE BINDESTRICHE ERHALTEN. IM FOLGENDEN BENUTZEN WIR DIESE</Line>
+ <Line>TASTE NICHT MEHR, DA DAMIT NICHT DER ÜBLICHE SCHREIBALLTAG</Line>
+ <Line>BEWÄLTIGT WIRD. DIE BEIDEN ANDEREN UMSCHALTTASTEN WERDEN</Line>
+ <Line>JEWEILS VON DEM KLEINEN FINGER DER HAND BENUTZT, DIE EINEN</Line>
+ <Line>KÜRZEREN WEG HAT. DAS IST IN DER REGEL DIE HAND, DIE FÜR</Line>
+ <Line>DEN FOLGENDEN BUCHSTABEN NICHT BENÖTIGT WIRD. DAMIT IST ES</Line>
+ <Line>DANN AUCH MÖGLICH, ALLE ZEICHEN DER ZWEITBELEGUNG ZU TIP-</Line>
+ <Line>PEN, ALSO AUCH DAS FRAGEZEICHEN.</Line>
+ <Line>DIE ERSTE ÜBUNG WIRD FÜR DIE UMSCHALTTASTE LINKS, DIE ZWEI-</Line>
+ <Line>TE FÜR DIE UMSCHALTTASTE RECHTS SEIN. DANACH WIRD GEMISCHT.</Line>
+ <Line>ACHTUNG, DIE FESTSTELLTASTE MUSS NUN NOCH EINMAL BETÄTIGT</Line>
+ <Line>WERDEN. jetzt sollte das capslock-lämpchen aus sein.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Großbuchstaben (links)</NewCharacters>
+ <Line>Ja Ja Ja Ja Ja Ja Ja Ja Ka Ka Ka Ka Ka Ka Ka Ka La La La La</Line>
+ <Line>Ma Ma Ma Ma Ma Ma Za Za Za Za Ha Ja Ja Ha Ha Za Ha Ha Ha Ha</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Großbuchstaben (rechts)</NewCharacters>
+ <Line>Fö Fö Fö Fö Fö Fö Fö Fö Fö Fö Gö Gö Gö Gö Gö Bö Bö Bö Bö Bö</Line>
+ <Line>Wö Wö Wö Wö Rä Rä Rä Rö Rö Gä Gä Fä Dä Sä Vä Vä Vö Sö Dä Dä</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Großbuchstaben</NewCharacters>
+ <Line>Kalk Kalk Wald Wald Rand Sand Hand Land Verstand Klang Tank</Line>
+ <Line>Wort, Ort, Hort, Gehrung, Nahrung, Klarheit, Vergangenheit,</Line>
+ <Line>Art, Hahn, Mahnung, Lohn, Sohn, Hohn, Keim, Krönung, Krone,</Line>
+ <Line>Leine, Leim, Heim, Geheimnis, Verbannung, Bekanntmachungen,</Line>
+ <Line>Training, die Träne, der Trost, trostlos, das Los, Losungen</Line>
+ <Line>Die folgenden vier Lektionen werden aus ganz normalen Text-</Line>
+ <Line>übungen bestehen, danach geht es mit den Sonder- und Zahl-</Line>
+ <Line>zeichen weiter.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>Linux - meine Freude</Line>
+ <Line>Es war ein ganz normaler Tag. Alles war wie immer. Ich kam</Line>
+ <Line>aus der Schule und setzte mich an den PC. Homepage verwal-</Line>
+ <Line>ten, Schülerdaten aktualisieren, Unterricht vorbereiten,</Line>
+ <Line>nebenbei ein paar MIDI-Files bearbeiten und E-Mail lesen.</Line>
+ <Line>Mein Windows-PC ist eben gut ausgestattet. Doch dann ging</Line>
+ <Line>es wieder los. Das Abholen der E-Mail dauerte satte drei</Line>
+ <Line>Minuten. Als ich dann im Postfach sah, dass da genau eine</Line>
+ <Line>nicht einmal sehr lange Mail reingekommen war, stand für</Line>
+ <Line>mich der Umstieg fest. Linux musste her. Ich wusste nicht,</Line>
+ <Line>was da auf mich zukommen würde, doch das war mir egal. Es</Line>
+ <Line>konnte nur noch besser werden. Kostenlose Software, gute</Line>
+ <Line>Internetanbindung, arbeiten auf verschiedenen Konsolen,</Line>
+ <Line>es klang vielversprechend. Dann ging es los. Erwartungs-</Line>
+ <Line>voll packte ich meine SuSE 6.1 aus und begann sofort mit</Line>
+ <Line>der Installation. Innerhalb eines Tages hatte ich alles</Line>
+ <Line>wichtige, also auch die ISDN-Konfiguration, fertig.</Line>
+ <Line>Einiges an meiner Hardware war problematisch, z.B. bekam</Line>
+ <Line>ich die Soundkarte nicht gleich voll einsatzfähig, aber da</Line>
+ <Line>ich nun sowieso erstmal mehrere Gigabyte an Software zu</Line>
+ <Line>erkunden hatte, störte mich das weniger.</Line>
+ <Line>Eine vernünftige Mailkonfiguration habe ich erst Wochen</Line>
+ <Line>später eingerichtet, doch für den Anfang tat es Netscape.</Line>
+ <Line>Inzwischen arbeite ich seit 10 Monaten mit Linux, und ich</Line>
+ <Line>habe keinen Tag davon bereut. Ich habe wieder angefangen,</Line>
+ <Line>Bücher zu lesen, und meine Fähigkeit, mich auf ein Problem</Line>
+ <Line>zu konzentrieren, statt einfach drauf los zu arbeiten, ist</Line>
+ <Line>irgendwie auch besser geworden. Dennoch gibt es noch sehr</Line>
+ <Line>viel zu lernen.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>Das Internet</Line>
+ <Line>Das Internet ist in aller Munde. Alle wollen daran teil-</Line>
+ <Line>haben, viele wollen daran verdienen. Selbst Boris ist, wie</Line>
+ <Line>jeder weiß, inzwischen drin. Wie aber alles ganz genau be-</Line>
+ <Line>gann, wissen die wenigsten.</Line>
+ <Line>In den späten sechziger Jahren begann die Advanced Research</Line>
+ <Line>Projects Agency des amerikanischen Verteidigungsministeri-</Line>
+ <Line>ums, kurz ARPA genannt, mit der Finanzierung ein experimen-</Line>
+ <Line>tellen Wide Area Network, kurz WAN, um damit wichtige For-</Line>
+ <Line>schungsorganisationen in den Vereinigten Staaten von Ameri-</Line>
+ <Line>ka zu verbinden. Dieses Computernetz wurde ARPAnet genannt.</Line>
+ <Line>Das ursprüngliche Ziel bestand in der Freigabe teuerer und</Line>
+ <Line>knapper Rechnerressourcen an Auftragnehmern der Regierung.</Line>
+ <Line>Von Anfang an wurde das Netzwerk von den Benutzern aber auch</Line>
+ <Line>für die Zusammenarbeit, also der gemeinsamen Nutzung von Da-</Line>
+ <Line>teien und Software, dem Austausch von E-Mail und der gemein-</Line>
+ <Line>samen Entwicklung und Forschung über gemeinsam genutzte ent-</Line>
+ <Line>fernte Computer, verwendet.</Line>
+ <Line>In den frühen achtziger Jahren wurde über eine Protokoll-</Line>
+ <Line>Suite nachgedacht. Es entstand das Transmission Control Pro-</Line>
+ <Line>tocol, Internet Protocol. Diese wurde im ARPAnet schnell</Line>
+ <Line>Standard. Mit der Aufnahme dieses Protokolls in das populäre</Line>
+ <Line>BSD Unix-Betriebssystem, der University of California at</Line>
+ <Line>Berkeley begann die Demokratisierung von Netzwerken. Es wur-</Line>
+ <Line>den zunächst Universitäten verbunden, doch es dauerte nicht</Line>
+ <Line>lange, bis die in ein lokales Netzwerk eingebundenen Compu-</Line>
+ <Line>ter über das ARPAnat kommunizieren konnten. Das Netzwerk</Line>
+ <Line>wuchs und wuchs. Warens es anfangs noch eine Handvoll Hosts,</Line>
+ <Line>so wurde es schnell ein Netz von Zehntausenden von Hosts.</Line>
+ <Line>Das ursprüngliche ARPAnet wurde zum Backbone des Internet.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>Lesung A. Kalbitz</Line>
+ <Line>----------------------------------------------------------</Line>
+ <Line>Samstagabend, Feierabend. Beine hochlegen, abschlaffen,</Line>
+ <Line>das miese Fernsehprogramm über sich ergehen lassen, schla-</Line>
+ <Line>fen. Ein Leben lang berieselt von den Impressionen irgend-</Line>
+ <Line>welcher Fernsehredakteure, Krankenhausserien - Ein Muss,</Line>
+ <Line>zumindest, seit Dr. Brinkmann in der Schwarzwaldklinik zu</Line>
+ <Line>Weltruhm vor der Ärzteschaft der Fernsehwelt gelangte.</Line>
+ <Line>Aber da war doch noch was. Da gab es noch andere Möglich-</Line>
+ <Line>keiten der Freizeitgestaltung. Beruhigt lehne ich mich zu-</Line>
+ <Line>rück und merke kaum, wie mir die Augen zu fielen.</Line>
+ <Line>Es ist höchste Zeit. Gleich beginnt die Lesung, und unser-</Line>
+ <Line>eins sitzt noch im Taxi und sucht die Eintrittskarten.</Line>
+ <Line>Ich bin absolut kein Kafka-Freund, aber es ist mal was an-</Line>
+ <Line>deres.</Line>
+ <Line>Endlich - wir betreten den Saal und erwischen schnell noch</Line>
+ <Line>einen Platz in der letzten Reihe. Es wird dunkel. Nur vorn</Line>
+ <Line>auf der Bühne strahlt ein greller Scheinwerfer auf das et-</Line>
+ <Line>was zu kleine Lesepult. Applaus. Von der Seite tritt ein</Line>
+ <Line>Mann herein, den ich nicht kenne, der aber als Autor vor-</Line>
+ <Line>gestellt wird, und der sein neuestes Werk auszugweise vor-</Line>
+ <Line>lesen soll. Er setzt sich, räuspert sich noch einmal und</Line>
+ <Line>blättert bedächtig in seinem Buch. Bei einem Lesezeichen</Line>
+ <Line>hält er inne, überfliegt die Seite, wirft noch einen Blick</Line>
+ <Line>in den Saal, als wolle er sagen - Achtung, es geht gleich</Line>
+ <Line>los - und atmet tief ein, um zu lesen, als plötzlich ein</Line>
+ <Line>lautes Krachen den Saal erfüllt. Das war kein Schuss,</Line>
+ <Line>dachte ich gleich. Derartige Geräusche kennt man ja aus</Line>
+ <Line>den Aktionfilmen im Fernsehen. Der Stuhl eines Gastes kann</Line>
+ <Line>auch nicht zusammengebrochen sein. Dafür war das Geräusch</Line>
+ <Line>zu laut...</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>Was hat... A. Kalbitz</Line>
+ <Line>------------------------------------------------</Line>
+ <Line>Was hat uns so verblendet,</Line>
+ <Line>dass alles was wir schaffen,</Line>
+ <Line>gemessen wird an anderem,</Line>
+ <Line>verglichen wird, getaxt, bewertet</Line>
+ <Line>und am Ende nicht verwendet.</Line>
+ <Line>Was hat uns nur so abgestumpft,</Line>
+ <Line>dass wir nicht erstmal sehen,</Line>
+ <Line>warum da einer etwas tut,</Line>
+ <Line>ob er es schafft, noch Hilfe braucht,</Line>
+ <Line>am Ende wirds gemeinsam gehen.</Line>
+ <Line>Was hat die Menschen kalt gemacht,</Line>
+ <Line>dass mancher gleich darüber lacht,</Line>
+ <Line>wenn einem mal ein Missgeschick</Line>
+ <Line>die Röte auf die Wangen malt, er sich blamiert,</Line>
+ <Line>verletzt dann einfach resigniert.</Line>
+ <Line>Was hat verdammt noch mal</Line>
+ <Line>der Autor sich dabei gedacht,</Line>
+ <Line>uns unser Dasein zu vermiesen,</Line>
+ <Line>mit dummen Texten, Meinungen und ungeschickt</Line>
+ <Line>gebastelten Gedichten, wie diesem.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>&lt; und ></NewCharacters>
+ <Line>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;>&lt;></Line>
+ <Line>&lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; > &lt; ></Line>
+ <Line>>&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt; >&lt;</Line>
+ <Line>&lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt; >> &lt;&lt;</Line>
+ <Line>Die Zeichen &lt; und > werden als Operatoren benutzt.</Line>
+ <Line>&lt; ist der Eingabeoperator und > ist der Ausgabeoperator.</Line>
+ <Line>Mit ls > dateiname kann ich unter Linux eine Dateiliste</Line>
+ <Line>mit allen Dateien des akuellen Verzeichnisses anlegen.</Line>
+ <Line>Will dich eine Datei nicht überschreiben sondern Daten</Line>
+ <Line>anhängen, benutze ich >> als Operator.</Line>
+ <Line>In HTML-Quellen spielen die Zeichen &lt; und > eine wesent-</Line>
+ <Line>liche Rolle. Alle Tags, gesprochen: Tägs, werden zwischen</Line>
+ <Line>&lt; und > eingeschlossen.</Line>
+ <Line>Beispiele: &lt;html> &lt;head> &lt;body> &lt;a href... &lt;img src...</Line>
+ <Line>&lt;table> &lt;hr> &lt;br> &lt;p> &lt;li> &lt;ol> &lt;ul></Line>
+ <Line>Auch in der XML-Syntax werden diese Zeichen verwendet um</Line>
+ <Line>die Tags von den normalen Texten abzugrenzen.</Line>
+ <Line>Häufig werden die Zeichen auch verwendet, um Unterschiede</Line>
+ <Line>darzustellen. Daher stammen auch die Bezeichnungen:</Line>
+ <Line>ist größer als - für > und ist kleiner als - für &lt;.</Line>
+ <Line>In ASCII-ART-Manier lassen die Zeichen sich ebenfalls gut</Line>
+ <Line>verwenden. Beispiele dazu wird es in einer der Abschluss-</Line>
+ <Line>lektionen geben.</Line>
+ <Line>&lt;->&lt;-&lt;>->&lt;&lt;-->>-&lt;&lt;-->>-&lt;&lt;-->>-&lt;&lt;->>-&lt;&lt;--->>-->>-&lt;&lt;->>-&lt;&lt;>></Line>
+ </Level>
+ <Level>
+ <NewCharacters>1,!, ; und ?</NewCharacters>
+ <Line>1! ß? 1! ß? 1! ß? 1ß!? ?1?ß !1?! 1ß!? ??!!1ßß1 !ß!ß1??!ß!1</Line>
+ <Line>.!? sind Interpunktionszeichen, die im Deutschen dazu ver-</Line>
+ <Line>wendet werden, um zu signalisieren, dass es sich bei einem</Line>
+ <Line>Satz um eine normale Aussage, einen Ausruf oder eine Frage</Line>
+ <Line>handelt. Wer war das? Wieso machst Du das? Wo kommst Du</Line>
+ <Line>denn her? Das alles sind typische Fragen, bei denen der</Line>
+ <Line>Leser sofort weiß, wie er sie betonen muss.</Line>
+ <Line>Komm her! Sei leise! Hallo! Achtung! Das wiederum sind, so</Line>
+ <Line>sagt das Interpunktionszeichen, Ausrufesätze. Sie werden</Line>
+ <Line>vom Leser ebenfalls deutlich anders gesprochen, als Frage-</Line>
+ <Line>sätze oder normale Sätze, die mit dem Punkt abgeschlossen</Line>
+ <Line>werden.</Line>
+ <Line>Auf der Tastatur werden !?.&lt;> als Sonderzeichen betrachtet,</Line>
+ <Line>was eigentlich nur bedeuten soll, dass sie von den normalen</Line>
+ <Line>Buchstaben unterscheiden werden müssen. Ebenfalls unter-</Line>
+ <Line>schieden werden die Zahlzeichen, wie z.B. die 1. Aus Zahl-</Line>
+ <Line>zeichen werden Zahlen gebildet:</Line>
+ <Line>1 steht für eins, 11 für elf, 111 für einhundertundelf.</Line>
+ <Line>Verwendet man das Wort ein in Texten, wird es für gewöhn-</Line>
+ <Line>lich als unbestimmter Artikel verwendet. Das läßt sich</Line>
+ <Line>aber manchmal auch anders interpretieren: Werden kleine</Line>
+ <Line>Mengen in Texten verwendet, schreibt man dafür häufig die</Line>
+ <Line>Zahlwörter ein, zwei oder drei. In Aufzählungen oder bei</Line>
+ <Line>der Festlegung von Reihenfolgen hingegen benutzt man gern</Line>
+ <Line>die Zahlzeichen: 1.; 1. Platz; 1. Durchlauf; 1. Datensatz.</Line>
+ <Line>In HTML wird das Ausrufezeichen übrigens verwendet, um</Line>
+ <Line>Kommentare in die Quellen einzugügen, die dann später in</Line>
+ <Line>der Internetseite nicht zu sehen sind.</Line>
+ <Line>&lt;!-- Dies ist ein Kommentar in einem HTML-Quelltext --></Line>
+ <Line>Willst Du noch mehr über die Bedeutung von ! und ? wissen?</Line>
+ </Level>
+ <Level>
+ <NewCharacters>5, %, 8 und (</NewCharacters>
+ <Line>((((((((((((((((((((((((((((((((((((((((((((((((((((((((((</Line>
+ <Line>58% liest man als achtundfünfzig Prozent. Prozent bedeutet</Line>
+ <Line>von Hundert.</Line>
+ <Line>Berechne:</Line>
+ <Line>58% von 1111 EUR.</Line>
+ <Line>88% von 888 kg Mehl.</Line>
+ <Line>%-Werte werden benötigt, um den Anteil an einen bestimmten</Line>
+ <Line>Grundwert zu berechnen.</Line>
+ <Line>In Perl wird das %-Zeichen benutzt, um einen Hash festzu-</Line>
+ <Line>legen. %namen wird dann eine z.B. zweispaltige Liste mit</Line>
+ <Line>Vor- und Nachnamen zugeordnet, die dann in dem Programm</Line>
+ <Line>ausgelesen werden kann.</Line>
+ <Line>In der Bash ist % ein Operator für Modulus-Operationen.</Line>
+ <Line>Das entspricht dem Rest bei einer ganzzahligen Division.</Line>
+ <Line>((((((((((((((((((((((((((((((((((((((((((((((((((((((((((</Line>
+ </Level>
+ <Level>
+ <NewCharacters>2, 6, &amp;, 7 und /</NewCharacters>
+ <Line>1 5 8 6 7 7 6 5 8 1 67 76 58 85 158 178 167 187 585 151 58</Line>
+ <Line>6 7 &amp; / 16/8 7/5 1/7 6/8 5/8 6/5 8/8 5/5 7/7 6/7 1/7 1/6 &amp;</Line>
+ <Line>Internet &amp; Co.; Max Meier &amp; Söhne; Grunewald &amp; Co. KG</Line>
+ <Line>Das Kaufmanns-und &amp; begegnet uns bewußt oder unbewußt recht</Line>
+ <Line>häufig. Aber es wird nicht nur in Firmenbezeichnungen ver-</Line>
+ <Line>wendet.</Line>
+ <Line>In der Bash dient das Kaufmanns-und als Operator.</Line>
+ <Line>Ein &amp; bedeutet bitweises UND und</Line>
+ <Line>ein &amp;&amp; bedeutet logisches UND.</Line>
+ <Line>In 1>&amp;2 wird die Standardausgabe eines Befehls auf die</Line>
+ <Line>Standardfehlerausgabe umgeleitet.</Line>
+ <Line>Der Slash / wird häufig als Zeichen für die Division ver-</Line>
+ <Line>wendet. Unter LINUX ist es ein wesentliches Zeichen für</Line>
+ <Line>die Organisation der Verzeichnisstruktur. So ist / (root)</Line>
+ <Line>das Wurzelverzeichnis, von dem aus in Unterverseichnisse</Line>
+ <Line>verzweigt wird. /boot, /root, /opt, /usr, /var, /tmp,</Line>
+ <Line>/etc, /bin sind Standardverzeichnisse in dieser Struktur.</Line>
+ <Line>In HTML wird der Slash benutzt, um TAGs zu schließen.</Line>
+ <Line>&lt;html></Line>
+ <Line>&lt;head>&lt;title> Homepagetitel &lt;/title>&lt;/head></Line>
+ <Line>&lt;body></Line>
+ <Line>Seitentext inclusive weiterer HTML-Befehle.</Line>
+ <Line>&lt;/body></Line>
+ <Line>&lt;/html></Line>
+ <Line>Dies ist eine gültige Grundstruktur einer HTML-Seite mit</Line>
+ <Line>sehr wenig Inhalt.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>4, $, 9 und )</NewCharacters>
+ <Line>(49$) (49$) (48$) (57$) (56$) (78$) (89$) (18$) ($81) (51$)</Line>
+ <Line>Das $-Zeichen steht für Dollar. Jedem ist klar, dass dieses</Line>
+ <Line>Zeichen für eine Währung steht, die den Weltmarkt beherrst.</Line>
+ <Line>Dies soll jetzt kein Text über Umrechnungskurse werden. Die</Line>
+ <Line>wechseln ja doch regelmäßig. Stattdessen wollen wir auch</Line>
+ <Line>für dieses $-Zeichen nach weiteren Bedeutungen fahnden.</Line>
+ <Line>Zunächst die Bash:</Line>
+ <Line>$ steht für Variablen- oder Befehlssubstitution.</Line>
+ <Line>Beispiel für Befehlssubstitution: Befehl1 $(Befehl2)</Line>
+ <Line>Beispiele für Variablensubstitution können hier leider noch</Line>
+ <Line>nicht geschrieben werden, da dabei die geschweifte Klammer</Line>
+ <Line>verwendet wird.</Line>
+ <Line>Und nun Perl:</Line>
+ <Line>In Perl lassen sich mit dem $-Zeichen ganz einfach Variablen</Line>
+ <Line>festlegen.</Line>
+ <Line>Dabei kann direkt von der Tastatur &lt;STDIN> gelesen und damit</Line>
+ <Line>die Variable gefüllt werden:</Line>
+ <Line>$eingabe = &lt;STDIN>;</Line>
+ <Line>mit</Line>
+ <Line>chomp($eingabe);</Line>
+ <Line>wird das Newline-Zeichen am Ende der Eingabe entfernt.</Line>
+ <Line>Dabei wird der Inhalt der Variablen $eingabe bereits ausge-</Line>
+ <Line>lesen und verarbeitet.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>3, §, 0 und =</NewCharacters>
+ <Line>§30=§30=§30=§30=§30=§30=§30=§30=§30=§30=§30=§30=§30=§30=§30</Line>
+ <Line>134567890 098765431 !§$%&amp;/()= =)(/&amp;%$§! 890 60 470 160 3140</Line>
+ <Line>===========================================================</Line>
+ <Line>§ - Paragraph</Line>
+ <Line>Dieses Zeichen steht für Recht und Ordnung auf der ganzen</Line>
+ <Line>Welt. Sie kennen das:</Line>
+ <Line>§1 Jeder macht seins.</Line>
+ <Line>§2 Wenn keine anderen Paragraphen entgegenstehen, gilt §1!</Line>
+ <Line>===========================================================</Line>
+ <Line>Selbst das Wort Paragraphenreiter kommt nicht von ungefähr.</Line>
+ <Line>Schließlich sieht § aus wie ein Seepferdchen.</Line>
+ <Line>===========================================================</Line>
+ <Line>Das = (in Worten: ist gleich) steht ebenfalls für Gerech-</Line>
+ <Line>tigkeit. Eine Gleichung ist nur dann eine wahre Aussage,</Line>
+ <Line>wenn die Kräfte (Terme?, Werte?) auf beiden Seiten gerecht</Line>
+ <Line>verteilt sind.</Line>
+ <Line> 1+1=2</Line>
+ <Line> 2+2=4</Line>
+ <Line> 34567+56780=91347</Line>
+ <Line> f(x)=3*x+7</Line>
+ <Line>In der Programmierung nimmt man mit = oder == eine Zuwei-</Line>
+ <Line>sung vor.</Line>
+ <Line>Schlimmstenfalls läßt sich das = aber schön als Trennzei-</Line>
+ <Line>chen für Textabsätze verwenden.</Line>
+ <Line>===========================================================</Line>
+ </Level>
+ <Level>
+ <NewCharacters>&quot;</NewCharacters>
+ <Line>ALLES WAS HIER STEHT IST, MIT FESTGESTELLTER UMSCHALTTASTE</Line>
+ <Line>1234567890 0987654321 20 21 22 23 24 25 26 27 28 29 2222 2</Line>
+ <Line>&quot;Dies ist eine Aussage!&quot;</Line>
+ <Line>Die &quot;Gänsefüßchen&quot; werden in der Schriftsprache verwendet,</Line>
+ <Line>um wörtliche Rede deutlich zu machen. So kann man zum Bei-</Line>
+ <Line>spiel ab sofort nicht nur sagen, dass Kafka darüber etwas</Line>
+ <Line>las, wie man etwas sagt, sondern man kann nun auch schrei-</Line>
+ <Line>ben Kafka las:&quot;Ich sage ihnen mal wie man das sagt!&quot;</Line>
+ <Line>Darauf antwortete das Publikum:&quot;Nee, lass mal!&quot;</Line>
+ <Line>Wie in &quot;Gänsefüßchen&quot; werden die &quot;Gänsefüßchen&quot; manchmal</Line>
+ <Line>auch dazu verwendet, um eine nicht ganz korrekte aber ge-</Line>
+ <Line>läufige Bezeichnung zu verwenden. Schließlich sehen es</Line>
+ <Line>die Gänse nicht gern, wenn man ihre Füße mit einfachen An-</Line>
+ <Line>führungsstrichen vergleicht.</Line>
+ <Line>Eine Aussage im Computerbereich ist ähnlich einer Aussage</Line>
+ <Line>im literarischen Bereich häufig in Anführungsstriche zu</Line>
+ <Line>setzen. echo &quot;Dies ist ein Text!&quot; bringt in der Bash</Line>
+ <Line>Dies ist ein Text!</Line>
+ <Line>zum Vorschein. Eingebaut als Warnungen in Scripte in der</Line>
+ <Line>Form</Line>
+ <Line>echo &quot;Konnte den User nicht anlegen!&quot;</Line>
+ <Line>Führt das zu sinnvollen Ausgaben, die zur rechten Zeit</Line>
+ <Line>das richtige sagen.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>_, ^, °, ' und `</NewCharacters>
+ <Line>^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^</Line>
+ <Line>° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° °</Line>
+ <Line>' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '</Line>
+ <Line>` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `</Line>
+ <Line>Heute werden Tageshöchsttemperaturen von 21°C erwartet.</Line>
+ <Line>Bei 0°C liegt der Gefrierpunkt des Wassers.</Line>
+ <Line>Wasser siedet bei 100 °C.</Line>
+ <Line>Das ^ ist ein Sonderzeichen, das z.B. beim Programmieren</Line>
+ <Line>in C++ das Bit-Exclusive-ODER XOR repräsentiert.</Line>
+ <Line>^ ist dort also ein Operator.</Line>
+ <Line>` (Backquotes) werden in Perl wie in einer Shell dazu</Line>
+ <Line>verwendet, Ausgaben eines Programms als Daten zu über-</Line>
+ <Line>nehmen.</Line>
+ <Line>$jetzt = &quot;Die aktuelle Uhrzeit ist &quot;.`date`</Line>
+ <Line>foreach $_ (`who`) ...</Line>
+ </Level>
+ <Level>
+ <NewCharacters>+, *, # und '</NewCharacters>
+ <Line>+*#' +*#' +'*# #*#' *#' #+'+ +##+ '++' ++'#*# #+#+#+#+* #*</Line>
+ <Line> 3+3=6</Line>
+ <Line> 3*3=9</Line>
+ <Line> #include &lt;gtk.h></Line>
+ <Line> # dies ist ein Kommentar</Line>
+ <Line> ## dies auch</Line>
+ <Line>c++ ist eine objektorientierte Programmiersprache.</Line>
+ <Line>g++ ist nichts anderes.</Line>
+ <Line>Berechne!</Line>
+ <Line> 3+3+3+3=</Line>
+ <Line> 3*3*3*3=</Line>
+ <Line> 9*9*9*9=</Line>
+ <Line> 9+9+9+9=</Line>
+ <Line>Rechenoperationen in der Mathematik:</Line>
+ <Line> + ist das Zeichen für die Addition.</Line>
+ <Line> * ist das Zeichen für Multiplikation.</Line>
+ <Line>'Hier steht etwas drin!'</Line>
+ <Line>In literarischen Texten wird das Zeichen ' häufig dafür</Line>
+ <Line>verwendet, um eine wörtliche Rede: (&quot;Du hast doch gesagt,</Line>
+ <Line>dass ich den Film noch zuende sehen darf.&quot;) von Gedanken,</Line>
+ <Line>die nicht ausgesprochen werden ('Immer muss ich um acht</Line>
+ <Line>ins Bett! Das ist echt unfair!') zu unterscheiden.</Line>
+ <Line>So kann man sehr sinnreiche Texte formulieren, in denen</Line>
+ <Line>man genau darauf achten muss, was gesagt und was nur ge-</Line>
+ <Line>dacht wurde.</Line>
+ <Line>&quot;Ein schönes Kleid haben sie heute wiede an, Frau Meier!&quot;</Line>
+ <Line>'Den Fummel haben sie wohl aus dem Schlussverkauf, oder?'</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Zwischenübung</NewCharacters>
+ <Line>Sitzung frei erschwindelt von: A. Kalbitz</Line>
+ <Line>==========================================================</Line>
+ <Line>&quot;Hast du dir das auch gut überlegt?&quot; Rainer schaute zwei-</Line>
+ <Line>felnd auf Felix und man sah seinen Augen an, dass da nicht</Line>
+ <Line>nur Zweifel, sondern auch besseres Wissen in dieser Frage</Line>
+ <Line>lag. &quot;Äh, ich dachte, ja,&quot;, kam Felix zögerlich mit der</Line>
+ <Line>Sprache raus, &quot;wenn ich schon Linux auf dem Schulnetz fah-</Line>
+ <Line>re, dann sollen auch die Schüler die Möglichkeit haben,</Line>
+ <Line>mit Linux zu arbeiten.&quot; Rainer sah immer noch skeptisch</Line>
+ <Line>aus. &quot;Dann bist Du aber erst einmal der Einzige, der das</Line>
+ <Line>benutzen und den Schülern verständlich machen kann.&quot;</Line>
+ <Line>&quot;Das ist schon klar, aber ich bin guter Hoffnung, das</Line>
+ <Line>das System so nach und nach überzeugt!&quot; -</Line>
+ <Line>&quot;Und die Kollegen?&quot; - &quot;Bekommen eine Schulung, wenn der</Line>
+ <Line>Bedarf da ist.&quot; - &quot;Na gut, wenn Du glaubst, dass das so</Line>
+ <Line>machbar ist, dann gehen wir es an, ich bezweifle nur,</Line>
+ <Line>dass du damit viele erreichen wirst.&quot; Felix grinste nun</Line>
+ <Line>breit übers ganze Gesicht: &quot;Warten wir es doch ab.&quot;</Line>
+ <Line>Nun sah er aus, als hätte er ein As aus dem Ärmel gezogen.</Line>
+ <Line>&quot;Wir haben bisher niemanden dazu überredet, sich einen</Line>
+ <Line>Computer &quot;anzutun&quot;, und selbst unter den älteren Kollegen</Line>
+ <Line>wird die Zahl derjenigen, die diese Technik akzeptieren</Line>
+ <Line>nun doch immer größer, warum soll sich dass denn mit dem</Line>
+ <Line>interessantesten System, das die Branche zu bieten hat</Line>
+ <Line>nicht bald ähnlich einstellen. Letztendlich setzt sich die</Line>
+ <Line>Neugierde doch durch.&quot; Nun grinste auch Rainer, &quot;Na gut,</Line>
+ <Line>ich kaufe mir schon mal für meinen privaten Rechner eine</Line>
+ <Line>neue Festplatte, damit ich dann mitreden kann, wenn es</Line>
+ <Line>losgeht.&quot; - &quot;Siehste! Es wirkt schon!&quot; ;-)</Line>
+ </Level>
+ <Level>
+ <NewCharacters>², ³, {, [, ], }, \, @, ~ und |</NewCharacters>
+ <Line>Drittbelegung: Das sind die Zeichen ² ³ { [ ] } \ @ ~ |</Line>
+ <Line>&quot;Quadrat&quot;-Zeichen=&quot;Hoch zwei&quot;:</Line>
+ <Line> f(x)=2x²+2x+2</Line>
+ <Line> mm², cm², dm², m², km²</Line>
+ <Line> f(x)=sin²(x)+cos²(x)</Line>
+ <Line>&quot;Kubik&quot;-Zeichen=&quot;Hoch drei&quot;:</Line>
+ <Line> f(x)=x³+2x²+x+1</Line>
+ <Line> mm³, cm³, m³, km³</Line>
+ <Line> 1l=1dm³</Line>
+ <Line>&quot;geschweifte&quot; und &quot;eckige&quot; Klammern:</Line>
+ <Line> {} []</Line>
+ <Line> y={3x*[2x-1]-4}</Line>
+ <Line> if test &quot;${!arg_num}&quot; = &quot;-v&quot;; then</Line>
+ <Line> verbose on</Line>
+ <Line>&quot;Backslash&quot;:</Line>
+ <Line> \ wir verwendet, um eine Befehlszeile in einem</Line>
+ <Line> Script auf der foldenden Zeile weiterzuführen.</Line>
+ <Line>&quot;Klammeraffe&quot;:</Line>
+ <Line> @ kommt in E-Mailadressen vor.</Line>
+ <Line> moritz@musterdomain.de</Line>
+ <Line> user@localhost</Line>
+ <Line> @ Wird z.B. in Perl für zur Festlegung von</Line>
+ <Line> Arrays oder als Feldplatzhalter verwendet.</Line>
+ <Line> @nonsens(&quot;Quatsch&quot;,&quot;Witz&quot;,&quot;Blödsinn&quot;)</Line>
+ <Line> @&lt;&lt;&lt;&lt;&lt;&lt;&lt;</Line>
+ <Line>&quot;Tilde&quot;:</Line>
+ <Line> ~ dient z.B. standardmäßig als Kennzeichnung für</Line>
+ <Line> Sicherheitskopien, die von ln angelegt werden.</Line>
+ <Line>&quot;Pipe&quot;:</Line>
+ <Line> | wird als arithmetischer Ausdruck für bitweises</Line>
+ <Line> ODER z.B. in der bash verwendet.</Line>
+ <Line> || hingegen kennzeichnet ein logisches ODER</Line>
+ <Line> |= ist ein ODER mit anschließender Zuweisung</Line>
+ <Line> Mit | lassen sich Ausgaben eines Befehls in</Line>
+ <Line> andere Anwendungen umleiten.</Line>
+ <Line> ls *.jpg | less listet alle Dateien des aktuellen</Line>
+ <Line> Verzeichnisses in less auf.</Line>
+ <Line>Die Zeichen der Drittbelegung haben mit der Einführung des</Line>
+ <Line>Computers in das Leben der Schreibenden Einzug gehalten.</Line>
+ <Line>Aus diesem Grund haben wir sie in den Kurs aufgenommen.</Line>
+ <Line>Im ursprünglichen Zehnfinger-System gibt es keine</Line>
+ <Line>Entsprechung, da auf alten Schreibmaschinen die &lt;Alt Gr>-</Line>
+ <Line>Taste nicht existiert.</Line>
+ <Line>{²²²} || {³³³} || [²²²] || [³³³] || \\\ || @@@ || ~~~ ||</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Geschafft!</NewCharacters>
+ <Line>/***************************************************************************</Line>
+ <Line> info.cpp - description</Line>
+ <Line> begin : Sun Jan 30 14:40:59 MET 2000</Line>
+ <Line> copyright : (C) 1999 by Daniel Reith</Line>
+ <Line> email : DanR@gmx.de</Line>
+ <Line> ***************************************************************************/</Line>
+ <Line>/***************************************************************************</Line>
+ <Line> * *</Line>
+ <Line> * This program is free software; you can redistribute it and/or modify *</Line>
+ <Line> * it under the terms of the GNU General Public License as published by *</Line>
+ <Line> * the Free Software Foundation; either version 2 of the License, or *</Line>
+ <Line> * (at your option) any later version. *</Line>
+ <Line> * *</Line>
+ <Line> ***************************************************************************/</Line>
+ <Line> #include &quot;info.h&quot;</Line>
+ <Line> #include &quot;wx/image.h&quot;</Line>
+ <Line> #include &lt;config.h></Line>
+ <Line>enum</Line>
+ <Line>{</Line>
+ <Line> C = 211,</Line>
+ <Line> OK = 212</Line>
+ <Line>};</Line>
+ <Line>BEGIN_EVENT_TABLE(Info_Dialog, wxDialog)</Line>
+ <Line> EVT_BUTTON(OK, Info_Dialog::OnSchliessen)</Line>
+ <Line>END_EVENT_TABLE()</Line>
+ <Line>//*********************************************************</Line>
+ <Line>//* Konstruktor</Line>
+ <Line>//*********************************************************</Line>
+ <Line>Info_Dialog::Info_Dialog(wxWindow* parent, wxWindowID id, const wxString&amp; title, const wxPoint&amp; pos = wxDefaultPosition,</Line>
+ <Line>const wxSize&amp; size =wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString&amp; name = &quot;dialogBox&quot;) : wxDialog(parent, id, title, pos, size, style, name)</Line>
+ <Line>{</Line>
+ <Line> SetAutoLayout(TRUE);</Line>
+ <Line> #ifdef __WXMSW__</Line>
+ <Line> wxBitmap::AddHandler(new wxPNGFileHandler);</Line>
+ <Line> #endif</Line>
+ <Line> #ifdef __WXGTK__</Line>
+ <Line> wxImage::AddHandler(new wxPNGHandler);</Line>
+ <Line> #endif</Line>
+ <Line> wxString f;</Line>
+ <Line> f &lt;&lt; L_DIR &lt;&lt; &quot;logo.png&quot;;</Line>
+ <Line> logo = new wxBitmap(f , wxBITMAP_TYPE_PNG);</Line>
+ <Line> canvas = new MyCanvas(this, logo, wxDefaultPosition, wxDefaultSize);</Line>
+ <Line> wxLayoutConstraints *c1 = new wxLayoutConstraints;</Line>
+ <Line> c1->top.SameAs(this, wxTop, 5);</Line>
+ <Line> c1->left.SameAs(this, wxLeft, 5);</Line>
+ <Line> c1->width.PercentOf(this, wxWidth, 48);</Line>
+ <Line> c1->height.PercentOf(this, wxHeight, 80);</Line>
+ <Line> canvas->SetConstraints(c1);</Line>
+ <Line> info_text = new wxStaticText(this, -1, &quot;&quot;, wxDefaultPosition, wxDefaultSize);</Line>
+ <Line> wxLayoutConstraints *c3 = new wxLayoutConstraints;</Line>
+ <Line> c3->top.SameAs(this, wxTop, 5);</Line>
+ <Line> c3->left.SameAs(canvas, wxRight, 15);</Line>
+ <Line> c3->width.PercentOf(this, wxWidth, 47);</Line>
+ <Line> c3->height.PercentOf(this, wxHeight, 80);</Line>
+ <Line> info_text->SetConstraints(c3);</Line>
+ <Line> wxString msg;</Line>
+ <Line> msg &lt;&lt; _(&quot;PingoS Tipptrainer\n&quot;)</Line>
+ <Line> &lt;&lt; _(&quot;------------------\n&quot;)</Line>
+ <Line> &lt;&lt; _(&quot;Version:\t&quot;) &lt;&lt; VERSION</Line>
+ <Line> &lt;&lt; _(&quot;\nhttp://www.pingos.schulnetz.org/tipptrainer\n&quot;)</Line>
+ <Line> &lt;&lt; _(&quot;Veröffentlicht unter der GPL 2.0\n&quot;)</Line>
+ <Line> &lt;&lt; _(&quot;\nAutoren:\n&quot;)</Line>
+ <Line> &lt;&lt; &quot;Andreas Kalbitz \n\t(felix@musik-workshop.de)\n&quot;</Line>
+ <Line> &lt;&lt; &quot;Matthias Kleine \n\t(Matthias.Kleine@selflinux.de)\n&quot;</Line>
+ <Line> &lt;&lt; &quot;Daniel Reith (DanR@gmx.de)\n&quot;</Line>
+ <Line> &lt;&lt; _(&quot;\nFeedback bitte an: \n\ttipptrainer@reith.8m.com&quot;);</Line>
+ <Line> info_text->SetLabel(msg);</Line>
+ <Line> ok = new wxButton(this, OK, _(&quot;Schließen&quot;));</Line>
+ <Line> wxLayoutConstraints *c2 = new wxLayoutConstraints;</Line>
+ <Line> c2->centreX.SameAs(this, wxCentreX);</Line>
+ <Line> c2->top.SameAs(canvas, wxBottom, 10);</Line>
+ <Line> c2->width.PercentOf(this, wxWidth, 30);</Line>
+ <Line> c2->height.PercentOf(this, wxHeight, 9);</Line>
+ <Line> ok->SetConstraints(c2);</Line>
+ <Line>}</Line>
+ <Line>//*********************************************************</Line>
+ <Line>//* Destruktor</Line>
+ <Line>//*********************************************************</Line>
+ <Line>Info_Dialog::~Info_Dialog()</Line>
+ <Line>{</Line>
+ <Line>}</Line>
+ <Line>//**********************************************************</Line>
+ <Line>//* Fenster schließen</Line>
+ <Line>//**********************************************************</Line>
+ <Line>void Info_Dialog::OnSchliessen(wxCommandEvent* event)</Line>
+ <Line>{</Line>
+ <Line> EndModal(GetReturnCode());</Line>
+ <Line>}</Line>
+ <Line>BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)</Line>
+ <Line> EVT_PAINT(MyCanvas::OnPaint)</Line>
+ <Line>END_EVENT_TABLE()</Line>
+ <Line>MyCanvas::MyCanvas(wxWindow *parent, wxBitmap *b, const wxPoint&amp; pos, const wxSize&amp; size):</Line>
+ <Line> wxScrolledWindow(parent, -1, pos, size)</Line>
+ <Line>{</Line>
+ <Line> logo = b;</Line>
+ <Line>}</Line>
+ <Line>MyCanvas::~MyCanvas()</Line>
+ <Line>{</Line>
+ <Line>}</Line>
+ <Line>void MyCanvas::OnPaint(wxPaintEvent&amp; WXUNUSED(event))</Line>
+ <Line>{</Line>
+ <Line> wxPaintDC dc(this);</Line>
+ <Line> wxMemoryDC memDC;</Line>
+ <Line> memDC.SelectObject(* logo);</Line>
+ <Line> dc.Blit(5, 25, logo->GetWidth(), logo->GetHeight(), &amp; memDC, 0, 0, wxCOPY, TRUE);</Line>
+ <Line> memDC.SelectObject(wxNullBitmap);</Line>
+ <Line>}</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/german3.ktouch.xml b/ktouch/training/german3.ktouch.xml
new file mode 100644
index 00000000..b95c241d
--- /dev/null
+++ b/ktouch/training/german3.ktouch.xml
@@ -0,0 +1,883 @@
+<KTouchLecture>
+ <Title>Deutsch (generated)</Title>
+ <Comment>German training file for ktouch
+generated by Markus Frisch &lt;frisch@vr-web.de>
+</Comment>
+ <Levels>
+ <Level>
+ <LevelComment>Grundstellung Teil 1</LevelComment>
+ <NewCharacters>Grundstellung (1)</NewCharacters>
+ <Line>fff fff fff jjj jjj jjj fff fff jjj jjj fff jjj fff jjj fff jjjff</Line>
+ <Line>fjf fjf fjf jfj jfj jfj fjf fjf fjf jfj jfj jfj fjf jfj fjf jfjfj</Line>
+ <Line>ddd ddd ddd kkk kkk kkk ddd ddd kkk kkk ddd kkk ddd kkk ddd kkkdd</Line>
+ <Line>dkd dkd dkd kdk kdk kdk dkd dkd dkd kdk kdk kdk dkd kdk dkd kdkdd</Line>
+ <Line>fjf dkd fjf dkd fjd dkd fjf dkd jfj kdk jfj kdk jfj kdk jfj kdkdk</Line>
+ <Line>aaa aaa aaa ööö ööö ööö aaa aaa ööö ööö aaa ööö aaa ööö aaa öööaa</Line>
+ <Line>fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff</Line>
+ <Line>aöa aöa aöa öaö öaö öaö fjf dkd aöa fjf dkd aöa jfj kdk öaö jfjdk</Line>
+ <Line>sss sss sss lll lll lll sss sss lll lll sss lll sss lll sss lllss</Line>
+ <Line>sls sls sls lsl lsl lsl sls sls sls lsl lsl lsl sls sls sls lslsl</Line>
+ <Line>fff jjj ddd kkk aaa ööö sss lll fff jjj ddd kkk aaa ööö sss lllff</Line>
+ </Level>
+ <Level>
+ <LevelComment>Grundstellung Teil 2</LevelComment>
+ <NewCharacters>Grundstellung (2)</NewCharacters>
+ <Line>asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdfj</Line>
+ <Line>fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsaf</Line>
+ <Line>asdf jklö fdsa ölkj asdf jklö fdsa ölkj asdf jklö fdsa ölkj asdfa</Line>
+ <Line>la la la ka ka ka sö sö sö dö dö dö la la la ka ka ka sö sö sö dö</Line>
+ <Line>al al al ak ak ak ös ös ös öd öd öd al al al ak ak ak ös ös ös öd</Line>
+ <Line>ja ja ja da da da ja ja ja da da da ja ja ja da da da ja ja ja da</Line>
+ <Line>öd öd öd ja ja ja öd öd öd da da da öd öd öd ja ja ja öd öd öd ja</Line>
+ <Line>fad fad fad las las las fad fad fad las las las fad fad fad ja da</Line>
+ <Line>als als als fad fad fad las las las als als als fad fad fad öd ja</Line>
+ <Line>lös lös lös als als als fad fad fad lös lös lös als als als da ja</Line>
+ <Line>das das das als als als das als das als als das als das als ja öd</Line>
+ <Line>las las las das das das las das las das das las das las das da ja</Line>
+ <Line>da das da das da das las ja las ja las ja öd ja lös da das ja lös</Line>
+ <Line>ja lös ja lös ja lös lös da fad da fad da öd öd fad ja lös da das</Line>
+ <Line>das las dass das las dass das las dass das las dass dass las dass</Line>
+ </Level>
+ <Level>
+ <LevelComment>Zwei wichtige Vokale: e und i</LevelComment>
+ <NewCharacters>e und i</NewCharacters>
+ <Line>ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde</Line>
+ <Line>ded ded dea dea des des def def ded ded dea dea des des def defed</Line>
+ <Line>ede ede ede edj edj edk edl edö edf eds ede ede edj edj edk edled</Line>
+ <Line>öde öde öde ade ade ade öle öle öle ade ade öde öde ade ade alles</Line>
+ <Line>alle alle alle lade lade lade alle alles lade lade alles lade las</Line>
+ <Line>löse löse löse jede jede jede löse löse jede jede löse jede alles</Line>
+ <Line>kik kik kik kif kid kis kia kik kia kis kid kif kik kis kia kikik</Line>
+ <Line>kik kik kiö kiö kil kil kik kik kij kij kik kil kiö kil kij kikik</Line>
+ <Line>iki iki ikf ikd iks ikj ikl ikö ikf ded kik ded kik ded kik dedki</Line>
+ <Line>sie sie sie sei sei sei sie sie sei sei sie sie sei sei seid seid</Line>
+ <Line>die die die sie sie sie die die sie sie die die sie sie die diese</Line>
+ <Line>seid seid seid dies dies dies seid seid dies dies seid dies diese</Line>
+ <Line>fiel fiel fiel lief lief lief fiel fiel lief lief fiel lief leise</Line>
+ <Line>feil feil feil fiel fiel fiel lief lief fiel fiel feil feil fidel</Line>
+ <Line>seid seid seid fiel fiel feil feil seid seid lief lief fiel fidel</Line>
+ <Line>dies dies lief feil seid seid feil lief fiel dies seid dies leise</Line>
+ <Line>ideal ideal ideal fidel fidel fidel ideal ideal fidel fidel ideal</Line>
+ <Line>leise leise leise ideal ideal ideal leise leise ideal leise fidel</Line>
+ <Line>alles alles alles leise leise leise alles alles leise alles leise</Line>
+ <Line>feil feil feil seid seid seid dies dies dies fiel fiel fiel fidel</Line>
+ <Line>seid fiel dies feil dies fiel seid feil fiel seid dies seid leise</Line>
+ <Line>diese diese diese leise leise leise diese diese leise leise diese</Line>
+ <Line>leise leise diese diese lasse lasse leise lasse diese lasse leise</Line>
+ <Line>diese leise lasse diese leise lasse lasse leise diese leise lasse</Line>
+ <Line>ideal ideal ideal fidel fidel fidel ideal ideal fidel fidel ideal</Line>
+ <Line>alles alles alles ideal ideal ideal alles alles ideal ideal alles</Line>
+ <Line>las lasse das dass las lasse das dass las lasse das dass las dass</Line>
+ <Line>jede jede ödes ödes dass dass jede jede ödes ödes dass dass lasse</Line>
+ </Level>
+ <Level>
+ <LevelComment>Zwei häufige Buchstaben: r und u</LevelComment>
+ <NewCharacters>r und u</NewCharacters>
+ <Line>ded frf frf frf frj frk frl fri frf frd frs fra frf fri fra dedfr</Line>
+ <Line>dir dir dir dar dar dar dir dir dar dar dir dar dir dar dir leere</Line>
+ <Line>leer leer leer reif reif reif leer leer reif reif leer reif reife</Line>
+ <Line>aller aller aller reise reise reise aller aller reise reise aller</Line>
+ <Line>freie freie freie klare klare klare freie freie klare klare freie</Line>
+ <Line>jeder jeder jeder raffe raffe raffe jeder jeder raffe raffe jeder</Line>
+ <Line>kik juj juj juj juf jud jus jua juj juk jul juö juj juk jul jujuj</Line>
+ <Line>aus aus aus auf auf auf aus aus auf auf aus auf aus auf aus faule</Line>
+ <Line>faul faul faul rufe rufe rufe faul faul rufe rufe faul rufe kaufe</Line>
+ <Line>kaufe kaufe kaufe laufe laufe laufe kaufe kaufe laufe laufe kaufe</Line>
+ <Line>dulde dulde dulde freue freue freue dulde dulde freue freue dulde</Line>
+ <Line>flaue flaue flaue dulde dulde klare klare flaue dulde klare faule</Line>
+ </Level>
+ <Level>
+ <LevelComment>Komma und Punkt</LevelComment>
+ <NewCharacters>, und .</NewCharacters>
+ <Line>kik k,k kik k,k k,a k,s k,d k,f kik k,k k,a k,s k,d k,f kik k,k,k</Line>
+ <Line>k,k l.l l.l l.l l.a l.s l.d l.f l.l l.a l.s l.d l.f k,i l.l l.al.</Line>
+ <Line>k,ö k,l k,j l.ö l.k l.j k,k l.l k,k l.l k,ö l.ö k,j l.j k,kl.l,k.</Line>
+ <Line>ideal, ideal. fidel, fidel. ideal, ideal. fidel, fidel. es, dass.</Line>
+ <Line>jedes, jedes. diese, diese. jedes, jedes. diese, diese. da, jede.</Line>
+ <Line>alles, alles. leise, leise. alles, alles. leise, leise. ja, alle.</Line>
+ <Line>es dauere, es dauere. leider flau, leider flau. alles frei, leer.</Line>
+ <Line>alles klar, alles klar. alles reif, alles reif. das sei dir klar.</Line>
+ <Line>leider leer, leider leer. leider sauer, leider sauer. erfasse es.</Line>
+ <Line>dass er erfasse, dass er erfasse. ja, dass sie das alles erfasse.</Line>
+ <Line>erlasse dies, erlasse dies. erlasse das alles. er erlasse es dir.</Line>
+ <Line>er rufe, er rufe es. er rufe aus, er dulde es. leider alles leer.</Line>
+ <Line>er lasse, er lasse es. er erlasse das, er fasse auf, erfasse das.</Line>
+ <Line>sei fair, dass er fair sei, dass sie fair sei, dass sie fair sei.</Line>
+ <Line>leere es aus, erfasse es, dass er es erfasse, dass er es erfasse.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Übung</NewCharacters>
+ <Line>sause sause sause sauer sauer sauer raufe raufe raufe sause sauer</Line>
+ <Line>sauer sauer raufe raufe sause sause sauer raufe sause sauer raufe</Line>
+ <Line>dar darauf darauf darauf daraus daraus daraus darauf daraus drauf</Line>
+ <Line>dir dauere dauere dauere leeres leeres leeres dauere leeres leere</Line>
+ <Line>rar erlasse erlasse erlasse erfasse erfasse erfasse erlasse fasse</Line>
+ <Line>liefere liefere liefere darauf darauf darauf liefere leider lasse</Line>
+ <Line>leider leer, leider flau, leider faul, leider leer, liefere alles</Line>
+ <Line>alles frei, alles klar, alles reif, alles leer, erfasse das, klar</Line>
+ <Line>er rufe, er rufe es, er rufe dir, er dulde es, sie dulde es, dass</Line>
+ <Line>er lasse, er lasse es, er erlasse das, er fasse, er erfasse alles</Line>
+ <Line>alles klar, alles frei, alles reif, alles leer, erfasse das klar,</Line>
+ <Line>er dulde, er dulde es, rede leise, sie rief aus, er liefere alles</Line>
+ <Line>er kaufe, kaufe alles, kaufe alles auf, sie kaufe alles auf, alle</Line>
+ <Line>liefere dies, liefere alles, liefere es, liefere alles aus, rufe,</Line>
+ <Line>rufe das aus, rufe dies aus, rufe dies alles aus, rufe aus, alles</Line>
+ <Line>erlasse es, erlasse dies, erlasse dieses, leider dies alles leer,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Grossschreibung:</LevelComment>
+ <NewCharacters>linker Umschalter und rechter Umschalter</NewCharacters>
+ <Line>jJa jJa Ja Ja Ja Jade Jade Jade kKa kKa Ka Ka Ka Kadi Kadi Kaffee</Line>
+ <Line>lLa lLa La La La Lauf Lauf Lauf öÖa öÖa Öa Öa Öa Öse Öse Öse Öse,</Line>
+ <Line>Jura Jura Jura Kauf Kauf Kauf Laie Laie Laie Ölfeuer Ölfeuer Jura</Line>
+ <Line>das Ufer, das Ufer, der Ural, der Ural, das Ufer, der Ural, Julia</Line>
+ <Line>die Idee, die Idee, die Isar, die Isar, die Idee, die Isar, Julia</Line>
+ <Line>der Jude, die Kufe, die Laus, der Usus, der Irak, das Leid, Iller</Line>
+ <Line>fFö fFö Fö Fö Fö Frau Frau Frau dDö dDö Dö Dö Dö Dill Dill Diskus</Line>
+ <Line>sSö sSö Sö Sö Sö Seil Seil Seil aAö aAö Aö Aö Aö Affe Affe Afrika</Line>
+ <Line>Fall Fall Fall Dirk Dirk Dirk Saal Saal Saal Adel Adel Adel Adler</Line>
+ <Line>die Rede, die Rede, die Rede, der Reis, der Reis, der Reis, Reue.</Line>
+ <Line>die Eile, die Eile, die Eile, die Elle, die Elle, die Elle, Efeu.</Line>
+ <Line>das Fass, der Dill, die Saar, der Akku, der Reis, die Eule, Elsa.</Line>
+ <Line>Jade Jade Fall Fall Kauf Kauf Dill Dill Lied Lied Jade Fall Kajak</Line>
+ <Line>Ölfeuer Ölfeuer Ausfall Ausfall Ölfeuer Ausfall Ölfeuer Ausruf Au</Line>
+ <Line>Ulla Ulla Rudi Rudi Ilse Ilse Ella Ella Ulla Rudi Ilse Elsa Iller</Line>
+ <Line>der Juli, der Juli, das Feld, das Feld, der Juli, das Feld, Jade.</Line>
+ <Line>der Klee, der Klee, die Dias, die Dias, der Klee, die Dias, Kies.</Line>
+ <Line>die Luke, die Luke, das Safe, das Safe, die Luke, das Safe, Lira.</Line>
+ <Line>das Ölfeuer, die Askese, das Ölfeuer, die Askese, diese Ausreise.</Line>
+ <Line>der Ulk, der Ulk, das Rad, das Rad, der Ire, der Ire, der Erlass.</Line>
+ <Line>der Jak, die Fee, die Kur, das Dur, das Lid, der See, die Ideale.</Line>
+ <Line>der Jura, der Fakir, die Kasse, die Diele, der Lakai, der Surfer.</Line>
+ <Line>der Keller, die Dekade, der Kessel, der Diskus, die Klasse, Ralf.</Line>
+ <Line>der Kurier, der Diesel, die Kreide, der Dussel, der Kaiser, Reis.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: Umschalter</LevelComment>
+ <NewCharacters>Umschalter (2)</NewCharacters>
+ <Line>Er rufe Karl. Sie rufe Fred aus Kassel. Er rufe Ida aus Adelaide.</Line>
+ <Line>Ella, rede leise. Erika, rede leise. Julia aus Riesa rede leiser.</Line>
+ <Line>Karl, kaufe Reis. Ilse, kaufe Reis. Ilse, kaufe Kaffee aus Afrika</Line>
+ <Line>Ulf, liefere Eiskaffee. Alfred, liefere die Rasierseife aus Fulda</Line>
+ <Line>Er rufe Karl. Er rufe Karl aus Kassel. Sie rufe Karla aus Kassel.</Line>
+ <Line>Edi, rede leise. Erika, rede leiser. Ilse, aus Riesa, rede leise.</Line>
+ <Line>Else, liefere Eiskaffee. Else, liefere Eiskaffee. Else liefere es</Line>
+ <Line>Er rufe Fred aus Kassel. Er rufe Fred aus Kassel. Er rufe Frieda.</Line>
+ <Line>Karl, kaufe Kaffee. Karl, kaufe Kaffee aus Jaffa. Karla kaufe es.</Line>
+ <Line>Er rufe Fred. Ida rufe Fred aus Fulda. Erika rufe Fred aus Fulda.</Line>
+ <Line>Alfred, liefere diese Rasierseife aus Kassel. Alfred liefere alle</Line>
+ <Line>Else kaufe diese Seife. Erika kaufe diese Seife. Klara kaufe sie.</Line>
+ <Line>Dirk rede leiser. Ella rede leiser. Dirk aus Adelaide rede leise.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Die ersten Spreizgriffe: g und h</LevelComment>
+ <NewCharacters>g und h</NewCharacters>
+ <Line>fgf fgf fgf fgö fgl fgk fgj fgf fga fgs fgd fgf fga fgs fgd fgfgf</Line>
+ <Line>gfa gfs gfd gfg gri gri gru gru gre gre gri gru gre gri gru grgrg</Line>
+ <Line>lag lag lag gar gar gar lag lag gar gar lag lag gar gar lag klage</Line>
+ <Line>klug klug klug sage sage sage klug klug sage sage klug sage kluge</Line>
+ <Line>grau grau grau karg karg karg grau grau karg karg grau karg graue</Line>
+ <Line>griff griff griff grell grell grell griff griff grell grell griff</Line>
+ <Line>Sieg Sieg Sieg Auge Auge Auge Sieg Sieg Auge Auge Sieg Sieg Gelee</Line>
+ <Line>Geld Geld Geld Gier Gier Gier Geld Geld Gier Gier Geld Geld Gasse</Line>
+ <Line>Girl Girl Girl Gras Gras Gras Girl Girl Gras Gras Girl Girl Geige</Line>
+ <Line>jhj jhj jhj jha jhs jhd jhf jhj jhö jhl jhk jhö jhl jhk jhö jhjhj</Line>
+ <Line>hjö hjl hjk hjö hjl hjk hjö jhj jhk jhl jhö hjö hjl hjk hjh öjhjö</Line>
+ <Line>aha aha aha sah sah sah her her her aha aha sah sah her her helle</Line>
+ <Line>ehe ehe ehe ihr ihr ihr ehe ehe ihr ihr her her sah ehe ihr ihrer</Line>
+ <Line>kahl kahl kahl fahl fahl fahl kahl kahl fahl fahl kahl kahl kahle</Line>
+ <Line>hell hell hell ihre ihre ihre sehr sehr sehr hell ihre sehr helle</Line>
+ <Line>ruhig ruhig ruhig fahre fahre fahre ruhig ruhig fahre fahre ruhig</Line>
+ <Line>leihe leihe leihe siehe siehe siehe leihe leihe siehe siehe leihe</Line>
+ <Line>herauf herauf heraus heraus herauf herauf heraus herauf geduldige</Line>
+ <Line>Ruhr Ruhr Ruhr Dreh Dreh Dreh Ruhr Ruhr Dreh Dreh Ruhr Ruhr Reihe</Line>
+ <Line>Hals Hals Hals Hass Hass Hass Hals Hals Hass Hass Hals Hals Hafer</Line>
+ <Line>Haus Haus Haus Held Held Held Haus Haus Held Held Haus Haus Halle</Line>
+ <Line>gehöre gehöre gehöre ruhige ruhige ruhige gehöre ruhige religiöse</Line>
+ <Line>lehre lehre lehre heile heile heile lehre lehre heile heile lehre</Line>
+ <Line>helle helle helle graue graue graue helle helle graue graue helle</Line>
+ <Line>sehr diesig, sehr eifrig, sehr gierig, sehr grell, er lieh alles,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: g und h</LevelComment>
+ <NewCharacters>g und h (2)</NewCharacters>
+ <Line>gerade heraus, gerade erfuhr er es, gerade lieh er das alles aus,</Line>
+ <Line>es sei eilig, es sei sehr eilig, es sei eiliger, er erfahre dies,</Line>
+ <Line>siehe her, siehe herauf, siehe hierher, es lag, das lag hier aus,</Line>
+ <Line>erledige das, erledige alles, erledige es freudig, höre eilig auf</Line>
+ <Line>hilf ihr, es sei sehr heil, dies sei ruhig, sie sei hier ruhiger,</Line>
+ <Line>das sei sehr hell, das sei arg, sie erfuhr es, er erfuhr es hier,</Line>
+ <Line>er fuhr ruhig, er fuhr ruhiger, lege es heraus, hier lag das aus,</Line>
+ <Line>sie las eifrig, sie las das alles sehr eifrig, er las das eifrig,</Line>
+ <Line>das sei grell, dies sei greller, da lag es, er griff es hier auf,</Line>
+ <Line>der Guss, das Haar, der Graf, die Hefe, das Gras, die Hufe, Röhre</Line>
+ <Line>aus Gera, aus Kehl, aus Eger, aus Lahr, aus Suhl, aus Gera, Kehle</Line>
+ <Line>Rufe Gerd aus Kehl. Rufe Hedi aus Gera. Rufe Hildegard aus Halle.</Line>
+ <Line>Frage Ida aus Kassel. Frage Ulla aus Lahr. Frage Harald aus Gera.</Line>
+ <Line>Gerda fuhr das Rad. Hilde fuhr das Rad. Gerd fuhr dieses Fahrrad.</Line>
+ <Line>Harald sah diese Auslage. Erhard sah diese Auslage. Er sah alles.</Line>
+ <Line>Der Hausherr fuhr auf der Allee. Die Hausfrau fuhr auf der Allee.</Line>
+ <Line>Hilde gefiel das helle Kleid. Der Ehefrau gefiel das graue Kleid.</Line>
+ <Line>Edgar leihe dir das Glas. Gerda leihe dir die Geige. Er sah dies.</Line>
+ <Line>Gerade fuhr Harald aus der Garage. Heike aus Rheda fuhr das Krad.</Line>
+ <Line>Edgar fuhr sehr ruhig. Gerda las eifrig. Der Geselle erledige es.</Line>
+ <Line>Höre auf die Hilferufe. Karl höre auf die Hilferufe. Es lag hier.</Line>
+ <Line>Der Flieger sah die Segel. Der Geselle aus Krefeld sah das Radar.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Zwei wichtige Konsonanten: t und z</LevelComment>
+ <NewCharacters>t und z</NewCharacters>
+ <Line>frf ftf ftf ftf frf fta fts ftd fta fts ftd tfö tfl tfk tfj frftf</Line>
+ <Line>hat hat hat tut tut tut hat hat tut tut hat tut tut hat tut hatte</Line>
+ <Line>gut gut gut tat tat tat gut gut tat tat gut tat tat gut tat gutes</Line>
+ <Line>kalt kalt kalt tief tief tief laut laut laut hart hart hart kalte</Line>
+ <Line>riet riet riet erst erst erst riet riet erst erst riet erst erste</Line>
+ <Line>alte alte alte fast fast fast alte alte fast fast alte fast altes</Line>
+ <Line>Lift Lift Lift Last Last Last Lift Lift Lift Last Last Last Karte</Line>
+ <Line>Takt Takt Takt Teig Teig Teig Takt Takt Teig Teig Takt Teig Tasse</Line>
+ <Line>Taler Taler Taler These These These Taler Taler These These Taler</Line>
+ <Line>juj jzj jzj jzj juj jzj jzö jzl jzk jzö jzl jzk jzö zjl zjk jujzj</Line>
+ <Line>kurz kurz kurz zart zart zart kurz kurz zart zart kurz zart kurze</Line>
+ <Line>zielt zielt zielt sitzt sitzt sitzt zielt zielt sitzt sitzt zielt</Line>
+ <Line>geizig geizig geizig zögert zögert zögert geizig zögert zersetzte</Line>
+ <Line>zerfiel zerfiel zerfiel zergeht zergeht zergeht zerfiel zerstreut</Line>
+ <Line>hitzige hitzige hitzige heftige heftige heftige hitzig dreisitzig</Line>
+ <Line>jetzt jetzt jetzt ritzt ritzt ritzt jetzt jetzt ritzt ritzt jetzt</Line>
+ <Line>zerstreut zerstreut zerstreut zersetzte zersetzte zerstreut zerrt</Line>
+ <Line>Arzt Arzt Arzt Herz Herz Herz Arzt Arzt Herz Herz Arzt Herz Kreuz</Line>
+ <Line>Salz Salz Salz Zeit Zeit Zeit Salz Salz Zeit Zeit Salz Salz Zitat</Line>
+ <Line>Zahl Zahl Zahl Ziel Ziel Ziel Zahl Zahl Ziel Ziel Zahl Ziel Zeuge</Line>
+ <Line>ehrgeizig ehrgeizig ehrgeizig ersetztes ersetztes kulturell sitzt</Line>
+ <Line>zuletzt zuletzt zuletzt zuerst zuerst zuerst zuletzt zuerst herzu</Line>
+ <Line>reduziert reduziert reduziert kulturell kulturell kulturell ziert</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: t und z</LevelComment>
+ <NewCharacters>t und z (2)</NewCharacters>
+ <Line>heftig gestört, heute erzielt, heftig gestört, er zahlt es jetzt,</Line>
+ <Line>erst reduziert, es ist heiter, erst reduziert, sie zögerte jetzt,</Line>
+ <Line>zuerst ersetzt, sie liest gut, zuerst ersetzt, er ist jetzt hier,</Line>
+ <Line>zeige das, zeige es klar, du hast gehört, du hattest alles gehört</Line>
+ <Line>leite es, leite es gut, leite alle gut, er hat alles gut geleitet</Line>
+ <Line>er zahlte es, er zahlte alles aus, er zahlte alles erst jetzt aus</Line>
+ <Line>sie teilt es auf, er teilt es jetzt auf, er teilt jetzt alles auf</Line>
+ <Line>er hat alles ersetzt, sie hatte alles gut ersetzt, er hatte dies,</Line>
+ <Line>du hast alles gehört, du hattest alles gut gehört, sie sagte aus,</Line>
+ <Line>sie sagte es klar, sie sagte das alles sehr klar, er hört darauf,</Line>
+ <Line>er hat gezahlt, er hat jetzt gezahlt, sie hat es jetzt ausgezahlt</Line>
+ <Line>der Zug, der Zeh, das Tal, der Tag, die Art, die Tat, die Kritik.</Line>
+ <Line>der Teil, der Test, das Zeug, das Zelt, der Teig, die Tageskarte.</Line>
+ <Line>der Gast, die Last, die Katze, das Tier, das Fest, der Teelöffel.</Line>
+ <Line>Das Zitat hast du sehr gut aufgesagt. Daher ist Kritik gestattet.</Line>
+ <Line>Du sagst, dass sie erregt ist. Du klagst, dass sie zerstreut ist.</Line>
+ <Line>Der Gast leert das Sektglas. Dieser Gast diskutierte sehr heftig.</Line>
+ <Line>Das Zelt aus Halle ist sehr gut. Das Resultat steht zurzeit fest.</Line>
+ <Line>Die Zufahrt ist leider zu kurz. Die Katze sitzt auf der Terrasse.</Line>
+ <Line>Edith kritisierte alle Tarife. Das Theater zeigt kulturelles Gut.</Line>
+ <Line>Freitag kauft Ruth ihre Theaterkarten. Gertrud kauft Reitstiefel.</Line>
+ <Line>Der Artikel ist jetzt stark reduziert. Der Zeuge sagte alles aus.</Line>
+ <Line>Dieses Zitat ist gerade jetzt aktuell. Der Tierarzt ist sehr gut.</Line>
+ <Line>Die alte Stadt lag tiefer als der See. Das Zertifikat ist zu alt.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Die Zeigefinger in der Unterreihe: v und m</LevelComment>
+ <NewCharacters>v und m</NewCharacters>
+ <Line>frf fvf fvf fvf fvö fvl fvk fvj fva fvs fvd fvf fvd fvs fvs fvfvf</Line>
+ <Line>viel viel viel vier vier vier viel viel vier vier viel vier viele</Line>
+ <Line>verlas verlas verlas versah versah verlas verfasse verliere viele</Line>
+ <Line>verzeiht verzeiht verkehrt verkehrt verödet verödet verödet aktiv</Line>
+ <Line>verzagte verzagte verzagte verhörte verhört verhört verdaut aktiv</Line>
+ <Line>aktiver aktiver aktiver relativ relativ relativ aktiv vegetatives</Line>
+ <Line>Vieh Vieh Vieh Vati Vati Vati Vieh Vieh Vati Vati Vieh Vati Verse</Line>
+ <Line>juj jmj jmj jmj jma jms jmd jmf jmö jml jmk jmj jmö jml jmk jmjmj</Line>
+ <Line>dem dem dem kam kam kam mag mag mag dem dem kam kam mag mag mager</Line>
+ <Line>mir mir mir arm arm arm mit mit mit mir mir arm arm mit mit armes</Line>
+ <Line>mehr mehr mild mild male male mehr mild male male mild mehr milde</Line>
+ <Line>merke merke immer immer fremd fremd merke immer fremd merke fremd</Line>
+ <Line>filme filme emsig emsig mager mager filme emsig mager filme emsig</Line>
+ <Line>vermeide vermeide vermerke vermerke vermeide vermerke jedem merke</Line>
+ <Line>vermehrt vermehrt vermehrt verfilme verfilme verfilme milde filme</Line>
+ <Line>Meer Meer Meer Mark Mark Mark Meer Meer Mark Mark Meer Mark Makel</Line>
+ <Line>Turm Turm Turm Darm Darm Darm Turm Turm Darm Darm Turm Darm Musik</Line>
+ <Line>verfiel immer mehr, verlief immer mild, verriet heute immer mehr,</Line>
+ <Line>vieles ist gefilmt, vielerlei merkt er, er vermittelte mir alles,</Line>
+ <Line>vermittle es heute, sie verliert heute, höre jetzt aufmerksam zu,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: v und m</LevelComment>
+ <NewCharacters>v und m (2)</NewCharacters>
+ <Line>hier malt er emsig, du vermittelst das, sie ist hier völlig fremd</Line>
+ <Line>merke dir dies gut, verkaufe das heute, verleihe das alles heute,</Line>
+ <Line>er hat das gemerkt, er verkaufte alles, sie verliest jetzt alles,</Line>
+ <Line>melde es mir heute, melde es ihm, melde es heute, meldet es jetzt</Line>
+ <Line>lies aufmerksam, lies immer aufmerksam, leite es jetzt aufmerksam</Line>
+ <Line>vermittle es, vermittle es ihm, vermeide das, vermeide dies heute</Line>
+ <Line>er vermag es, dies ist relativ, er verteilte meist alles sehr gut</Line>
+ <Line>dies ist seltsam, dies alles ist sehr seltsam, verleihe es heute,</Line>
+ <Line>hier verkauft er viel, sie verkaufte hier mehr, das mag er jetzt,</Line>
+ <Line>sie vermittelt es, sie vermittelte es mehrmals, merke dir das gut</Line>
+ <Line>er merkt alles, er vermerkte das meiste, sie verlieh heute alles,</Line>
+ <Line>die Villa, der Makel, die Vögel, die Mitte, der Vikar, die Messe,</Line>
+ <Line>im Verhör, im Verlag, im Verzug, im Visier, im Verrat, im Verzug,</Line>
+ <Line>mit Maske, mit Marke, mit Visum, mit Musik, mit Miete, mit Timer,</Line>
+ <Line>am Freitag, am Samstag, am Feiertag, am Markttag, erst am Mittag,</Line>
+ <Line>um Ulm Herum, um die Mauer, um die Miete, um mehr Ruhe, der Raum,</Line>
+ <Line>zum Mahl, zum Verkauf, zum Verzehr, zum Verleger, zum Mittelmeer,</Line>
+ <Line>Mittags ist er damit fertig. Eva sagt, dass sie Fehler vermeidet.</Line>
+ <Line>Der Vertreter kam aus Jever. Im Vierteljahr zahlt sie mehr Miete.</Line>
+ <Line>Der Sieger hat tief geatmet. Du sagst, dass es ihm ums Geld geht.</Line>
+ <Line>Erst jetzt kam der Missgriff heraus. Das missfiel jedem Mitglied.</Line>
+ <Line>Sie hatte die Miete im Juli gezahlt. Der Verleger las aufmerksam.</Line>
+ <Line>Mir missfiel der materielle Verlust. Herr Veit Maus ist verreist.</Line>
+ <Line>Die Madrider Firma teilt mir mit, dass sie am Freitag ausliefert.</Line>
+ <Line>Der Umsatz der Trierer Stadtvertreters ist jetzt stark reduziert.</Line>
+ <Line>Im August hat Frau Eva Zimmer das alte Gasthaus am See vermietet.</Line>
+ <Line>Leider reklamierte die Krefelder Firma die Artikel aus Karlsruhe.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Spreizgriffe in die Unterreihe: b und n</LevelComment>
+ <NewCharacters>b und n</NewCharacters>
+ <Line>fvf fbf fbf fbf fbö fbl fbk fbj fvf fbf fbd fbs fba fbs fbd fvfbf</Line>
+ <Line>bis bis bis bei bei bei bis bis bis bei bei bis bis bei bis bilde</Line>
+ <Line>beim beim halb halb aber aber bald bald beim halb aber bald halbe</Line>
+ <Line>fbfrf fbfr fbr bri briet briet breit breit brav brav breite brave</Line>
+ <Line>frfbf frfb frb arb arbeite arbeite arbeitet verdarb verdarb erbe,</Line>
+ <Line>fbftf fbft fbt ibt gibt gibt gibt lebt lebt lebt labt lebte labte</Line>
+ <Line>jmj jnj jnj jnj jna jns jnd jnf jnö jnl jnk jnj njö jnl njk jnjnj</Line>
+ <Line>den den den ein ein ein neu neu neu den den ein ein neu neu einen</Line>
+ <Line>sein sein kein kein lang lang mein mein sein kein lang mein seine</Line>
+ <Line>allen allen gegen gegen einen einen allen gegen einen allen gegen</Line>
+ <Line>gehen gehen dient dient ihren ihren gehen dient ihren gehen dient</Line>
+ <Line>sagen sagen sehen sehen keine keine sagen sehen keine sagen sehen</Line>
+ <Line>geben geben geben haben haben haben geben geben haben haben geben</Line>
+ <Line>neben neben neben leben leben leben neben neben leben leben neben</Line>
+ <Line>binden binden binden darben darben darben binden darben mag binde</Line>
+ <Line>antik antik antik beige beige beige antik antik beige beige antik</Line>
+ <Line>unfair unfair unfair genial genial genial unfair genial unfair ab</Line>
+ <Line>abstrakt abstrakt abstrakt basieren basieren basieren abstrakt ab</Line>
+ <Line>Nase Nase Nase Name Name Name Nerv Nerv Nerv Nase Name Nerv Namen</Line>
+ <Line>sie halten nun immer daran fest, sie halten nun immer daran fest,</Line>
+ <Line>er behandelt es als eilig, sie behandeln es heute als sehr eilig,</Line>
+ <Line>sie dankten, sie bieten, sie sehen es ein, sie bitten jetzt darum</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: b und n</LevelComment>
+ <NewCharacters>b und n (2)</NewCharacters>
+ <Line>sie senden, sie geben, sie kennen, sie beten, sie behandelten es,</Line>
+ <Line>sie können es, sie kann viel, sie könnten es aber heute verlieren</Line>
+ <Line>jetzt bitten sie darum, jetzt hört sie, jetzt lernen sie es aber,</Line>
+ <Line>er arbeitet mit, sie arbeitet mit, alle arbeiten jetzt immer mit,</Line>
+ <Line>er diktiert gut, sie diktiert gut, alle diktieren jetzt aber gut,</Line>
+ <Line>er behandelt es, sie behandelt es, alle behandeln es jetzt eilig,</Line>
+ <Line>er lernt eifrig, sie lernt eifrig, alle lernen jetzt aber eifrig,</Line>
+ <Line>der Baum, der Neid, der Ball, das Netz, das Blut, der Niedergang.</Line>
+ <Line>der Brei, die Nuss, das Blei, der Narr, die Burg, die Entfernung.</Line>
+ <Line>in den Bergen, in den Burgen, in den Beeten, in den Niederlanden.</Line>
+ <Line>am Dienstag und am Freitag, an unserem Jahrestag, an diesem Abend</Line>
+ <Line>an den Feiertagen, an den Festtagen, an den beiden letzten Tagen,</Line>
+ <Line>aus Rand und Band, auf der Bank, beim Bund, beim Brand in Bremen.</Line>
+ <Line>Bald können Sie in Köln bauen. Die Zimmer in Augsburg sind teuer.</Line>
+ <Line>Die Messe findet in Ulm statt. Das Muster fand lebhaften Beifall.</Line>
+ <Line>Ute hat erst einmal angerufen. Ihr Aufenthalt geht jetzt zu Ende.</Line>
+ <Line>Sie kennen unsere Bedingungen. Bitte bringen Sie alle Bilder mit.</Line>
+ <Line>Der Kunde bezahlte den Betrag. Unser Treffen findet im Mai statt.</Line>
+ <Line>Ihre Einnahmen sind zu gering. In Zukunft gibt es mehr Verdienst.</Line>
+ <Line>Unsere Kunden zeigen viel Interesse an der Ausstellung in Berlin.</Line>
+ <Line>Sie sind der Meinung, dass unsere Ausstellung viel geleistet hat.</Line>
+ <Line>Der Messestand der Firma Steinmann fand sehr viel Aufmerksamkeit.</Line>
+ <Line>Mit dem Umsatz sind aber alle Unternehmen diesmal sehr zufrieden.</Line>
+ </Level>
+ <Level>
+ <LevelComment>D-Finger auf c und Semikolon</LevelComment>
+ <NewCharacters>c und ;</NewCharacters>
+ <Line>fvf jmj k,k dcd dcd dcd dcö dcl dck dcj dcd dca dcs dcf ded dcded</Line>
+ <Line>auch auch dich dich mich mich sich sich auch dich mich auch dicht</Line>
+ <Line>durch durch nicht nicht macht macht durch nicht macht durch macht</Line>
+ <Line>Dach Dach Tuch Tuch Buch Buch Fach Fach Dach Tuch Buch Facharbeit</Line>
+ <Line>Heck Heck Ecke Ecke Leck Leck Heck Heck Leck Leck Ecke Eckschrank</Line>
+ <Line>Chef Chef Club Club Cent Cent Chef Chef Club Club Cent Clubzimmer</Line>
+ <Line>jmj k,k k;k k;k k;k k;a k;s k;d k;f k,k k;k k;ö k;l k;j k,k k;k,k</Line>
+ <Line>Leib, Laib; Seite, Saite; Meier, Maier; Leib, Laib; Seite, Saite;</Line>
+ <Line>Sie schreibt auf einer Maschine; darum arbeitet sie sehr schnell.</Line>
+ <Line>Auch Sie möchten vieles leisten; deshalb teilen Sie die Zeit ein.</Line>
+ <Line>Alle möchten ihr Ziel erreichen; darum trainieren sie auch heute.</Line>
+ <Line>Er sagt, das Buch sei lehrreich; darum möchte ich es jetzt lesen.</Line>
+ <Line>fleckig, fleckig; dreckig, dreckig; stickig, stickig; vierstöckig</Line>
+ <Line>ehrlich, ehrlich; amtlich, amtlich; redlich, redlich; namentlich;</Line>
+ <Line>indisch, indisch; römisch, römisch; badisch, badisch; griechisch;</Line>
+ <Line>unter Chiffre, die Caritas, das Chinin, die Chemie, der Chemiker;</Line>
+ <Line>nach Celle fahren, bald nach Chemnitz fahren, nach China fliegen;</Line>
+ <Line>die gute Eigenschaft, die feine Gesellschaft, diese Freundschaft;</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: c und ;</LevelComment>
+ <NewCharacters>c und ; (2)</NewCharacters>
+ <Line>Mich interessiert die Chance, die mir die Stelle in Celle bietet.</Line>
+ <Line>Bei der chemischen Fabrik in Ulm hatte ich kaum Aufstiegschancen.</Line>
+ <Line>Die Firma Dietrich Christ bietet mir einen neuen Aufgabenbereich.</Line>
+ <Line>Jeden Tag lesen und hören Sie Nachrichten aus Deutschland und den</Line>
+ <Line>anderen Staaten. Zeitungen und technische Medien bringen aktuelle</Line>
+ <Line>Berichte; sie halten uns auf dem Laufenden und dies ist sehr gut.</Line>
+ <Line>Die Schrift hat eine lange Geschichte. An ihrem Anfang stehen die</Line>
+ <Line>Höhlenzeichnungen und Bilderschriften. Dann kamen Silbenschriften</Line>
+ <Line>auf. Aber erst die Buchstabenschrift brachte Vereinfachungen; sie</Line>
+ <Line>gibt allen die Chance, dass sie das Lesen und Schreiben erlernen.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Ringfinger in der Oberreihe: w und o</LevelComment>
+ <NewCharacters>w und o</NewCharacters>
+ <Line>frf ded sws sws sws swö swl swk swf swd swa sws swf swd swa swswf</Line>
+ <Line>wir wir wir wen wen wen wie wie wie wir wir wen wen wie wie wirke</Line>
+ <Line>wird wird wird wann wann wann wenn wenn wenn wird wann wenn wurde</Line>
+ <Line>warum warum warum etwas etwas etwas warum warum etwas etwas warum</Line>
+ <Line>Wagen Wagen Wagen Wette Wette Wette Wagen Wagen Wette Wette Wagen</Line>
+ <Line>Zwang Zwang Zwang Zweck Zweck Zweck Zweig Zweig Zweig Zwang Zweck</Line>
+ <Line>juj kik lol lol loa los lod loj lok lol loö loj lok loö loj loklo</Line>
+ <Line>vor vor vor von von von los los los vor vor von von los los davon</Line>
+ <Line>noch noch noch doch doch doch oder oder oder noch noch oder noch.</Line>
+ <Line>Ton Ton Ton Lob Lob Lob Not Not Not Ton Ton Lob Lob Not Not Stoff</Line>
+ <Line>Obst Obst Obst Ofen Ofen Ofen Orte Orte Orte Obst Obst Ofen Ochse</Line>
+ <Line>Lord Lord Lord Gong Gong Gong Gott Gott Gott Lord Gong Gott Lotto</Line>
+ <Line>vornehmen vorkommen vorsehen vorlegen vorwerfen vorstellen vorige</Line>
+ <Line>wertlos witzlos ehrlos haltlos wahllos sorglos glanzlos schlaflos</Line>
+ <Line>Widerhall Widerrede Widerstand Wiedersehen Wiederholungsabschnitt</Line>
+ <Line>Am Sonntag, am Montag, am Mittwoch, am Donnerstag, bis Sonnabend;</Line>
+ <Line>Motorradbrillen Motorrennen Motorhaube Motorenbau Motorfahrzeuge;</Line>
+ <Line>die Nation, die Funktion, im Stadion, die Information, die Union;</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: w und o</LevelComment>
+ <NewCharacters>w und o (2)</NewCharacters>
+ <Line>Der Sonderzug wird am kommenden Donnerstag in Hamborn eintreffen.</Line>
+ <Line>Die Ortsdurchfahrt in Gotha wurde am Mittwoch wieder freigegeben.</Line>
+ <Line>Die Wohnungsnot in Dortmund hat sich im Oktober etwas vermindert.</Line>
+ <Line>Das Konzert des Bonner Orchesters war wiederum ein voller Erfolg.</Line>
+ <Line>Das Wörterbuch sagt im Vorwort manches zur neuen Rechtschreibung.</Line>
+ <Line>Zwischen Ökonomie und Ökologie muss ein Einklang gefunden werden.</Line>
+ <Line>Die Geschichte der Weltraumfahrt ist noch gar nicht so alt. Schon</Line>
+ <Line>in relativ kurzer Zeit erforschten die Astronauten den Mond sowie</Line>
+ <Line>vieles im Weltall. Von besonderem Wert ist jedoch die Erforschung</Line>
+ <Line>des Wetters durch Satelliten; die Wettervorhersage wurde genauer.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Normalobergriffe der kleinen Finger: q und p</LevelComment>
+ <NewCharacters>q und p</NewCharacters>
+ <Line>frf ded sws aqa aqa aqa aqö aql aqk aqj aqa aqs aqd aqf aqa aqaqa</Line>
+ <Line>qui qui qui quo quo qui qua qua qua que que que qui quo qua quitt</Line>
+ <Line>quick quick quick quoll quoll quoll quick quick quoll quoll quick</Line>
+ <Line>Quiz Quiz Quiz Qual Qual Qual Quai Quai Quai Quiz Qual Quai Quarz</Line>
+ <Line>Quote Quote Quote Queen Queen Queen Quote Quote Queen Queen Queen</Line>
+ <Line>die Quelle, die Quelle, die Clique, die Clique, das Cliquenwesen,</Line>
+ <Line>juj kik lol öpö öpö öpö öpa öps öpd öpö öpj öpk öpl öpj öpk öpöpö</Line>
+ <Line>per per per pur pur pur per per pur pur per per pur pur per pumpt</Line>
+ <Line>knapp knapp knapp spitz spitz spitz super super super knapp spitz</Line>
+ <Line>Kopf Kopf Kopf Topf Topf Topf Oper Oper Oper Kopf Topf Oper Suppe</Line>
+ <Line>Paar Paar Paar Post Post Post Polo Polo Polo Paar Post Polo Paket</Line>
+ <Line>Pflanze Pflanze Pfarrer Pfarrer Pfeffer Pfeffer Pflanze September</Line>
+ <Line>Querschnitt Querschlag Querkopf Querdenker Quersummen Quertreiber</Line>
+ <Line>der Querulant, die Qualifikation, die Apothekerin, die Diplomaten</Line>
+ <Line>das Programm, das Protokoll, der Pullover, der Optiker in Passau,</Line>
+ <Line>das Papier, die Papierfabrik, der Papierkorb, die Papierserviette</Line>
+ <Line>das Fotopapier, das Kopierpapier, das Aquarellpapier aus Cottbus,</Line>
+ <Line>der Sport, die Sportlerin, die Sportartikel, nur beim Motorsport,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: q und p</LevelComment>
+ <NewCharacters>q und p (2)</NewCharacters>
+ <Line>Jetzt soll am Kurpark ein neuer Kinderspielplatz angelegt werden.</Line>
+ <Line>Die Vorarbeiten haben Pauline Quade und Peter Pelzer organisiert.</Line>
+ <Line>Nach Pressemeldungen beginnen die Bauarbeiten schon im September.</Line>
+ <Line>Die Polizei hat mehrere Aufgaben. Deshalb ist die Polizei in zwei</Line>
+ <Line>Hauptabteilungen gegliedert. So gibt es neben der Vollzugspolizei</Line>
+ <Line>eine Kriminalpolizei. Diese Hauptabteilungen bilden Untergruppen.</Line>
+ <Line>Unser Quadlinburger Zweigwerk sucht eine Auslandskorrespondentin.</Line>
+ <Line>Die Bewerberin muss Englisch, Spanisch sowie Russisch in Wort und</Line>
+ <Line>Schrift beherrschen. Ferner soll Sie mit den Arbeiten am Computer</Line>
+ <Line>vertraut sein. Die Stelle kann schon im September besetzt werden.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Spreizgriff des rechten kleinen Fingers: ä</LevelComment>
+ <NewCharacters>ä</NewCharacters>
+ <Line>fgf öäö öäö öäö öäf öäd öäs öäa fgf öäö öäj öäk öäl öäj öäk öälöä</Line>
+ <Line>fö fä jö jä dö dä kö kä sö sä lö lä tö tä zö zä mö mä nö nä hö hä</Line>
+ <Line>spät spät spät wäre wäre wäre läge läge läge spät wäre läge kläre</Line>
+ <Line>kämen kämen kämen nähme nähme nähme nähen nähen hätte prägt nähen</Line>
+ <Line>Wärme Wärme Wärme Bäume Bäume Bäume Bälle Bälle Bälle Wärme Bäume</Line>
+ <Line>Käufe Käufe Käufe Räder Räder Räder Sätze Sätze Sätze Käufe Räder</Line>
+ <Line>Bände Bände Bände Zähne Zähne Zähne Länge Länge Länge Bände Zähne</Line>
+ <Line>Ärmel Ärmel Ärmel Ärger Ärger Ärger Ärmel Ärmel Ärger Ärger Ärmel</Line>
+ <Line>Ärzte Ärzte Ärzte Äther Äther Äther Ärzte Ärzte Äther Äther Ärzte</Line>
+ <Line>die Ärzte, die Hautärzte, die Zahnärzte, die Fachärzte, die Ärzte</Line>
+ <Line>regulär regulär primär primär sekundär sekundär legendär legendär</Line>
+ <Line>Sekretäre, Sekretäre; Militär, Militär; Sekretärin, Sekretärinnen</Line>
+ <Line>Qualität, Qualität; Quantität, Quantität; Naivität, Kriminalität;</Line>
+ <Line>Das Protokoll sollte in der Gegenwart, im Präsens abgefasst sein.</Line>
+ <Line>Präpositionen sind Verhältniswörter, z. B. an, am, in, bei, vorn.</Line>
+ <Line>Der Pädagoge ist ein Erzieher; er arbeitet z. B. in einer Schule.</Line>
+ <Line>Prädikat kann man meist mit Bewertung, Note, Zensur verdeutschen.</Line>
+ <Line>Die Bundestagspräsidentin hat auch die gestrige Sitzung eröffnet.</Line>
+ <Line>Der Leiter einer Organisation wird sehr häufig Präsident genannt.</Line>
+ <Line>Die städtischen Plätze sind sorgfältig zu pflegen. Man denke etwa</Line>
+ <Line>an Sportplätze, Festplätze, Rastplätze, Liegeplätze, Halteplätze,</Line>
+ <Line>Tennisplätze usw. Die Bauplätze sind aber zugleich Arbeitsplätze.</Line>
+ <Line>Sehr geehrte Frau Schäfer, Ihre Bewerbung als Sekretärin unserer</Line>
+ <Line>Rostocker Niederlassung gefällt uns. Zu Ihren Aufgaben zählt die</Line>
+ <Line>Betreuung ausländischer Arbeitnehmer. Wir hoffen, dass Sie diese</Line>
+ <Line>und die anderen einschlägigen Tätigkeiten sorgfältig wahrnehmen.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Ringfinger in der Unterreihe: x und Doppelpunkt</LevelComment>
+ <NewCharacters>x und :</NewCharacters>
+ <Line>fvf dcd sxs sxs sxs sxö sxl sxk sxs sxf sxd sxa sxs sxa sxd sxsxf</Line>
+ <Line>oxs oxs ixs ixs exs exs axs axs oxs oxs ixs ixs exs exs axs extra</Line>
+ <Line>boxen boxen boxen hexen hexen hexen boxen boxen hexen hexen boxen</Line>
+ <Line>mixen mixen mixen extra extra extra mixen mixen extra extra mixen</Line>
+ <Line>Texte Texte Texte Luxus Luxus Luxus Texte Texte Luxus Luxus Texte</Line>
+ <Line>Lexika Lexika Lexika Examen Examen Examen Lexika, im Staatsexamen</Line>
+ <Line>jmj k,k l.l l:l l:l l:l l:a l:d l:s l:f l:l l:ö l:k l:j l:l l.l:l</Line>
+ <Line>Städte: in Xanten, in Cuxhafen, in Luxemburg; Mexiko, Alexandria;</Line>
+ <Line>Vornamen: Max, Maximilian, Felix, Alex, Xaver; Frau Xenia Saxler;</Line>
+ <Line>Beispiel: Exempel; Versuch: Experiment; Sachverständiger: Experte</Line>
+ <Line>Verbannungsort: Exil; Ausfuhr: Export; Ausdehnung: die Expansion;</Line>
+ <Line>Börsenkurs: Exchange; Studienfahrt: Exkursion, Gegenteil: Extrem;</Line>
+ <Line>Text, Texte, Textprogramme, Textbearbeitung, die Textverarbeitung</Line>
+ <Line>Urtext, Kontext, Klartext, Begleittext, Originaltext, Werbetexte,</Line>
+ <Line>Textilien Textilwaren Textilgeschäft Textilchemie Textilindustrie</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: x und :</LevelComment>
+ <NewCharacters>x und : (2)</NewCharacters>
+ <Line>Die Textilfabrik Felix Luxem exportierte Textilwaren nach Mexiko.</Line>
+ <Line>In den neuen Lexikonbänden sind alle Informationen exakt erfasst.</Line>
+ <Line>Alexander Hox hat sich in Luxemburg eine neue Existenz aufgebaut.</Line>
+ <Line>Auch im Exportgeschäft hat sich Telex als unverzichtbar erwiesen.</Line>
+ <Line>Aber auch die Telefaxverbindung hat sich inzwischen sehr bewährt.</Line>
+ <Line>Der Werbetexter des Lexikonverlags ist auf seinem Gebiet Experte.</Line>
+ <Line>Dr. Alex Fox hat am Maximilianplatz eine Zahnarztpraxis eröffnet.</Line>
+ <Line>Dagegen wurde die Praxis von Dr. Luxem in die Hexengasse verlegt.</Line>
+ <Line>Die Arztpraxen werden auch von externen Patienten sehr geschätzt.</Line>
+ <Line>Sehr geehrter Herr Lexter, soeben haben wir Ihr Telefax erhalten.</Line>
+ <Line>Ihre exakten Angaben sind sehr wertvoll. Maximal wollen wir jetzt</Line>
+ <Line>sechs exklusive Exportmodelle bauen. Gewiss ist dieses Experiment</Line>
+ <Line>gewagt. Jedoch erwarten wir eine Expansion unserer Exportanteile.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Kleiner Finger in der Oberreihe: ü</LevelComment>
+ <NewCharacters>ü</NewCharacters>
+ <Line>ftf öüö öüö öüö öüa öüs öüd öüf öüö öüj öük öül ftf öüö öüj üöküö</Line>
+ <Line>über über über üben üben üben kühl kühl kühl über üben kühl übrig</Line>
+ <Line>früh früh früh müde müde müde wüst wüst wüst früh müde wüst frühe</Line>
+ <Line>Düse Düse Düse Hüte Hüte Hüte Tüte Tüte Tüte Düse Hüte Tüte Düsen</Line>
+ <Line>Übel Übel Übel Züge Züge Züge Rüge Rüge Rüge Übel Züge Rüge Dünen</Line>
+ <Line>Flüge Flüge Flüge Küche Küche Küche Übung Übung Übung Flüge Küche</Line>
+ <Line>überall, übernimmt, überhört, übersetzt, überfüllt, übereinander,</Line>
+ <Line>Überfall, Übergang, Übermut, Übertrag, Übersetzung, Überzeugungen</Line>
+ <Line>Rücksicht, Rückfahrt, Rückgänge, Rückkehr, Rückzüge, Rückschläge,</Line>
+ <Line>Glücksfall, Glücksrad, Glückszahl, Glückssache, Glückwunschkarte,</Line>
+ <Line>zurück, zurückkommen, zurückdrehen, zurückdrängen, zurückgesetzt,</Line>
+ <Line>Konfitüre, Maniküre, Pediküre, Broschüren, Allüren, Reiselektüre.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: ü</LevelComment>
+ <NewCharacters>ü (2)</NewCharacters>
+ <Line>Die Konfitürenfabrik hat Filialen in München, Fürth und Tübingen.</Line>
+ <Line>Für die Fahrt von Düsseldorf nach Zürich kaufte ich Reiselektüre.</Line>
+ <Line>Zum Glück kamen sämtliche Sonderzüge wieder überaus pünktlich an.</Line>
+ <Line>Das Lüdenscheider Werk exportiert auch Kühlschränke nach Brüssel.</Line>
+ <Line>Die Düsseldorfer Zentrale wünscht wieder ausführliche Broschüren.</Line>
+ <Line>Der Lübecker Werbetexter formulierte auch zündende Überschriften.</Line>
+ <Line>Arbeit gibt es in der Fabrik glücklicherweise in Hülle und Fülle.</Line>
+ <Line>Wir dürfen auf Ihre Vorschläge für unsere Übersicht zurückkommen.</Line>
+ <Line>Sie wünschen, dass in dieser Übersicht alle Flüge erfasst werden.</Line>
+ <Line>Sie dürfen nun überzeugt sein, dass wir die Mängelrüge sorgfältig</Line>
+ <Line>prüfen. Natürlich übernehmen wir für die Qualität der Textilwaren</Line>
+ <Line>volle Garantie. Die Mängelrüge wird aber unverzüglich bearbeitet.</Line>
+ <Line>Wir alle müssen im Leben Prüfungen ablegen. Die Prüfungsangst ist</Line>
+ <Line>weit verbreitet, aber in Prüfungen natürlich wenig nützlich. Wenn</Line>
+ <Line>Sie sich früh genug und gründlich vorbereiten, haben Sie günstige</Line>
+ <Line>Voraussetzungen geschaffen. Gehen Sie dann ruhig in Ihre Prüfung.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Erster Griff in die Ziffernreihe: ß</LevelComment>
+ <NewCharacters>ß</NewCharacters>
+ <Line>aqa öpö ößö ößö ößö ößa ößs ößd ößf ößj ößk ößl ößö ößj ößk ößößö</Line>
+ <Line>saß saß saß süß süß süß saß saß saß süß süß süß saß süß saß saßen</Line>
+ <Line>ließ ließ ließ heiß heiß heiß ließ ließ heiß heiß ließ heiß heißt</Line>
+ <Line>weiß weiß weiß groß groß groß weiß weiß groß groß weiß groß große</Line>
+ <Line>reißt reißt reißt heißt heißt heißt reißt reißt heißt reißt heißt</Line>
+ <Line>Maß Maß Maß Fuß Fuß Fuß Maß Maß Maß Fuß Fuß Fuß Maß Maß Fuß Späße</Line>
+ <Line>gießen : goss; schießen : schoss; schließen : schloss, beschloss;</Line>
+ <Line>fließen : floss; beißen : biss; vergaß : vergessen, Vergessenheit</Line>
+ <Line>reißen : riss; müßig : müsst; verdrießen : Verdruss, verdrossene;</Line>
+ <Line>Füße : Flüsse; Floß : Fluss, Flöße : Flosse; Reißbrett : Verriss;</Line>
+ <Line>Beißzangen : Amboss; ich weiß : bin mir bewusst, das Bewusstsein;</Line>
+ <Line>Adressbücher, Expresszüge, Kongresshallen, keine Regressansprüche</Line>
+ <Line>Straße Straßen Straßenbahn Straßennetz Straßenname Straßenverkehr</Line>
+ <Line>Hauptstraße Nebenstraße Geschäftsstraße Einbahnstraße Milchstraße</Line>
+ <Line>mäßig regelmäßig unmäßig verhältnismäßig berufsmäßig behelfsmäßig</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: ß</LevelComment>
+ <NewCharacters>ß (2)</NewCharacters>
+ <Line>Es ist gewiss, dass der Straßenverkehr regelmäßig überwacht wird.</Line>
+ <Line>Schließlich macht es wenig Spaß, hier viele Fehler zu verbessern.</Line>
+ <Line>Jetzt sind Vorsicht und Rücksicht im Straßenverkehr unerlässlich.</Line>
+ <Line>Der Kongress wurde schließlich ganz bewusst nach München verlegt.</Line>
+ <Line>Die Anschrift der Kongresshallen ist dem Adressbuch zu entnehmen.</Line>
+ <Line>Der Expresszug verkehrt regelmäßig zwischen München und Augsburg.</Line>
+ <Line>Unser Außendienstmitarbeiter Herr Straßner besucht Sie am Montag.</Line>
+ <Line>Er wird Ihnen dann unser gesamtes Sortiment für Fußpflege zeigen.</Line>
+ <Line>Wie Sie wissen, treten Fußbeschwerden verhältnismäßig häufig auf.</Line>
+ <Line>Die Kinder und ältere Fußgänger sind auf allen Straßen nicht nur</Line>
+ <Line>in Großstädten, sondern auch in kleineren Orten stärker gefährdet</Line>
+ <Line>und bedürfen daher größerer Rücksicht und Vorsicht. Besonders der</Line>
+ <Line>Schulweg muss sicherer werden. Dazu muss jeder von uns beitragen.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Die kleinen Finger in der Unterreihe: y und -</LevelComment>
+ <NewCharacters>y und -</NewCharacters>
+ <Line>frf dcd sxs aya aya aya ayö ayl ayk aya ayf ayd ays aya ayf aydys</Line>
+ <Line>sys sys sys rhy rhy rhy zyl zyl zyl bay bay bay hyg hyg hyg physy</Line>
+ <Line>may may may say say say you you you may may say say you you young</Line>
+ <Line>Typ Typ Typ Boy Boy Boy Roy Roy Roy Typ Typ Boy Boy Roy Roy Spray</Line>
+ <Line>Jury Jury Jury City City City Baby Baby Baby Jury City Baby Party</Line>
+ <Line>Okay Okay Okay Yard Yard Yard Yoga Yoga Yoga Okay Yard Yoga Handy</Line>
+ <Line>jmj k,k l.l ö-ö ö-ö ö-ö ö-f ö-d ö-s ö-a ö-ö ö-j ö-k ö-l ö-ö ö-ö-ö</Line>
+ <Line>S-Kurve S-Kurve S-Kurve i-Punkt i-Punkt i-Punkt S-Kurve T-Träger;</Line>
+ <Line>Dativ-e Dativ-e Dativ-e Fugen-s Fugen-s Fugen-s Dativ-e s-förmig;</Line>
+ <Line>Kfz-Papiere, Kfz-Papiere, Fußball-WM, Fußball-WM, Kfz-Werkstätten</Line>
+ <Line>in der Paul-Klee-Straße, im Dr.-Mayer-Weg, der Pfarrer-Kneipp-Weg</Line>
+ <Line>An- und Abfahrt, Vor- und Zunamen, dieser Haupt- und Nebeneingang</Line>
+ <Line>Ha- ken, La- ger, Ei- fer, A- bend, El- tern, Far- ben, Emp- fang</Line>
+ <Line>Ha- cke, E- cken, Lü- cke, Ho- cke, Bu- ckel, Dru- cke, Bli- cke,</Line>
+ <Line>Res- te, Lis- te, Hus- ten, Las- ter, Kos- ten, Bas- tel- freund,</Line>
+ <Line>an- grenzen, be- freit, ver- blendet, ge- tragen, über- ängstlich</Line>
+ <Line>Zur Wahl: he- ran oder her- an, da- raus oder dar- aus, wo- rüber</Line>
+ <Line>oder wor- über; pub- lik oder pu- blik, Sig- nale oder Si- gnale,</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: y und -</LevelComment>
+ <NewCharacters>y und - (2)</NewCharacters>
+ <Line>Unsere Analyse ergab zum Glück keine hygienischen Beanstandungen.</Line>
+ <Line>Mit dem gleichen System haben wir das Recyclingpapier analysiert.</Line>
+ <Line>Dieses synthetische Verfahren hat sich in Speyer bereits bewährt.</Line>
+ <Line>Die Jury hat die rhythmische Gymnastik von Sybille hoch bewertet.</Line>
+ <Line>Erst im Play-Back konnte Trainer Freddy alle Feinheiten erkennen.</Line>
+ <Line>Auch Gaby und Nelly interessieren sich für rhythmische Gymnastik.</Line>
+ <Line>Krankengymnastik gehört zum medizinischen Fachgebiet der Physika-</Line>
+ <Line>lischen Therapie. Physiotherapeuten stellen anhand der ärztlichen</Line>
+ <Line>Diagnose einen Therapieplan auf. Physiotherapeuten arbeiten z. B.</Line>
+ <Line>in Kliniken, Sanatorien, Erholungsheimen sowie in Facharztpraxen.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Grundstrich und Fragezeichen</LevelComment>
+ <NewCharacters>_ und ?</NewCharacters>
+ <Line>ö-ö ö_ö ö_ö ö_ö ö_a ö_s ö_d ö_f ö-ö ö_ö ö_j ö_k ö_l ö_ö ö-ö_ö-j_ö</Line>
+ <Line>Der Name ist uns nicht bekannt. Wir haben ihn noch nicht erfasst.</Line>
+ <Line>Dr. Schäfer fliegt nach Sydney. Wir treffen ihn also am Mittwoch.</Line>
+ <Line>Am Montag hat unsere Zentrale mehrere Stellenanzeigen aufgegeben.</Line>
+ <Line>Auf diese Annonce haben sich bisher vier Interessenten gemeldet.</Line>
+ <Line>Frau Rita Berghöfer, Merseburg, wurde in die engere Wahl gezogen.</Line>
+ <Line>ößö ö?ö ö?ö ö?ö ö?a ö?s ö?d ö?f ößö ö?ö ö?j ö?k ö?l ö?ö ö?j ö?k?ö</Line>
+ <Line>Wie? Wie? Wie? Wer? Wer? Wer? Was? Was? Was? Wie? Wer? Was? Wann?</Line>
+ <Line>Wann fliegen Sie nach New York? Wie lange möchten Sie wegbleiben?</Line>
+ <Line>Kennen Sie schon unser modernes Textsystem für Physiotherapeuten?</Line>
+ <Line>Wann darf Ihnen unsere Mitarbeiterin dieses Textsystem vorführen?</Line>
+ <Line>Oder wollen Sie das Textsystem lieber in unserem Geschäft testen?</Line>
+ <Line>Hat Ihnen unsere letzte Lieferung missfallen? Hatten Sie sich die</Line>
+ <Line>Ausführung anders vorgestellt? Kam die Sendung vielleicht beschä-</Line>
+ <Line>digt an? Oder gibt es sogar noch andere Gründe für Ihr Schweigen?</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training: _ und ?</LevelComment>
+ <NewCharacters>_ und ? (2)</NewCharacters>
+ <Line>In Ihrem Reisebericht ist Ihnen leider ein Irrtum unterlaufen. Es</Line>
+ <Line>scheint sich um eine Verwechslung der Firma Ewald Meyer in Aachen</Line>
+ <Line>mit der Lack- und Farbenfabrik Ewald Meyer in Krefeld zu handeln.</Line>
+ <Line>Ist Ihnen bewusst, dass Informatikassistenten und -assistentinnen</Line>
+ <Line>über solide Qualifikationen verfügen müssen? Kennen Sie schon die</Line>
+ <Line>Anforderungen im Einzelnen? Lesen Sie unser Informationsmaterial?</Line>
+ <Line>Was verstehen Sie unter Systemanalyse? Sind Ihnen die Fachausdrü-</Line>
+ <Line>cke Optimierung von Software oder Erstellung von Programmdokumen-</Line>
+ <Line>tationen ein Begriff? Haben Sie unsere Infos bereits angefordert?</Line>
+ <Line>Telefonieren Sie richtig? Verhalten Sie sich dem Gesprächspartner</Line>
+ <Line>gegenüber freundlich und zuvorkommend? Sprechen Sie verständlich?</Line>
+ <Line>Ist Ihre Tonlage angenehm? Bereiten Sie Ihre Telefonate vor? Kön-</Line>
+ <Line>nen Sie richtig buchstabieren? Kennen Sie alle Buchstabierwörter?</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mehr Schreibsicherheit (1)</LevelComment>
+ <NewCharacters>Übung 1</NewCharacters>
+ <Line>abc def ghi jkl mno pqr stu vwx yzä öüß abc def ghi jkl mno pqrst</Line>
+ <Line>die der und den das von sie ist des mit dem ein ich auf aus nicht</Line>
+ <Line>als wie für man aus nur war bei hat wir mir was ihm uns zum gegen</Line>
+ <Line>Bau Ast Ort Tal Mal Ton Zug Amt Tür See Tor Rat Mut Mai Tat Brief</Line>
+ <Line>Unser Mitarbeiter Herr Lay ist heute Morgen nach Dessau gefahren.</Line>
+ <Line>Bereits gestern Abend hat er seinen Pkw mit Dekomaterial beladen.</Line>
+ <Line>Mit dem Besuch der Kunden müsste Herr Lay morgen Mittag beginnen.</Line>
+ <Line>Am Freitagmorgen müsste das Erdgeschoss bereits zu beziehen sein.</Line>
+ <Line>Dann könnte man das neue Fachgeschäft donnerstagabends einräumen.</Line>
+ <Line>Die Vorbereitungen müssten aber schon mittwochs getroffen werden.</Line>
+ <Line>Auch er weiß, dass die Kassette ein bisschen teurer geworden ist.</Line>
+ <Line>Der große Fluss muss in seinem Lauf einige Nebenflüsse aufnehmen.</Line>
+ <Line>Beim Abriss dieses alten Hauses können die Stützen leicht reißen.</Line>
+ <Line>Wusste er, dass der Stress mit Gelassenheit abgebaut werden kann?</Line>
+ <Line>Dass dieses Buch so interessant war, das vergisst gewiss niemand.</Line>
+ <Line>Ich glaube, dass das Buch, das Sie gestern kauften, spannend ist.</Line>
+ <Line>Zur Wahl: Wann findet die Abschlusssitzung des Ausschusses statt?</Line>
+ <Line>Oder: Die Abschluss-Sitzung soll doch erst im August stattfinden.</Line>
+ <Line>Bei niedrigem Wasserstand kann die Schiff-Fahrt nicht voll laden.</Line>
+ <Line>Die Schnell-Läuferin hatte auf dem Rücken eine große Kenn-Nummer.</Line>
+ <Line>Gestern Mittag haben wir im Zoo die großen See-Elefanten gefilmt.</Line>
+ <Line>Die Zeitungen berichten über eine schlechte Tee-Ernte in Übersee.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mehr Schreibsicherheit (2)</LevelComment>
+ <NewCharacters>Übung 2</NewCharacters>
+ <Line>abcd efgh ijkl mnop jqrst uvwx yzöä öüöß abcd efgh ijkl mop qrstu</Line>
+ <Line>wenn aber sein mein dein kein wird hast gibt sagt denn legt keine</Line>
+ <Line>sind sich dass nach noch doch beim oder über sehr will hier durch</Line>
+ <Line>Wald Bank Erde Lied Kind Buch Wort Zorn Juni Geld Feld Juli Abend</Line>
+ <Line>Im Großen und Ganzen werden Sie stets auf dem Laufenden gehalten.</Line>
+ <Line>Über Folgendes müssten sich aber alle Mitarbeiter im Klaren sein:</Line>
+ <Line>Es ist uns bekannt, dass Dr. Stein im Allgemeinen am Alten hängt.</Line>
+ <Line>Wer ist schuld daran, dass die Firma Schäfer Pleite gegangen ist?</Line>
+ <Line>Die Firma Schäfer ist pleite; daran trägt Dr. Klein keine Schuld.</Line>
+ <Line>Wir müssen Verluste ernst nehmen, damit wird jetzt Ernst gemacht.</Line>
+ </Level>
+ <Level>
+ <LevelComment>4 und Dollar</LevelComment>
+ <NewCharacters>4 und $</NewCharacters>
+ <Line>ded d4d d4d d4d d4ö d4l d4k d4j d4d d4a d4s d4f d4d d4a d4s d4d4f</Line>
+ <Line>4 Daten, 4 Autos, 4 Stück, 4 Jahre, 4 Daten, 4 Autos, 4 Scheiben,</Line>
+ <Line>ded d4d d$d d$d d4d d$d d$d d4d d$d, für 4 $, für 44 $, bis 44 $.</Line>
+ </Level>
+ <Level>
+ <LevelComment>9 und Nachklammer</LevelComment>
+ <NewCharacters>9 und )</NewCharacters>
+ <Line>kik k9k k9k k9k k9a k9s k9d k9f k9k k9ö k9l k9j k9ö k9l k9j k9k9j</Line>
+ <Line>9 Kegel, 9 Öfen, 9 Kegel, 9 Öfen, 9 Kegel, 9 Öfen, 9 km, 99 Öfen,</Line>
+ <Line>k9k k)k k)k k)k k)ö k)l k)j k9k k)k a) b) c) d) e) f) g) h) i) j)</Line>
+ </Level>
+ <Level>
+ <LevelComment>5 und Prozentzeichen</LevelComment>
+ <NewCharacters>5 und %</NewCharacters>
+ <Line>ded d4d frf f5f f5ö f5l f5k f5j f5f f5a f5s f5d f5f d4d f5f d4df5</Line>
+ <Line>5 Filme, 5 Arten, 5 Fälle, 5 Augen, 5 Filme, 4 Filme, 5 km, 45 km</Line>
+ <Line>d4d d$d f5f f%f f%f f%f f%a f%s, 5 %, 5 % Verlust, 5%iger Gewinn,</Line>
+ </Level>
+ <Level>
+ <LevelComment>8 und Vorklammer</LevelComment>
+ <NewCharacters>8 und (</NewCharacters>
+ <Line>kik k9k juj j8j j8j j8j j8a j8s j8d j8f j8j j8ö j8l j8k j8j j8jk9</Line>
+ <Line>8 Jahre, 8 Ösen, 8 Jäger, 8 Öfen, 8 Jeeps, 8 Jeeps, 88 km, 89 km,</Line>
+ <Line>j8j j(j j(j j(j j(ö j(l j(k), Frankfurt (Main), Frankfurt (Oder),</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training</LevelComment>
+ <NewCharacters>Übung</NewCharacters>
+ <Line>Das 4-stöckige Gebäude wurde schon am 5. Oktober fertig gestellt.</Line>
+ <Line>Um 5 % hat sich der Jahresumsatz der Ravensburger Filiale erhöht.</Line>
+ <Line>Mit der 5%igen Umsatzsteigerung hatte der Filialleiter gerechnet.</Line>
+ <Line>Der 49-jährige Angestellte leitet die Filiale in Koblenz (Rhein).</Line>
+ <Line>In Konstanz findet vom 8. bis 9. Oktober ein Ärztekongress statt.</Line>
+ <Line>Frau Eva Mayer (Sulzberg) bereist den Bezirk Freiburg (Breisgau).</Line>
+ <Line>Die Firma Schneider (Köln) konnte den Artikel für 49 $ einkaufen.</Line>
+ <Line>Der neue 8-Zylinder-Motor zeichnet sich durch große Laufruhe aus.</Line>
+ <Line>Der Neubau Heidelberger Straße 58 a könnte im Mai bezogen werden.</Line>
+ </Level>
+ <Level>
+ <LevelComment>6 und Zeichen für &quot;und&quot;</LevelComment>
+ <NewCharacters>6 und &amp;</NewCharacters>
+ <Line>frf f5f ftf f6f f6f f6f f6ö f6l f6k f6f f5f f6f f6a f6s f6d f5f6f</Line>
+ <Line>6 Filme, 6 Gänge, 6 Arten, 6 Stäbe, 5 Gänge, 4 Gänge, 6 Geschenke</Line>
+ <Line>f6f f&amp;f f&amp;f f&amp;f f&amp;ö f&amp;l f&amp;k f&amp;j; Ruf &amp; May, Tal &amp; Roy, Zug &amp; Holl</Line>
+ </Level>
+ <Level>
+ <LevelComment>7 und Schrägstrich</LevelComment>
+ <NewCharacters>7 und /</NewCharacters>
+ <Line>juj jzj juj j7j j7j j7j j7a j7s j7d j7f juj jzj j7j j7ö j7l j8j7j</Line>
+ <Line>7 Uhren, 6 Uhren, 7 Nägel, 8 Nägel, 7 Heime, 8 Heime, 7 Haustüren</Line>
+ <Line>j7j j/j j/j j/j j/ö j/l j/k j/j; Typ 49/77, Typ 58/66, Typ 67/89,</Line>
+ </Level>
+ <Level>
+ <LevelComment>3 und Paragrafenzeichen</LevelComment>
+ <NewCharacters>3 und §</NewCharacters>
+ <Line>f6f f5f d4d s3s s3s s3s s3ö s3l s3k s3j s3s s3f s3d s3a d4d s3s3f</Line>
+ <Line>3 Dosen, 3 Stück, 3 Arme, 3 Autos, 34 km, 53 km, 63 km, 365 Tage,</Line>
+ <Line>s3s s§s s§s s§s s§f s§d s§a § 33, § 36, § 37, nach §§ 33 und § 67</Line>
+ </Level>
+ <Level>
+ <LevelComment>0 und Gleichheitszeichen</LevelComment>
+ <NewCharacters>0 und =</NewCharacters>
+ <Line>j7j j8j k9k l0l l0l l0l l0a l0s l0d l0f l0l l0j l0k l0ö l0l l0l0ö</Line>
+ <Line>30 Tage, 40 Tage, 50 Tage, 60 Tage, 70 Tage, 80 Tage, in 90 Tagen</Line>
+ <Line>l0l l=l l=l l=l l=ö l=k l=j; 6 - 3 = 3, 90 - 5 = 85, 70 - 30 = 40</Line>
+ </Level>
+ <Level>
+ <LevelComment>Training</LevelComment>
+ <NewCharacters>Übung</NewCharacters>
+ <Line>Das Reisebüro in der Max-Planck-Straße 67 sucht Mitarbeiterinnen.</Line>
+ <Line>Sie Artikel 58, 67, 760 und 800 sind leider nicht mehr lieferbar.</Line>
+ <Line>Die Firma Schäfer &amp; Kaiser AG sucht Mitarbeiter/Mitarbeiterinnen.</Line>
+ <Line>Steiner &amp; Schneider GmbH liefern wieder Garten- und Campingmöbel.</Line>
+ <Line>Ihre Zeitschrift für Juli/August/September gefällt mir besonders.</Line>
+ <Line>Das Geschäftshaus Kölner Straße 33/35 gehört Herrn Peter Fischer.</Line>
+ <Line>Nun wurde § 3 der Satzung geändert; die §§ 6 und 7 gelten weiter.</Line>
+ <Line>Alle Paragrafen sind wichtig; dies gilt auch für die §§ 6 und 37.</Line>
+ <Line>B = Belgien, E = Spanien, H = Ungarn, R = Rumänien, S = Schweden.</Line>
+ </Level>
+ <Level>
+ <LevelComment>2 und Anführungszeichen</LevelComment>
+ <NewCharacters>2 und &quot;</NewCharacters>
+ <Line>f5f d4d s3s a2a a2a a2a a2ö a2l a2k a2j a2a a2f a2d a2s a2a s3s2a</Line>
+ <Line>2 Autos, 2 Bälle, 2 Werte, 2 Verse, 2 Augen, 2 Bären, 32 Arbeiten</Line>
+ <Line>a2a a&quot;a a&quot;a a&quot;a a&quot;f a&quot;d a&quot;s Marke &quot;Roy&quot;, Marke &quot;Boy&quot;, Marke &quot;Roy&quot;</Line>
+ </Level>
+ <Level>
+ <LevelComment>1 und Ausrufezeichen</LevelComment>
+ <NewCharacters>1 und !</NewCharacters>
+ <Line>f5f d4d s3s a2a a1a a1a a1a a1ö a1l a1l a1k a1j a1a a1f a1d a1s1a</Line>
+ <Line>1 Arm, 1 Ast, 1 Ass, 1 Arm, 1 Ast, 1 Ass, 10 Arme, 12 Firmennamen</Line>
+ <Line>a2a a1a a!a a!a a!a Au! Pfui! Ruhe! Gift! Hallo! Hilfe! Vorsicht!</Line>
+ </Level>
+ <Level>
+ <LevelComment>Nummern und Apostroph</LevelComment>
+ <NewCharacters>öäö ö#ö ö#ö ö#ö ö#j ö#k ö#l # 1, # 2, # 3, # 4, Artikel # 1 und 2</NewCharacters>
+ <Line>ö#ö ö'ö ö'ö ö'j ö'k ö'l - 's ist schade. Das war 'n Riesenerfolg!</Line>
+ <Line>Die Artikel 10, 20 und 21 können wir von Laurenz' Mühle beziehen.</Line>
+ <Line>Die Firma schreibt: &quot;Das Modell 'London' gefällt unseren Kunden.&quot;</Line>
+ <Line>&quot;Wann&quot;, fragt Max Braun, &quot;ist das Modell 'Rom' wieder lieferbar?&quot;</Line>
+ <Line>Er sagte: &quot;Der Artikel 'Kairo' soll in 'Paris' umbenannt werden.&quot;</Line>
+ <Line>Sehr geehrte Damen und Herren! Für Ihre Anfrage danken wir Ihnen.</Line>
+ <Line>Sehr geehrte Damen und Herren, für Ihre Anfrage danken wir Ihnen.</Line>
+ <Line>Unsere Werbeleiterin meinte: &quot;Wir brauchen einen neuen Prospekt.&quot;</Line>
+ <Line>&quot;Wie gefällt Ihnen mein Entwurf?&quot;, fragte darauf Herr Dr. Becker.</Line>
+ <Line>&quot;Ihr erster Entwurf ist ein Knüller!&quot;, meinten dann die Kollegen.</Line>
+ </Level>
+ <Level>
+ <LevelComment>Plus, &quot;geboren&quot; und &quot;gestorben&quot;</LevelComment>
+ <NewCharacters>+ und *</NewCharacters>
+ <Line>öpö öüö ö+ö ö+ö ö+ö ö+j ö+k ö+l + 1 + 2 + 3 + 4 + 5 + 6 + 70 + 80</Line>
+ <Line>ö+ö ö*ö ö*ö ö*ö ö*j ö*k ö*l ö*ö * 10. Mai, * 19. Mai, * 29. April</Line>
+ <Line>Franz X. Wagner * 20. Mai 1837, + 8. März 1907 in New York (USA).</Line>
+ </Level>
+ <Level>
+ <LevelComment>Mehr Schreibsicherheit (3)</LevelComment>
+ <NewCharacters>Übung</NewCharacters>
+ <Line>nicht durch einen haben einer diese einem hatte seine umter schon</Line>
+ <Line>ihnen meine gegen eines wurde jetzt immer würde alles waren recht</Line>
+ <Line>Namen Leben Recht Macht Seite Liebe Hände Frage Augen Vater Jahre</Line>
+ <Line>Nation Aktion Region Fusion Pension Passion Illusionen Navigation</Line>
+ <Line>Ration Option Legation Version Union Stadion Stationen Kreationen</Line>
+ <Line>Fabrikation Kommunikation Demonstration Konfiguration Korporation</Line>
+ <Line>Der Aufwand war groß. Wir mussten die aufwändigen Ausgaben rügen.</Line>
+ <Line>Das Stirnband ist rot. Seine Mutter hat ihn immer noch am Bändel.</Line>
+ <Line>Er hat die Schnauze voll. Bruno benahm sich leider großschnäuzig.</Line>
+ <Line>Der 22-jährige LKW-Fahrer Max fährt zum x-ten Mal einen 8-Tonner.</Line>
+ <Line>Der 8-Zylinder-Motor wurde von der Firma Auto-Lange ausgetauscht.</Line>
+ <Line>Ihre Listen mit 4-silbigen Wörtern sind noch nicht 100-prozentig.</Line>
+ <Line>Der 5 : 3-Sieg unserer Fußballmannschaft war gewiss hochverdient.</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/hungarian.ktouch.xml b/ktouch/training/hungarian.ktouch.xml
new file mode 100644
index 00000000..2efd3c61
--- /dev/null
+++ b/ktouch/training/hungarian.ktouch.xml
@@ -0,0 +1,553 @@
+<KTouchLecture>
+ <Title>Magyar gépírótanfolyam</Title>
+ <Comment>Magyar gépírásra tanít - első, próbaverzió
+
+ Csak a csüggedésünket el ne veszítsük</Comment>
+ <Levels>
+
+<Level>
+
+<NewCharacters>f, j</NewCharacters>
+<Line>ffff jjjj ffff jjjj ffff jjjj ffff jjjj ffff</Line>
+<Line>ffjj jjff ffjj jjff jjff ffjj ffjj ffjj ffjj</Line>
+<Line>fjfj fjfj fjfj fjfj jfjf jfjf jfjf jfjf jfjf</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>k, d</NewCharacters>
+<Line>dddd kkkk dddd kkkk dddd kkkk dddd kkkk dddd</Line>
+<Line>kkkk dddd kkkk dddd kkkk dddd kkkk dddd kkkk</Line>
+<Line>ffff jjjj ffff jjjj kkjj ffdd kkjj ddff ddkk</Line>
+<Line>dfjk dfkj dfjk dfjk dfjk dfjk dfjk dfjk dfjk</Line>
+<Line>kjfd kjfd kjfd kjfd kjfd kjfd kjfd kjfd kjfd</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>s, l</NewCharacters>
+<Line>ssss llll ssss llll ssss llll ssss llll ssss</Line>
+<Line>llll ssss llll ssss llll ssss ssss llll ssss</Line>
+<Line>ssll ssll ssll ssll ssll llss llss llss llss</Line>
+<Line>lsls lsls lsls lsls lsls slsl slsl slsl slsl</Line>
+<Line>sdfj sdfj lkjf lkjf lkjf lkjf lkjf lkjf lkjf </Line>
+<Line>sdkl sdkl sdkl sdkl sdkl sdkl sdkl sdkl sdkl</Line>
+<Line>klsd klsd klsd klsd klsd klsd klsd klsd klsd</Line>
+<Line>sflj sflj sflj sflj sflj sflj sflj sflj sflj</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>a, é</NewCharacters>
+<Line>aaaa éééé aaaa éééé aaaa éééé aaaa éééé aaaa</Line>
+<Line>éééé aaaa éééé aaaa éééé aaaa éééé aaaa éééé</Line>
+<Line>aaéé aaéé aaéé aaéé aaéé aaéé aaéé aaéé aaéé</Line>
+<Line>ééaa ééaa ééaa ééaa ééaa ééaa ééaa ééaa ééaa</Line>
+<Line>aéaé aéaé aéaé aéaé aéaé aéaé aéaé aéaé aéaé</Line>
+<Line>éaéa éaéa éaéa éaéa éaéa éaéa éaéa éaéa éaéa</Line>
+<Line>aféj aféj aféj aféj aféj aféj aféj aféj aféj</Line>
+<Line>élas élas élas élas élas élas élas élas élas</Line>
+<Line>adék adék adék adék adék adék adék adék adék</Line>
+<Line>asdf asdf asdf asdf asdf asdf asdf asdf asdf</Line>
+<Line>élkj élkj élkj élkj élkj élkj élkj élkj élkj</Line>
+<Line>fdsa fdsa fdsa fdsa fdsa fdsa fdsa fdsa fdsa</Line>
+<Line>jklé jklé jklé jklé jklé jklé jklé jklé jklé</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>-</NewCharacters>
+<Line>gggg hhhh gggg hhhh gggg hhhh gggg hhhh gggg</Line>
+<Line>hhhh gggg hhhh gggg hhhh gggg hhhh gggg hhhh</Line>
+<Line>agag agag agag agag agag agag agag agag agag</Line>
+<Line>fgfg fgfg fgfg fgfg fgfg fgfg fgfg fgfg fgfg</Line>
+<Line>éhéh éhéh éhéh éhéh éhéh éhéh éhéh éhéh éhéh</Line>
+<Line>jhjh jhjh jhjh jhjh jhjh jhjh jhjh jhjh jhjh</Line>
+<Line>asdf ghjk léas dfgh jklé asdf ghjk léas dfgh</Line>
+<Line>gfds hjkl gfds hjkl gfds hjkl gfds hjkl hjkl</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>rrrr uuuu rrrr uuuu rrrr uuuu rrrr uuuu rrrr</Line>
+<Line>uuuu rrrr uuuu rrrr uuuu rrrr uuuu rrrr uuuu</Line>
+<Line>uurr uurr uurr uurr uurr uurr uurr uurr uurr</Line>
+<Line>rruu rruu rruu rruu rruu rruu rruu rruu rruu</Line>
+<Line>sdfr sdfr sdfr sdfr sdfr sdfr sdfr sdfr sdfr</Line>
+<Line>lkju lkju lkju lkju lkju lkju lkju lkju lkju</Line>
+<Line>raué raué raué raué raué raué raué raué raué</Line>
+<Line>ukrd ukrd ukrd ukrd ukrd ukrd ukrd ukrd ukrd</Line>
+<Line>ragu alku réka ragu alku réka ragu alku réka</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>eeee iiii eeee iiii eeee iiii eeee iiii eeee</Line>
+<Line>iiii eeee iiii eeee iiii eeee iiii eeee iiii</Line>
+<Line>eeii eeii eeii eeii eeii eeii eeii eeii eeii</Line>
+<Line>iiee iiee iiee iiee iiee iiee iiee iiee iiee</Line>
+<Line>ieie ieie ieie ieie ieie ieie ieie ieie ieie</Line>
+<Line>asre asre asre asre asre asre asre asre asre</Line>
+<Line>élui élui élui élui élui élui élui élui élui</Line>
+<Line>erui erui erui erui erui erui erui erui erui</Line>
+<Line>iure iure iure iure iure iure iure iure iure</Line>
+<Line>relé irak relé irak relé irak relé irak relé</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>wwww oooo wwww oooo wwww oooo wwww oooo wwww</Line>
+<Line>oooo wwww oooo wwww oooo wwww oooo wwww oooo</Line>
+<Line>wwoo wwoo wwoo wwoo wwoo wwoo wwoo wwoo wwoo</Line>
+<Line>ooww ooww ooww ooww ooww ooww ooww ooww ooww</Line>
+<Line>rewa uioé rewa uioé rewa uioé rewa uioé rewa</Line>
+<Line>wera oiué wera oiué wera oiué wera oiué wera</Line>
+<Line>rwas uoél rwas uoél rwas uoél rwas uoél rwas </Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>qqqq pppp qqqq pppp qqqq pppp qqqq pppp qqqq</Line>
+<Line>pppp qqqq pppp pppp qqqq pppp pppp qqqq pppp</Line>
+<Line>qqpp qqpp qqpp qqpp qqpp qqpp qqpp qqpp qqpp</Line>
+<Line>ppqq ppqq ppqq ppqq ppqq ppqq ppqq ppqq ppqq</Line>
+<Line>qwer poiu qwer poiu qwer poiu qwer poiu qwer</Line>
+<Line>frde swaq juki loép frde swaq juki loép frde</Line>
+<Line>swaq juki loép frde swaq juki loép frde swaq</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>vvvv mmmm vvvv mmmm vvvv mmmm vvvv mmmm vvvv</Line>
+<Line>mmmm vvvv mmmm vvvv mmmm vvvv mmmm vvvv mmmm</Line>
+<Line>vvmm vvmm vvmm vvmm vvmm vvmm vvmm vvmm vvmm</Line>
+<Line>mmvv mmvv mmvv mmvv mmvv mmvv mmvv mmvv mmvv</Line>
+<Line>vfra mjué vfra mjué vfra mjué vfra mjué vfra</Line>
+<Line>asvf élmj asvf élmj asvf élmj asvf élmj asvf</Line>
+<Line>mjkl vfds mjkl vfds mjkl vfds mjkl vfds mjkl</Line>
+<Line>mjhk vfgd mjhk vfgd mjhk vfgd mjhk vfgd mjhk</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>cccc ,,,, cccc ,,,, cccc ,,,, cccc ,,,, cccc</Line>
+<Line>,,,, cccc ,,,, cccc ,,,, cccc ,,,, cccc ,,,,</Line>
+<Line>cc,, cc,, cc,, cc,, cc,, cc,, cc,, cc,, cc,,</Line>
+<Line>,,cc ,,cc ,,cc ,,cc ,,cc ,,cc ,,cc ,,cc ,,cc</Line>
+<Line>hjm, gfvc hjm, gfvc hjm, gfvc hjm, gfvc hjm,</Line>
+<Line>,mjh cvfg ,mjh cvfg ,mjh cvfg ,mjh cvfg ,mjh</Line>
+<Line>,,,, cccc mmmm vvvv ,,,, cccc mmmm vvvv ,,,,</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>xxxx .... xxxx .... xxxx .... xxxx .... xxxx</Line>
+<Line>.... xxxx .... xxxx .... xxxx .... xxxx ....</Line>
+<Line>xx.. xx.. xx.. xx.. xx.. xx.. xx.. xx.. xx..</Line>
+<Line>vcxr m,.u vcxr m,.u vcxr m,.u vcxr m,.u vcxr</Line>
+<Line>.olé xwsa .olé xwsa .olé xwsa .olé xwsa .olé</Line>
+<Line>jm,. fvcx jm,. fvcx jm,. fvcx jm,. fvcx jm,.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>yyyy ---- yyyy ---- yyyy ---- yyyy ---- yyyy</Line>
+<Line>---- yyyy ---- yyyy ---- yyyy ---- yyyy ----</Line>
+<Line>yy-- yy-- yy-- yy-- yy-- yy-- yy-- yy-- yy--</Line>
+<Line>--yy --yy --yy --yy --yy --yy --yy --yy --yy </Line>
+<Line>m,.- vcxy m,.- vcxy m,.- vcxy m,.- vcxy m,.- </Line>
+<Line>muj- vrfy muj- vrfy muj- vrfy muj- vrfy muj- </Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>fakad valamerre és veres eme kerek mely él.</Line>
+<Line>megy és remél gyula, hogy elég vas fakad mely</Line>
+<Line>lopja, marja vedeli feri aki méri éli mi él.</Line>
+<Line>ropom és lopok, valamerre, adok kapom élek is.</Line>
+<Line>ha kapok egy kuka alapos, adok remek adag.</Line>
+<Line>remélem kimélem ama egyede, és élek még ideig.</Line>
+<Line>ha kell egy olyas ismeret ami piros, akkor gyere.</Line>
+<Line>mikor vedel még, gyere velem, megverlek csak</Line>
+<Line>ismerd eme eleme. csavarom, remeg, verem és</Line>
+<Line>ropog. fedem és piros, emelem és kék.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>tttt zzzz tttt zzzz tttt zzzz tttt zzzz tttt</Line>
+<Line>zzzz tttt zzzz tttt zzzz tttt zzzz tttt zzzz</Line>
+<Line>ttzz ttzz ttzz ttzz ttzz ttzz ttzz ttzz ttzz</Line>
+<Line>zztt zztt zztt zztt zztt zztt zztt zztt zztt</Line>
+<Line>kjzh dftg kjzh dftg kjzh dftg kjzh dftg kjzh</Line>
+<Line>atfg ézjh atfg ézjh atfg ézjh atfg ézjh atfg</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>nnnn bbbb nnnn bbbb nnnn bbbb nnnn bbbb nnnn</Line>
+<Line>bbbb nnnn bbbb nnnn bbbb nnnn bbbb nnnn bbbb</Line>
+<Line>nnbb nnbb nnbb nnbb nnbb nnbb nnbb nnbb nnbb</Line>
+<Line>bbnn bbnn bbnn bbnn bbnn bbnn bbnn bbnn bbnn</Line>
+<Line>jnkm fbdv jnkm fbdv jnkm fbdv jnkm fbdv jnkm</Line>
+<Line>jnjm fbfv jnjm fbfv jnjm fbfv jnjm fbfv jnjm</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>áááá íííí áááá íííí áááá íííí áááá íííí áááá</Line>
+<Line>íííí áááá íííí áááá íííí áááá íííí áááá íííí</Line>
+<Line>ááíí ááíí ááíí ááíí ááíí ááíí ááíí ááíí ááíí</Line>
+<Line>ííáá ííáá ííáá ííáá ííáá ííáá ííáá ííáá ííáá</Line>
+<Line>kléá dsaí kléá dsaí kléá dsaí kléá dsaí kléá</Line>
+<Line>áéjh íafg áéjh íafg áéjh íafg áéjh íafg áéjh</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>öööö üüüü öööö üüüü öööö üüüü öööö üüüü öööö</Line>
+<Line>üüüü öööö üüüü öööö üüüü öööö üüüü öööö üüüü</Line>
+<Line>ööüü ööüü ööüü ööüü ööüü ööüü ööüü ööüü ööüü</Line>
+<Line>éöéü éöéü éöéü éöéü éöéü éöéü éöéü éöéü éöéü</Line>
+<Line>aöéü aöéü aöéü aöéü aöéü aöéü aöéü aöéü aöéü</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>óóóó úúúú óóóó úúúú óóóó úúúú óóóó úúúú óóóó</Line>
+<Line>úúúú óóóó úúúú óóóó úúúú óóóó úúúú óóóó úúúú</Line>
+<Line>óóúú óóúú óóúú óóúú óóúú óóúú óóúú óóúú óóúú</Line>
+<Line>úúóó úúóó úúóó úúóó úúóó úúóó úúóó úúóó úúóó</Line>
+<Line>öóúü öóúü öóúü öóúü öóúü öóúü öóúü öóúü öóúü</Line>
+<Line>éóéú éóéú éóéú éóéú éóéú éóéú éóéú éóéú éóéú</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>őőőő űűűű őőőő űűűű őőőő űűűű őőőő űűűű őőőő</Line>
+<Line>űűűű őőőő űűűű őőőő űűűű őőőő űűűű őőőő űűűű</Line>
+<Line>őőűű őőűű őőűű őőűű őőűű őőűű őőűű őőűű őőűű</Line>
+<Line>űűőő űűőő űűőő űűőő űűőő űűőő űűőő űűőő űűőő</Line>
+<Line>éűéő éűéő éűéő éűéő éűéő éűéő éűéő éűéő éűéő</Line>
+<Line>jűéő aőéh jűéő aőéh jűéő aőéh jűéő aőéh jűéő</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>FFFF JJJJ FFFF JJJJ FFFF JJJJ FFFF JJJJ FFFF</Line>
+<Line>FJFJ FJFJ FJFJ FJFJ FJFJ FJFJ FJFJ FJFJ FJFJ</Line>
+<Line>AÉAÉ AÉAÉ AÉAÉ AÉAÉ AÉAÉ AÉAÉ AÉAÉ AÉAÉ AÉAÉ</Line>
+<Line>DKDK DKDK DKDK DKDK DKDK DKDK DKDK DKDK DKDK</Line>
+<Line>SLSL SLSL SLSL SLSL SLSL SLSL SLSL SLSL SLSL</Line>
+<Line>AJSL DKFJ AJSL DKFJ AJSL DKFJ AJSL DKFJ AJSL </Line>
+<Line>AÉJF AÉJF AÉJF AÉJF AÉJF AÉJF AÉJF AÉJF AÉJF</Line>
+<Line>GGHH GGHH GGHH GGHH GGHH GGHH GGHH GGHH GGHH</Line>
+<Line>GFDA HJKÉ GFDA HJKÉ GFDA HJKÉ GFDA HJKÉ GFDA</Line>
+
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>A főtér felöl a templomnak tartottunk.</Line>
+<Line>Végighaladtunk a parkon. Az öreg gimná-</Line>
+<Line>ziumi hittanárunk ott ült a rendes padján,</Line>
+<Line>egy könyv olvasásába merülve. Köszöntünk</Line>
+<Line>neki. Barátságosan integetett. Azután</Line>
+<Line>megkerültük a templomot. A fiúk egy vak</Line>
+<Line>utcába vezettek, amelyről eddig semmit</Line>
+<Line>sem tudtam. Az utca szűk volt, és körül-</Line>
+<Line>belül kétszáz lépés hosszú. Sajátságos!</Line>
+<Line>- ilyen házakat, mint itt, sohase láttam</Line>
+<Line>a városban. Alacsonyak és kezdetlegesek</Line>
+<Line>voltak, de vagy az ablakok hajlásában,</Line>
+<Line>vagy a kapuk faragásában és formájában </Line>
+<Line>volt valami ósdi. Az utcán padokon és</Line>
+<Line>székeken öreg emberek és bánatos arcú,</Line>
+<Line>sápadt asszonyok ültek, apró lányok</Line>
+<Line>söpörték és öntözték a földet. Kocsi-</Line>
+<Line>keréknek nyoma se látszott.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>Sajátos növényvilág tenyészett itt. Hosszú</Line>
+<Line>szárú, kürt alakú virágok, amelyek szirmai</Line>
+<Line>mintha fekete bársonyból volnának. A sarok-</Line>
+<Line>ban liliombokor, óriási kelyh? fehér lilio-</Line>
+<Line>mokkal megrakodva. Mindenütt elszórva ala-</Line>
+<Line>csony, vékony szárú fehér virágok, amelyek-</Line>
+<Line>nek egy szirma, csak egy szirma, gyenge</Line>
+<Line>piros színű volt. Úgy tetszett, hogy ezek</Line>
+<Line>bocsátják azt az ismeretlen, édes illatot,</Line>
+<Line>amelyet szagolva az ember azt hiszi, elakad</Line>
+<Line>a lélegzete. A kert közepén egy csomó bíbor-</Line>
+<Line>piros, kövér virág terpeszkedett. Húsos,</Line>
+<Line>selymes fényű szirmaik hosszan lógtak le </Line>
+<Line>egészen a magasra n?tt haragoszöld színű</Line>
+<Line>főbe. Mint egy kaleidoszkóp, úgy hatott</Line>
+<Line>ez a kis csodakert. Közvetlen előttem a</Line>
+<Line>nőszirom lila virágai nyíltak. Százféle</Line>
+<Line>virágillat tevődött össze a bódító szagában,</Line>
+<Line>s a szivárvány minden színét megtalálhattad</Line>
+<Line>a virágok színében.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>Elmondom önöknek, hogy miért, bár ha csak</Line>
+<Line>ráemlékszem is a dologra, reszkető félelem</Line>
+<Line>fog el, a gyomrom rémületes undorban vonaglik,</Line>
+<Line>a szemeim előtt és a torkomon hideg, nedves</Line>
+<Line>varangyok mászkálnak, a füleimben egy béka-</Line>
+<Line>nyálszagú hang vartyog, és gerincoszlopomban</Line>
+<Line>görcsös, jéghideg iszonyat szaladgál. És én</Line>
+<Line>ma éjjel nem fogok aludni. Mégis elmondom,</Line>
+<Line>hogy miért iszonyodom a kicsiny békától,</Line>
+<Line>miért merednek meg az izmaim halálos izga-</Line>
+<Line>lomban, amikor két békaszem pislogó, rohadt</Line>
+<Line>fényét látom a múltból az agyvelőmbe világolni.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>Azon a napon, amikor a Linuxot valaki más</Line>
+<Line>jobban tudja szolgálni -- az FSF egy termé-</Line>
+<Line>szetes alternatíva --, félreállok. Nem gon-</Line>
+<Line>dolom, hogy emiatt valakinek aggódni kel-</Line>
+<Line>lene, és nem is gondolom, hogy ez a közel-</Line>
+<Line>jövőben bekövetkezik. Szeretek a Linuxszal</Line>
+<Line>foglalkozni, még ha ez egy kis munkával</Line>
+<Line>jár is, és még senkitől sem kaptam panaszt.</Line>
+<Line>Csak néhány, majdhogynem szégyenlős emlé-</Line>
+<Line>keztetőt arról, hogy egy foltot elfelejtet-</Line>
+<Line>tem, vagy nem vettem figyelembe, de eddig</Line>
+<Line>semmi negatívot.</Line>
+<Line>Ne vegyétek úgy a fentieket, hogy azon a</Line>
+<Line>napon, amikor valaki ellenkezik, abbahagyom</Line>
+<Line>elég keményfejű vagyok. Lasu, aki ezt a vállam</Line>
+<Line>felett olvassa, megjegyezte, hogy a FAfejű</Line>
+<Line>közelebb van az igazsághoz egy kis mocsko-</Line>
+<Line>lódáshoz. Ha nem lennék az, abbahagytam volna</Line>
+<Line>a Linux fejlesztését, amikor a comp.os.minix-en</Line>
+<Line>nevetségessé tettek. Csak arra gondoltam, hogy</Line>
+<Line>bár a Linux eddig az én gyermekem volt, nem</Line>
+<Line>akarok útban lenni, ha az emberek jobbat</Line>
+<Line>szeretnének csinálni.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>Volt idő amikor az ember teljes életet tudott élni</Line>
+<Line>számítógép nélkül. Sokan azt hiszik ez ma már lehetetlen,</Line>
+<Line>mert a számítógép annyira hétköznapjaink eszközeivé vált.</Line>
+<Line>Arról beszélnek, hogy ma információs társadalomban élünk,</Line>
+<Line>és nem látják, hogy sokan élnek -- többek között vidéken --</Line>
+<Line>úgy, hogy sosem láttak még számítógépet és mégis boldogak.</Line>
+<Line>Civilizációnak és fejlődésnek titulálják a technika</Line>
+<Line>és a tudomány által létrehozott eszközöket, miközben </Line>
+<Line>nem vesszük észre, hogy mekkor tömegű hulladék termeléssel</Line>
+<Line>jár mindez. Ez a hulladék pedig nem is akármilyen. </Line>
+<Line>Évezredek alatt sem tünnek el az életünkből, és csak</Line>
+<Line>gyűlnek meg gyűlnek. Nagy szemétlerakok épülnek, majd</Line>
+<Line>beföldelik őket, és újabbakat nyitnak. Unokáinknak már</Line>
+<Line>nem lesz egy talpalattnyi helye sem szemét nélkül. </Line>
+<Line>Az ember egy olyan állatfaj amely hiába látja szörnyű</Line>
+<Line>jövőjét, ahhoz, hogy cselekvésig eljusson át kell </Line>
+<Line>élnie szörnyű bukását, tévedését.</Line>
+<Line>Milyen szép lehet egy nap amikor nem egy szobában vagy</Line>
+<Line>irádában töltöm számítógép előtt az időmet, hanem </Line>
+<Line>felmegyek egy hegyre, és az erdőben sétálok. Hallgatom </Line>
+<Line>amint csiripelnek a madarak, érzem a fák és a leveleik</Line>
+<Line>illatát. Látom amint a nap megvilágítja a közelben</Line>
+<Line>lévő tisztást, és aranyba borítja az ott növő növényeket.</Line>
+<Line>Érzem a lábaimban az izmok enyhe fáradságát, a tüdömben</Line>
+<Line>a friss levegő be és kiáramlását. </Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>A harmadrangú külvárosi kávéházban - ahová egy</Line>
+<Line>időben jártam - kezdettől fogva feltűnt nekem a</Line>
+<Line>sebész. Állandóan fekete, zöldre kopott, de tiszta</Line>
+<Line>szalonkabátot viselt. Sápadt arcához különösen illett</Line>
+<Line>a kuszált, őszbe vegyülő gesztenyeszín bajsza és nagy,</Line>
+<Line>mély fekvésű, fekete szemei. Ezekben a szemekben -</Line>
+<Line>mintha mindig könnyesek lettek volna - valami éjszakás,</Line>
+<Line>bohém csillogás volt. Csendesen, csaknem suttogva</Line>
+<Line>beszélt, amint az orvosok szoktak a konzíliumokon.</Line>
+<Line>A leglényegtelenebb beszélgetéseknél is, amelyeket a</Line>
+<Line>kávéházi vendégekkel az újságok tartalma felől</Line>
+<Line>folytatott, mélyen belenézett annak a szemébe, akivel</Line>
+<Line>beszélt. Mintha nagyon érdekelte volna őt az illető.</Line>
+<Line>A véleményét mindig olyan tökéletes, értelmes</Line>
+<Line>mondatokban mondta el, mintha a betegének adná ki</Line>
+<Line>rendeléseit. Ennek a kopott embernek nemes eleganciája</Line>
+<Line>olyanféleképpen hatott rám, mint a fakó, de igen finom</Line>
+<Line>bársonyszövetek, amelyeket ódon f?nemesi kastélyokban láttam.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>Egyszer meghallotta, amikor egy orvosi lapot kértem.</Line>
+<Line>Megszólított. Dícsérte az orvosi foglalkozást,</Line>
+<Line>kérdezősködött az egyetemről. Elbeszélgettünk,</Line>
+<Line>és eközben nagy tudást árult el. Különösen feltűnt</Line>
+<Line>néhány pszichofizikai dolog, amelyet sehol se</Line>
+<Line>olvastam. Nagyon lebilincselt az az éles elméjű és</Line>
+<Line>fantáziára hajló aprólékossága, amellyel igen</Line>
+<Line>jelentéktelen dolgokról is nagy érdekl?déssel</Line>
+<Line>beszélt. Bámultam, hogy mennyire számolni tud a</Line>
+<Line>körülményekkel, menyire megalkuszik az élettel,</Line>
+<Line>és hogy mennyire jól érzi magát benne. De hamarosan</Line>
+<Line>elbúcsúztunk a délutáni feketekávé után.</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>4444 7777 4444 7777 4444 7777 4444 7777 4444 7777</Line>
+<Line>4477 4477 4477 4477 4477 4477 4477 4477 4477 4477</Line>
+<Line>7744 7744 7744 7744 7744 7744 7744 7744 7744 7744</Line>
+<Line>7474 7474 7474 7474 7474 7474 7474 7474 7474 7474</Line>
+<Line>4747 4747 4747 4747 4747 4747 4747 4747 4747 4747</Line>
+<Line>47 74 47 74 47 74 47 74 47 74 47 74 47 74 47 74</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>3333 8888 3333 8888 3333 8888 3333 8888 3333 8888 </Line>
+<Line>3388 3388 3388 3388 3388 3388 3388 3388 3388 3388</Line>
+<Line>8833 8833 8833 8833 8833 8833 8833 8833 8833 8833</Line>
+<Line>8383 8383 8383 8383 8383 8383 8383 8383 8383 8383</Line>
+<Line>3838 3838 3838 3838 3838 3838 3838 3838 3838 3838</Line>
+<Line>38 83 38 83 38 83 38 83 38 83 38 83 38 83 38 83</Line>
+<Line>4378 3487 4378 3487 4378 3487 4378 3487 4378 3487</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>2222 9999 2222 9999 2222 9999 2222 9999 2222 9999</Line>
+<Line>9999 2222 9999 2222 9999 2222 9999 2222 9999 2222</Line>
+<Line>2299 2299 2299 2299 2299 2299 2299 2299 2299 2299</Line>
+<Line>9922 9922 9922 9922 9922 9922 9922 9922 9922 9922</Line>
+<Line>9229 2992 9229 2992 9229 2992 9229 2992 9229 2992</Line>
+<Line>432789 234789 987432 432789 234789 987432 987432</Line>
+<Line>2748293 2748293 2748293 2748293 2748293 2748293</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>1111 0000 1111 0000 1111 0000 1111 0000 1111</Line>
+<Line>0000 1111 0000 1111 0000 1111 0000 1111 0000</Line>
+<Line>1100 1100 1100 1100 1100 1100 1100 1100 1100</Line>
+<Line>0011 0011 0011 0011 0011 0011 0011 0011 0011</Line>
+<Line>01234789 01234789 01234789 01234789 01234789</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>5555 7777 5555 7777 5555 7777 5555 7777 5555</Line>
+<Line>7777 5555 7777 5555 7777 5555 7777 5555 7777</Line>
+<Line>5577 7755 5577 7755 5577 7755 5577 7755 5577</Line>
+<Line>55 77 55 77 55 77 55 77 55 77 55 77 55 77 55</Line>
+<Line>0123456789 0123456789 0123456789 0123456789</Line>
+<Line>9876543210 9876543210 9876543210 9876543210</Line>
+<Line>2004.05.23 1998.07.31 1516.11.25 1848.02.15 </Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>!!!! ==== !!!! ==== !!!! ==== !!!! ==== !!!!</Line>
+<Line>==== !!!! ==== !!!! ==== !!!! ==== !!!! ====</Line>
+<Line>!!== !!== !!== !!== !!== !!== !!== !!== !!==</Line>
+<Line>==!! ==!! ==!! ==!! ==!! ==!! ==!! ==!! ==!!</Line>
+<Line>!=!= !=!= !=!= !=!= !=!= !=!= !=!= !=!= !=!=</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>++++ (((( ++++ (((( ++++ (((( ++++ (((( ++++</Line>
+<Line>(((( ++++ (((( ++++ (((( ++++ (((( ++++ ((((</Line>
+<Line>++(( ++(( ++(( ++(( ++(( ++(( ++(( ++(( ++((</Line>
+<Line>((++ ((++ ((++ ((++ ((++ ((++ ((++ ((++ ((++</Line>
+<Line>(+(+ +(+( (+(+ +(+( (+(+ +(+( (+(+ +(+( (+(+</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>"""" )))) """" )))) """" )))) """" )))) """"</Line>
+<Line>)))) """" )))) """" )))) """" )))) """" ))))</Line>
+<Line>"")) "")) "")) "")) "")) "")) "")) "")) ""))</Line>
+<Line>))"" ))"" ))"" ))"" ))"" ))"" ))"" ))"" ))""</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>'''' %%%% //// '''' %%%% //// '''' %%%% ////</Line>
+<Line>//// %%%% '''' //// %%%% '''' //// %%%% '''' </Line>
+<Line>/%1/ /%1/ /%1/ /%1/ /%1/ /%1/ /%1/ /%1/ /%1/</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>[[[[ ]]]] $$$$ [[[[ ]]]] $$$$ [[[[ ]]]] $$$$</Line>
+<Line>]]]] [[[[ $$$$ ]]]] [[[[ $$$$ ]]]] [[[[ $$$$</Line>
+<Line>[[$$]] [[$$]] [[$$]] [[$$]] [[$$]] [[$$]]</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>@@@@ {{{{ }}}} @@@@ {{{{ }}}} @@@@ {{{{ }}}}</Line>
+<Line>{{{{ }}}} @@@@ {{{{ }}}} @@@@ {{{{ }}}} @@@@</Line>
+<Line>{{@@}} {{@@}} {{@@}} {{@@}} {{@@}} {{@@}}</Line>
+</Level>
+
+<Level>
+
+<NewCharacters>Ez-az</NewCharacters>
+<Line>**** ```` ~~~~ **** ```` ~~~~ **** ```` ~~~~</Line>
+<Line>```` **** ~~~~ ```` **** ~~~~ ```` **** ~~~~</Line>
+<Line>``**~~ ``**~~ ``**~~ ``**~~ ``**~~ ``**~~ </Line>
+</Level>
+
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/hungarian_expert.ktouch.xml b/ktouch/training/hungarian_expert.ktouch.xml
new file mode 100644
index 00000000..9b5e3d3f
--- /dev/null
+++ b/ktouch/training/hungarian_expert.ktouch.xml
@@ -0,0 +1,932 @@
+<KTouchLecture>
+ <Title>Hungarian (auto-generated)</Title>
+ <Comment>KTouch training file generated Tue Aug 30 23:23:54 2005.
+Perl Script written by Steinar Theigmann &amp; Hĺvard Frřiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>f j fjf jj j f fjf j j jj jj jj jj jj j f jj jj ff ff jj f jj</Line>
+ <Line>fjf fjf ff ff f jf jj fjf ff j f ffjf ff j ff jjf fjf ff fjf jj</Line>
+ <Line>ff jj ff jj jj jf f jf jj jj jj jf f jjf jfjj jf jj jf f jj fjf</Line>
+ <Line>ff jfjj jj f j jjf ff jf jj fjf f jj jjf jf fjf ffjf j jf jj fjf</Line>
+ <Line>f ff jf fjf jj jjf jf f j fjf fjf f j ff jf fjf j f ff j jjf jfjj</Line>
+ <Line>j jf ff f jfjj jj jj jjf f jjf ff ff f j jjf jjf ffj j j fjf jj</Line>
+ <Line>f f ffj f fjf jj fjf f jjf f jj j j jjf fjf j ff ff ffj j jfjj</Line>
+ <Line>jj j j fjf f jj j ff j jf f jjf jj jjf jf fjf fjf jjf jj ff jjf</Line>
+ <Line>jj jf jfjj fjf ff j jj ffjf jf jf j jf ff jf fjf jjf jf jj jj jjf</Line>
+ <Line>fjf f j fjf jj j fjf ff jj jj j fjf fjf jj jf j jjf ff ff jj ff</Line>
+ <Line>j ff fjf jj fjf jj fjf jj ff fjf j f fjf fjf jj jj ff ff j ff</Line>
+ <Line>ff jjf jj jjf jjf fjf jf j jj jf jj fjf jj f ff j jj fjf ff fjf</Line>
+ <Line>jj jj j jj jjf jj jjf jj j ffjf fjf j ff j f jf fjf jjf jjf j jj</Line>
+ <Line>f ff ff f f ff ff jfjj jjf ff ff ff ff jj ffj fjf jjf fjf f fjf</Line>
+ <Line>fjf jj jjf j ff fjf j jj jjf jf j jj fjf jj ff jj f jjf jj jj j</Line>
+ <Line>ff jjf jj jf jf ff jj j jj fjf fjf ff ff jfjj jf f jf j j ffj jfjj</Line>
+ <Line>ff j j jjf jf jj fjf j fjf fjf j ffjf jj f jf j jj ff fjf ff fjf</Line>
+ <Line>jjf jf jj jj j ff fjf fjf ffjf j fjf jj jfjj jj jfjj j jjf ffj jj</Line>
+ <Line>ff f fjf j f ffjf fjf jj jf jj jf jj ff jj fjf jj ff fjf f jf j</Line>
+ <Line>ff j f fjf jj ffjf ff j j jf j ffj jj ff jj ffj f jj fjf jj jjf</Line>
+ <Line>jf ff jj j ffj jjf jjf j f j jjf jf ffj ff fjf j ff jj jj jf ff</Line>
+ <Line>j jjf jj ff jf jj fjf f jf jj jf ff jj f jj jj ff jj ff j jj jjf</Line>
+ <Line>jjf j j j j jj jf jj fjf fjf jj j j jj jf j jfjj f f ffjf ffj f</Line>
+ <Line>fjf fjf fjf jf jf jj f ff ffjf f jf jf j ff ff j jj f j fjf j fjf</Line>
+ <Line>fjf ff ff f jj f ff fjf fjf ff j j j jj j jjf jj jjf fjf ff jj ff</Line>
+ <Line>f fjf jj fjf jj jj jf j jj jj jjf jf j fjf f jf jf j fjf jj f</Line>
+ <Line>j ff fjf fjf j jf jj f ff f ffj f f fjf ff fjf f f j fjf jfjj</Line>
+ <Line>jj jj jj jj jj jj ff jf fjf j ffj j ff jf j jj ffjf f ff fjf jjf</Line>
+ <Line>jj jf fjf j j jjf fjf jf jj ff jj f jjf j jjf ffjf jj ff ffj j</Line>
+ <Line>jfjj jf j ff ff jj j j ff jfjj ff ffjf j ffjf j ffjf jf ff jf jf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>jd d fdd d d fk dkk k df k fdf fdk fkk kdf df jk kfk jd kd kfk</Line>
+ <Line>fkk jd jkj dk jkj kfk fk fk dkd dk d d kdf df dd kfk k df kkjd fdd</Line>
+ <Line>kd d k fk kfk k k kd k dd jkj kdf df dk fdf dkk jk kdf k dk dkd</Line>
+ <Line>fdd d fk dk kkjd kfk jd d dkd jd k dfj jd k k fk dk kfk k d dkd</Line>
+ <Line>d dfj kfk df kfk df d dk dk df dd k kd jk fdf kd d fk fk fk kkfk</Line>
+ <Line>kkjd d kdf fdk d jk df d dkd dk k kfk dk dd kfk dk kkfk kd d df dk</Line>
+ <Line>k jkj d d fkk dk d k jkj d dkk kd kfk d dkk dk jd k df jd df dfj</Line>
+ <Line>d fdk k k dkd d fk jd jk fk kkjd d dkk k fk jkj fk d d dkk dk</Line>
+ <Line>d kdf dfj df df df fk k kdf dkk jkj k d d d df k k dkk kkfk dfj</Line>
+ <Line>k d fk k fdk kkfk k fk kkfk d fkk d kkjd fk jk dkk fkk d d dk</Line>
+ <Line>jd kd fdd k fdd k jk k dk dd fk k jd kkfk kdf d fdf k dkd dk fdk</Line>
+ <Line>d dkk d jd d d kkfk d dkd d fdf k dk kdf kfk dkk k dd d kd df</Line>
+ <Line>k jd fk kkfk kkfk kkfk d jk df k dkk d kd fkk df dkk kd kd jd</Line>
+ <Line>fk k dkk d k d jd dfj fkk kdf d jd df fdf jk kd k fk df d jkj k</Line>
+ <Line>dfj k kd kfk fdd d k kfk dkk jkj d jd fkk dkd d fdd dkk kdf fkk</Line>
+ <Line>dkk kkjd d kkfk k df fk fdf kkfk dfj kkfk kkfk df dkk dkk kdf d</Line>
+ <Line>k fk jd df df kdf jkj d k fdk kkfk d d jk df d df d df k dkk kd</Line>
+ <Line>fdk dkd dkk kkfk d kd fdf fk fkk fkk fk k d dkd fdf fk fdf df fk</Line>
+ <Line>df jkj kkjd kfk d d df dkd jd fdk kkjd fdd d fk kkjd jkj k dd fdk</Line>
+ <Line>jd fk df d fdk d jkj kdf kfk d fk dfj dkd fdd kdf k dkk fk fk kfk</Line>
+ <Line>dd kfk fkk k jk dd jd dfj dkk fdf kkfk k d jd kfk jd fk d fdd d</Line>
+ <Line>d d fdk d jd jk df dk kkjd kkfk d dd fk dk fdd fk df d fdd k dkk</Line>
+ <Line>dkd fkk fdd dd dk fk kd k fk fk kfk jkj fdk kkfk d d dkk d dk k</Line>
+ <Line>dd fdf k kkfk dk d jkj jd k fkk k kdf kdf fdk k kfk fkk kkjd dfj</Line>
+ <Line>d fk d d d d fk fk k df d jd d dd kkfk df k kfk fkk jd dkd kkfk</Line>
+ <Line>dk d jkj fk d dk k fkk d dkk jk d d k jk kd fk kdf dk dk d dk k</Line>
+ <Line>fkk kkjd kkfk dfj k fkk k dk fkk k k jk kkfk fdf jkj k d fk dfj</Line>
+ <Line>fdk k fdd d jd kd jk dkk fdk d df k k fdf fdk fdd d k df kd fdf</Line>
+ <Line>dk dfj kd kd df kd kd kfk jd df fk kkfk jd jd d k k fk fdk dk dkk</Line>
+ <Line>kdf k jkj d kd df fk k fdd dkk kkjd fk dk d dd fkk k kkjd df k fdd</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>sfl jsdd ljl lf dl skd s fsj sl sd lj flf lf sd fl lj lj kljf s</Line>
+ <Line>s fsj l lf ds jsdd ds fl s sd l lj skd dflj l s fl kfsk s dl sfl</Line>
+ <Line>l sd ds jsdd lf fl lsl dl jsdd sd sfl s ls skd lj ljl kljf ls</Line>
+ <Line>sl ksf fl dl sl jsdd sfl ds sk sd sd fl l sl lj ls sd ds dl lf</Line>
+ <Line>ds l l ljl l sl flf s lj ds jsdd fsj jsdd ljl kfsk dflj lj flf</Line>
+ <Line>lf ljl flf dflj dl sk lf ljl l dl lsl dl dl ljl kljf l fsj ljl</Line>
+ <Line>lj flf jsdd dl lj fsj lf l dl lf lsl s dflj s kfsk lf ksf lsl dl</Line>
+ <Line>ljl skd l ls kfsk dflj fl lj sfl sl kfsk dflj kss ls lj dflj dl</Line>
+ <Line>sd jsdd sl ljl kfsk ds flf jsdd lf ls sk s sl lf lsl fsj lsl kljf</Line>
+ <Line>dl kljf kss s dl ls dl l s flf l sd kljf skd jsdd s dl ksf kss</Line>
+ <Line>kfsk s fl fl dflj sd s ls flf sl sfl fsj lf dl kfsk lf ksf ds kfsk</Line>
+ <Line>skd sk sd jsdd ksf kfsk lsl sfl lf lj ljl ls jsdd l sd ksf lj fl</Line>
+ <Line>lj lj flf skd kfsk sl ksf jsdd jsdd jsdd ls dflj dl flf ls sk fl</Line>
+ <Line>kljf skd dl lj l ds sd lsl dflj l s sd fl l s sfl sfl sk s sl l lj</Line>
+ <Line>lj dl ksf dl l ds kljf sl l flf dl fl dl l jsdd jsdd s dl sd fl</Line>
+ <Line>skd flf ksf ksf sfl lj sl s dflj s flf fsj ksf l ds dflj kss ksf</Line>
+ <Line>lj l ljl dl lsl s jsdd ds s kfsk lj sl lj l lf flf kss skd sd lf</Line>
+ <Line>kss l ds lsl lj skd sl ksf s l kss sl sfl sd dl sl s lf l l sd kfsk</Line>
+ <Line>ksf ksf kss flf sd kss dl l jsdd lj s dl lf l lsl ls l lsl ds sd</Line>
+ <Line>dl kfsk lsl fsj dl l sl fsj ls sd lj sfl kljf dflj dl flf kljf</Line>
+ <Line>ksf sl sd kfsk s kfsk kfsk sl lf ds s fl lj sk kfsk l ljl lf sl</Line>
+ <Line>lj ksf lsl dflj dflj s dflj kljf kfsk sl dflj sl lj kfsk l jsdd</Line>
+ <Line>kljf kss s sd dl lj kljf sk lf sl lj sd ljl sfl ds ls sl sl l sfl</Line>
+ <Line>ls lj s ls kss lf dl kss ls ls sd sfl lj ds s dflj flf ksf fl s</Line>
+ <Line>dl kfsk ls sfl kljf lf kljf lj dl sd dl sfl skd l dl lf jsdd sfl</Line>
+ <Line>skd ksf fl sd ljl fl fsj lj l ljl lj fl dl s fsj l skd ls sd kfsk</Line>
+ <Line>kljf lj dl sd dl ds sl sd lj l ds dflj ds sd kfsk s ljl flf sfl sl</Line>
+ <Line>ksf kss l dl dflj jsdd sl dl dl sl l lsl sk kfsk ds sd l ls dl kfsk</Line>
+ <Line>sk ljl kss lsl dflj dl lj fl s ksf kfsk jsdd skd fsj s lf skd fl</Line>
+ <Line>kfsk sfl sd ds sl lsl fl ls kfsk sl fl l fl lsl lj lj sd lj kfsk</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ca</NewCharacters>
+ <Line>kcja slad assal rasa csak ajjaj kcal slad kjldc cdj sa c aj ja assal</Line>
+ <Line>rasa a rad kcal cal laka rasa cs ja ja cs laka csak lafk ajjaj rasa</Line>
+ <Line>laka assal kcal rasa cs cs kcja ckds a rasa cl ajjaj laka a a lafk</Line>
+ <Line>css a cfc ajjaj lafk a sa lafk csak fa slad laka jaj laka lafk laka</Line>
+ <Line>slad cfc css cl ajjaj aj a assal rasa a kcal cl ajjaj kcja ca cal</Line>
+ <Line>ca a aj kcja kcja cal aj kcal css kcja jaj css ckds laka css rasa</Line>
+ <Line>assal aj kjldc ca css kjldc lafk kjldc laka a jaj cs cal a cs a cs</Line>
+ <Line>ja a cal fa ja jaj jaj cs cal jaj cs css laka cs laka assal lafk</Line>
+ <Line>kjldc kcja a assal sa aj ca kcal cal cdj c jaj ja ca cfc a sa a ca</Line>
+ <Line>cdj a kcal css a jaj laka a rad a lafk fa kjldc sa cal ajjaj ca</Line>
+ <Line>jaj cs a kjldc ca lafk a rasa ajjaj ca a aj kcal a ckds cdj dlaj</Line>
+ <Line>kcal a slad rasa kjldc cdj ckds a slad rad csak laka cfc kjldc assal</Line>
+ <Line>ca a ckds sa kcal a fa laka c a assal fa css fa fa aj cs sa a a</Line>
+ <Line>slad ckds css ca jaj fa jaj a kcal slad cfc ja cfc a slad cal laka</Line>
+ <Line>css csak kcja ajjaj cs dlaj cfc csak cl ja ja rasa a lafk ja cdj</Line>
+ <Line>csak kcja kcja ja kcal cs cfc ja kjldc cl cs c jaj kcja cs cal sa</Line>
+ <Line>css c css a aj aj ajjaj cl ajjaj ja a ca a kjldc fa a fa cfc cal</Line>
+ <Line>kjldc css kjldc kcal cfc aj cfc dlaj rasa a slad kjldc kjldc cfc cfc</Line>
+ <Line>laka laka css kjldc laka css fa kjldc cal cal kcal ckds cs cfc css</Line>
+ <Line>kjldc laka kjldc cfc assal csak cal ja cl a a a a csak a kcja csak</Line>
+ <Line>sa cs laka kjldc slad jaj rasa csak cfc rad dlaj rad aj laka jaj</Line>
+ <Line>ajjaj a csak fa ckds rad aj rasa assal aj laka c slad cal fa a fa</Line>
+ <Line>a cdj slad sa sa sa ckds rasa ajjaj ajjaj cl rasa csak a kcja</Line>
+ <Line>cal lafk sa kjldc cal cfc rad rasa lafk cdj a a assal ja fa rad</Line>
+ <Line>sa a aj aj ca kjldc cl css ckds rad cfc kjldc rasa kcal a aj csak</Line>
+ <Line>ja assal cal a jaj ca sa a rad kjldc kcal a a rad slad jaj laka</Line>
+ <Line>cal dlaj laka kcja cal kcja a css aj ckds cl c ja cs cfc cdj a a</Line>
+ <Line>ckds ckds dlaj ja c sa fa cal kjldc rad a css ckds kcja cl lafk jaj</Line>
+ <Line>a cal fa kcal fa a kjldc cl a cs fa jaj laka cs kcja kcal cfc</Line>
+ <Line>kcal a fa fa a a ja ca a cl lafk ckds cl kcal ajjaj fa ckds fa ca</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>alatta nana alattad annak dkt rajta taj tc ts t atd rajta rajtad akn</Line>
+ <Line>ln tl alatta katlana na csatt lassan alattad ln jna rajta taj taj</Line>
+ <Line>taj katlana n rajtad dndnc n dkt n katlana rajtad kattantsa rajtad</Line>
+ <Line>rajta atd dndnc alatt ln annak n na atd alattad adsn nana annak sajna</Line>
+ <Line>ln annak jna lassan annak na dndnc t rajta akn nana t t ts t alatt</Line>
+ <Line>alatt nana ljst ljst sajna jna annak taj ln dndnc nana dkt kattantsa</Line>
+ <Line>dkt tl na dndnc sajna n rajtad dndnc csatt annak rajta dndnc adsn</Line>
+ <Line>kattantsa adsn tl kattantsa tl kattantsa ts jna csatt alatt nd sajna lassan</Line>
+ <Line>lassan alatt jna ljst n alatt na annak jna lassan akn atd t csatt alatt</Line>
+ <Line>csatt alatta annak nana nana adsn alatt nana ln nana kattantsa csatt</Line>
+ <Line>nana tc n rajta taj katlana alatta ljst alatt kattantsa taj dkt kattantsa</Line>
+ <Line>alatt rajtad n t tc atd alatta n alattad n alatt jna alattad na n</Line>
+ <Line>rajta akn akn alatt kattantsa nana alattad nd adsn alatt t atd alatt</Line>
+ <Line>akn alatt n rajtad annak ts katlana rajtad alatt sajna alatta ts</Line>
+ <Line>na nana t katlana dndnc n dndnc rajtad taj alattad nana na ljst</Line>
+ <Line>kattantsa akn nana taj tc n n t alatt ts rajtad taj n lassan rajtad dndnc</Line>
+ <Line>sajna nana akn tc tl t n atd atd alatt na rajtad nana katlana alattad</Line>
+ <Line>alattad n alatta csatt ljst rajtad nd alattad kattantsa nd ts tc ljst</Line>
+ <Line>dndnc n atd ln sajna dkt alatta atd n ljst kattantsa alattad csatt</Line>
+ <Line>sajna na tc katlana atd annak n akn dndnc tc kattantsa ts kattantsa</Line>
+ <Line>tl rajta tc rajta sajna csatt nana kattantsa rajtad adsn akn ljst</Line>
+ <Line>tl katlana dndnc annak rajtad taj n rajta n atd rajta tc csatt</Line>
+ <Line>tc alatt ts nana akn n sajna na csatt n rajtad rajta ln nd rajta</Line>
+ <Line>atd katlana atd alatt ljst alatt alatt alattad ljst adsn tc rajta</Line>
+ <Line>adsn n sajna annak annak ts katlana dkt alattad rajtad nana taj ljst</Line>
+ <Line>dndnc kattantsa akn katlana tl alatt dkt ln na katlana sajna atd ts</Line>
+ <Line>akn atd n taj atd atd lassan dndnc ts na sajna ln sajna alatta jna</Line>
+ <Line>alatta jna sajna ts rajtad akn ts alattad sajna ljst t alatt nd n taj</Line>
+ <Line>ts lassan dndnc taj annak jna annak katlana rajtad n adsn sajna</Line>
+ <Line>lassan katlana rajtad adsn t rajta t nd ln alatt sajna lassan akn katlana</Line>
+ </Level>
+ <Level>
+ <NewCharacters>éi</NewCharacters>
+ <Line>kisfiadékat alattit fiainkat é illatja ni ifjan nini fiainkat is nénjét</Line>
+ <Line>kissé né nékik é fiakat kisfiait fiaidat kissé akként alakit ti tanit</Line>
+ <Line>kiskés alattit sandit kandiak kiskésit csakis ifjait infantilisan kisfiaidat</Line>
+ <Line>néki kinn fiaidat indit ifjaikat kisfiaidat nincs kisfiainkat csitt</Line>
+ <Line>aléltan sincs kilétét kékit indit illatja kintit kintit kétli ajtajait</Line>
+ <Line>sincs illa kétli akként ékit kiskésit kétlik é fiakat illatja ifjat</Line>
+ <Line>ifjan ti tanit lassanként sandit alakit kisfiait kisfiait kicsit kétlik</Line>
+ <Line>néki nékik kétli kint jé sincs fiakat idén alakit kinn nénjét kisfiadat</Line>
+ <Line>innét ajtajaikat fiaidat ajtajaikat kicsit itt is délit kilétét illatja</Line>
+ <Line>nincs fiait kicsit ifjat kisfiadékat kisfiadat ékit ifjait alattiakat</Line>
+ <Line>kétli fait télit lassanként indit kiskés fiainkat ifjat ékit fiakat</Line>
+ <Line>fiainkat jé ajtajaikat csakis ajtajaikat télit ifjakat kisfiadékat aléltan</Line>
+ <Line>és innét illatja és ajtajaikat kissé sin sincs itt kisfiadat fiakat</Line>
+ <Line>i kétlik indit kékit kisfiait kiskés akként kétlik innét délit</Line>
+ <Line>télit lassanként ifjait és i fiadékat nincs kinn innét tanit ifjainkat</Line>
+ <Line>i is innét aljit falit kisfiaidat ajtajaikat ajtajaikat akként</Line>
+ <Line>ifjait nincs ajtajait kicsit é ti fait kint aléltan lassanként ajtajait</Line>
+ <Line>kisfiainkat falit kisfiaikat néki alakit fait alias fait alattiakat kinn</Line>
+ <Line>akként jé kisfiaidat és innét kissé csitt kintit akként télit kisfiaidat</Line>
+ <Line>i tanit illa alias fiadat ifjaikat fiadékat fiakat sin kintit</Line>
+ <Line>fait fiainkat nénjét kétli sincs kétli aléltan csitt nini lassanként</Line>
+ <Line>idén nénjét innét falit é ajtajait ifjaikat ékit fiakat fiadat ifjan</Line>
+ <Line>indit indit ajtajaikat ifjat nénjét alias ni nénjét ajtajait illatja</Line>
+ <Line>kissé itt ifjait kinn alias kiskésit és kisfiadékat nékik kétlik kisfiait</Line>
+ <Line>indit kiskés né kétli alattit fait indit néki jé aléltan fait nénjét</Line>
+ <Line>fiaikat csitt illa fiadékat fiadékat lassanként kissé i tanit kiskésit</Line>
+ <Line>kinn itt fiait infantilisan kisfiaikat ajtajaikat i kilétét sin nénét</Line>
+ <Line>ni kisfiadékat nékik ti kisfiadat innét nénjét kinn sincs infantilisan</Line>
+ <Line>kisfiadékat kékit jé nénjét i tanit alattit nincs ifjan kisfiadat nénét</Line>
+ <Line>fait sicc is nénét ajtajait fait is fait csitt fiakat nékik kintit</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ve</NewCharacters>
+ <Line>félévenként vakit teljét fel idefenn tiédet kétlenie reccs eleinket lenn</Line>
+ <Line>se néked vele kétlette lettél vasit kétévenként kellenek tiedet</Line>
+ <Line>eleiteket kifejletté sincsen ellent kilencvenkilencfelé kevesen evettel</Line>
+ <Line>kellek tefeléd kellek teveled kevéssé felénk kilencévente ne ellened</Line>
+ <Line>éjjelente lennének le kettejét lenn kétletted kevesen efelett kétlené</Line>
+ <Line>esettel kétlenéd kilencedfél ellened recece évenként lennetek kivan</Line>
+ <Line>tente lennének tenéked kellett kiléteteket kellenek teellened kétlenie</Line>
+ <Line>kilencévente kevesli evettel e afelé kétleni kellettek levet fentit kétlenék</Line>
+ <Line>kétlettétek teljét idefel eleinket keveslene kilencvenévenként teneked kétlettétek</Line>
+ <Line>nincsen telente tiveletek kelleténél nejét elé fenn vice tv keveslitek</Line>
+ <Line>tivéletek nejeit vala kivannak lennének ellent kétletted ne ketté cselekedettel</Line>
+ <Line>kellenek rétese tivéletek eleiket kellenek félévente kellene nejét elsejét</Line>
+ <Line>tekintettel lenned esettel tavit tiellenetek jade léleken teveled idefel</Line>
+ <Line>reccs csendit kéne tekintetté eleit veletek veled velejét lettetek</Line>
+ <Line>kintieket kétleni kéne kellenél keveslened elejét tiellenetek idefenn</Line>
+ <Line>lentit fennen kevesen tekintetté kenekedtek kétletted vala csendesit</Line>
+ <Line>fennen ide istenveledet kellenénk nincsenek rétese kellenél lentit</Line>
+ <Line>kelleni lenn késeiek avval neki kétlenétek esetenkénti kétlitek tiveletek</Line>
+ <Line>kétlenéd lennénk keveslenie kellenél cselekedettel feléd ej cselekedetté</Line>
+ <Line>el ellene neked levelit tiéteket kétlenék eleidet kevesli telente</Line>
+ <Line>fennen elejét feletted elsejét avval veled innen kenekedtek idefel</Line>
+ <Line>tiveletek tekintetté elénk reteken kétlened éjjelente kettejét rétese</Line>
+ <Line>lékje kétlenetek avval evviva kenekedik kilencvenfelé kivéve kétlenék</Line>
+ <Line>kifejlettel csaléteken tieiteket ranettel teljét keveslenénk teveled tefeléd</Line>
+ <Line>reccs kétévente afelett kiléteteket kétlenénk ellened lent levet tiedet</Line>
+ <Line>levelit jelet sec félévente kilencvenetfelé kenekedik vidit ellened</Line>
+ <Line>lettetek félévente évenként nektek kvittek véletek sincsenek cselekedetté</Line>
+ <Line>nénjeit kétlené kevesli annalessé véteken kilencedfél éjente kilencvenévenként</Line>
+ <Line>kelleténél idefelé késeiek idelent tavit tiédet kevesen elénk felett veletek</Line>
+ <Line>nincsenek keveslettétek kétleni tetejét ellentestek léleken eleidet itten</Line>
+ </Level>
+ <Level>
+ <NewCharacters>mh</NewCharacters>
+ <Line>kéthetenként valaha fejedelemen félhetente kilétemet hatévente missé kisfiaimat</Line>
+ <Line>valamint ihaj kevesleném hetvenhétfelé kevesleném nejeimet hiedelemen</Line>
+ <Line>héthetenként heli velem hatvanévenként ellenem miattam ejhaj hajdan kisfiamat</Line>
+ <Line>mecsetje vajmi missé elvénhedt hajdan lennem nemcsak miénket hej rejtelemen</Line>
+ <Line>emellett elhallik kelmed mintha ficamit kétlem énmellettem kilencvenhetenként</Line>
+ <Line>hah fiaimat semmisem kihalta mindannak hetvenfelé hathetente majdan</Line>
+ <Line>miattad hatvanévente méhese makettal héthetente kilencvenhétfelé félhetente</Line>
+ <Line>hetvenhetenként hetest kétlettem kehvé makettja temiattad kilencvenhetenként</Line>
+ <Line>hatvanhetente félelemen hah mellettem hanem ehetnékem amannak rejtelemen miatta</Line>
+ <Line>mint m kehhé mellette csaknem éhvel kihallik mialatt amiatt nejeimet</Line>
+ <Line>semmint alkalmasint majdcsak kilencvenhetenként imitt mindevvel mialatt</Line>
+ <Line>haséja makettja ficamit emitt almanacht miattam hajasak lennem hallik</Line>
+ <Line>héthetente hajdan emiatt m emiatt hathetenként hatvanan mellénk majdan</Line>
+ <Line>eleimet mentiek hetvenhetente ellenem hetvenkilencfelé amavval mellékneven</Line>
+ <Line>ml fiamékat mellette emide énmellém majdani majdcsak hajdanta kehhel</Line>
+ <Line>hivatva almanacht ellenem hadit miénket hatévente védelemen limessé</Line>
+ <Line>keveslenem mellet mettlachi miatti alkalmasint rekviemje kilenchetenként</Line>
+ <Line>miattad mindevvel élelemen amellett melléje mindenekfelett ama elemien</Line>
+ <Line>hatévenként havit melléje sejtelemen lm kéthetente félhetente mellette mentelemen</Line>
+ <Line>kilencvenhatfelé amint hivatva mettlachi ha emide ah imitt makettja hathetenként</Line>
+ <Line>alhatnékja temiattad vajha nemcsak ifjaimat temelletted késedelemen mellé</Line>
+ <Line>méhese majdaniak hetenként mellettit nejeimet ifjaimat kevesleném felnevelhetett</Line>
+ <Line>hatvanfelé halastavit ifjaimat ml makettja timellettetek keveslem majdani</Line>
+ <Line>amint lennem felettem kilencvenhatfelé madame kehvé hatfelé lm elmenetele</Line>
+ <Line>hatvanhetenként ejhaj eleimet mellékneven majdani nm majd énellenem felvehetett</Line>
+ <Line>mentesit majdcsak heven majdani min alhatnékja lennem mellékneven mivel</Line>
+ <Line>kilenchetenként mellétek emide temiattad kilétemet hatévenként haha énmiattam</Line>
+ <Line>havit hadd sem miénket hetvenévenként élelemen temelléd kihallik héthetenként</Line>
+ <Line>lm rejtelemen énmiattam limessé mettlachi hatvanhétfelé ihaj hetekfelé</Line>
+ <Line>hajasak kisfiamat fiamékat elmenetele menetele nm felvehetett alattam</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ro</NewCharacters>
+ <Line>jodidok carte ahova komondora halomon mocsokon cariessel mikorit érettetek</Line>
+ <Line>mivoltomat cos halottai mostanra cosec hatalomon akkoron héthavonta comtesse</Line>
+ <Line>no hajdanvolt odafenn calvadossal dalolta arrafelé érit derékit</Line>
+ <Line>hetvenhavonta koromja voltatok sakterja olefinek odalennének klorofillja hova</Line>
+ <Line>fiatokat citromleven holott lovasit rajtatok traktorosa kertesit rokonléleken</Line>
+ <Line>nofene rajtam trade narancsleven soha marokon falsarokon mellcsokoron</Line>
+ <Line>traktorosa carte vonalit akkor rétese sohse derékit csereteket oromon cirkalomon</Line>
+ <Line>teérted komondora mericskél volna villamosit melléirt sehonnan hintalovon</Line>
+ <Line>dartscal csakhamar amonnan fennhordja idestova veremen cariessel sokhavonként</Line>
+ <Line>odalennék klorofillal harmincévenként ifjaitokat ellenére fiaitokat hatvanhavonta</Line>
+ <Line>ikeren mostanra raviolija minderre krakélere férfiakat hétrét kertiek</Line>
+ <Line>monetarista teheren mindenhonnan kéthavonként timiattatok cseredet akkorra</Line>
+ <Line>volnék éretted ahol énértem elterjedhetett mikor merre monostora siralomon</Line>
+ <Line>sokévente terajtad ifjaitokat odairt érte karhatalomon tiértetek sorsot</Line>
+ <Line>harminchetente videojelet odavolna fillérje art ajakon alhatnékod amakkorra</Line>
+ <Line>facto teleirt éhomra emerre tilalomon teleholda calvadossal harmadévenként</Line>
+ <Line>kontinenset eredetté merrefelé cserekereskedelemen koktélje kiskereskedelemen</Line>
+ <Line>érettetek raviolijai sohasem diner raviolii ihatnékotok coki terajtad</Line>
+ <Line>amikorra rajta teremen olajit fiaitokat hajdanvolt ellenemre verset konform</Line>
+ <Line>odalettek sehonnaiak comtesse ahonnan stroke mistressé erdeinket fiaitokat</Line>
+ <Line>eredettel cos konstansot vederen idomit raviolii kétrét akkoron valamikorit</Line>
+ <Line>dalolta koktélje emekkorra torja mostanra sehonnét ekkori éterien fenomének</Line>
+ <Line>honnan recece anno akrilsavon ladikosa onnan amerre ellenetekre mellékvonalit</Line>
+ <Line>néhol karhatalomon hatvanhavonként honfiakat ahova alhatnékotok ihatnékom</Line>
+ <Line>kilenchavonként kéthavonként ahova kilencvenhavonként sokhavonta alhatnékod</Line>
+ <Line>jer sehonnan tonnatartalomon krotonsavon amarra éterien harmincévesforma</Line>
+ <Line>valahonnan halomon marsol mocsokon emekkorra coki lovasit amonnan énértem</Line>
+ <Line>amarra konkréten krakélere frissit forradalomon fintorit odalettem</Line>
+ <Line>koromja ikeren tialattatok kilencvenhavonta honn koromja erdeit eredetté</Line>
+ <Line>mindenesetre fékomadta sarokon vacokon kétrét raviolija honn ahol teleholda</Line>
+ </Level>
+ <Level>
+ <NewCharacters>gá</NewCharacters>
+ <Line>emeddig illojálisan meglenni igencsak lovagiaskodtak háromhavonként</Line>
+ <Line>meglenne sátora fogcsikorgatva nálamnál alkalomadtán mámorit hallatára</Line>
+ <Line>hidegétel igeneven integer image akárcsak videogenerátor rétegje sokadmagával</Line>
+ <Line>ámde meglennem hallatán mindmáig hatmilliárdan lg eleget égadta inadekvátan</Line>
+ <Line>máshová ringje koccintgat netalán rég volnánk ajakát tiirántatok meglenni</Line>
+ <Line>terád háromfelé mialánk ottjártakor látra meglennétek mégsem nemritkán</Line>
+ <Line>kelléktárit nálánál mégis meglennénk árokon sehová háromhavonta raktárit</Line>
+ <Line>magamagának máshonnét másodlata másmikor kontingenset avégett koccintgasson</Line>
+ <Line>netalán magatokforma látra lassacskán holtáiglan hátravoltatok magamaga</Line>
+ <Line>hatvanháromfelé fakéregen meglennénk lám hálaistennek másodlata némileg naivája</Line>
+ <Line>megvetettsége mindmostanáig legtetejét államkincstárit hátravoltam raktárit</Line>
+ <Line>tereád legeslegtetejét hátravolnál vállvonogatva mégiscsak ergo tarkállottak</Line>
+ <Line>háromévente megvoltak ameddig reátok ahová tárit manganátok kincstárit társit</Line>
+ <Line>ránk kvadránsan teáltalad megvoltak magát hátravoltam legeslegalját</Line>
+ <Line>annál nemritkán eladdig nálatok ideig kontingenset naivái hátit volnátok</Line>
+ <Line>vigalomon harmadjára államférfiakat ám kontingentál kontingentálja tarkállottak</Line>
+ <Line>tiirántatok forgottan kadávere hátra marginálisan koránt etnikailag reáliák</Line>
+ <Line>háromhavonta sikkantgasson eleddig megvetettsége almával ringje tinálatok</Line>
+ <Line>nemsokára mindhárman image kishatárforgalomon mindenhová háromhavonta</Line>
+ <Line>alját klorátok milliárdhavonta fennhangon ahová tarkálljanak sáncárokon</Line>
+ <Line>másvalamit virágcsokoron tealád sátoron névleg machinálja rágalomon mindenáron</Line>
+ <Line>égit rátok mostanáig kalcinálja volnál mindég akármint sikkantgat</Line>
+ <Line>villámoljon leghátra hátravolna mindig mindmostanáig tg sokadmagával ragtime</Line>
+ <Line>megvetettség nálánál mégse mégis reggelente aggodalomon mégiscsak odavolnánk</Line>
+ <Line>akkortájt lassacskán megvolnátok volnál istenáldottát nemrégen magamagának</Line>
+ <Line>általatok mindenáron méregen méltán hallatára megvetettség tájit nálatoknál</Line>
+ <Line>nohát netán nálánál legesleghátra meglennék iránta meglenned iránt</Line>
+ <Line>csillagja integráltsága dartscá hátraarcot nálatok vigalomon korrelál</Line>
+ <Line>villámoljon kvadránsot esetleg legkivált vállit nádora valahová hátravannak</Line>
+ <Line>regálé hatvanháromfelé tarkás legvégén náladnál másmikor eddigelé már</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>polaroid legesleghamarábbit legesleglentebb sipogjanak leglassabbikat</Line>
+ <Line>camembert hetvennaponként beh legeslegbátrabbikat ropi pamfletja legeslegkevesebbet</Line>
+ <Line>bent bele legeslegderekabbikat továbbá alább verébfiakat lassabbakat</Line>
+ <Line>emerébb távolabb akképp stampedlije legesleglentebbit bátoron lopdossa</Line>
+ <Line>betegit legesleghamarább projektora billiomod legtovább legbeljebbieket</Line>
+ <Line>minap permanganát legkeletebbieket potroht legeslegbeljebbre kijjebbit</Line>
+ <Line>botcsinálta távolabb továbbra hétnaponta porhadtak korábbiakat ropija bereken</Line>
+ <Line>régebbieket abban elémbe sokpercenként bentieket pontoskodjanak legrégebbieket</Line>
+ <Line>elibétek hatpercenként alattomban pedofil pá legtávolabb placebo borit</Line>
+ <Line>harmincnaponta régebben legeslegtávolabbra gépiesit bármint legkorább minapit</Line>
+ <Line>emebbe félnaponta almába legeslegkevesebbet legrégebb belénk alapit</Line>
+ <Line>legeslegkevesebbiket legkisebbet elibé tibennetek elibénk bérmentve legbeljebbre</Line>
+ <Line>hamarább prorektora idébb patogén legeslegkeletebbieket blindre bátrabbat</Line>
+ <Line>legeslegkeletebbieket bárhonnét paskolja néhanapján tbc almába legeslegkeletebbieket</Line>
+ <Line>implicite meglepetve pianissimo pamlagja amodább keletebbit legkevesebbet</Line>
+ <Line>tibenneteket holocénban lassabbodjanak némiképp beleértve almában dédapát</Line>
+ <Line>ab nobilisan legkeletebbit legeslegbeljebbre kalaplevéve legeslegfeljebb</Line>
+ <Line>régebb legbátrabbakat párásodik partvonalit pallérja kebelen permeabilitása</Line>
+ <Line>bármeddig hamarabbiakat elibe sipogtak permeábilisan balfenéken mbar legeslegtovább</Line>
+ <Line>meglepetve háromnaponként párásodjanak énelébem régebb kompléja teelédbe</Line>
+ <Line>elibéd nemrégiben legfeljebbre párásodjanak verbálisan legjobbakat</Line>
+ <Line>hétnaponként chipssé mindebbe bárhonnét postalovon lejjebbit bárhonnét baloldalt</Line>
+ <Line>keletebbre partvonalit párverset semmiképp beh lappá empire legkorább arrébb</Line>
+ <Line>kábé naponként plakkal legeslegtávolabbiakat elémbe salabakterja</Line>
+ <Line>borsot provinciálisan elibéd mielibénk legeslegbeljebbit kempingel</Line>
+ <Line>arrébb legeslegbeljebbit baronesse baromon régebben világéletetekben</Line>
+ <Line>legesleghamarábbiakat kismértékben kisebbet idább borsot bátrabbat lentebbieket piff</Line>
+ <Line>krapekja legkevesebbet leghamarabbiakat milliárdpercenként bentit legtávolabbiakat</Line>
+ <Line>blindre legeslegkorábban édesapát befelé nemhiába inkább speciel monopoláris</Line>
+ <Line>bennetek primo kempingeljen sipogtak lábit birkaakolon palackolja librissel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>uq</NewCharacters>
+ <Line>juhhal magunkféle durr miau legutolját mániákusan turini magburokon</Line>
+ <Line>altocumulussal teremburáját q ruhatárit adieu paukolja laurinsavon naturáliák</Line>
+ <Line>rumbái coitussal kupeckodtak apjukat hurokon q bundermajomon aludttejet</Line>
+ <Line>stratocumulussal kutacskája fujj mialattunk hátul utasit streptococcussá bruhaha</Line>
+ <Line>legeslegalulra musicallel ablativussal utánig leghátulra orvul alhatnékjuk</Line>
+ <Line>mániákusan voltukat dédapjukat cirrussal orvul cumulonimbussal flottul</Line>
+ <Line>legaljukat joule legaljukat alattuk uralomon tanárurakat multipoláris tudtul</Line>
+ <Line>hidegmegmunkálás multikulturális megvoltunk legalul cumulonimbussal utánunk apjukom</Line>
+ <Line>nimbostratussal cirrocumulussá apámuram utol kutacskája fulminsavon nimbostratussá</Line>
+ <Line>legalulra uramfia után nálunknál utánuk purgál delirium streptococcussá</Line>
+ <Line>hátulját fondue árusit barbitursavon dauerja melegmegmunkálás cukrosit</Line>
+ <Line>apámuram alattunk fiamuram leghátul miattunk apjukom aljukat ugarja alul</Line>
+ <Line>kutacskái idusán csurig coccussal paukol csurig cum utánuk quattrocento</Line>
+ <Line>bujik rájuk ukmukfukk quattrocento adieu virágburokon turini figurácskák</Line>
+ <Line>adieu alhatnékunk ruhakapocson melegmegmunkálás stratussá polgárosuljon</Line>
+ <Line>legeslegalulra utánam hátulját stimulánsot cirrussal ruhatárit fordultában</Line>
+ <Line>utolját virágburokon q u bundermajomon korláttalanul pitbull uradalomon</Line>
+ <Line>legesleghátuljukat dauerja turini hátuljukat melegmegmunkálás kukucs uramfia cirrussá</Line>
+ <Line>juhhal dugig alájuk legesleghátuljukat legesleghátul hátuljukat rajtuk</Line>
+ <Line>megvoltunk nimbussá kupeckodjanak irántunk bajbajutottakat általunk kurjantgasson</Line>
+ <Line>purparléja paukol alájuk turini undorit pitbull rajtunk coccussal orvul</Line>
+ <Line>kukucs jutalomon csurom rájuk stratussá idusán paralitikusan kurjantgasson</Line>
+ <Line>undorit hátulra pfuj cumulussá aprajukat magburokon accusativussal juhhal</Line>
+ <Line>barbitursavon vanillincukoron unalomon ihatnékjuk opussal maradéktalanul alhatnékjuk</Line>
+ <Line>gaussal pocsékul aluliakat hátul alhatnékjuk miirántunk interruptussal</Line>
+ <Line>miattunk miutánunk trochaikusan kutacskája tudtul papundeklije indultában</Line>
+ <Line>kutacskája streptococcussal denique miután nubukja interruptussá aprajukat</Line>
+ <Line>ruhakapocson vanillincukoron kupeckodtak odavoltunk pfuj utolját mialattunk</Line>
+ <Line>ultima apjukat accusativussal parancsuralomon fuvolások lukacska purgálja</Line>
+ <Line>rajtuk általunk hurrá kukucs nubukja eljuthatott hidegmegmunkálás légiutas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>íó</NewCharacters>
+ <Line>pulóverja hajóorrot legutóbb stíriai jóvátennie mócsinggal góóóóóól itthonról</Line>
+ <Line>bíránkat dettó lóttam rósejbnije milói kívántatik sodorítsa trillióévente</Line>
+ <Line>ím quattrocentóban módosit metabórsavon amattól hófedte trógerja</Line>
+ <Line>prímje kutatóteremen marósa rólad klinikopatológia harmincóránként</Line>
+ <Line>hónukat hátulról lóttunk jóvátetted amabból legutóbbit jóvoltát jóvoltukat</Line>
+ <Line>hínarasokat drótkapocson odaátról milliópercenként pedofília hármójukat</Line>
+ <Line>amattól almától savtalanít lótva csaó alól quattrocentóban íratik jókorákat</Line>
+ <Line>góóóóóóóóóóóóóóóóóól légifuvardíj ólomon góóóóóóóóóóóóóóóól magánosítása olcsóbbodik</Line>
+ <Line>akkortájtól ohó alóluk távolból góóóóóóóóóóól pótlékja lótunk millióhavonként</Line>
+ <Line>trillióan jóvátennél jóvátett ólomon októbristák abból jóvátenném csicsí</Line>
+ <Line>láthatólag millióóránként rólunk rólunk kóserul góóóól lóssál pácolódjanak</Line>
+ <Line>sombrerója amakkortól jóvoltodat alulról legeslegutóbb góóóóóóóóól trillióévente</Line>
+ <Line>taposómalomon utójáig pótlólag rósejbnije írel jóvoltunkat alólunk pentódája</Line>
+ <Line>órása lóttál bíráimat góóóóóóóóóól legutóbbit savtalanítja placebója</Line>
+ <Line>hidratálódása legeslegalulról hidratálódása pentóda távolról manírja borsóféregen</Line>
+ <Line>góóóóóóóóóóóóóóóóóóóóól fogadóteremen hajóvonták góóóóóóóóól góól lótnának futólag almáról</Line>
+ <Line>hónaljit billióóránként ától utólag ekkortól savtalanít lótnunk kísértettel</Line>
+ <Line>jóvoltából tartópeceken góóóóóóóóóóóól jól góóóóóóóóóóóóól góóóóóóól feloldódhatott</Line>
+ <Line>góóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóól magánosítása tartóhorogon órása lóttak trillióévenként góóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóól</Line>
+ <Line>lótnál utóbbit telkesítése ólit tialólatok jókorák mindattól góóóóóóóóóóóóóóóóóóóóóóóóóóóóóól</Line>
+ <Line>légiósbetegség millióévente énrólam hólepte pedofíliája sodorítja mócsingja</Line>
+ <Line>góóóóóóóóóóóóóóóóóóóól hónunkat kurírja kívántatik utóbb mindabból óránként kéntelenít</Line>
+ <Line>legeslegkorábbról prímje lóttunk bíránkat hajóhídit róluk mostantól nefrológia</Line>
+ <Line>ólomon góóóóóóóóóóóóóóóóóóóóóól pentóda dó billióévenként góóóóóóóóóóóól</Line>
+ <Line>jóvátennél góóóóóóóóóóóóóóóóóóóóóóóól mondhatnók pulóvere belevalóbb jóvátenni</Line>
+ <Line>jóvoltomat rugódjanak jóvoltomat hatóránként legeslegalulról alóla kreatívan</Line>
+ <Line>trillióévente millióhavonta í góóóóóóóóóóóól millióhavonta góóóóóóóóóóóóóóóóóóóóól</Line>
+ <Line>jóvátetted olcsóbbodjanak lívek improduktívan hohó jóvátette magánforrásból</Line>
+ <Line>énalólam lóttatok kutatnivaló millióévente kétpólusosság kétóránként</Line>
+ <Line>magánforrásból pianissimóban trilliópercenként millióévente lótna tímára híven</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wn</NewCharacters>
+ <Line>mindvégig legeslegfentebbre trochaikusan kombinéja tanulóteremen oleanderja</Line>
+ <Line>máshonnét nemde magunkat keveslened általunk legeslegfentebbieket mindarról</Line>
+ <Line>leglentebb csupán paranoidan ennélfogva álltában nono keveslené nejeit</Line>
+ <Line>predestinálja félnaponta tinéktek vélelemen miután inklináljon énmellém nejét</Line>
+ <Line>mindhárman reggelente lótnia hétévente unionista igeneven legeslegkorábban</Line>
+ <Line>siettében kellenék magánerejét hatévenként kommutatívan ottan fejedelmien</Line>
+ <Line>legfentebbit mindabból husángja akkoron hárompercenként lassanként alássan</Line>
+ <Line>utánuk apránként nálatoknál koránt hétnaponta fertelemen permeábilisan</Line>
+ <Line>sehonnaiak kellenek predestinál lentieket mintha csirátlan vonalit énalám</Line>
+ <Line>mócsinggal almanacht borsóféregen mindhiába tanárurakat netán bátoron virágcsokoron</Line>
+ <Line>nimbostratussal harminckilencfelé donora nemrég tanulóteremen utánunk olvasóteremen</Line>
+ <Line>idefenn fenomének idefenn segedelemen pácienset annalessel konform harminckétfelé</Line>
+ <Line>mindenfelé kintre ehetnékje legeslegfentebbieket sipákoljon sokóránként</Line>
+ <Line>hátravolnánk narancsleven hétpercenként proletáruralomon precedenset holtáiglan</Line>
+ <Line>minduntalan néhanap siralomon felnevelhetett bérmentve elemien mikrotechnika</Line>
+ <Line>csupán magunkféle átellen kalcinál pontoskodik koránt meglennének megvolnék</Line>
+ <Line>metabórsavon megoldanivalónk nimbostratussá hathetenként ahonnan ólomon nékik</Line>
+ <Line>kismértékben étteremen mellénk pentatonikusan vajon sincsenek jókorán addiginál</Line>
+ <Line>meglennének fektében mindinkább tiellenetek étteremen immobilisan abban</Line>
+ <Line>hátravolna énfelettem kontóra hálóteremen fogadalomon hajdanán nono fertelemen</Line>
+ <Line>guillotine odakinn jelenlegit reggelente fentit permeábilisan premontreiek</Line>
+ <Line>hatnaponta holocénban vonóhorogon náluknál titokon megtanulnivalód fogadjisten</Line>
+ <Line>odalennék mindkét milliárdóránként neven technofóbia kéregen általunk</Line>
+ <Line>milliárdan sodoron karhatalomon neked momentán éterien ringje hétóránként</Line>
+ <Line>legfentebbre hetente hajdanta fuvalomon engem védelemen levélnek mindenhová</Line>
+ <Line>nimbussá jóvátenni véglegesen pártvonalit mindhárman stewardessé énvelem</Line>
+ <Line>ápertén sáncárokon kismértékben nincsen hatnaponta énalám gradienset</Line>
+ <Line>kendere megvolna hatévente alélhatatlan milliárdpercenként hetvenfelé</Line>
+ <Line>keveslenéd harmincévesforma énnálam nahát hátravannak nékem kalandora lentebbieket</Line>
+ <Line>holtomiglan csirátlan mellékneven hasmánt tenéked mindig lennék kontingentál</Line>
+ </Level>
+ <Level>
+ <NewCharacters>xö</NewCharacters>
+ <Line>jáspiskövön elfövöd pördít kölönce elfövi kifövöd mögöttetek benövök röntgene</Line>
+ <Line>tikörétek létrejönnöm görgetegkövön öcséteket létrejönnötök öregit létrejönnétek</Line>
+ <Line>ötvenfelé kemencekövön tönkremenne légcsövön mimögénk átnövitek végignövik</Line>
+ <Line>hatökörön kinövök legföntebb ötévenként följebb örömen körmöci tönkretennél</Line>
+ <Line>rubintkövön örven ötcentis elektroncsövön bérjövedelemen ötvenháromfelé</Line>
+ <Line>legeslegföntebbieket ötvenkilencfelé sötétell felfövöd mögétek turmixa tönkrementél</Line>
+ <Line>pöcökje röptét timfölden fölöttieket fölöttetek legföntebbit boltkövön</Line>
+ <Line>tönkretennék fövik öccseit markeráramkör öcséidet lenövöd mixere öcsök malomkövön</Line>
+ <Line>mögöttetek bergmanncsövön tönkremennem ötvenetfelé ötvennaponként körötte</Line>
+ <Line>létrejövök boltkövön ö temögéd köré határkövön kilencvenötfelé föléd öcséiteket</Line>
+ <Line>odanövöm sötétellje öcséimet ötvenóránként fölöttébb sötétellene lexikográffája</Line>
+ <Line>legeslegföntebbre föntebb tönkremennék növöm többhavonta ötvenháromfelé megnövök</Line>
+ <Line>végignövöd öccseiket lábujjkörömön macskakövön ördögadta égöven körötte</Line>
+ <Line>elfövik fölnövök csöppön átnövik övéiket pöfetegje tönkretenném ötvenötfelé</Line>
+ <Line>öccsét boltkövön sötétellje felnövöd körforgalomon ötcentis önmagát</Line>
+ <Line>föntebb sírkövön lenövöd létrejöttét fogkövön öccseit temögötted legföntebbre</Line>
+ <Line>legeslegföljebb önuralomon önmagukat föl létrejöttél köré jöve történelemen</Line>
+ <Line>tönkretenne elölit mögöttieket tönkretenne létrejöttem létrejöttetek kémcsövön</Line>
+ <Line>gödörön efölött legeslegföljebbit létrejöjj benövök elölit fölnövöm</Line>
+ <Line>öccseimet benövitek aköré földecskéik ötvenfelé lenövöd ötvenkétfelé többhavonta</Line>
+ <Line>mimögénk betölthetett tönkretenned sötétellte mixere föntieket felnövök</Line>
+ <Line>elnövitek tövit fölibéje öcsénket mellénövök legeslegföljebbit elölit</Line>
+ <Line>karöltve rövidtávon énmögöttem létrejönnél körbeirt önmagukat tönkremennénk</Line>
+ <Line>benövitek gödörön ránövök fölibétek legeslegelöl öcsédéket felfövi feketejövedelemen</Line>
+ <Line>tönkrementem növöm önnönmagukat öven öccseidet örömrepesve legeslegföntebb</Line>
+ <Line>többit fölnövök földen legelöl föl rövidell fölnövöm ötvennaponként</Line>
+ <Line>önmagunkat kölönc hatökörön tikörétek növöd pördít tifölibétek megfövik</Line>
+ <Line>kinövöd afölött tönkrementetek fölfövöm végignövitek ö békakövön hatökörön</Line>
+ <Line>górcsövön körtebokoron végignövi tönkretennék fölfövöm odanövöd létrejöjjek</Line>
+ <Line>fölém ötödfél látcsövön röntgene mögénk átnövik állatöven mögé legföljebb</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ő\,</NewCharacters>
+ <Line>végignőj lentről felnődd őalájuk főleg körbenőjétek kinőne őmögéje őreájuk</Line>
+ <Line>ránőtted lenővén főnötök belefőjétek ránőtt mellőlieket lenőnöd kinőjetek</Line>
+ <Line>körbenőttelek megnőttél nőjél ebből elnőttek lenőnénk odanőnöm mellénőttem</Line>
+ <Line>fölfőttelek költőien kifőttetek alánőnél védőburokon tielőttetek felfőnek</Line>
+ <Line>elnőjed kifőjed benőjék főném fölfőne felfőnétek kinőjetek fölfőnél</Line>
+ <Line>felfőttél belefőttétek őreá megnőnék fölfőttél legdélebbről másfelől jövőbeni</Line>
+ <Line>odanőjem odanőtték benőjem nőné benő kifőtték kifőve legfőképp átfőtted</Line>
+ <Line>emebből őirántuk átnőttétek mellőletek megfőjék odanőném belenőnék ettől</Line>
+ <Line>lenőtte elnőtték elnődd alánőnék tőletek felfőnöm felfőném átfőném átfőj</Line>
+ <Line>felfőne magánerőt elől megnőjön alánőném átfőjön elnőj végignője belenőttek</Line>
+ <Line>belenőj belenőjék megnőve megnőjék lenőj benőjem őfelségét felnőttetek</Line>
+ <Line>felnőném belefőttétek legkésőbbieket fölfőtte lefőjem felőlieket őstulokon</Line>
+ <Line>elnőnöd körbenőjél fölnőtték felnődd felnőtted illetőleg fölfővén odanőnétek</Line>
+ <Line>belefőnie mellénőjed lenőnénk elfőve végignőnöd elnőnék felnőné körbenőtték</Line>
+ <Line>fölnőjem ránőnétek belenőjél körbenőnéd benőnélek megnőné elől felnőttem</Line>
+ <Line>kifőtt belőlem nőnötök felőlit lenőjetek legeslegbővebbiket végignőnétek</Line>
+ <Line>odanőni elnőjed mellénőné lefődd régtől legeslegelőbbre átfőve odanőném</Line>
+ <Line>elnőnél fölfőnél felfőjenek átfőttetek vélhetőleg lenőjétek felnőttetek</Line>
+ <Line>ránőjem kifőnél tielőletek belenőjetek belefőjél megnőnélek körbenőtték</Line>
+ <Line>odanőjed végignőném nőtök elnőni felfőtök mettől megfőjed végignőj őáltala</Line>
+ <Line>belenőnétek nővén végignőnéd kinője megfőjetek odanőjön odanőjem legelőbbről</Line>
+ <Line>kifőtte belefőnöm elfőnéd mellénőtök elnőjél felfőnöd főjetek elfőjed</Line>
+ <Line>lenőnétek alánőve belenőné mellénőj belefőtök odanőnöd lefőjétek megfőnének</Line>
+ <Line>belefőtték őnálánál belenőttelek fölfőtök átnőnének legkésőbbieket körbenőj</Line>
+ <Line>kinőjétek belefőtök elfőném felnőnéd felfővén őreája elfőjél elfőnéd alánőve</Line>
+ <Line>belefőjétek alánőnek főnöm fölnőttem végignőnek lenőttetek alánőnek megfőjetek</Line>
+ <Line>végignőj elnőve átnőni megfőttek fölnőttelek felfőttetek benőné körbenőjön</Line>
+ <Line>fölfőnek átnőjön átfőjétek elfőnének fölnőttem ránőni előfordulhatott</Line>
+ <Line>kinőnék felnőve felnője legeslegbővebben belenőjék odanőjem benőjem</Line>
+ <Line>átfőjetek bővebben körbenőttetek megnőnének elfőjétek megnődd átnőve tőkésit</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ü\.</NewCharacters>
+ <Line>nélkül tüntetőleg körülnőnie felületet ühüm büdöskövön röhögtetjük</Line>
+ <Line>felnőjük körülnőjétek belülit borsfüvön kilétünket mögületek különmegállapodás</Line>
+ <Line>kéntelenítsük rostonsülten legeslegbelülről benőnünk végignőttük mimögülünk</Line>
+ <Line>elébük legfelülre körülnőtte fölfőjük alánőnünk röhögtessük kinőniük</Line>
+ <Line>legbelül őelőlük odalenniük külsőleg kívülre aggófüvön kifőniük körülnőjétek</Line>
+ <Line>felfőttük fölülről őmögülük mellénövünk felfőttünk küretje legeslegkívül</Line>
+ <Line>kifőttünk ekörül odanőttük fövünk kültérit megfőjük őmögüle legfölülről</Line>
+ <Line>őmögüle körülit belenőniük körülöttük főttünk kéntelenítjük őmögülük</Line>
+ <Line>fölfőnünk lenőttünk tüdejét körbenőttünk ühüm mitőlünk megnövünk legvégül</Line>
+ <Line>felőlük függelemen elnövünk mielőttünk körülit körülnőjetek körülnőttem</Line>
+ <Line>fölnőttünk erdejüket tüdejét előttünk átfövünk tönkretettük mindenüvé legeslegfölül</Line>
+ <Line>mellőlünk mögülieket őmögöttük körülnövünk mögül ránőttük felfőjük legkívülieket</Line>
+ <Line>tetőtlenül pördítjük mikrosütő külkereskedelemen söprögetjük minekünk föléjük</Line>
+ <Line>düht elébük odalenniük mitőlünk körülnövöd mögüle körbenőnünk odalennünk</Line>
+ <Line>nénjüket lenőniük legbelülről átfőttünk ránőttünk legtetejüket mellénövünk</Line>
+ <Line>legeslegfelülről belenőttünk fölibéjük felnőjük őfelőlük nélkülünk nőttünk rüht</Line>
+ <Line>feléjük mögülük ránőnünk belülre különben fölülről megfőjük felnőnünk</Line>
+ <Line>fölibéjük körülnőnötök külsejüket söprögetjük elnövünk lívül eléjük legbelülre</Line>
+ <Line>kifőttünk körülnőjék átnövünk körülnőttél odanőttük parlagfüvön malacsülten</Line>
+ <Line>ígérgetjük fölöttünk pördítjük körülnőjetek kéntelenítsük tenélküled odalettünk</Line>
+ <Line>költögetjük végignőttünk mibennünk nőttünk nőnünk mellettük kellettünk körülnövik</Line>
+ <Line>elfőjük tücsökön kétlenünk ellenükre nélküled elfőttünk jóvátettünk</Line>
+ <Line>mögöttük legeslegkívülieket főttünk odanőttük körülnőjed kellünk odalenniük</Line>
+ <Line>főjük őfeléjük legeslegbelül végignövünk odanőjük tikörülöttetek tönkretenniük</Line>
+ <Line>jóvátettünk mögöttünk végignőniük legfelülre külteleken ehetnékjük tenélküled</Line>
+ <Line>átfőttünk őelibéjük fölfőttük elegünk mifelőlünk fölülirt mellénőnünk</Line>
+ <Line>tétessük odanövünk belülieket őfeléjük fövünk belsejüket füstcsövön megfőjük</Line>
+ <Line>körülnőnie jóvátettünk lefőttük őfölöttük legeslegbelül megnőttünk belülre</Line>
+ <Line>velejüket belenőniük megnőttünk körülnő elfövünk tüdejét felfőttünk létrejönniük</Line>
+ <Line>körülnőttetek kétleniük körülnőttél őmögülük kifőnünk őérettük legkívülről</Line>
+ </Level>
+ <Level>
+ <NewCharacters>úy</NewCharacters>
+ <Line>világcsúfját nyilván nyolcvanhetenként ahelyett egybefőni egybefője nagynénédéket</Line>
+ <Line>útit legmélyét nagybátyjaikat bátyjait túlnövi display toronyiránt</Line>
+ <Line>túlnőj málhanyeregen túlfője soktrilliónyit nyélit akármelyeket túlfőne</Line>
+ <Line>harangtoronyon egyfelől nyugatabbra lyukacskája egybenőném mindenhogyan hogymint</Line>
+ <Line>bátyámékat félennyi nyílsebesen sulyokon toronyiránt túlfőtök egybenőném</Line>
+ <Line>egybenőnötök ugyanettől kanyarit lánykorában savanyúleves nagybátyáitokat</Line>
+ <Line>félennyi bátyáikat bátyádékat bátyáidat nyápican túlnőnétek nyolcvanhetenként</Line>
+ <Line>gyorsteheren jóvátegyél ugyanott súlyosodtak túlnőné megvagyok jóvátegyek</Line>
+ <Line>mindnyájukat újakéit kicsinylőleg egybefőjél gyapjainkat mindannyian túlfőnétek</Line>
+ <Line>egybenőnélek nyolcvanhavonta parittyakövön súlyosodtak ugyanennél nagyot</Line>
+ <Line>kegyelemen eredményeképp nyugatabbra egybenőtték amannyiunkat évkönyven</Line>
+ <Line>hányfelé legnyugatabbról hogyan nyitjukat egybefövünk túlfőnél nagybátyámékat</Line>
+ <Line>melyet évkönyven versenylovon újfundlandi éppolyat mihelyettünk tönkretegyük</Line>
+ <Line>édesanyát kétannyit málhanyeregen nagynénjeit antennatoronyon melyikünket</Line>
+ <Line>túlnőnöm legnagyobbikat akármelyikőnket hegyesit tönkretegyed cigánygyerekek</Line>
+ <Line>gyapját egybefőni gyakorlótanárjelölten túlnőjétek enyéimet body hatannyian</Line>
+ <Line>gyakorlótanárjelölten különágy nyálit negyedrét figyelemen tölgyen egyhangúlag túlfőnöm</Line>
+ <Line>anyjukom telephelyet kilencvennégyfelé ugyanekkor ugyaneddig félselyemen</Line>
+ <Line>hányasa ugyanannyiunkat amelyiküket körútit gyermekláncfüvön nagybátyáitokat</Line>
+ <Line>agyit egyfelé nyolcvanévente nagybátyádékat amily negyvennaponként</Line>
+ <Line>golyócskái legnagyobbacskát ehelyütt nyugatabbról atyjafiát ellenirányban</Line>
+ <Line>ugyanebben gyümölcsleven enyhén kölyökön múltkorában akárhányan menyeinket</Line>
+ <Line>nyélit túlfőjétek olyanabbat egybenőnöm latinkönyven négynaponta egybefőjön</Line>
+ <Line>nagyobbikat épphogy kicsinyleni amilyet túlnövitek egymásután semelyikőnket</Line>
+ <Line>enyhén gy együtt nagyritkán némelyikünket csekélylenünk negyedjére</Line>
+ <Line>amelyikőtöket akármennyiüket fogolyon kortyintson kilobyte túlfőnöm bármennyien</Line>
+ <Line>fátyolon nagybátyádékat agyit edényfülen ükanyját egybefövünk nyolcpercenként</Line>
+ <Line>hogymint lyukit túlnőttétek táborhelyet néhányat túlfőttük gyomortartalomon</Line>
+ <Line>akárhogyan egybefőjek évkönyven folyton királyfiakat aknatoronyon dédnagyanyát</Line>
+ <Line>ugyanebből gyárit negyvenkilencfelé túlfőnél nagynénémet átkelőhelyet pillanatnyilag</Line>
+ </Level>
+ <Level>
+ <NewCharacters>zű</NewCharacters>
+ <Line>szuperhatalomon tizenegyfelé véghezvinném hatszázan mindezét összenőném keresztirányban</Line>
+ <Line>közzétegyetek körömszakadtig beszédközben karamellizációja összenövöd paternalizmus</Line>
+ <Line>stratusszá megleszel szatyorja háromszólamúság szerintit vezetékneven visszanőni</Line>
+ <Line>egészségügyen koszekánsot negyvenedszeri tizenkilencfelé huszadjára előnyöshez</Line>
+ <Line>szügyen ezóta monetarizmus észreveszitek mindezeket bluesszá pároztak</Line>
+ <Line>intézettel közzétenni lövészárokon egészségügyhez nyugtakönyvhez szeánszot</Line>
+ <Line>légideszant színtérit forrásművön konszignál huszonnyolcfelé véghezviszem</Line>
+ <Line>mozivászonon dédszüleinket közibé véghezvinnéd véghezvinnél mágnesezettsége</Line>
+ <Line>meggörbülthez útközben őrizetté visszanőnél legeslegészakabbra észrevesszük</Line>
+ <Line>televényföldhez égövhez magánszorgalomból legharcrakészebbet sertéssülthez szélesbítjük</Line>
+ <Line>megkövülthez dédszüleinket záróizomon szétfővén mindezért mázit széjjelfődd</Line>
+ <Line>szeretteimet malacsülthez szédülthez szűkkörűen mozivászonon szabadstílusú</Line>
+ <Line>liposzómája négyszöghez veszteg légzek kockáz pfujozzák szülőanyja terjengőshez</Line>
+ <Line>észrevesznek keresztülnővén leghasznothajtóbbikat közénk leghosszabbikat</Line>
+ <Line>kilégzel pödrötthez ugyanazóta hozzánőnie mindezen szögen tiköztetek</Line>
+ <Line>szégyenlősködik végzettel hatszázfelé végezetté számolókönyvhez hozzánőjél pipaszutyokon</Line>
+ <Line>kartonvászonon összenőném leszen keresztülnőjön dz többször visszanőttünk szakácskönyvhez</Line>
+ <Line>keresztülnőttelek véghezvitt tiköztetek kevésszer hozzánőnöd művit szerencsefiát</Line>
+ <Line>szűkkörűen kényszerit bőszhez uzsgyi széjjelfövünk orosztankönyven szemeregjen</Line>
+ <Line>szerelékje nimbostratusszá monetarizmusa húszhavonként sziromon széjjelfőnöm</Line>
+ <Line>szétfőnöm összenőttünk fatörzshez nyilvánosházit visszafele ötvenedszeri</Line>
+ <Line>oroszosítsa színtérit exitusszal összegyűjtötthez feltűnhetett leszel németkönyvhez</Line>
+ <Line>elemzéseképpen visszanőni vértezetté rohasztja gyászfátyolon érzettel kokszosítják</Line>
+ <Line>visszanőtted szemszögen azokat tőkeerőshez szárazfölden visszájáról közelebbieket</Line>
+ <Line>azonképpen visszanövöm hozzájárulhatott tönkretesz skanzene számat miniatürizálja</Line>
+ <Line>szájit záróizomon keresztülnőni vázlatkönyven hetvenedszerre tehozzádig</Line>
+ <Line>összenődd környezetté visszanőnétek megesz szülőföldhez ezzé végignősz</Line>
+ <Line>konszignálja porszenet legeslegszörnyebbiket nyűnél kazánkövön szexttel századszorra</Line>
+ <Line>közém káderoz térdeplőhelyzet szurokja émelygőshez legészakabbiakat</Line>
+ <Line>disznónyíró lebasz akármennyiszer bronzot felépülthez fuzzy leghaladószelleműbbet</Line>
+ </Level>
+ <Level>
+ <NewCharacters>6758\-</NewCharacters>
+ <Line>zh-vá olykor-olykor dag-má km-rel mm-et q-val disc-jockey-vá h-vá</Line>
+ <Line>joule-lal kilenc-tíznaponta így-úgy sans-culotte-tá nm-rel szünös-szüntelen</Line>
+ <Line>össze-vissza s-et testestül-lelkestül három-négynaponta j-vé messze-messze</Line>
+ <Line>guillotine-ná km-ré sneff-féle réges-régi madame-má mademoiselle-lel k-val</Line>
+ <Line>kultúr- tsz-szel csinn-bumm gloire-ral lx-szal nyolc-kilencnaponta ki-ki</Line>
+ <Line>ű-vé comtesse-szé l-t fondue-vé sz-t ha-rá dkg-mal empire-ral egy-kéthavonként</Line>
+ <Line>nyolc-kilencnaponként nyakra-főre km-t rad-ná disc-jockey-val cal-val griff-féle sans-culotte-tal</Line>
+ <Line>törik-szakad közbe-közbe fireg-forog szőröstül-bőröstül cg-má dg-má ü-vel</Line>
+ <Line>mg-má kézzel-lábbal három-négynaponként öt-hathavonta nyolc-kilencnaponként</Line>
+ <Line>gouache-sal éhen-szomjan kilenc-tízhavonként már-már baronesse-szé három-négyhavonként</Line>
+ <Line>ml-ré sz-szé s-má öt-hathetenként nyolc-kilencévenként sz-szel icit-picit</Line>
+ <Line>hinta-palintát ny-t körbe-körbe véges-végig girbén-görbén kg-mal jóban-rosszban</Line>
+ <Line>fireg-forog on-line-nal pót- szja-val gmk-vá r-t curie-vé ű-vé spray-vel</Line>
+ <Line>paff-féle griff-féle mm-ré kultúr- e-vé video- két-háromhavonként többé-kevésbé</Line>
+ <Line>l-lel s-sel ny-nyé comtesse-szé cal-val csicsíja-babája s-má alig-alig</Line>
+ <Line>firegtek-forogtak gy-vé s-t dkg-mal treff-féle zh-val miss-szel ő-vel sans-culotte-tá</Line>
+ <Line>dl-t öt-hathetenként mm-et empire-ral lm-né cl-ré ln-né dzs-vel diktum-faktum</Line>
+ <Line>d-vé hét-nyolcévente négy-ötnaponként s-sel öt-hatévente diktum-faktum</Line>
+ <Line>egy-kéthavonként cosec-sal u-vá csínját-bínját cos-szá s-má diribre-darabra kilenc-tíznaponként</Line>
+ <Line>kézzel-lábbal már-már gironde-dá szegről-végre nyolc-kilencévenként tél-túl</Line>
+ <Line>oeuvre-rel e-vel sz-szel s-sé empire-rá ingó-bingót ripegett-ropogott két-háromévente</Line>
+ <Line>lg-sal három-négyhavonta ripegnek-ropognak más-más egy-kéthavonként</Line>
+ <Line>gyógy- mikro- ty-vé kurtán-furcsán spray-vé egy-kéthetenként vitae-vel</Line>
+ <Line>sülve-főve öt-hatnaponta tól-ig-gá kinek-kinek guillotine-nal z-vel iciukie-picike</Line>
+ <Line>gauss-szá öt-hathavonta stroke-kal s-sé nm-t cs-vel csára-hajszra síttak-ríttak</Line>
+ <Line>x-szé rad-ná v-vé pitteg-pattog guillotine-ná megabyte-tal camembert-ré</Line>
+ <Line>ny-nyel cs-vé tsz-t télen-nyáron egyedem-begyedem nm-t mm-ré kg-mal</Line>
+ <Line>kilobyte-tal zh-vá szkiff-féle w-vel négy-öthetente cal-vá ly-nal csínja-bínja</Line>
+ <Line>é-vé cm-t tyúkom-búkom szőröstül-bőröstül ész-szerű j-vel négy-ötnaponként</Line>
+ <Line>menet-jövet négy-ötnaponta ty-vel kézen-közön reggel-este éhen-szomjan rissz-rossz</Line>
+ </Level>
+ <Level>
+ <NewCharacters>493210</NewCharacters>
+ <Line>0y 1rű ái1 z-\1 0ay 09\ 0ay 09\ 0ay 9f xí2 0 n1gch w1 4jó \x09</Line>
+ <Line>.3f 9f n1gch 0ay \h4 c-ö2 59y 0 o9g z-\1 70q \x09 z-\1 ú0h o9g c-ö2</Line>
+ <Line>o9g ú0h 09\ o9g bt1p ú0h bt1p 59y 4jó \x09 z-\1 1rű \3b 0 xí2 70q</Line>
+ <Line>v0 v0 09\ n1gch 9f xí2 ái1 o9g u3 09\ 70q 9f v0 1hó \x09 ái1 0y</Line>
+ <Line>70q u3 úp2 0ay 1rű z-\1 4t2 o9g .3f 1hó w1 0ay o9g 4jó 1hó 0ay ái1</Line>
+ <Line>\x09 ái1 xí2 0y \x09 o9g .í9 ái1 09\ o9g 09\ n1gch 9f 1hó ú0h 09\</Line>
+ <Line>úp2 1rű 4jó \x09 \h4 z-\1 \h4 09\ z-\1 09\ 0 úp2 bt1p 0ay .í9 \h4</Line>
+ <Line>ái1 .í9 4jó w1 ái1 \3b .í9 c-ö2 w1 1hó 0ay ái1 0y v0 ái1 o9g w1</Line>
+ <Line>0y ú0h w1 ái1 v0 xí2 1rű 9f 1rű c-ö2 2 n1gch ái1 c-ö2 09\ 09\ 2</Line>
+ <Line>u3 c-ö2 c-ö2 .3f xí2 \x09 0 0ay u3 bt1p ái1 0ay 0 2 1hó 1rű .í9</Line>
+ <Line>4jó c-ö2 xí2 \3b c-ö2 ú0h úp2 \3b u3 0 ái1 1hó úp2 v0 xí2 70q 4jó</Line>
+ <Line>1rű w1 0ay 70q o9g úp2 4t2 9f .í9 o9g 1hó n1gch úp2 4t2 c-ö2 ái1</Line>
+ <Line>0y 2 ú0h .í9 ái1 2 2 bt1p ái1 0y 0 ái1 0ay bt1p 0ay z-\1 o9g 9f</Line>
+ <Line>ái1 1hó ái1 úp2 1rű xí2 59y .í9 .3f 0 ái1 9f ái1 \3b 0 u3 4t2 ái1</Line>
+ <Line>úp2 9f .3f .í9 ái1 .í9 9f \x09 4jó z-\1 w1 ú0h 0y 0ay w1 09\ 1hó</Line>
+ <Line>o9g \x09 n1gch \x09 ái1 .í9 0y 59y o9g \x09 .í9 0y n1gch v0 70q</Line>
+ <Line>z-\1 c-ö2 0 70q o9g c-ö2 59y \x09 \x09 2 4jó c-ö2 09\ \h4 ái1 2 bt1p</Line>
+ <Line>ái1 c-ö2 c-ö2 59y ú0h \x09 ái1 0ay úp2 \x09 u3 ái1 v0 4t2 .3f 9f</Line>
+ <Line>0ay v0 n1gch u3 \x09 1hó ú0h xí2 xí2 z-\1 4t2 ú0h c-ö2 w1 1hó 0y</Line>
+ <Line>0y xí2 \h4 \x09 70q 0y xí2 \3b .3f 09\ w1 0 ú0h 0 v0 \h4 2 1hó</Line>
+ <Line>v0 \x09 59y 9f xí2 n1gch 0ay 09\ \x09 1rű w1 c-ö2 u3 .í9 u3 70q</Line>
+ <Line>4t2 70q ú0h \x09 ú0h 4jó bt1p o9g ái1 0y úp2 \3b 2 .í9 úp2 z-\1</Line>
+ <Line>úp2 4jó n1gch o9g 1rű 0y \3b z-\1 9f n1gch c-ö2 1rű v0 9f bt1p úp2</Line>
+ <Line>70q w1 n1gch ái1 xí2 2 0 09\ o9g 0 \3b .í9 0y 0 0y w1 70q 9f 0 0</Line>
+ <Line>4t2 u3 4t2 \3b u3 \h4 ái1 4jó c-ö2 u3 ú0h 4t2 \x09 v0 w1 u3 4t2</Line>
+ <Line>9f 2 n1gch c-ö2 \h4 2 09\ n1gch .3f v0 úp2 4t2 1hó \3b bt1p .3f</Line>
+ <Line>\h4 c-ö2 ú0h o9g n1gch 09\ z-\1 1rű 0ay v0 ái1 w1 úp2 4t2 úp2 \h4</Line>
+ <Line>1rű ái1 z-\1 59y 70q 1rű \h4 o9g 9f 9f 0ay 4t2 0ay 0y 0y 9f .3f</Line>
+ <Line>0y z-\1 09\ z-\1 n1gch ái1 9f 0 xí2 4jó u3 w1 ú0h úp2 xí2 09\ \h4</Line>
+ <Line>1hó u3 70q o9g .í9 xí2 9f w1 4t2 \h4 n1gch \x09 2 o9g .í9 0y 0y</Line>
+ </Level>
+ <Level>
+ <NewCharacters>AÁBCDE</NewCharacters>
+ <Line>Cézanne-nal Bell-lé Deutschhá Benzzé Cervantessel Diderot-vá Cervantes-szel</Line>
+ <Line>Dunaferré CD Dürrenmattal Bonn-nál Apollinaire Csecsenfölden Apollinaire-rel</Line>
+ <Line>Anonymusszá Básthy Deutschcsal Churchillel Damjanichhal Apple-t Bajkál-tavit</Line>
+ <Line>Airessé Apple-et Dunaferré Bangladesszé Cambridge Diderot Diderot-vá</Line>
+ <Line>Brahmssá Boole-lá Cambridge Camus-vé BBC Apache-csá Aral-tavit Berkeley</Line>
+ <Line>Accessel Benzcé Bordeaux-val Beatlessel Cromwell-lel Bretagne-nyal Apple</Line>
+ <Line>Bastille-jal Barossal Amazonassal Boyle Cannes-nel Celsiussá Clemenceau Báthory</Line>
+ <Line>Balzaccal Básthy Cambridge-t Baross-sal Apollinaire-t Apple-lel Debussy</Line>
+ <Line>Airesszé Brahmsszal Bézier Comeniusszal Böllé Baudelaire-t Arkansassal</Line>
+ <Line>Engelssel Allaht Adobe Dürrenmattól Cromwell-lel Dallasszá Benzcé Erazmusszá</Line>
+ <Line>Apple-lel Candide-dá Caracassal Appalache-t Antoniusszal Beckett-té Basické</Line>
+ <Line>Beckett-té Beckett-té Braille-já Basickel Antall-lá Debussy Accessel Antoniussal</Line>
+ <Line>Dessewffy Bangladessel Anonymusszá Cervantesszé Bonn-nál Cervantessel</Line>
+ <Line>Arkansassá Berkeley Cerberussal Erazmusszal Bordeaux-val Erasmusszal Apple-et</Line>
+ <Line>Amazonasszal Appalache-csel Candide-dal Bonn-nak Catullussá Appalache-csel</Line>
+ <Line>Babitscsal Brahmsszal Aral-tavit Damjanichcsá Baudelaire-rel Deutschcsá</Line>
+ <Line>Cousteau-val Brahmssá Damjanichcsal Claudiussá Basické Adobe-vá Clemenceau-val</Line>
+ <Line>Benzzé Delaware Dallassal Böll-lé Angelesszé Dunaferrel Bastille Cauchy</Line>
+ <Line>Broadway Esterházy Danubiusszá Apache Dallasszá Dessewffy Caracasszá</Line>
+ <Line>Cambridge-dzsé Bell-lel Dickenssé Antoniusszá Candide-dá Diderot-val Baross-sá</Line>
+ <Line>Baltimore-ral Bézier-vé Bordeaux Adobe Caracassá Apollinaire-rel Csecsenfölden</Line>
+ <Line>Corneille Anonymusszá Dickensszé Broadway ABC Apache-vel Dürrenmattá BBC</Line>
+ <Line>Bush-sal Babits-csal Airessé Dürrenmatt-tal Babits-csal Corneille-jé</Line>
+ <Line>Anonymussal Appalache-csé Angelessel Apollinaire Dunaferrel Comeniussá Dunaferr-ré</Line>
+ <Line>Catullusszal Disney Batthyány Dickenssé Balzaccal Cervantessel Bonaparte</Line>
+ <Line>Böllé Boole-lá Baudelaire-ré Diderot-vá Bangladessé Antoniusszal Barossal</Line>
+ <Line>Bacchussá Caracassá Apollinaire-et Buday Claudiussá Becketté Churchill-lel</Line>
+ <Line>Corneille-jel Apple-lel Cervantesszé Básthy Baltimore Deutschcsá Apache Dante</Line>
+ <Line>Celsiusszal Achilles-ínit Balzacká Candide-dá Descartes-tal Csáky Cadillackel</Line>
+ <Line>Comeniusszá Cervantessé Corneille-jel Appalache-t Dallasszal Dürrenmattól</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ÉFGHI</NewCharacters>
+ <Line>Falstaff-fá Hadrianusszal Grimmé Fayette Hertzzel Illinoissal Huron-tavit</Line>
+ <Line>Hendricks FBI Grazzal Ft Falstaff-fal Ikarussal kHz-cé Ferenczy Holmessal</Line>
+ <Line>GIF-fel Ft-tá Grazcá Hz-cé Holmessal Hermannak Hermannal Hz-cé CIA-vá</Line>
+ <Line>pH-val Grazzal Horthy Horatiussal BCG Huron-tavit Falstaffá Grazzal</Line>
+ <Line>Ikarussal Hadrianussá Hoffmann-ná Flaubert-et Hoffmann-nal GIF Hunspell-lé</Line>
+ <Line>FBI Hz GB-tal GIF-fé Hadrianussá Hermannal I Fourier FBI-t Hermite</Line>
+ <Line>Gaulle-lal Hoffmanná Godó FBI-jal Hoffmann-nal Hermanná Hermannak Hermann-nal</Line>
+ <Line>EEG Gaulle Ikarusszá Fayette-té Hoffmann-ná Fermat-vá Hunspell-lé</Line>
+ <Line>Glasgow-val Hadrianusszá CGI Falstaffal Hoffmannal Faraday BCG CGI-vel Illinoisszá</Line>
+ <Line>Ikarusszá Ganzcá Hadrianusszal Horatiusszá Faraday Galápagosszal GB-tá</Line>
+ <Line>BCG-vé Gyulay Flaubert-et Horatiusszal Horatiusszá Győrött GB Galápagossal</Line>
+ <Line>Hilzinger Fermat FBI-já Grazcal Hoffmanná Hermann-nál Illinoissá Goldman</Line>
+ <Line>Ganzzal Flaubert-rel Greenwichcsel Galápagosszal Gaulle-lá Hermann-ná</Line>
+ <Line>I Hermann-nál kHz-cé Hertzzé Flaubert Illinoissal Greenwichcsé</Line>
+ <Line>Glasgow-vá Hermanná Ganzcal Falstaffal Fayette Illinoisszá Greenwichcsel</Line>
+ <Line>CGI-vé Illinoissá Hoffmann-ná FBI-já Fourier-val Goldman Halácsy Greenwichcsé</Line>
+ <Line>Glasgow-val Hampshire Francisco- CIA GB-tal EEG-vel Győrött kHz-cel Fontaine-nel</Line>
+ <Line>Hadrianussal I Flaubert-rel Holmessal Hadrianussal Galápagosszá Fourier Goldman</Line>
+ <Line>GB Ganzcá I GB-tá Falstaffal Greenwichhel Geiger Hadrianussá Fayette-tel</Line>
+ <Line>Falstaff-fal CGI-vel Ft-tá Hermannál Hunspellé Hz Hunspell-lel Fayette Galápagossal</Line>
+ <Line>Holop Ikarussal Ikarusszá Flaubert-ré Illinoisszal Ganzzal Grimm-mé</Line>
+ <Line>Hermann-ná Fontaine Ganzzá CGI Grazcá Fejérmegyei Ganzcal Greenwichhé Flaubert-t</Line>
+ <Line>Fontaine Flaubert-et Fontaine-né Ganzzá Franciscói EEG-vé Havasalföldhez</Line>
+ <Line>Ganzzá Holmesszal Huxley Fourier-vá Falstaffal Falstaffal Fontaine</Line>
+ <Line>EEG Ganzcal Greenwichcsé Halácsy Galápagossal kHz-cé Hunspellé Gaulle-lá</Line>
+ <Line>Ikarusszá Galápagossal CIA-vá Franciscói Grazzal Illinoisszá Hoffmann-ná</Line>
+ <Line>GB Hertzzel Huron-tavit Hampshire Győrött Havasalfölden FBI-t Hermite</Line>
+ <Line>Ferenczy Ganzcá Huron-tavit Grimmé Hertzzel Ganzcá CIA-val Hadrianussal</Line>
+ <Line>Hz-cel Grazzá Hunspell-lé EEG-vé Hermann-ná Illinoissá Ferenczy Flaubert-et</Line>
+ <Line>Hermite Greenwichcsel Fehérvárott Glasgow-val GIF-fé Grimmé Ikarussá</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ÍJKLM</NewCharacters>
+ <Line>Macintosh-sal Maxwell-lel MDF-fel Mac Los FM-mé Mercedessel Mlle Matolcsy</Line>
+ <Line>Lagrange hL-t BM hL Lagosszal Janusszal Mrd Marseille-jé Möbiusszal Julianusszá</Line>
+ <Line>Leibnizcel Manná Mandrake-ké Kirchhoffal Manche Manná KFKI-vá Gay-Lussackal</Line>
+ <Line>Keatsszel La Mannak Laplace-szá Lucullusszá Mercedessé J-lal KDE-vel Marseillaise</Line>
+ <Line>Julianussá Lucullusszá Joyce-szal Lagrange-zsal MDF Lucullusszá Lagosszá</Line>
+ <Line>Monet-val GM-mel Marshall-lá Monet-vá IM EKG-vá Leibnizcé Mac Gay-Lussaccal</Line>
+ <Line>Macintosh-sá Macintosh-sá ECDL Maine Malthussal LIII Lagrange-zsá Macintosh</Line>
+ <Line>Julianusszá IM-mel Lagrange hL-ré Janus-szal hL-et J-lá Lagossá Maupassant-ná</Line>
+ <Line>Lagossá Madáchhá Matolcsy Janussal Marino- Manche-sá Mrd Kölcsey Mauritiussá</Line>
+ <Line>MEK-ké Malthussal Madáchhá Livingstone BM Mona Malájfölden EKG Melbourne-t</Line>
+ <Line>Gay-Lussaccal Manet Manet-vá Myspellé Malthussal ECDL-lé J-lal MDF-fé Gay-Lussaccal</Line>
+ <Line>IBM-mel Laplace-szal Macintosh-ot KGB-vé Karinthy MB-tá J-lá Maxwell-lel</Line>
+ <Line>Manet MEK-kel Mann-nál FÁK Kováchcsá Joyce-szal IBM Janus-szal Kaposvárott</Line>
+ <Line>Marseille-jel Mezőfölden LIII KFKI-val LE-vé Melbourne Lebesgue Matolcsy Massachusettssé</Line>
+ <Line>Jamessel ECDL Kováchhal FÁK-kal Maupassant KDE-vel Marseille-jé Mann-ná</Line>
+ <Line>Marseillaise Melbourne-nel Madáchhal Marshallá Mindszenty Mariotte IBM Gay-Lussackal</Line>
+ <Line>Marseille-jé KDE-vel Kaposvárott Myspellel Manná GM-mé BM Julianusszal Mayer</Line>
+ <Line>Mercedessé Lagosszá Jamessel La Lagrange GM-mel Livingstone-ná Kaposvárott</Line>
+ <Line>Loire Melbourne-t IM KDE Malájfölden Matolcsy Mann-nál Maupassant-ná</Line>
+ <Line>Mac Mac-kel Mauritiussal Liviussá Maxwell-lé Möbiusszal Mannak Lappfölden</Line>
+ <Line>Linzzel Lavoisier-val Malthussal Melbourne-nel MHz Marshallal Julianusszal</Line>
+ <Line>Livingstone-ná Marinói Lappföldhez Mannal Mannál Kiss-sé Linzcel MHz-cel Marseille-t</Line>
+ <Line>Maine Malájfölden Mona Larousse Leone Marshall-lá Mann-ná MEK-kel</Line>
+ <Line>Monte Komensky Manet BME-vel Janeirói Macintosh-sá Joyce Manche FÁK</Line>
+ <Line>Maxwell-lel Montaigne ÉK KFKI-val Lagrange-zsal Malthusszal Janus-szal kJ</Line>
+ <Line>Lucullussal IBM-mel Mannal Mauritiussal Mariotte Mylord Linzzé Montesquieu</Line>
+ <Line>Louvre-ral Manche-sá MÉH IBM-mel Montesquieu Mrd MEK-ké FÁK-kal GM-mel</Line>
+ <Line>Mauritiussal ECDL-lé Manná Madáchcsá Myspellé J-lal Lagossal Möbiussá Mercedesszé</Line>
+ <Line>hL-et Liviussal Möbiussá FÁK Gay-Lussaccá BME hL-ré Mac Macintosh-sá</Line>
+ <Line>Mandrake-kel Joyce-t ECDL-lé Lagrange KFKI MHz-cé Melbourne Macintosh-t BME</Line>
+ </Level>
+ <Level>
+ <NewCharacters>NOÓÖŐ</NewCharacters>
+ <Line>OpenOffice Ovidiusszá DNy Nautilussá Ny MOL Onyega-tavit Onyega-tavit Naszódi</Line>
+ <Line>Neumann-nak MOL Ovidiussá OOo KOffice-t KÖM Office OpenOffice-t DNy DNy-tal</Line>
+ <Line>GNOME-má ÉNy Nautilusszal Ovidiusszá MOL-lá Ovidiusszal Netscape-pel</Line>
+ <Line>Ny MNB-vé KÖM-mel DNy Ontario-tavit Nautilussal KOffice-szal ÉNy-tal</Line>
+ <Line>Nautilusszal Neumanná Netscape-pé KOffice MNB Office-szá OpenOffice-szal</Line>
+ <Line>OOo-vá OpenOffice-t KOffice-ot Ny MOL Ny MNB-vé Ovidiusszá MOL-lá OpenOffice-ot</Line>
+ <Line>KOffice-ot MOL-lá Nádasdy Nautilusszá KÖM-mé Netscape-pé DNy-tal MNB-vé</Line>
+ <Line>Neumann-nak Noll Ny-tal OKJ-val Ovidiusszal Neumanná MNB-vé Netscape Office-t</Line>
+ <Line>Nautilussal Ovidiusszá Nautilussal MNB-vé Neumann-ná OKJ-vá HÖK-ké OKJ-vá</Line>
+ <Line>Nautilussá Neumannal NDK KÖM-mé Ovidiusszal N-ná OpenOffice-szá MNB Ovidiussá</Line>
+ <Line>OpenOffice-ot N DNy OOo- DNy-tal KÖM-mé N-ná OOo KOffice-ot MNB-vé GNOME-mal</Line>
+ <Line>KOffice-szá NDK N Nautilussá KÖM Ny DNy NDK-val N-ná OpenOffice-ot ÉNy-tal</Line>
+ <Line>Office-ot Netscape OpenOffice-szal Nautilussal OKJ OM Netscape Nautilussal</Line>
+ <Line>KOffice-t OpenOffice Neumannál KOffice-szá OM NumLock KÖM-mé OOo-val Office</Line>
+ <Line>Netscape Neumannal DNy ÉNy Németalfölden Ny-tá Otto-féle Ny-tá HÖK-kel</Line>
+ <Line>Neumannak Ovidiusszal KOffice-szal Németalfölden KOffice Ny-tá Nautilusszá</Line>
+ <Line>Neumannal N-ná KÖM Németalfölden KOffice Nautilusszá N-ná OKJ-val Neumann-nal</Line>
+ <Line>Netscape-pel KOffice-t Netscape OM-mel MNB OOo- Office-t HÖK-kel MNB-vel</Line>
+ <Line>Ovidiusszal Office-szá OKJ-val Naszódi Naszódi Ontario-tavit MNB-vé OpenOffice</Line>
+ <Line>ÉNy-tal MOL-lal Németalföldhez Neumannak Ontario-tavit DNy HÖK-ké GNOME</Line>
+ <Line>NumLock OM-mel Onyega-tavit Nautilussal Office-szá OpenOffice-t MNB-vé</Line>
+ <Line>Office-ot MOL ÉNy-tal HÖK-ké OOo MOL-lá MOL NDK-vá Noll Office Ny OpenOffice-t</Line>
+ <Line>GNOME Neumannal NDK NumLock Ovidiussá Nádasdy Netscape Németalföldhez</Line>
+ <Line>DNy-tal Office-ot HÖK-kel KOffice-szá Neumanná OpenOffice-szá Office-szá</Line>
+ <Line>Neumann-nal KOffice OM-mel MOL Office-szá MNB-vel MOL-lá OKJ-vá OOo Office-szal</Line>
+ <Line>OKJ ÉNy Németalfölden OOo- KÖM OpenOffice Ovidiussá HÖK-kel Ovidiussá</Line>
+ <Line>Ovidiussal Neumannal Ny-tá OpenOffice-ot OM-mel OOo-val Noll MNB-vel KÖM</Line>
+ <Line>DNy KOffice-ot KOffice Neumann-nál GNOME-mal Neumannal HÖK-kel MNB-vel</Line>
+ <Line>OpenOffice-szá OOo OpenOffice OM-mé OOo Neumann-ná NDK-val OOo-val ÉNy Ny-tal</Line>
+ <Line>OM-mel N GNOME Neumanná Netscape-pé OKJ-vá KÖM OOo-vá Netscape-pel</Line>
+ </Level>
+ <Level>
+ <NewCharacters>PQRST</NewCharacters>
+ <Line>Rubenssé LGPL-t Rabelais-vá Pliniussal HTML-lé Tallinn-nál API-val Rimbaud-vá</Line>
+ <Line>Texassal SMS-sel StarOffice Provence-szal Pannonius-szal Tacitusszal</Line>
+ <Line>Rabelais-val Scottól ASCII DNS Philipssel OTP SOS-sel DOS-szal Tellé Széll-lel</Line>
+ <Line>Philipssé Suriname-mal Rimbaud-vá PHP-val ISDN Panasoniccá Provence ASCII-val</Line>
+ <Line>JATE-vá Sztevanovity Slackware-ré Sienkiewiczcsé ISBN-nel Peugeot-vá</Line>
+ <Line>Rimbaud Rimbaud-vá Rolls-Royce-szal Riemannak BTK-vá Rousseau-vá Timesszá</Line>
+ <Line>OOP-vé APEH-há Philipssel Richelieu-vé ORFK BRFK-val HTML-t Paulói</Line>
+ <Line>Remussá Richelieu MIÉP-pel Paracelsusszá Pannoniussá ANSI-val RAM APEH-hel</Line>
+ <Line>ISDN-né ISDN-nel LSD FreeBSD-vel Slackware-ré Traianussá Remusszal OTKA-vá</Line>
+ <Line>SuSE-vá GPL-lé Tellé Riemanná NATO Seychelle FreeBSD-vel Tiberusszá</Line>
+ <Line>Pa-lal CSS-et GPL-lé FKGP-vé Rico- OTP-vé DDT SI-vé APEH-t RNS Riemann-nal</Line>
+ <Line>Tacitusszá Straussal DNS-sel Rabelais-vá DTD-vé Richelieu Rolls-Royce-t</Line>
+ <Line>Québeccé Pilinszky Pa-lal Paracelsussá Québeckel Pétervárott PhD-val</Line>
+ <Line>LGPL-t KTM-mé Tiberusszá NAT-tal Texasszá Tallinn-nak Sorbonne-nal</Line>
+ <Line>OTKA-vá TDK-val ISO-val GATE GATE-vá Qt Sienkiewiczcsé KGST-vé GPL-lé</Line>
+ <Line>ADSL OOP Sorbonne SQL-t CD-ROM-mal Sydney ORFK APEH-hal ANSI FreeBSD-vé</Line>
+ <Line>Riemann-ná Russell-lal Sienkiewiczcsé ASCII-val Tallinn-nal Talinnál GTK</Line>
+ <Line>Shaw Slackware Shaw-vá Poe-vá DDT Renault-val Toulouse Texassá Sir</Line>
+ <Line>TIT-té Tallinnal Scott-tá Székesfehérvárott Titaniccá Peugeot-vá Robespierre-rel</Line>
+ <Line>API Philipssel Texassá MTI-vé Renault-vá CSS-et SOS-sel CSS-et GDP-vé</Line>
+ <Line>KDNP-vé Tallinnal TIT-té Spartacusszal Qt-vel Russellal Texasszal TBC-vé</Line>
+ <Line>HTML-t GPL-t ELTE Renault-val Rico- ORFK API-vá SOS Quijote Pannoniusszal</Line>
+ <Line>NASA-val ANSI Russellal Paraguay FKGP Riemann-nal Timesszá Sienkiewiczcé</Line>
+ <Line>Phare Tiberussal LGPL-t PIN-nel KDNP-vel BRFK-vá Rico- TIT-tel Paracelsussá</Line>
+ <Line>ISDN-né Sierra Paterson Siemensszel JPG SQL-lel ISBN TB Sao Russellá</Line>
+ <Line>OTP-vé Racine-nal Rubenssel GTK-val Rico- Tellel PDF-fel Phare CSS-sé</Line>
+ <Line>Pannoniussal Renault-vá JPG-vé Tallinn-nál Scottól Traianussá Seattle-lel</Line>
+ <Line>Shakespeare-t Timesszal Timessal MTI APEH Tallinnal Romulusszal PhD Paulói</Line>
+ <Line>tRNS tRNS BMP HTML-et GPS-szel RAM-má Spartacussal BTK Renault-val</Line>
+ <Line>GPL-lé GDP Panasoniccá Tartuffe-fé DNS-sel ELTE-vel Siemensszel Russell-lal</Line>
+ </Level>
+ <Level>
+ <NewCharacters>UÚÜŰV</NewCharacters>
+ <Line>EU UltraSPARC V V-tal UltraSPARC UNICEF-fel Versailles-t UNICODE</Line>
+ <Line>Voltaire-rel ÁVH-vá URH-val BKV MÁV HÉV Vilniussá MALÉV-vá MALÉV-val BNV-vel</Line>
+ <Line>VIT MÁV-vá EU-val UltraSPARC-ká EU-vá DVD-vé HÉV-vel Vámbéry USA-val</Line>
+ <Line>eV Vergiliusszá BNV-vé Versailles MALÉV-val HVG ÁVH-vá Vass-sal</Line>
+ <Line>ÁVH-val Voltaire-ré eV-tal Vilniusszá LVII Versailles-jal MÁV-vá DVD-vel</Line>
+ <Line>UEFA-vá Versailles-já UEFA IV USA-val GUI SVG-vel IV UEFA-vá BKV-vá</Line>
+ <Line>MTV UNESCO-vá LVIII ÁVH-val SVG-vé eV-tá UEFA Virgin-szigetekit</Line>
+ <Line>Vilniussal Voltaire UNESCO-vá IV UNICODE-dal MÁV-vá Vary ÁVH-val eV-tal</Line>
+ <Line>MÁV-vá Vilniussal BKV VI Voltaire Valéry Vesta-szűzit MÁV-vá V-tá VIT-té</Line>
+ <Line>DVD-vel USA-val UEFA-val eV-tal VIT-tel UNESCO-vá UEFA-val ÁVH-vá UltraSPARC</Line>
+ <Line>BKV ÁVH-val EU-vá MALÉV-val SVG Versailles-jal GUI-val UNICODE-dá</Line>
+ <Line>MALÉV-val HIV BNV-vé BNV Versailles-t PVC-vel Valéry HVG-vel Vass-sal</Line>
+ <Line>Verlaine-nel EU-val Vilniusszal Voltaire-rel PVC-vé BKV-val Voltaire-rel</Line>
+ <Line>BNV Verlaine Versailles-já Vörösmarty SVG-vel GUI Vilniusszal Vörösmarty</Line>
+ <Line>MALÉV EU-vá Voltaire-rel UHU HIV UNICEF-fel ÁVH eV Voltaire-ré PVC-vel</Line>
+ <Line>UltraSPARC-ká Voltaire-et USA-vá MALÉV MALÉV-val MALÉV-val DVD USA-val MÁV</Line>
+ <Line>BNV-vé MALÉV Vergiliusszá Vergiliussá URH-val Versailles-jal LV HÉV-vel</Line>
+ <Line>MTV-vel EU-val Voltaire-ré Vilniusszal UNICEF-fé BNV-vé Vergiliussá</Line>
+ <Line>kV-tal UNICODE-dá kV Voltaire-ré VIII UHU LVI LVI Voltaire-et VI LVII</Line>
+ <Line>BKV-vá URH Vilniusszá SVG-vel EU Verlaine Vesta-szűzit BNV-vel Voltaire</Line>
+ <Line>V-tal UltraSPARC-ká GUI-val URH-vá GUI-val VIII Vácott MALÉV-vá Voltaire-rel</Line>
+ <Line>USA-vá MTV PVC-vel kV-tal UNICEF-fé Vilniusszal MTV-vel BKV-val Vilniussá</Line>
+ <Line>Vilniusszá UNICODE-dal Vass-sal Verlaine-nel Versailles-t USA Vácott Uruguay</Line>
+ <Line>HÉV BNV-vé HVG V GUI MÁV-val Vergiliusszal EU-vá EU MALÉV-vá LVI</Line>
+ <Line>URH-vá kV Uruguay LVI URH kV BKV MTV SVG-vel VIT-té UNICEF-fel HVG-vel</Line>
+ <Line>MÁV-vá BNV-vé ÁVH-vá ÁVH-val Verlaine-né Vergiliussá eV-tá USA UNESCO-val</Line>
+ <Line>Voltaire V-tal UNICEF UNICODE-dal VII UltraSPARC-kal UEFA GUI-vá Versailles-já</Line>
+ <Line>Verlaine-nel HIV UHU Voltaire-rel Vörösmarty kV-tal LIV VII BKV EU LVIII</Line>
+ <Line>Verlaine GNU-vá Voltaire-et UHU Uruguay Uruguay Versailles-jal Vergiliusszá</Line>
+ <Line>HÉV-vé BNV-vé USA-vá ÁVH URH-val MTV-vel UEFA-vá Vandermonde USA Vergiliusszal</Line>
+ </Level>
+ <Level>
+ <NewCharacters>WXYZ</NewCharacters>
+ <Line>XCIII LXXII SZTE XLIV HOGYAN-t SZDSZ XXXV LXII Windows-zá XXL-lé KRESZ-szel</Line>
+ <Line>XML-et XCIII Züricht Bajcsy-Zsilinszky XXIII XCII NSZK-vá XXXL-lel</Line>
+ <Line>XXXVIII XVII kW-tal XXL-lé XXXII MSZMP IBUSZ NSZK-vá LXIV XXXL-lé Záchcsal</Line>
+ <Line>XXX LXXIV BMW Windowssal XCVI SZDSZ-szé IBUSZ-szá TypoTeX LXIII</Line>
+ <Line>SZTE-vé TXT-vé LXVIII LX MSZP-vel LXXV IX Wilde RMDSZ-szé ENSZ-szel</Line>
+ <Line>XXXII GYIK XLVII XXI SZU-val XIII LXXI LXIV XLIX IBUSZ-szá LXIII SZU-val</Line>
+ <Line>Zeissel XIX SZTE-vé Záchhal Wilde-dá Weierstrass-szal MLSZ-szel Weierstrassá</Line>
+ <Line>XC LaTeX-hé XXL-lé Záchhal ENSZ-t Werbőczy LXIV RMDSZ-szé Bajcsy-Zsilinszky</Line>
+ <Line>XLV RMDSZ-szel LXI LXVIII SZTE-vé HOGYAN-ot Wilde Záchcsal ENSZ</Line>
+ <Line>LXXXIII XVII LXXXII XL XV XCVII XXXVI ENSZ-t IBUSZ-szá XML-lel W LXII</Line>
+ <Line>IBUSZ WHO-val TXT-vel Wellsszé XML-lel kW LXX XXVI LXIV ÁNTSZ-szel</Line>
+ <Line>IBUSZ-szal TXT-vé XXIX HOGYAN-ot HOGYAN-ot SZU-val WC-vé XXIX Zichy KISZ</Line>
+ <Line>XIV LXXXVI MLSZ-szel MSZMP-vel XCVII HOGYAN-ná LXXXV XCV KISZ XCVII</Line>
+ <Line>Weierstrass-szal TeX-hel XL-lel ÁNTSZ-szel XXX Zsolnay Windows-zá Wellsszel Yucatán-szigetekit</Line>
+ <Line>LaTeX-hel XXIX RMDSZ-szel XXIX XXXL kW-tá SZDSZ-szel XX GYIK-kal XVI TXT-vel</Line>
+ <Line>Zichy GYIK-kal W-tal IBUSZ-szal XXXIX XXI Weierstrass-szá WC XVI XXL-lé</Line>
+ <Line>XLVI ENSZ X XXXV WC-vé WC XXXI XXL LX RMDSZ-szé LXXIII HOGYAN-t XC</Line>
+ <Line>LX LXXXIII XXI Werbőczy LXXVIII XLIII Wellssel XXV SZDSZ-szel HOGYAN</Line>
+ <Line>MSZP-vé WC-vé XLVII XLIV XXIX SZU-val LXV kW-tal LXXII LaTeX MSZMP-vé</Line>
+ <Line>LXXXI XXIV RMDSZ-szel XML LaTeX-hé Záchcsá Zeiss-szel MLSZ-szel LaTeX-hel</Line>
+ <Line>XXXI XCVII XXXVIII SZU-vá Watt-tá SZTE MSZP-vé XLI XVI Zsolnay XLVII</Line>
+ <Line>BMW LXXXVIII Yellowstone LXXXVI KRESZ-szé XCII TXT-vel XCVIII LaTeX-kel</Line>
+ <Line>MLSZ-szel XXL-lé IX ENSZ-szé XLIII Yucatán-szigetekit LXV XXXL Wellsséw</Line>
+ <Line>Windowssá Weierstrass-szá RMDSZ LaTeX-hel TeX-hel XVII XML-et TeX-hé kW-tal</Line>
+ <Line>ENSZ-t XX ENSZ-szé Wattal XCIX XLIX Bajcsy-Zsilinszky ÁNTSZ XXXVIII</Line>
+ <Line>XXL-lé Wattal ENSZ-szel XX LXII HOGYAN-t GYIK-ká XLV LXXIX Windowszal</Line>
+ <Line>Bajcsy-Zsilinszky XLI LaTeX XIV Weierstrassal XCI MSZP XL-lel XII XXXL-lé XXV</Line>
+ <Line>WHO LaTeX XXL KISZ-szé kW Werbőczy TeX XXXIV LXXXI Bajcsy-Zsilinszky</Line>
+ <Line>Windowszá MSZP-vel LXXXV MSZP ÁNTSZ XL LXIV MSZP-vel LXXXVIII RMDSZ-szel</Line>
+ <Line>IBUSZ XLI XIX XIV Weierstrass-szá XCVI Záchcsá KRESZ-szel XXXL-lel</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/italian.ktouch.xml b/ktouch/training/italian.ktouch.xml
new file mode 100644
index 00000000..95f25136
--- /dev/null
+++ b/ktouch/training/italian.ktouch.xml
@@ -0,0 +1,503 @@
+<KTouchLecture>
+ <Title>Italien (auto-generated)</Title>
+ <Comment>KTouch training file generated Tue Jul 27 13:27:52 2004
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>f ffj jf jf jjfj fjjj jfj jf f ff jjfj jjf jfjj jfjj jf jfjj ffj</Line>
+ <Line>fjjf jf fj j ff fj jjf jfjj fjf fjf ff ff fjjj j jj fj ff jjjj jf</Line>
+ <Line>f jf jj ff ffj fj f fjf ff f jjjj fj j ff j ff ffj jjjj fj jfj</Line>
+ <Line>jjjj jjfj f j ffj fjjj jjfj jjf jjfj f jj ff jjf jj ff jfj f f ff</Line>
+ <Line>f fjff j jf fj jfj jf ff fj jjfj fj jj fjff fjjf jj fj j jjf jj</Line>
+ <Line>ff jj f jfjj jjjj jjfj fjjf jjfj jf jjf fj fj fjf jf jfjj ff fjjj</Line>
+ <Line>fj jf jfjj ff jf jjfj jj fjjj jj jfj ff fj fjf jj fj ffj j j ffj</Line>
+ <Line>fj fjjj f ff fjjj fjjj f jfjj jfjj fjff jfjj ff ffj jjf jjjj jf</Line>
+ <Line>fjjf jjjj fjf jjfj jf ffj jjjj j ff jfjj j jj jf jf f jf jfj fjjj</Line>
+ <Line>fj fjf j j jjfj jjfj jf ffj jjfj jj fjjj jfj fj ff jfjj jjfj fjff</Line>
+ <Line>ff j ffj jjfj fj j jjjj jfjj j j ff fj ff jfjj fj ffj fjjf ff ff</Line>
+ <Line>f jfjj jfjj jf fjjj jfjj jf jjjj f jf jj fjf f jfjj fjjj fjjj</Line>
+ <Line>jjfj jjfj fjjf fjjj fj f jfjj fjjf f jjjj fjf jjfj jj fj j j jjf</Line>
+ <Line>jjfj fjjf ffj ffj fj fjff jjjj jjjj fj f fjjf fjjj jfjj ff ff fjjf</Line>
+ <Line>fj jjjj jf j j jfjj jf fjjj fjjf fj jfjj jfjj j ff fj jf jjjj ff</Line>
+ <Line>ff fj j fjjj fj jj ff jfjj jjf fj jjfj f j jf jf ff ff fjjj jfj</Line>
+ <Line>jf fj jfj j ff fjff jf jf j j ff j ff j fj j fjf jjf jjfj fj fjjf</Line>
+ <Line>jfj fj jf fj ff fjjj fjf jf jf jj jjfj jfj f j ff jfjj jjf ff jjfj</Line>
+ <Line>fjjf ff ff fj fj jj j jf ff j j fj fj ff f jj j jfjj fj j fj jjfj</Line>
+ <Line>jf f jfjj jjjj ff jj j jf fj jf j fj fjjj jfjj fj jjfj j j f ff</Line>
+ <Line>j f jjfj ff fjjf jf jjf jfj fjff ff fjf jfjj jjfj jjf ff jjfj</Line>
+ <Line>jjjj j fj fjf jjfj ff jf jf jf jfjj fjff j fj f jf fj f jj ff jj</Line>
+ <Line>jfj jjfj jj jjjj ff fjf j f fjjj j fj jjjj fjjf jjjj fjjf j j ff</Line>
+ <Line>jfj jjfj ff fjff f fj fjjf jj j j fjff jf jj fjjf jfjj fjff fj j</Line>
+ <Line>ff fj jjjj jfjj j fj fjjf jfjj j jj fjf jjjj j jjf j jfjj ffj jfjj</Line>
+ <Line>jjfj j fj fjjj jf fjf jjfj jfjj fjf ff ff jjjj f fjjf fjf fj jj j</Line>
+ <Line>ff jfj ff jjfj jj j jf jj jfjj ff jjjj fjf ffj j fjf fjf jjjj ffj</Line>
+ <Line>ff ffj jjjj ff jjfj fj j jf f f fjjf ffj j fj jjfj fj ff jfjj fj</Line>
+ <Line>fj j jj jj f ff ff ff ff jf f jjfj fjjj fjjf j ffj jj jjjj ff ff</Line>
+ <Line>fjjj ff ffj jj fjjj fjf jf ff jf jfjj ff jf jfjj j jjjj jjf ff fj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>djj jjkf ddj k djk ddj d dj jd dj kfdff kkjk kdkd fk fk d kj jk</Line>
+ <Line>kfdff dk jk fk k dk fd d fd jfjk d dk fk jd jk jk fk kfdff djk df</Line>
+ <Line>fk jfjk d dj jk fk dd dk kdkd dk dd fk jfjk jk kdkd kj dj d fd</Line>
+ <Line>k kd kj d kdkd k k dk jd df dd jd dd jd djk kd dk df jd df jk</Line>
+ <Line>fk ddj jd jk jd ddj dk dd ddj djk dk kdkd kkjk fk djj fd kd dk</Line>
+ <Line>d fd fd kk kd kd d dd dj d kfdj dk k kfdj kfdj dk fk dj df df</Line>
+ <Line>jfjk jfjk kfdff ddj df dk dk d ddj fd dd dj d df d fk dj dd jk df</Line>
+ <Line>ddj df jd kj jd d dk dj jfjk dd d jk fk fk fk kd df djj jd kfdj</Line>
+ <Line>jk d dj df kj df djj fk kfdj kkjk k jfjk k df kfdff jfjk d kj dk</Line>
+ <Line>kk kdkd dj fd dd d kfdff df dd df dj jd jd df kd k ddj fd jd jjkf</Line>
+ <Line>jd kkjk kdkd k d jd df kd dj d kkjk kfdff kkjk kfdj dd kfdff d</Line>
+ <Line>k jd djk df jfjk dd kk dj dj dk jfjk kfdff kdkd jd ddj df d dk</Line>
+ <Line>kfdj dj kj df dj kfdj jjkf kfdj d d k kj kdkd jfjk kfdff jd fk jjkf</Line>
+ <Line>dk d d kd jd d d jfjk d fk kj fd fk dd jfjk d kj dj fk dk dj djk</Line>
+ <Line>kfdj fk kdkd df kkjk k kj d dj jfjk d dj fk jk d jjkf djj dk jd kfdff</Line>
+ <Line>jjkf k kdkd d kd fk fk d d fk k dd djj kd df fk k fk dd jk dk ddj</Line>
+ <Line>kkjk kfdj d fd jjkf d fk ddj jjkf k jd d kd djj kdkd kfdff d dj jd</Line>
+ <Line>kfdj kfdff dk d kfdff kj df djj dj fk d kdkd d dk d dk k dk jd df</Line>
+ <Line>kdkd kdkd fk fk jjkf djk dj kfdff kfdff kfdj ddj kj dd fd djk dj</Line>
+ <Line>kj fd kdkd dd kfdj jd jfjk kfdj kd dd kfdj djk kdkd dd djj kfdff</Line>
+ <Line>dj df jd df fk df df d fk df fd kfdj kfdff kfdff df dd d d d jd</Line>
+ <Line>dd dd djk kfdj dk d jjkf fd dd kdkd df dk kfdj dk dj kkjk kkjk</Line>
+ <Line>jfjk kj kd fd kj jjkf kd fk dk dd kfdff jfjk d kd d jjkf djj kfdj</Line>
+ <Line>jd dj dk kkjk jd d df df djk df jk dk d djj djj df djk djk d djj</Line>
+ <Line>kfdff d kj df d dk d d djk dj fk fk djj kj df kfdff dd k dj kfdff</Line>
+ <Line>ddj df d kfdj kj jjkf d dj jfjk kd d kkjk fd kfdj jd k d df d kfdff</Line>
+ <Line>fk djj fd dk d dk dd jd djj d d fk kj df d d kk djj dj ddj dk jd</Line>
+ <Line>ddj d df fk dk kkjk jfjk kfdff jd kfdj jk fd d kdkd d d kdkd d dk</Line>
+ <Line>df kd kkjk dj djj jjkf jk jd fk jd dj jjkf dk ddj fk d jjkf dj</Line>
+ <Line>djk dk kj d ddj fk kfdff djj kkjk kfdff djj jd fd dk df kfdff dk</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>jkll dsk dsk sfl lfsj ss sfl fjl fjsf sl sfl sllld ls ls skfds ksf</Line>
+ <Line>ls jsd kl sfj js l kl sllld sl sl js sjll js lfsj l lfsj sfl dsk</Line>
+ <Line>ss l fsl sjll sflk fsl jsd ksf sl fjsf l sl sfl sflk l sl dsk sjll</Line>
+ <Line>l l fjsf ls sl ldd sfl sl sfl sl skfds l jlk ldd ls l jsd ss jsd</Line>
+ <Line>jlk lfsj ss ldd sfj ls l ss ls l ss ls ss sfl fjl js sfl sjll sl</Line>
+ <Line>sl js sjll sllld sfj ss jlk sfj ls lfsj ldd ss fjsf sllld kl l</Line>
+ <Line>l sfj jsd sl fjsf ls sjll sl lfsj fsl jkll jlk sflk sf l sl ldd</Line>
+ <Line>sl l ls fjsf l sfl fjsf sllld ls sfl ldd sjll ss lfsj sl l fsl</Line>
+ <Line>ss dsk jsd lfsj sjll l sllld sfl kl dsk js jlk jsd dsk sfl ldd</Line>
+ <Line>lfsj ss jlk l skfds ksf sl ls sfl dsk fjsf fjsf l sfl fsl sfl sf</Line>
+ <Line>ss fjsf jsd jlk fjl sllld jlk sfj sfj sfl l sflk sfl l ls l dsk</Line>
+ <Line>jlk skfds sfl sl sfl sl sfj jlk l kl kl jsd fjl skfds sjll fjl skfds</Line>
+ <Line>js sl l skfds sllld kl l jsd sfl sllld sl sf fjsf js sl sl dsk</Line>
+ <Line>kl kl kl dsk sflk kl l sfj sl l fjl jsd ss fjsf l ss dsk fsl sl</Line>
+ <Line>jlk dsk sl js l l sl kl sf ksf sllld dsk l js ksf sfj sflk l sl</Line>
+ <Line>ldd jkll kl sflk jlk ls ldd lfsj sllld sl sfj ls ss sfl sjll lfsj</Line>
+ <Line>ls jlk ss jlk l l jsd kl sl l lfsj ksf l ls sf ss sfl js fjl sf</Line>
+ <Line>sflk lfsj sfl jlk l sl jlk sflk fsl dsk sl ls fsl fsl l js fjsf kl</Line>
+ <Line>sfj ss sfl l fjl fsl jkll kl sf sjll sflk dsk fjl sllld l ls ss</Line>
+ <Line>sfj sfj sf l sflk ss sfl fjl l ls ksf kl l skfds ksf sl l fsl sfl</Line>
+ <Line>l lfsj l sl sjll sflk l js ls sjll sfl kl jsd js ls fjsf dsk sl</Line>
+ <Line>fjl ksf jlk sjll ss l ls js jlk skfds sflk jlk jsd sl sjll fjsf</Line>
+ <Line>lfsj sfj js sfj sl l jlk ldd sfl kl ss sfl sllld sl sf dsk ls fsl</Line>
+ <Line>ss ss kl fjl ls fsl dsk l ss jlk kl sf dsk ksf ss skfds jkll fjl</Line>
+ <Line>sl ls sllld jsd kl js ss sl kl sjll ss jsd fsl sfj ss kl l ss fjsf</Line>
+ <Line>fsl dsk ksf sfl fjsf ss sfj l kl fjl ss ksf ls l sfl l sfl sfl l</Line>
+ <Line>sflk sjll skfds ksf sjll jlk ls sllld sl l sfl l sjll ss jlk sf jsd</Line>
+ <Line>sl l dsk l sfj jkll js lfsj ls sllld sfl jsd sfl skfds ksf sfl</Line>
+ <Line>sjll sllld ls ldd jsd sflk jsd sl lfsj fsl kl ls fsl lfsj ldd fsl</Line>
+ <Line>ss sf sfl kl sfj jsd fsl ls fjsf fjsf sfl ldd l sfl l ss sf ls</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ca</NewCharacters>
+ <Line>cf alla casa salassa cala jc falla dalla llcl lacca falda scalda</Line>
+ <Line>alla dalla alfa dafjs cassa jc scalda calda jc sala scassa sacca</Line>
+ <Line>scada calda jc falla aaaad cassa alfa jc sala scala salsa alfa falsa</Line>
+ <Line>salassa alfa sala accasa kc alla dafjs alfa scala calda accasa dall</Line>
+ <Line>cala salda dafjs accasa aaaad salsa alfa alfa casa dalla cala alfa</Line>
+ <Line>aaaad dalla kc calda aaaad lacca alfa falda sacca falla dall alfa</Line>
+ <Line>scassa salassa salda salda accada falsa scala scala jc alfa falda sala</Line>
+ <Line>falsa salassa scada jc calda alla falla falla kc salda accasa accada</Line>
+ <Line>llcl calda llcl lacca alla sacca llcl scassa falla falsa jc calda</Line>
+ <Line>sala scalda salassa casa cf jc sacca sacca lacca jc llcl cf accada</Line>
+ <Line>scalda sala cala accada cassa kc alfa accada salsa sala scalda dall</Line>
+ <Line>scalda scassa cassa kc scada cassa dall dafjs alfa alfa cala salda</Line>
+ <Line>cf cf cassa sacca alfa llcl cala falda calda falda accasa sala</Line>
+ <Line>cala scala llcl dafjs scassa sacca dall scalda accada cf calda alla</Line>
+ <Line>dafjs sala salsa dalla scada falda scala aaaad aaaad scala lacca alla</Line>
+ <Line>cala jc falsa falla dafjs dall salda dalla salassa aaaad aaaad salda</Line>
+ <Line>scada sacca salassa scala scalda lacca salda salsa scada cassa salda</Line>
+ <Line>sacca salassa sala lacca falsa alfa lacca scala salassa scala sala</Line>
+ <Line>lacca alfa scala falla scala kc falda salda salsa cassa scassa accasa</Line>
+ <Line>kc calda dalla cassa salsa llcl dafjs sala accada sala salsa sala</Line>
+ <Line>lacca accasa jc sala cala scassa jc sacca sala dall aaaad sacca dafjs</Line>
+ <Line>salda falla scassa salda alfa falsa alfa cf salsa accada salda sacca</Line>
+ <Line>cassa kc scassa falsa scala accada sacca alla falla cala falsa scassa</Line>
+ <Line>accasa scada calda casa dalla sacca scala sala scada salsa salassa</Line>
+ <Line>kc scalda dalla salassa scada lacca cala accada alfa llcl llcl</Line>
+ <Line>falla dall falda sala jc falsa sala lacca aaaad sala accada calda</Line>
+ <Line>scassa jc llcl sacca dalla accada accasa sala salsa scalda lacca llcl</Line>
+ <Line>accada scada sala falda accada alfa falda sala cala jc jc kc sala dafjs</Line>
+ <Line>cassa falla cala llcl cassa sala falsa llcl jc alfa lacca falsa cala</Line>
+ <Line>dalla cala dall accada dalla alla casa aaaad dalla falda dall dall</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>sassata scaldata adatta fata scattata calata attaccata fata adatta allatta</Line>
+ <Line>catasta datata attaccata cantata saltata salta scassata attaccata andata</Line>
+ <Line>stana scalata danna cascata scattata adattata cascata staffa sfatta</Line>
+ <Line>andata casta datata sanata salta scaldata annata salata tasta tanta</Line>
+ <Line>attacca dannata attacca nana scassata anca tanta allatta nata tanta</Line>
+ <Line>alta lana alta tasca tassa lana catasta adatta stanca tana data affanna</Line>
+ <Line>allattata lana canta stana scalata sassata salassata fatta nana scassata</Line>
+ <Line>alta data scatta canna scatta tassa calata staccata nafta salata</Line>
+ <Line>stalla alta salta tassata cantata allattata cantata latta alta stacca</Line>
+ <Line>sfatta canna tanta stanca tana sana casta stana scassata sana landa</Line>
+ <Line>datata sfatta staffa sanata stacca canta affanna staffa stata dannata</Line>
+ <Line>stacca tana scattata tanta anca allattata andata stacca allatta calata</Line>
+ <Line>dannata stacca casta dannata fata nafta stalla adattata allattata salassata</Line>
+ <Line>allatta stata andata santa salata tana canna sassata nafta sfatta scaldata</Line>
+ <Line>alta sana fata stanata stata sfatta nafta cantata datata nata adatta</Line>
+ <Line>sfatta cascata stancata sana datata nafta nafta adatta scassata stacca</Line>
+ <Line>sanata catasta tastata stacca stalla landa adatta danna scatta sfatta</Line>
+ <Line>alta sana data salassata data latta andata adatta scatta tasca anca</Line>
+ <Line>landa scalata salassata tassata nana stanata tassata canta tasca lana</Line>
+ <Line>salata stalla affanna scattata nana adattata adattata stata annata</Line>
+ <Line>staffa tastata andata tasta tastata saltata scaldata canta lana fatta</Line>
+ <Line>stacca attaccata tana catasta stanca calata saldata data affannata</Line>
+ <Line>scassata salata santa data sana stanata tastata saltata nafta nafta tassa</Line>
+ <Line>landa latta stancata affannata tassata tassata tasta danna scattata</Line>
+ <Line>tastata fata staccata stata scattata latta attaccata andata andata allatta</Line>
+ <Line>adatta staffa cantata casta annata stata stanca staffa fata danna nafta</Line>
+ <Line>tanta sassata staffa nafta datata canna staffa staffa nana salta andata</Line>
+ <Line>scaldata sassata dannata fata canta nana saldata adattata sfatta stalla</Line>
+ <Line>anca tastata stalla staccata stana staffa salata cantata affannata</Line>
+ <Line>attaccata salta adatta fata landa casta scassata scalata tastata anca</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iv</NewCharacters>
+ <Line>affacciatici incanta statista incivili affaticatisi falciavi cavalla avvisi</Line>
+ <Line>lanciava sindacati cinici dici stancassi statisti accasassi scassavi</Line>
+ <Line>nidi inviassi affidava distaccata incassati scalati asina intasai</Line>
+ <Line>lavai lavandai inviavi scandita assassina vaccini valida faticati</Line>
+ <Line>taciti disfatta fasciassi scavavi adattasti assillassi svanivi avvisava</Line>
+ <Line>assassinai slacciassi distati svitava avida vana allattava accasasti stancassi</Line>
+ <Line>fasciavi affannassi tintinnii tasti annidata svisata dici salassavi lanci</Line>
+ <Line>assassini accaniti aliti dilaniava vantava cacciasti cacci affiliata latina</Line>
+ <Line>stiva vini fissi falciava stivavi nativi laici avallava fissavi accasciata</Line>
+ <Line>scavalcai scansia visti nati avvicinatici faticati avvicini avasti nativi</Line>
+ <Line>avvistata infatti adattati scalini divini scaffali incantata datai vantati</Line>
+ <Line>salti citati inciti invitava fantastici affaticava asili tacciassi</Line>
+ <Line>stivava saldi lividi falciati lava svanita fatali visitati affannati</Line>
+ <Line>affittai cacciati cattiva avvitava dilatasti vini cantassi visitai visiva</Line>
+ <Line>allacciava affini additativi lasciavi accanita ansia avvisatici vili datai</Line>
+ <Line>slacciava inviata indica lasciava finissi saldava svii saltai scavavi</Line>
+ <Line>classici salati affiatativi distilli accaniva dannai affacciatici insalata</Line>
+ <Line>vacilli svii classica svisasti lanciavi installai distaccava dilaniata</Line>
+ <Line>dilaniasti tacciati affannatisi distillata facilita inadatti insaccati</Line>
+ <Line>anditi lanci affaticassi citavi sfiniva cinica accanintisi affila vaccinavi</Line>
+ <Line>stillava incassai sanati assillassi italiana accasciai affannatici scaccia</Line>
+ <Line>sfasciai sfacciati scalassi affaticativi stavi accidia allattatici avvitassi</Line>
+ <Line>insaccai attaccativi dici scaldavi diffidava stanava lava assisti calci</Line>
+ <Line>avassi salassava fasci accanii invitassi vaccinassi svanissi infilati</Line>
+ <Line>tacciai scacciavi affidasti lacci affaticai insili attillata sanavi</Line>
+ <Line>svitai inviata acciai affannatisi affidi scava allatti affidatisi tastavi</Line>
+ <Line>inadatta stadi affittatisi scaldassi sfacciata incanta visitai assassini</Line>
+ <Line>classificati fasciati affiatata saldai asfissia invia additativi avvisasti</Line>
+ <Line>incitavi sintattici avanti lisca distillata allacciai stivassi filavi</Line>
+ <Line>avvicini distaccata scalava vincita lavandai distilla stillati incantava</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>inventate effettive avallasse assistette infamiate civettava invitasse</Line>
+ <Line>elefante deve tediati cadesse faticate inventate allenativi accidenti</Line>
+ <Line>amativi mettiti leccai accedei intimidita stelle inviate fende mentali</Line>
+ <Line>nevica dimmela celaste stenta scalavate sedete allettasse fece vietaste</Line>
+ <Line>lamentassi stellate dimenata defletta infilaste minima evince salassaste</Line>
+ <Line>nascessi devastaste defletta staffetta caviale vedessi falciasse medie</Line>
+ <Line>levassi mendicanti velina emanasti massaie levati lede diventasti emenda</Line>
+ <Line>addensaste fisse salviate vidimai nemica ammassai salisse salma sdentata</Line>
+ <Line>salassate amnistia fattela incettassi micce scassasse salme allentasti</Line>
+ <Line>limitavi meccanismi elencate sfidasse allenativi limitiate meditata svenivate</Line>
+ <Line>disinfetti addentava dimenai smania settanta maledette lecite eccitasti</Line>
+ <Line>sfidate dissetai fame mettiti esentiate decise venite assise infettata</Line>
+ <Line>inamidiate vestite infinitesime desinava alimentai leccavi salvate saldiate</Line>
+ <Line>minima assiale esaminiate assedia tenace amassi affamati immense avvitavate</Line>
+ <Line>cimice mancate assediante inamida difendeva animava allacciasse affettantesi</Line>
+ <Line>densa cimentassi addensaste viscide siediti limitavate filasse menate</Line>
+ <Line>vestite esentate affettava smaltita difetti eccitaste assillante emette</Line>
+ <Line>scavavate malvivente emanai vesti sistemavi assistevate mandata esilia</Line>
+ <Line>mania infettai addensate svelti affilavate eliminati accennava fatene</Line>
+ <Line>decimi accendiate inamidasse sane slittaste detta tesse insalate satelliti</Line>
+ <Line>ammaccava maledivi intestiate attentava alienantisi sedai accasciate sedile</Line>
+ <Line>avasse smaltisce cimentate datate dimenati dialetti veli alleni vedete</Line>
+ <Line>edificasse sistema seni celassi ammalasti alletta lemmi annientiate ammalii</Line>
+ <Line>dente fessa attaccantesi svestissi dice ammassata seccanti salvietta</Line>
+ <Line>anelastica lesti scese vantiate delimitati limitati esclamasse selle affilavate</Line>
+ <Line>ammalavate stima cassetta dissetasti incantaste elimina lesi accettati</Line>
+ <Line>allevava smaltite elettive allacciate mandassi sentita fanale svanisce</Line>
+ <Line>ammaliante esiti stenda eccessivamente affacciiate vietati salsicce deflettevi</Line>
+ <Line>intendete caste andatela scenda statemi ciste accade scassavate decennale</Line>
+ <Line>scende devastassi nevai dettaste cantante affettati istantanea filasse</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>hermitiani riferiate chinerete elencare satira recedevi rammendi deridere</Line>
+ <Line>aritmetiche ritardare detersa ravvivai stirassi restereste avvelenerai cremate</Line>
+ <Line>avverata trasferita mischiate lecchiate circhi staccherai allatterei</Line>
+ <Line>alterantesi stendardi trascritte traenti arricchirai tradire diserti meridiana</Line>
+ <Line>chiederci dilaterei deridere trascriva criniera rassettate ricadeva fiaccare</Line>
+ <Line>firmasse smentirete reattiva inamidare salteresti adiravate tessereste</Line>
+ <Line>schernirei inventerai addestrantesi alletterei franate marchese calmerai</Line>
+ <Line>attirantisi attraente levereste ricamaste finche assestereste alterante</Line>
+ <Line>alternantisi saltare affrettava arrestati attirati immeritata riscritta marcia</Line>
+ <Line>saliera riferiste ammirasse schernissi scasserei tracciava valicare</Line>
+ <Line>disarmasti accasare tranvieri scartasse smettere tardavate sentirsi rincasava</Line>
+ <Line>rescindi mira mieterete starete alternarti traviasse esserne carcere</Line>
+ <Line>terminati salasserai avversaria strette internet svernasti alternantesi</Line>
+ <Line>ricamavi adiriate recedevate alleviarti visiterei alimentarti severi</Line>
+ <Line>attirantisi creatrice dirvi acciaierie affretteresti incaricate sverrai</Line>
+ <Line>estetiche raffinerei entrare scardina rincaraste ammireresti citereste</Line>
+ <Line>emenderai tasserai tramare attirarsi fischiate avveriate annientarmi tartassate</Line>
+ <Line>creavate schemi arenava rimediava trattasse varavate accentravi vesserete</Line>
+ <Line>variava criminali maschere inavvertite trasalisce cadaveri rideva canteresti</Line>
+ <Line>ammetterete stanchi arricchiresti smacchia ammaccherai ladra versate decreti</Line>
+ <Line>raschiate sterile tratterete mastri incarica richiedi sanerete atterravate</Line>
+ <Line>mesteresti riferisca vanteresti trasferisce raschia eserciti venerasti</Line>
+ <Line>avviarmi centrale franerete renderle avvicinerei fisserai scremi stralciate</Line>
+ <Line>incaricava stradali stentare marinerete schiantavi assideriate fischiasse</Line>
+ <Line>serraste franavi ricavasse chinassi retti raffinate scriversi ricavasse</Line>
+ <Line>certe interattiva affrancata dirti remerete slitterete venirsene schietta</Line>
+ <Line>traviasse fricativa fracassavi diletterai raffinerei incaricati chimiche</Line>
+ <Line>schermi mirasse caricata affermassi transitavi emersi rasenti irreale</Line>
+ <Line>chiamavate verificata emanereste arava rimandaste atterrante arricciare</Line>
+ <Line>ammiratrice detersi chieda allarmantisi fissare rendimenti allarma anticamera</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>vongola refrigeri svisando decoro notassero addestrandomi tosai ritegno</Line>
+ <Line>adagiativi carnagioni affrontarono informate diventato annegate accorantisi</Line>
+ <Line>stornino frodo atterrandoci tremino conosceva tritiamo svenano forcella</Line>
+ <Line>frettolosi logorando meritino assimilandoci fondasse sfogliavi adagiavamo</Line>
+ <Line>schernano sfilano tollera armeranno governata entreremmo denigrasti vestaglie</Line>
+ <Line>arrestammo terrori dirigere segregare avveleno scartammo soggettivi rimando</Line>
+ <Line>arrogavate chiamavamo aggravereste frodammo sanassero arrotolereste grafoanalisi</Line>
+ <Line>riordinata diramano dimensione scovo ritoccando conciliano condensare svegliasti</Line>
+ <Line>addentrammo tennero gestire incontrava litigavamo gioiscono allargatisi</Line>
+ <Line>adimensionali trovasse allargato dominasti caveranno acclamo arroga dondolerei</Line>
+ <Line>immigrai tormenta rigido sondassero segnalassi assodavano mostrati coronai</Line>
+ <Line>sregolate disertano fora segale accostatomi odorerete dedotte segnasti</Line>
+ <Line>torrente affiatatosi gettammo evitavamo rientrino scalando sottometto</Line>
+ <Line>visitiamo ignote denominano congedai traligni verseranno disdegnare svio</Line>
+ <Line>loderai accorciarono stroncando inchinavo rilassiamo stillavo accecando</Line>
+ <Line>svolterei integrasse marginali togli volammo gaio generavate offrigli</Line>
+ <Line>riscossero rotolaste accaniscono agivi rosolerei veneravo constatare modereremo</Line>
+ <Line>crocifisse settimo stimando tastarono annideranno aforismi trionfati lavorarono</Line>
+ <Line>sostento risanato sottintesa incantammo regnino rotaia sondino dissetiamo</Line>
+ <Line>tostata alieniamo distinsero inviavano lotte affronterete giochiamo</Line>
+ <Line>avvisandosi annotino traforiamo legato svisammo covavate scomodi indicano</Line>
+ <Line>assordano esercito alienavamo dimagrisca sfiorisse conigliere segnalano</Line>
+ <Line>accettino vaso cova accomiatate atteggiandosi canfora riformati vireremo</Line>
+ <Line>gettavamo sviato sfilano intaso sollevasse vergognoso sociologi seconde</Line>
+ <Line>affidammo tentiamo addossata immigrasse distato verificavo isoliate raccatto</Line>
+ <Line>ritornasse arricchiremo maritarono arrota adocchierete segnaliate gemello</Line>
+ <Line>odoriate ingelosiva orde tramortii scortavi sfronda finora affermino</Line>
+ <Line>vietavamo tornavo coordinato fascicoli vigilavate alleviatomi assiderandoci</Line>
+ <Line>affogarci svaghiate vagano scagliavi sgravava scontata accontentativi</Line>
+ <Line>coltivino dignitoso estivo comandata allegarono leggerne affogati coerente</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>spasimavi interrompe sfibrerei appestassi colpita tenebra spirammo precisai</Line>
+ <Line>tarpino comporta sperperare poeta birra sprecavamo approfondivate perforati</Line>
+ <Line>adoperarsi spin rapidamente propinaste spalmi abbonderemmo aggrappavo premetto</Line>
+ <Line>annebbiando copieranno sbilancino spallate provino pignoriamo rapimmo previsto</Line>
+ <Line>appesantivi penetrai abolisce pescatore passaporto adombrantisi deposita</Line>
+ <Line>rispettivamente recapitino accampi spesereste coperta esorbitavo bevibili baffo</Line>
+ <Line>ripassava sopravvenne risplendi apporti accoppiiate pollaio bisbetici</Line>
+ <Line>preveniva episodi brevettava praticammo ribassammo sopperirei temprata</Line>
+ <Line>tossirebbe proibisti praterie pregate spopolasti opinai biasimasti apportativi</Line>
+ <Line>galoppata crepiterei abbagliavano antilope accampino applicandovi basati</Line>
+ <Line>pescare baseresti opere preda riempirlo ripenserai nebbiosi provenne</Line>
+ <Line>lavabo preleviate appestiamo popolo sparlava adagierebbe copierebbe</Line>
+ <Line>penassimo sfibrerai predicesti elaborare palpino pergolato pene bottino</Line>
+ <Line>screpolato parlereste pericolose abolita sbarcherai coabitiamo rapassi</Line>
+ <Line>scampiate alienerebbero approfittatosi paesaggio ripensassi spregeremo</Line>
+ <Line>appellassi aggiornerebbe tamponai orbene verbali appostandoti spetti barbare</Line>
+ <Line>spietata incolpiate abbassassero importo pernotto panca apportante piani</Line>
+ <Line>penato potenti parallelo abitanti pesai presiedono spiraglio inabili</Line>
+ <Line>riappari scolpivo approntiate approfondireste sbocciati spellati risponda</Line>
+ <Line>obbligate speravate prendile prostrassi salpava appoggiassimo sfibravi</Line>
+ <Line>soppesammo spandono tarpavano pescammo applicato insipido provaste operanti</Line>
+ <Line>compilano precorri approfittasse stampasse platino copertoni possessiva</Line>
+ <Line>prevenendo annebbiamo appronto salverebbe acerbo provassero benderei appesantitosi</Line>
+ <Line>sporcavo appiana aprile abolissero praticano ripenso comprassi specificate</Line>
+ <Line>birbante storpie accoppiaste scalpello pedinando presbiti impedisca nobilitato</Line>
+ <Line>sbavarono apposito obbedivano simpatiche posdaterai apportiamo porpora</Line>
+ <Line>annebbieranno possedesti celebrasse mobile ripieghi badavamo sbendai riprove</Line>
+ <Line>nespola battesimo affonderebbe assemblea abbattessero albine deperivano</Line>
+ <Line>procedeva addormenterebbero ponderino scamperai scolpisce brillai traballavo</Line>
+ <Line>pinacoteca rivedibili planetari ripiegando mieterebbe vispe riposaste ricambi</Line>
+ </Level>
+ <Level>
+ <NewCharacters>qu</NewCharacters>
+ <Line>gufi ondulavo ripulirono alture cucinino amuleti allungo svalutasse</Line>
+ <Line>allungavamo fluissero guastato attribuisco pugni autoesplicativa squagliavi</Line>
+ <Line>utenti inquietudine seduta abbruna costrutto reputarono consumavo trasudano</Line>
+ <Line>accusatomi aumentasse appuntavate riusciremo sfruttino adeguai insulti</Line>
+ <Line>appunti educassero suora abiuriamo stupisca questo ultimassi paralume</Line>
+ <Line>reputeremo speculino duecentocinquanta umori sbuffi sturavamo sputeremmo</Line>
+ <Line>consumassi bussammo adunerei accumulare abiurare potature insultavi autentica</Line>
+ <Line>discutono annullavi occultano effettuavi urlare abbattuto vituperai continuo</Line>
+ <Line>puntini accuseremo tumefacciate uniformo subbuglio suggellavi fugavate</Line>
+ <Line>escludi redarguite muovo buttare subaffitti abbruni pubblicare quaranta</Line>
+ <Line>misurarono fuggiasco cuocendo defunta pubblicato fenditura duplicati commutassi</Line>
+ <Line>squarciava promuove sussurrando suoneremmo ingenua indugiate ucciderti</Line>
+ <Line>nubili acquistandovi questura trascuri sufficiente computare quoterebbe</Line>
+ <Line>pedicure annacquerebbe curvando trascurabile paurosi escluse devoluti</Line>
+ <Line>sostituita abiurammo asciugiamo rullammo affumicarmi occuperai quote offuscaste</Line>
+ <Line>urta avvenuta maturavano casualmente devolute trafugasse acquisirti</Line>
+ <Line>astuti quereliamo ultimavate adularci guariate attribuiva giurerete</Line>
+ <Line>smussate succinti lucidavi nuotereste frustata impaurirai permuta crudeli</Line>
+ <Line>ruminammo adulantisi pregusta acquietasse attualmente numerando cucinarono</Line>
+ <Line>svaluta speculiamo cullavamo amputa reputa confluire arguti luoghi illudere</Line>
+ <Line>pulseremmo speculerai elusa ustionare stupefarei aiutatoti acquisintisi</Line>
+ <Line>confetture suscitavo piacque stantuffo battute procuriate assicuro arguto</Line>
+ <Line>depuravano abituale cellule risultato alquanto clausola sontuosa fiuta</Line>
+ <Line>riassunti asciugano recuperano rifiutano adulerai frustiamo diminuite</Line>
+ <Line>desumo suonasse nauseasti camuffati occupi risciacqui deturpai trasudasti</Line>
+ <Line>congiunti suonarono unto perquisito gustosi imburra commutata abitui adulata</Line>
+ <Line>increduli consumo musichi tramuti fumaste putrefeci aumentandoti sguainino</Line>
+ <Line>discute attuerai alcun tutelammo accumulato nuotano denunciare usurpaste</Line>
+ <Line>salutati statue squaglino squarti trattenuto ulcere nullo tramutando</Line>
+ <Line>devoluti trasumanai tessiture scusati allungandoti trasudiamo trangugiai</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wn</NewCharacters>
+ <Line>sdegnata troncate allungereste tisana ragnatele sondereste pasticcino</Line>
+ <Line>aquiloni coniugammo granai comunisti incito schernisci dominammo nobilita</Line>
+ <Line>sentiresti nobilitate scontiate allungavate figurini aboliscano eventuale</Line>
+ <Line>notate esentaste odierni opinavi allentantesi accomiatante annacquasti</Line>
+ <Line>processino svanito infila grondaia strutturalmente salparono risanerei</Line>
+ <Line>salutarono emenderei riattivano svaniste condonava riscattano lanciaste</Line>
+ <Line>cognata variopinto disputando travasino indipendentemente leghino eccitarono</Line>
+ <Line>aggirando accontentantesi bastonino sparlano allungavano inventare energie</Line>
+ <Line>integrava appaiandomi numero abbrunato rientrai introitate sembrando allungeremmo</Line>
+ <Line>conservino ostentassi appianereste ammutinavo accechino aspettandovi alternatici</Line>
+ <Line>distinguere coronasti sgraneremo cucinano prenoterai rinnegavo affrontavano</Line>
+ <Line>accanirebbero sgranchito notavamo destando esteriormente rinnovati condenso</Line>
+ <Line>rammenda congedata competendo stancasti annullerei indagano indagherai</Line>
+ <Line>espugnerai stendeva inferriate appianassero vendereste annebbiai monarca</Line>
+ <Line>stridono vibrante esamina abbonarsi sconvolse svagano guastino attaccandomi</Line>
+ <Line>insultammo sintattico comunicare rimarranno elencare addenso appoggiandomi</Line>
+ <Line>turavano facendomi aggancierete accentuano indietro traenti ritornaste</Line>
+ <Line>mangiavo rana contestino incontrano cintura ignoreremo assumono nutrire</Line>
+ <Line>trapanavo svestendo troncai turbini connessa annusandovi tranci raccontati</Line>
+ <Line>dileguano ingrossi ammontante babbuino guadagnino firmando sorprende insegue</Line>
+ <Line>cimentate allattano rinvenga tornito centesimi infamando ratificano tornivi</Line>
+ <Line>dinamico ingelosii assunto ingrossi arginata cuocendo notavo atteggieranno</Line>
+ <Line>immagine toniche tiranniche affrontandoti prostrano sospinta richiedente</Line>
+ <Line>sgranerai addentasse abituavano annuseremo decantandomi accordino armandomi</Line>
+ <Line>condensare taciturne ponderi accontentatici montati lontra discutono pensereste</Line>
+ <Line>illumina garantiti arrangiatici anticipiamo conteremmo avvelena arginandosi</Line>
+ <Line>dignitoso innesti spuntino tracannavo affondatosi intimano appianeremmo</Line>
+ <Line>lusingai arrangierebbe addensereste stonate scartando renderei curino</Line>
+ <Line>dispensi ordivano mischiano modellino emenderete comportamenti dinamismo</Line>
+ <Line>tamponassi approfitteranno incitati sventate disegna arrangiatomi svaghino</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cx</NewCharacters>
+ <Line>affrancare incrementato schiena accigliato sfasciavi speculaste scrollate</Line>
+ <Line>secolare mischiasti capitola scongiuro declinaste scoppio bocciarono</Line>
+ <Line>occupo archi cancellando angoscia ricambiavo sottoscala tirchi accomodammo</Line>
+ <Line>scambiando archiviarci taccia recuperata crampi schieriamo calmino accusandoci</Line>
+ <Line>cigolerai baciato avvicinerebbero tipiche confessati scuro insacca parolacce</Line>
+ <Line>scartaste affumicassimo accendesti causiate arricchitoti corrodere chiesero</Line>
+ <Line>recuperano consultati incatenino asciugatoti chiamiamo contagiose competa</Line>
+ <Line>consultava scrostasse cessino circolavo schiarii masticato incorsi accedeva</Line>
+ <Line>asciutte scambiassi tragica assicurano sblocchino mescolasse rincarerei</Line>
+ <Line>ricoprendo dichiarati lanciavano creperai notificava annodarci crani smaltisco</Line>
+ <Line>confetture stuccato concilio binocoli accertasti commentavi provocai cavatappi</Line>
+ <Line>accasaste delicati spiaccica scalasse plance macerarono accaloravi scaldasse</Line>
+ <Line>accreditava decidermi camoscio causeremmo incrinava cavati attacco ostacolavi</Line>
+ <Line>condannato crepitano succinto assicuriamo crederebbe sferici agganciassi</Line>
+ <Line>sconnessa smascheri ricordaste ammucchia palchi notifico solcavi scontammo</Line>
+ <Line>assecondantesi decolorino recitavi squarcerei applicata ammucchia scaldammo</Line>
+ <Line>affumicavano incupisce piacque vacillammo pulci costando curvilinea colonnato</Line>
+ <Line>taciturne pubblico voce accigliato ricavarono completano accordantisi</Line>
+ <Line>agiscano luccicando cigoleremo creino comete aggruppandoci sciolgono</Line>
+ <Line>lacero caratteristiche lirica esaurisci eccedesti qualcos imbianca</Line>
+ <Line>calcagni accusassimo cultura pertica sblocchino accorciereste ricattammo</Line>
+ <Line>avvicinassi strascichi ufficiosa anticipassero rivincita denunciavo aceto</Line>
+ <Line>matriciale assicurammo prescrive procurare scaglie concludeva accusatosi</Line>
+ <Line>scaldata commentati confluisca citato trinciato ricchi evacuerete brancolo</Line>
+ <Line>accorgendoci poca corredato scrosti richiedi tematico buche termica scaltri</Line>
+ <Line>delicato aggancieremo rivincite affaticata scortarono tracciato affascinato</Line>
+ <Line>camminare compagni accorciandoci asciugereste assecondavo occhi intonachi</Line>
+ <Line>snobistiche conferiscono educhiamo consenso conservato scalerei scolorite</Line>
+ <Line>maceriate maceravo accanimmo sopisci affittarci raschierei assicurassero</Line>
+ <Line>scuotere accompagnato ricurve deperisce scrivono accontentare scovare</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yz</NewCharacters>
+ <Line>tizi penzolasse penalizzare sparizioni oziano palizzata ammazzato</Line>
+ <Line>cozzarono scherzato influenzati ammazzarti indicazione grazie zeri carezzasti</Line>
+ <Line>negoziate dirizzammo rafforzino smilzi addizionandoci avvertenza analizzarci</Line>
+ <Line>sgozzino terzetti informazioni tramezzo spazioso rinforzate dipendenza</Line>
+ <Line>corazzi orazioni imprudenza azienda attrezzavi azzuffati azzufferebbe</Line>
+ <Line>sgozzavate strizzi ammazzandovi funzionali calzone dirizzammo azzuffano</Line>
+ <Line>calziate precauzione rincalzate presenzino tassazione stazzerai azzufferemo</Line>
+ <Line>indirizzare rinforzato abbozzasti zoppicavi realizzato sovvenzioni divorziate</Line>
+ <Line>vicinanze zucche funzione sozzure inzuppano aguzzerebbero cozze benzina</Line>
+ <Line>silenziose gironzolo spruzzavo pazzo abbozzava carezze scandalizzi forzate</Line>
+ <Line>zeri azzuffammo oziavi calzai eliminazione sprezzasse accarezzo penzolata</Line>
+ <Line>sterzino saziavi pulizia azzecceranno elettrizzi relazione innalzaste</Line>
+ <Line>agonizzeremo imparziale viziavi inzuppati danzasti rincalzate grazia rafforzi</Line>
+ <Line>economizzi giudiziosa deliziando attrezzantisi annunzierei zucchina detronizzato</Line>
+ <Line>addizioneremo analizzerei spazziate tappezzaste danzeremmo riselezionabile</Line>
+ <Line>azionista aguzzai iniezioni mozzassimo iniziali seduzione stilizza balzare</Line>
+ <Line>smezzati vizino riselezionabile azzardante saziasti frequenza stazzata</Line>
+ <Line>credenze giudiziari bidirezionali pizzicammo definizioni viziosi incertezze</Line>
+ <Line>spruzzai saziavo melanzana coniazioni alzerebbero fattorizzabile calzaste</Line>
+ <Line>azzardata orizzonti spazzasti stazionaria attrezzerai sporgenza apprezzarti</Line>
+ <Line>azzarderemmo mozzasse certezze penzolasti ricchezza implementazione stizzoso</Line>
+ <Line>cozzo agonizzavate detrazioni autorizzi ammazzandovi alzante conferenze</Line>
+ <Line>forzereste smilzi indirizzare mozzasti svolazzano negoziassi internazionale</Line>
+ <Line>annunzieremo inizierete zufolavi spaziosa operazione zappammo bizzarra azzuffate</Line>
+ <Line>sezionare dimezzato danzeremmo viziato azzuffativi vizierebbe azzarderanno</Line>
+ <Line>iniziare composizione abbozzavo zoologici geometrizzazione sterzassi</Line>
+ <Line>affezionarono apprezzerete ammazzai ripugnanza azzera rialzavamo addizionarti</Line>
+ <Line>leibniziano schematizzazione balzammo alzate ammazzai affluenza ammazzandoti</Line>
+ <Line>rincalza asserzioni inzuppati altezzosi tappezzavo zoccoli sterzammo</Line>
+ <Line>attrezzerebbe finzione aguzzata sfarzo aguzzerete zucche vezzosa esattezza</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>Adagieranno Sguaino Splendesti Travasa Anniderete Mostrati Legherei Alterandone</Line>
+ <Line>Delegavamo Pomposi Blocca Arbitrio Saltata Greggi Esentavano Allacciarci</Line>
+ <Line>Balzeranno Biblici Liquidai Differenziato Turbavate Adulterai Atterreremmo</Line>
+ <Line>Incriniate Avvistiate Foschie Domiate Considerevole Tensori Dilatasti Unificammo</Line>
+ <Line>Controlli Amputatosi Ingesserai Amputereste Ritarda Torchio Diffusero</Line>
+ <Line>Esaltante Barattate Entravamo Osavano Riscuotano Annebbierebbe Rassicurai</Line>
+ <Line>Sturare Collegamenti Guadato Meccanismi Bolli Areniate Sdoppiato Visito</Line>
+ <Line>Misti Sovrano Comizio Agganciati Mutata Complete Affatico Trottando</Line>
+ <Line>Viaggerei Vestirsi Stappiamo Avversaria Disadatte Tastiera Chiedere Ammaliativi</Line>
+ <Line>Sfrondasse Adorassimo Pagavate Invenzioni Furgone Enti Affiaterei Contraendo</Line>
+ <Line>Interpreto Cooperassi Lanose Svegliamo Rimanervi Analizzeremmo Ciascun</Line>
+ <Line>Asciugandoci Anditi Ironico Aravano Devastare Sbranerei Elogi Ricerchino</Line>
+ <Line>Adunato Stirasse Assordatomi Metallica Appurereste Brontolai Prelibata</Line>
+ <Line>Ronzavi Riparate Denotata Raschiaste Diffiderei Braccetto Accaduto Accompagnassi</Line>
+ <Line>Percento Invasi Sfinisse Persuadere Visitiamo Arrangiasse Presentito</Line>
+ <Line>Purificava Strutto Sparavo Nevicarono Assillassimo Foderaste Toserei Mescolasse</Line>
+ <Line>Fandango Tuberei Potertela Impedite Eccessive Spedirai Rilevati Fiaccando</Line>
+ <Line>Tramutando Prematura Perequai Giovane Quella Amavo Dilettarsi Emissari</Line>
+ <Line>Preventivi Commentato Scossi Obbedirete Affanneranno Edotta Molari Rosolavano</Line>
+ <Line>Denigriamo Implico Interdirei Guariste Animatoti Suppongono Adegueremo</Line>
+ <Line>Tramontata Ricambiai Regneresti Loderei Lesse Impegnata Violenti Minaccerai</Line>
+ <Line>Emulavo Sgrassasse Colpivate Appuntate Schiariscano Ricorderei Arrotolare</Line>
+ <Line>Pensiamo Affittarti Allegaste Vivace Rintoccare Suonasti Amputerebbero</Line>
+ <Line>Sballiate Avvicineranno Stammi Oscillerei Affilavi Illibate Tignole Inondavo</Line>
+ <Line>Soppeserei Approntassero Spelliate Spalmai Ammazzatosi Prolungo Tenta Sopraelevo</Line>
+ <Line>Annacquassi Ritagliavi Dilaniata Sfioravi Appostandosi Acquietandomi Occorsi</Line>
+ <Line>Interesse Anticipino Ammasserai Occorra Assaggiassimo Reciterete Proibendo</Line>
+ <Line>Copi Congelino Alzate Hermitiano Annoiante Alieneremmo Trasalisco</Line>
+ <Line>Campanili Gradazione Strillerai Sibila Svoltasti Sedava Scrutando Desiderosi</Line>
+ <Line>Produzione Sigillo Letterario Incontrollabili Comandando Ripugnato Rancori</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/nederlands.ktouch.xml b/ktouch/training/nederlands.ktouch.xml
new file mode 100644
index 00000000..fad346a6
--- /dev/null
+++ b/ktouch/training/nederlands.ktouch.xml
@@ -0,0 +1,417 @@
+<KTouchLecture>
+ <Title>Nederlands (auto-genereerd)</Title>
+ <Comment>Typecursus door tijs@vandenbogaard.org
+Thu Dec 18 21:33:14 CET 2003
+
+Willekeurige data gegenereerd met het perl script
+van Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>j ff j f j f ff jjj fj</Line>
+ <Line>j jj jj jjf f f j jf j</Line>
+ <Line>fff fff ff jjf fjjf jj j</Line>
+ <Line>ff ff f ff j f jf ff fj</Line>
+ <Line>fff ff j fjjf fjjf j fj</Line>
+ <Line>ff j j ff jff ff jj jf</Line>
+ <Line>ff j ff fj fjjj jfj fj</Line>
+ <Line>jjj ff ff ff ff j jjf f</Line>
+ <Line>j ff j fj jf j ff f ff</Line>
+ <Line>fjjf jj jjj ff j fjfj ff</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>kdkk d kkk kk dddd kkkd dd</Line>
+ <Line>d kd ddd k ddd dkd dkd</Line>
+ <Line>dkd dkd ddk dd dd kk kkk</Line>
+ <Line>k d d dk k kk kk kkk dk</Line>
+ <Line>dd dd kk ddk kkd kkdk k</Line>
+ <Line>dfj kff j jjk dkk kddf dkk</Line>
+ <Line>jd j jd d kddf d j fj j</Line>
+ <Line>djj jkk kff fkkddj jffj kd</Line>
+ <Line>jfk ffd j kd jjk j dk kd</Line>
+ <Line>jdjfj kff fddjd jd kff kddf</Line>
+ <Line>dk jf kjj jkk jf jkk jffj</Line>
+ <Line>kd jjk djj df kd d kkkj</Line>
+ <Line>fddjd j kd jjfj kkfj dkk jjk</Line>
+ <Line>jf kf j jfj kfkdkj j jjk</Line>
+ <Line>jdkf jdd j kkdj jkdk jf jdjk</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>ls lssl slls ss slls slsl</Line>
+ <Line>sll ss sl sll sl sll lss</Line>
+ <Line>ss sll ll sl s llsl ssl</Line>
+ <Line>sls sl l sls sl sls lss</Line>
+ <Line>lss l ssll lsl ss sls ss</Line>
+ <Line>lsjs kdlf k kdlf f lfsj lds</Line>
+ <Line>kll lj sljdl ssd kss lj s</Line>
+ <Line>ssl k lk k jl lsjs k lds</Line>
+ <Line>ll kd lfsj jljf lk kll lsjs</Line>
+ <Line>lfsj jsll ssl f ssl kf fk</Line>
+ <Line>lsjs f ff k lk lfsj f sdds</Line>
+ <Line>kdlf klldk sf k kdlf sdds f</Line>
+ <Line>lj f sljdl jljf fk f sdds</Line>
+ <Line>k ljs sf lk f ldks f f lfsj</Line>
+ <Line>jljf dss k f ll fs sdds ljf</Line>
+ </Level>
+ <Level>
+ <NewCharacters>;a</NewCharacters>
+ <Line>aaa aa ;;; ; a; a; a ;</Line>
+ <Line>; a aa a ; a;a;; aaa;</Line>
+ <Line>; ;a;; aa ; aa ; ;a;;</Line>
+ <Line>aa aaa; ;; ; ;;;a aaa;</Line>
+ <Line>aaa ;; aa aa;; ;; ;; a</Line>
+ <Line>slaafs; la;; al kalf sa sa aak</Line>
+ <Line>sjaals; laas slaafs afkaad kaal</Line>
+ <Line>lal; dal alfa; slaak la jak</Line>
+ <Line>alaaf; klas afkalf; kalf kaal</Line>
+ <Line>aak jak; kaf afkalf; aflaad;</Line>
+ <Line>das laks; kajak kajak daal</Line>
+ <Line>fa; als faas kaas; alfa; dada</Line>
+ <Line>aas kalf dada ja alfalfa; kaal</Line>
+ <Line>la; aks ja kalk jal; daal; kalf</Line>
+ <Line>slaak; afsla; klak; sas; alaaf;</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hg</NewCharacters>
+ <Line>gghgg hg hg gh ghhgg ghghg</Line>
+ <Line>ggg h gh ghh gg ghg hh hh</Line>
+ <Line>gh hg g hhh h hh ghghg</Line>
+ <Line>gh h g ghhgg gh ghg gh</Line>
+ <Line>ghg g hgg hgh h gg hgg ghh</Line>
+ <Line>daag gas; laklaag ah haaks</Line>
+ <Line>glad sjah; sjahs; aalglad klaag</Line>
+ <Line>laklaag halfslag; af had slag</Line>
+ <Line>haak haas; kaag haak haha daag</Line>
+ <Line>dag glad; shag jas gas afhaal</Line>
+ <Line>hals laklaag hal; jassen hal hals</Line>
+ <Line>gladaf ha; afhaak slaags; glas</Line>
+ <Line>slaags jak ha ha haal kaalslag</Line>
+ <Line>aalglad; falasha jakhals; gaslaag</Line>
+ <Line>hals gaas fila; jakhals</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ur</NewCharacters>
+ <Line>r r uuu rru ur u r rruuu</Line>
+ <Line>uu uu rruuu ur r ur uu</Line>
+ <Line>ru ur ur ur ru uu ru uu</Line>
+ <Line>uu rrrr rrrr ru r u uuru</Line>
+ <Line>ru rru ur uuru uu uu uuu</Line>
+ <Line>kus duur afhaar jas uur; gaf</Line>
+ <Line>juk; krulhaar suf; kus uurglas</Line>
+ <Line>aardas sassafras harslak afgluur</Line>
+ <Line>gras suf graf afraas slasaus duf</Line>
+ <Line>fallus druk afkraak radar kraal</Line>
+ <Line>kaard kus ara; halskraag lus</Line>
+ <Line>guur; graal jas askruk ruud</Line>
+ <Line>krulhaar graas; saus graal jufs</Line>
+ <Line>klaar guur; radars afraas kraal</Line>
+ <Line>juf; harddraaf; duurs; uur</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ie</NewCharacters>
+ <Line>ei ie i ie ii ei i e ei</Line>
+ <Line>ie ie iieei iie e ei i</Line>
+ <Line>iie ee ii e iie ii ie e</Line>
+ <Line>ei ee ie ee ie e i ee</Line>
+ <Line>i ii ee e i ee ei e</Line>
+ <Line>klierige gij sukkelig; keilde ruigaard</Line>
+ <Line>gekrakeeld sidderaal gekuifde druileriger</Line>
+ <Line>geaggregeerde ijs geheld; lijdelijker</Line>
+ <Line>gladdiger gladheid; dikheid geriskeerde</Line>
+ <Line>elf gereefd driedaagse gareerde je lijk</Line>
+ <Line>akkers; klaarde sisser afdraaide jij</Line>
+ <Line>kliekje hier kladje; hijg; harakiri lei</Line>
+ <Line>afjakker geliefd akeliger kleffer jullie</Line>
+ <Line>kuierde hi rijs kelderdeur geresideerde</Line>
+ <Line>drassiger; kikkerdril huidige; duikers</Line>
+ <Line>fles dijk sukkelige ijs sidderaal; hijs</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ow</NewCharacters>
+ <Line>oww wo oo wwwo oo ww oow</Line>
+ <Line>o wo ww wwo wwo oow wwo</Line>
+ <Line>ww oo ww w wo oo oo wow</Line>
+ <Line>ww wwo wow w woww woo w</Line>
+ <Line>w wwo www ww oow w wwo</Line>
+ <Line>koekoeksei frees koor; hokkerige</Line>
+ <Line>gedweilde drukrol juweel afloer</Line>
+ <Line>geluidloos hoge dodelijkheid joekel</Line>
+ <Line>gauwerd; doodgegooid; foei kordeel</Line>
+ <Line>jaloersheid wereldlijk gedrogeerd</Line>
+ <Line>geduwd dollarkoers fooi lawaaiigheid</Line>
+ <Line>guerrillaoorlog rouwdag laagwaardige</Line>
+ <Line>hofjes; gerouwklaagd; was; dwaalde;</Line>
+ <Line>leesdoel legio; legerorder wedde</Line>
+ <Line>gehoorweg kalfsoog; woorddeel wij</Line>
+ <Line>weg jos de wrede huigelaar; wuifde</Line>
+ <Line>wie dollarkoers wade erg hard;</Line>
+ </Level>
+ <Level>
+ <NewCharacters>pq</NewCharacters>
+ <Line>q qqq p pqq ppp pp pqp</Line>
+ <Line>q qp pq ppp p ppp p p</Line>
+ <Line>qq pqq pq ppp pqp pq ppp</Line>
+ <Line>pp pp ppp p ppp qqq qqq</Line>
+ <Line>qq pp qqq pqp ppp pq p</Line>
+ <Line>spade poeljes wurggreep flap</Line>
+ <Line>soepele; drukpers hope pukkelige</Line>
+ <Line>prik groepsreis gepuddeld pijl</Line>
+ <Line>kepers; querido aquanout</Line>
+ <Line>daf appelsap drukspiegel aquarel</Line>
+ <Line>opkras; persdruk juf puffen spouwers</Line>
+ <Line>popidool qupido; supplieer liquideer</Line>
+ <Line>hielp peperdure prullerigere kwijl</Line>
+ <Line>pakje; pulppers ; droop</Line>
+ <Line>pijpdrop opdroogde; dief opdruk</Line>
+ <Line>water is aqua; aqua is water; rijp</Line>
+ <Line>de drukpers was peperduur;</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yt</NewCharacters>
+ <Line>ttytt yyt yy ttyy ytt yyt</Line>
+ <Line>t ytt ttyy yyt yyt ytt</Line>
+ <Line>y ttyy tyty t t t tyt</Line>
+ <Line>tyyy ytt ytt yyt y tyt tyt</Line>
+ <Line>y tyyy tyt ytt y t ty</Line>
+ <Line>typt loyaal trouwste y uithaaltafel</Line>
+ <Line>typte; katalisator type types</Line>
+ <Line>hortoloog y tegelijk; treek y quota</Line>
+ <Line>leerrijkst sleutelde y steekkart</Line>
+ <Line>portierspet wij y topje; hoofdstraat</Line>
+ <Line>akkefietjes; type afkleedt y gerafelde</Line>
+ <Line>opkraste hydraat wil addities; y spitter</Line>
+ <Line>surft quote y pleisteraar; y ettiquette</Line>
+ <Line>y dereguleert toehoor; y godslasterlijke</Line>
+ <Line>tituleert katalyse; hypotheek pleisterwerk</Line>
+ <Line>hij surfte op het water</Line>
+ <Line>wie weet waar willie wortel was</Line>
+ </Level>
+ <Level>
+ <NewCharacters>mv</NewCharacters>
+ <Line>mv mvm mv mvmmm mv mmmv</Line>
+ <Line>vvm mvm vv mv mvmmm vv v</Line>
+ <Line>mvm mv vm vvmmv vvv v v</Line>
+ <Line>vm mv mm mv mvv mmmv mv</Line>
+ <Line>vvmmv vvv vvv mvm v vvv vm</Line>
+ <Line>systeem liquida vijf hem aftuimelde</Line>
+ <Line>gym vijver afgeveld; fysio kumquat</Line>
+ <Line>worm; temporalia we fysiotherapeut</Line>
+ <Line>mismaaktere veeltalige; gemeerderde</Line>
+ <Line>verdoemelijk systeem ; houtgravure</Line>
+ <Line>puf haver liquid ploeg fut mijt wie</Line>
+ <Line>volde matigere; solveer waarvoor mag</Line>
+ <Line>smokkelt symptoom mijteriger; adequaat</Line>
+ <Line>emailleer wij vijfledig; hommel muggen</Line>
+ <Line>inquisitie sleutelvraag adviesvraag</Line>
+ <Line>soms type ik foutloos;</Line>
+ <Line>ik type al veel vlugger</Line>
+ </Level>
+ <Level>
+ <NewCharacters>,c</NewCharacters>
+ <Line>, c, ,cc c, ,,,, cc,,c</Line>
+ <Line>c, ,,cc , ,, ccc ,, , c</Line>
+ <Line>,c ,c c,c c,c ,cc ,c,,</Line>
+ <Line>,cc c, , c ,cc , , ,c ,,</Line>
+ <Line>,cc ,cc ,c,, cc,,c ,,cc</Line>
+ <Line>systeem, cataclysme, vee cayennepeper,</Line>
+ <Line>geschaamde, coryfee; aquaduct viaduct;</Line>
+ <Line>cryptogram, cyclisch, colloquia schouders</Line>
+ <Line>chocoladereep; cyprioot, confisqueer</Line>
+ <Line>schoolvosserij; hippocampus, geaccepteerde</Line>
+ <Line>scheppers, maquette; verkoopdirecteur</Line>
+ <Line>claviatuur, justificatie, chique erachter</Line>
+ <Line>paradijsachtig, schrammetjes, adresschrijver</Line>
+ <Line>percipieert, mug tricky; cricketkeeper</Line>
+ <Line>archivaresse, plaquette lichtdruk;</Line>
+ <Line>de politie arresteerde de vrouw voor diefstal</Line>
+ <Line>echter, de rechter sprak haar vrij</Line>
+ </Level>
+ <Level>
+ <NewCharacters>.x</NewCharacters>
+ <Line>x. x. .x.. x .xx .xx ..xx</Line>
+ <Line>. .xx. .x.x . xx. x. x.x</Line>
+ <Line>x .x.x x. x ..xx x. .x..</Line>
+ <Line>.xx . .x.x . x .xx .x.x</Line>
+ <Line>x. x. x x.x. x. x. .xx</Line>
+ <Line>max privacy. expressief. polyester</Line>
+ <Line>extracties... mix orthodox, i.p.v.</Line>
+ <Line>expressiviteit. toxicologie; expliqueer</Line>
+ <Line>exportproduct. exploitatielast; s.o.s.</Line>
+ <Line>complexere, exterieurs, maximalist v.o.c.</Line>
+ <Line>taxfreeshop. v.b. quark, quasi expres</Line>
+ <Line>polymeer... circumflex. ampex; taxi</Line>
+ <Line>mixtuur, qua, flox, exporteert, polygaam</Line>
+ <Line>excuses. exotische v.n. xyz; quivive</Line>
+ <Line>toxicums lexicologie; quickstep.</Line>
+ <Line>het grootste deel zit erop; twee secties over.</Line>
+ <Line>twee maal twee is vier</Line>
+ <Line>wortel vier is twee</Line>
+ </Level>
+ <Level>
+ <NewCharacters>/z</NewCharacters>
+ <Line>z z/ z //z /// /zzz z/z</Line>
+ <Line>z/z /z //z //z z/ //z z</Line>
+ <Line>//z z/ zz z zz/ / /zzz z//</Line>
+ <Line>z/z/ //z zzzzz //// z/ /z</Line>
+ <Line>/z /z z/z z/z z / z/z /z</Line>
+ <Line>yahtze z.o.z./s.o.s. taxi/zwalkte zucht yoga</Line>
+ <Line>zekerheidshalve/gezieltoogd, uitzat/lasijzers</Line>
+ <Line>wraakzuchtige rijexamen/eczema /tmp corpskeuze.</Line>
+ <Line>fluweelzwartste/zijrivier/jazzrock/gepauzeerd.</Line>
+ <Line>verzilverd opzettelijke, exemplaar. yeti</Line>
+ <Line>zwaveltje xyz fotozaak zouteloze/zuurtjes</Line>
+ <Line>oomzeggertje; letterzifterij/doodzweeg.</Line>
+ <Line>rijzelde, hockey zigzagsgewijs zicht reflex</Line>
+ <Line>zoele, zacht/afzeepte yammen zwerfzieke.</Line>
+ <Line>relaxen, overzee/omgezwaaide. yup</Line>
+ <Line>arbeid adelt, maar de adel arbeidt niet.</Line>
+ <Line>dat staat op het getouw.</Line>
+ <Line>goed gereedschap is het halve werk.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nb</NewCharacters>
+ <Line>bbn bbbn b n nn bnb nn nn</Line>
+ <Line>bbb nbbn b bnn nn n nbbn</Line>
+ <Line>nbb nnbb n bbbn bnn bbb</Line>
+ <Line>b bb n bnb n b nn nbbn</Line>
+ <Line>nb nnbb n b b b nbn bbbn</Line>
+ <Line>byzantijns, cayennepeper, cycloon.</Line>
+ <Line>bij, neurieden beiden; dynamiet</Line>
+ <Line>goudbeurzen entrees hoogspanningskabel</Line>
+ <Line>landmaat neuswijst hiacynt.</Line>
+ <Line>verbreedsels borduurwerken gestriemden</Line>
+ <Line>bit/byte lefhebbers impotent n.b. cynicus</Line>
+ <Line>wiskundig cyaankali johannesbloem/</Line>
+ <Line>bedevaartganger, coryfee m.b.v. opwinden.</Line>
+ <Line>beoorloogde b.v. voortgebrachte/chrysant</Line>
+ <Line>angstaanjagend dynamo onbewerkte.</Line>
+ <Line>met de n en de b is het alfabet compleet.</Line>
+ <Line>en bij deze verklaar ik plechtig,</Line>
+ <Line>nooit meer met twee vingers te typen.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>?ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>GAK BBC KLM? WW UFO AOW?</Line>
+ <Line>HSL NL KUN? SOS? UFO NYFD</Line>
+ <Line>WDTQ SGP AAA BE ATB?</Line>
+ <Line>VWO? AA DE? FBI AIVD B.V.</Line>
+ <Line>HVU RUG UFO GAK HGS VWO?</Line>
+ <Line>USA? HAVO EN MKB IBG N.V.</Line>
+ <Line>ESA SP LBO VMBO CDA</Line>
+ <Line>EURO CCCP UFO VIP EU PvdA?</Line>
+ <Line>NS VWO VVD NASA VP XEROX</Line>
+ <Line>UvA T.a.v. Dhr. Mr.?</Line>
+ <Line>Amsterdam, Utrecht en Den Haag</Line>
+ <Line>Wie weet waar Willem Wever woont?</Line>
+ <Line>Sinterklaas komt uit Spanje.</Line>
+ <Line>In Holland loopt iedereen op klompen.</Line>
+ <Line>In de volgende lessen staan cijfers centraal.</Line>
+ <Line>Ook handig om deze blindelings te kunnen vinden.</Line>
+ <Line>Het eerste glorievolle geheim,</Line>
+ <Line>Jezus verrijst uit de dood.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>74</NewCharacters>
+ <Line>47 77 77 777 74 7 74 774</Line>
+ <Line>4747 7 477 44747 7 777 77</Line>
+ <Line>44747 77747 74 4747 77 47</Line>
+ <Line>4747 4747 7 77447 77 74 744</Line>
+ <Line>77 44747 7 77 7 44747 7</Line>
+ <Line>cNx7t y4 pq74 uv4 pzq 7.4 7w4 kj4sN</Line>
+ <Line>pqv74; /sOh7 4wH aN4 zx4,d7Q 7y Ea4;</Line>
+ <Line>4Oz hw7O,Ovh7 G7; sxuy7 .7 scN7t G7vr</Line>
+ <Line>G7; cN7t pq74 7/4 pq74 wZ4 kjx4/N</Line>
+ <Line>d7xQ h7un 4. 4 d7Q vG7,h7n; uycN7t</Line>
+ <Line>4z vy4 4.7 G7 aN4; 4wrskt cZ7/ xNu4</Line>
+ <Line>7w 7,4 4uH 4kt yx4; 4/7 pq74 zh7n; 7yf</Line>
+ <Line>4hw 7sf cZ7; x7w yvU4 asN4. kj4N,</Line>
+ <Line>4kxvt /h7snr; cN7t 4Or. cvN7t, yz4</Line>
+ <Line>y4 7z, U4; 4hw x4vO; /rd7Qs cN7zt</Line>
+ <Line>7x4, 4/7, .4, 7.4, 77.4, 44.7 47.74</Line>
+ </Level>
+ <Level>
+ <NewCharacters>83</NewCharacters>
+ <Line>883 3 38 8 888 8883 8 8838</Line>
+ <Line>38 3 8838 8388 883 8 838</Line>
+ <Line>3 8 8 383 8 8 83333 383</Line>
+ <Line>838 38 838 888 8 383 383</Line>
+ <Line>383 8388 8 888 38 8 8838</Line>
+ <Line>8YG 8i. en3 ;l8Z c8Q YGb 87SM hyA,v3?</Line>
+ <Line>3a sc4 8VmN P4Fr y3?c; eAn3b k73f 3Luj dx3</Line>
+ <Line>;L8cZ,3Ad Ul8 h43 kIef obqv rF3; in hw8 gcJ</Line>
+ <Line>tvw3 geq O 8gZ yb3 43acp urS 4L78 e3lj w8Jo?</Line>
+ <Line>8Zk 8Tn TzsQ, 874/mX Ul8o dMn,tvWA3 8YiG</Line>
+ <Line>43 ULR8 Veiq, pTj8 7ao8 ckN PFQ rb h;l 84Z?</Line>
+ <Line>34h 3cq gvLj e87Z dkg; 3saeW ybi3 37.p4 A3Lj</Line>
+ <Line>8TTz b8q asF7 tVR.w3 PTQ jc8 34,OSuw 8gT Tmz</Line>
+ <Line>8.k Yiq; 4gv3 eWRS,8JU dx43 V7hQe 3bN Ikf dmaO</Line>
+ <Line>8.r 3nch .Peou4 8k/aMX bo3,Refs; h3l dvjU 8Z?</Line>
+ <Line>3.4 plus 4.4 is 7.8</Line>
+ <Line>7 min 3 is 4</Line>
+ </Level>
+ <Level>
+ <NewCharacters>92</NewCharacters>
+ <Line>29 99 299 9 2922 9 2222</Line>
+ <Line>2 2 92 292 92 299 2922</Line>
+ <Line>9 99 22 22 99 2 22 22</Line>
+ <Line>22 2999 222 9 2 299 9 2</Line>
+ <Line>2229 92 22 22 2 2229 99 22</Line>
+ <Line>a92 ;kc29 89xYt/ ;kx29,fts92 ;kP2v</Line>
+ <Line>9x 89 32V 49KGH 2Iq? Lonz/8G9b .Kje2,3wD</Line>
+ <Line>M9X. MigT9 ZF2h, LQY 97UE Ar9X. 94DVS/kH9</Line>
+ <Line>Ma9/ i93 zdf,W947ue 2fn? 2Iqj. 2BolZ;2hwR</Line>
+ <Line>S2r M9t? CBv,p2y hzx ;jKP9 loTs ZC2a, j49kG</Line>
+ <Line>Ma9. M39/ LnV yZo 4Sg Wir9 97UE;H89 p2 2IQ</Line>
+ <Line>89u vp2dt pb2 2Gq hmN;PD2V, 2Xc3j M9a. 97bS?</Line>
+ <Line>2rs;M9/ bP27,yZU hEiJG AF9? WV 32Ct 89Y ;akp9</Line>
+ <Line>x2 2cv dt,9w73? .4oQ hEJ BaF9 Mgul;94/H 3wR9 X2</Line>
+ <Line>9KN 9gal;Z32w;ymN .9Cb 2Iqd fws4.9z Uhxc2 kAje2</Line>
+ <Line>3 x 3 is 9, plus 38 maakt 47</Line>
+ <Line>3.2kg plus 4.7kg is gelijk aan 7.9kg</Line>
+ </Level>
+ <Level>
+ <NewCharacters>01</NewCharacters>
+ <Line>1 001 111 001 101 0100</Line>
+ <Line>01 001 01 0100 111 1 100</Line>
+ <Line>101 11 00 0100 111 100 01</Line>
+ <Line>00 10 11 111 11 0 01 1</Line>
+ <Line>100 111 1 001 0 111 0 0</Line>
+ <Line>a01 ;kc19 80xYt/ ;kx10,fts01 ;kP2v</Line>
+ <Line>0x 80 31V 40KGH 1Iq? Lonz/8G0b .Kje2,3wD</Line>
+ <Line>M0X. MigT9 ZF1h, LQY 07UE Ar0X. 04DVS/kH0</Line>
+ <Line>Ma0/ i03 zdf,W047ue 2fn? 1Iqj. 1BolZ;1hwR</Line>
+ <Line>S1r M9t? CBv,p1y hzx ;jKP0 loTs ZC1a, j49kG</Line>
+ <Line>Ma0. M30/ LnV yZo 4Sg Wir0 97UE;H80 p1 1IQ</Line>
+ <Line>80u vp2dt pb1 2Gq hmN;PD1V, 1Xc3j M9a. 07bS?</Line>
+ <Line>1rs;M9/ bP17,yZU hEiJG AF0? WV 32Ct 80Y ;akp0</Line>
+ <Line>x1 2cv dt,0w73? .4oQ h8J BaF0 Mgul;04/H 3wR9 X1</Line>
+ <Line>0KN 0gal;Z31w;ymN .0Cb 1Iqd fws4.9z Uhxc2 kAje1</Line>
+ <Line>Jantje kreeg van Maarje EUR 13.84,</Line>
+ <Line>van Paul kreeg hij EUR 27.23,</Line>
+ <Line>in totaal kreeg hij EUR 41.07.</Line>
+ </Level>
+ <Level>
+ <NewCharacters>65</NewCharacters>
+ <Line>66 5 6 65 565 66 66 6566</Line>
+ <Line>655 566 566 665 66 6 6 565</Line>
+ <Line>6565 6 5 5 5666 5666 566</Line>
+ <Line>65 65 665 66 6 5 6655 56656</Line>
+ <Line>65 6566 5666 5 5666 65</Line>
+ <Line>665 ;kc59 86xYt/ ;kx56,fts65 ;kP2v</Line>
+ <Line>0x 86 31V 546KGH 5Iq? Lonz/8G0b .Kje2,3wD</Line>
+ <Line>Ma6/ i053 zdf,W647ue 2fn? 1Iqj. 5BolZ;5hwR</Line>
+ <Line>S5r M9t? CBv,p1y hzx ;jKP6 loTs ZC5a, j49kG</Line>
+ <Line>Ma0. M36/ L5nV yZo 45Sg Wir56 97UE;H80 p1 5IQ</Line>
+ <Line>86u vp2dt pb5 2Gq hmN;PD5V, 5Xc3j M9a. 67bS?</Line>
+ <Line>5rs;M9/ bP57,yZU hEiJG AF0? WV 32Ct 86Y ;akp0</Line>
+ <Line>x1 2cv dt,6w73? .4oQ h8J BaF0 Mgul;64/H 3wR9 X5</Line>
+ <Line>6KN 6gal;Z35w;ymN .6Cb 5Iqd fws4.9z Uhxc2 kAje1</Line>
+ <Line>56.293 plus 23465.56 is 23521.853</Line>
+ <Line>De wortel uit 56556 is 237.8150.</Line>
+ <Line>Nu alleen nog de tekens boven de cijfers</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/nederlands_junior.ktouch.xml b/ktouch/training/nederlands_junior.ktouch.xml
new file mode 100644
index 00000000..c1159e26
--- /dev/null
+++ b/ktouch/training/nederlands_junior.ktouch.xml
@@ -0,0 +1,265 @@
+<KTouchLecture>
+ <Title>Nederlands Junior (nederlands voor kinderen)</Title>
+ <Comment>KTouch oefenbestand voor kinderen
+
+De woordkeuze werd gebaseerd op het
+Perl Script geschreven door Steinar Theigmann &amp; Håvard Frøiland.
+
+Kenmerken van dit oefenbestand zijn :
+ 1. Een zeer geleidelijke overgang van het
+ ene niveau naar het andere, vooral in het
+ begin.
+ 2. Een grote nadruk op het ritme
+ 3. Herhaling
+
+Copyright 2004 by Marc Heyvaert (marc_heyvaert AT yahoo DOT com)
+Dit document is een onderdeel van het KTouch programma en valt onder de
+bepalingen van de GNU General Public License versie 2 of recenter.
+</Comment>
+ <Levels>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>j f</NewCharacters>
+ <Line>jjj jjj jjj fff fff fff jjj fff fff jjj jjj</Line>
+ <Line>jjf jjf jjf jfj jfj jfj jff jff jff jjf ffj</Line>
+ <Line>ffj ffj jff jff jff jfj fjf fjf jfj fjf jfj</Line>
+ <Line>jff jjff fjj jj ffjff jjff fjj jj ff jf jf fj fj</Line>
+ <Line>j jjjj jjffj j ffjf jj jff jj j j j ffj fffj</Line>
+ <Line>jf jjjj fjj ffj jjffj fjjjff jf jff j ffj jj</Line>
+ <Line>ffjf j fjj ff ff j ffj jjffjf jjff jff fffj</Line>
+ <Line>ff jjfj jj fffj jf ffjj jfj fjj jj jfff jff</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>g h</NewCharacters>
+ <Line>ggg ggg hhh hhh ggg ggg hhh hhh ggg ggg hhh hhh</Line>
+ <Line>jhj jhj jhj fgf fgf fgf fhg fhg fhg hgj hgj hgj</Line>
+ <Line>hgj hgj hhf hhf hfj hfj hfj hfj fgj fgj fgj fgj</Line>
+ <Line>ggj ggj ggj ggj ggj gjff gjff gjff</Line>
+ <Line>ghhf gffh ghhf gffh ghhf gffh ghhf gffh ghhf gffh</Line>
+ <Line>jjgf jjgf jjgf jjgf jjgf jjgf jjgf jjgf jjgf jjgfg</Line>
+ <Line>hfffj fjg hfffj fjgh fffj fjgh fffj fjgh fffj</Line>
+ <Line>fjfhh ffjfh hgjfg fjfhh ffjfh hgjfgfjfhh ffjfh hgfg hfffj</Line>
+ <Line>hfffj fg hff jgh hgjf fg hg jjg g hhhg fjfhh hggg hg</Line>
+ <Line>jjgf hgjh jgh hgjh g hgjf hhfh fg jgh hhhg g g jg hfffj</Line>
+ <Line>hhfh hhfh jfh hhfh fg hg hhfh hhfh jfh hhfh fghg</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>d k</NewCharacters>
+ <Line>ddk ddk ddk kkd kkd kkd kkd kdk kdk kdk kdk kdk</Line>
+ <Line>dkd dkd dkd dkd dfj dfj dfj dfj dfj kjf kjf kjf kjf</Line>
+ <Line>gdf hkj gdf hkj gdf hkj ghd ghd ghd hfk hfk hfk hfk</Line>
+ <Line>jkdf jkdf jkdf ghdk ghdk ghdk ghdk ddk djgg ddk djgg</Line>
+ <Line>ddk djgg ddk djgg ddk djgg ddk djgg</Line>
+ <Line>hkdh djgg hkdh djgg hkdh djgg hkdh djgg hkdh djgg hkdh djgg</Line>
+ <Line>hjdh kf djd hjdh kf djd hjdh kf djd hjdh kf djd</Line>
+ <Line>ggd djgg kjkfg ggd djgg kjkfg ggd djgg kjkfg ggd djgg kjkfg</Line>
+ <Line>kg kf fhk dhjh hjdh khfkd kf ddd kfg kg hjdh fhk</Line>
+ <Line>dhjh jgd fk hjd gkkj dhjh ggd kfg kjfk kj kf khfkd</Line>
+ <Line>kg kg hdj kj dhjh khfkd gkkj dd gk kj dhf hd hjdh</Line>
+ <Line>kjg dd hdj fk kj kjg kfg hd dj hd ggd gk jgd dj</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>l s</NewCharacters>
+ <Line>lls lls lls lls ssl ssl ssl sls sls sls lsl lsl lsl lsl</Line>
+ <Line>lss lss lss lss sll sll sll sdj sdj sdj sdk sdk sdk sdk</Line>
+ <Line>jks jks jks jks fds fds fds fds fds jks jks jks jks jks</Line>
+ <Line>lkf lkf lkf lkf jkl jkl jkl jkl lkj lkj lkj lkj kls kls</Line>
+ <Line>klj klj klj klk klk kds dsk kds dsk kds dsk kds dsk kds dsk</Line>
+ <Line>hjs hjs hjs sjh sjh sjh sgh sgh sgh sgh sgh hds hds hds</Line>
+ <Line>jhl jhl jhl jhl jgl jgl jgl jgl jgl jgl kjs kjs kjs khs khs khs</Line>
+ <Line>hdfks sfs sk hdfks sfs sk hdfks sfs sk hdfks sfs hdfks sfs sk</Line>
+ <Line>klg dshf sf sk klg dshf sf sk klg dshf sf sk klg dshf sf sk</Line>
+ <Line>sfs lg jl lddd sdkh js ldjs slgh sgfh sgg ld sdkh</Line>
+ <Line>gsd slgh gsd sgfh js sksg lddd lgg sf sfs sg ld</Line>
+ <Line>js sf sdkh sfs sg sg sdkh sl ld sdkh s s sdkh lgg</Line>
+ <Line>ksjfl ld sdkh ld sfs gl ld s ld sdkh gsd sf s lk</Line>
+ <Line>lg lgg js js lg sf gl lk klg dshf sf sk</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>q m</NewCharacters>
+ <Line>qqq qqq qqq mmm mmm mmm qmm qmm qmm qmm mqq mqq mqq mqq</Line>
+ <Line>qmq qmq qmq qmq qmq qmq qmq mqq mqq mqm mqm mqm mqm mqm</Line>
+ <Line>lmq lmq lmq lmq lmq lmq lmq jkq jkq jkq jkq qsm qsm qsm</Line>
+ <Line>qsm msd msd msd msd ghm ghm ghm ghm fgm fgm fgm fgm dfq</Line>
+ <Line>dfq dfq dfq jkm jkm jkm jkm mqg mqg mqg mqg jdm jdm jdm</Line>
+ <Line>mfg kgm dsfq mfg kgm dsfq mfg kgm dsfq jqs mmkl dsfq jqs mmkl dsfq</Line>
+ <Line>jqs mmkl dsfq jqs mmkl dsfq jqs hqff hqhq jqs hqff hqhq</Line>
+ <Line>mjfm km mhl mjfm km mhl mjfm km mhl mjfm km mhl</Line>
+ <Line>q hq dsfq lms llgm mkk q hq dsfq lms llgm mkk</Line>
+ <Line>jmj kgm gfql kkq km hqff jmj kgm gfql kkq km hqff</Line>
+ <Line>jjhm kkq llgm lfq gfql mkk jjhm kkq llgm lfq gfql mkk</Line>
+ <Line>m hqff qj gfql jjhm hqsk m hqff qj gfql jjhm hqsk</Line>
+ <Line>mmkl hsq mkk q mfg km llgm mmkl hsq mkk q mfg km llgm</Line>
+ <Line>dsfq kgm lms llgm jmj km dsfq kgm lms llgm jmj km</Line>
+ <Line>llgm mkk hq q jmj m jqs mmf llgm mkk hq q jmj m jqs mmf</Line>
+ <Line>jm dsfq jm q hqff hqsk jm dsfq jm q hqff hqsk</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>t u</NewCharacters>
+ <Line>tut tut tut tut fut fut fut fut tuf tuf tuf tuf tuf</Line>
+ <Line>dus dus dus dus dus sul sul sul sul sul sul kus kus kus</Line>
+ <Line>gul gul gul gul gul gul gul mul mul mul quu quu quu</Line>
+ <Line>fuut fuut fuut fuut tuk tuk tuk tuk lus lus lus lus</Line>
+ <Line>kust kust kust kust juf juf juf juf juf muf muf muf muf</Line>
+ <Line>smult smult smult smult tuft tuft tuft tuft jut jut jut</Line>
+ <Line>gum gum gum gum hut hut hut hulst hulst hult hult hult</Line>
+ <Line>klutst klutst klutst klutst klutst klutst klutst klutst</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>r i</NewCharacters>
+ <Line>rir rir rir rir rir rir iri iri iri iri iri iri</Line>
+ <Line>til til til til til stil stil stil stil tilt tilt tilt tilt</Line>
+ <Line>mis mis mis mis mik mik mik mik mik mik kim kim kim kim</Line>
+ <Line>gif gif gif gif gif gif kik kik kik kik kik kirt kirt kirt</Line>
+ <Line>ruit ruit ruit ruit tuil tuil tuil tuil tuil tuil tuil</Line>
+ <Line>uur uur uur duur duur duur duur tuur tuur tuur tuur</Line>
+ <Line>kuur kuur kuur kuur muur muur muur muis muis muis muis</Line>
+ <Line>ruim ruim ruim ruim kruim kruim kruim kruim duim duim duim</Line>
+ <Line>rijm rijm rijm rijm ijs ijs ijs ijs dij dij dij dij dij</Line>
+ <Line>kijk kijk kijk kijk jij jij jij jij jij lijm lijm lijm</Line>
+ <Line>fris fris fris fris fris grif grif grif grif grif grif</Line>
+ <Line>krijt krijt krijt krijt drijft drijft drijft drijft drijft</Line>
+ <Line>strijkt strijkt strijkt strijkt strijkt slik slik slik slik</Line>
+ <Line>rust rust rust rust rust rustig rustig rustig rustig</Line>
+ <Line>mistig mistig mistig mistig mistig</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>y e o</NewCharacters>
+ <Line>ook ook ook ook ook pool pool pool pool rol rol rol rol</Line>
+ <Line>ree ree ree ree de de de de de mee mee mee mee mee mee</Line>
+ <Line>yam yam yam yam yam yo yo yo yo yo yo yoga yoga yoga yoga</Line>
+ <Line>teug teug teug teug teug klei kle klei klei klei lied lied</Line>
+ <Line>lied lied dief dief dief fee fee fee fee emmer emmer emmer</Line>
+ <Line>dol dol dol dol lef lef lef lef leef leef leef leef fout fout fout</Line>
+ <Line>stout stout stout kleur kleur kleur kleur lees lees lees</Line>
+ <Line>meel meel meel meel smelt smelt smelt smelt keer keer keer</Line>
+ <Line>streek streek streek hees hees hees goed goed goed goed hout hout</Line>
+ <Line>goud goud houd houd goud koud koud koud fout fout fout</Line>
+ <Line>koer koer koer koers koers koers koers </Line>
+ <Line>tikje tikje tikje tikje modder modder modder modder</Line>
+ <Line>liedje liedje liedje liedje soort soort soort soort</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>z a p</NewCharacters>
+ <Line>pa pa papa papa za za zaza zaza zal zal zal zal zap zap zap zap</Line>
+ <Line>pak pak pak pak pak kap kap kap kap kap pap pa pap pap pa</Line>
+ <Line>zoek zoek zoek zoek zoek soep soep soep soep soep poes poes poes</Line>
+ <Line>perk perk perk perk perk paard paard paard paard dier dier dier</Line>
+ <Line>jaap jaap jaap jaap paar paar paar spaar spaar spaar</Line>
+ <Line>het paard staat op stal het paard staat op stal</Line>
+ <Line>de koe roept meuhhh de koe roept meuhhh</Line>
+ <Line>spaar jij ook mee spaar jij ook mee spaar jij ook postzegels</Line>
+ <Line>moet jij ook mee moet hij ook mee hij gaapt hij slaapt</Line>
+ <Line>taai taai taai saai saai saai zuster zuster zuster</Line>
+ <Line>lepel lepel lepel de zuster geeft de lepel</Line>
+ <Line>kerel kerel raampje raampje raampje karamel karamel karamel</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>v n</NewCharacters>
+ <Line>van van van van ven ven ven ven ven van ven van ven van</Line>
+ <Line>vee vee vee nee nee nee vee nee vee nee vee nou nou nee nou vee</Line>
+ <Line>nar nar ver ver nar nar ver ver nar ver nar ver nar ver</Line>
+ <Line>nu nu nu vel vel vel nu vel nu vel nu vel bu vel nu vel</Line>
+ <Line>veel veel vee vee veel vee veel vee veel vee voet voet</Line>
+ <Line>noot noot voet voet noot voet noot voet noot voet naar voet naar</Line>
+ <Line>nest nest nest nest vest vest vest vest nest vest nest vest nest</Line>
+ <Line>lang lang lang vast vast vast neer neer neer lang vast neer lang vast neer</Line>
+ <Line>hand hand hand eind eind eind aan aan aan aan de hand een eind</Line>
+ <Line>aan de hand een eind meelopen aan de hand een eind meelopen</Line>
+ <Line>vlees vlees vlees geen geen geen eten eten eten geen vlees eten</Line>
+ <Line>kijken kijken naar naar naar naar horizon horizon naar de horizon kijken</Line>
+ <Line>ik ga naar het huis van de nar ik ga naar het huis van de nar</Line>
+ <Line>morgen kunnen de mensen ook voor dit kiezen</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>b c</NewCharacters>
+ <Line>och och ach ach och ach och ach bar bar och bar ach bar och bar</Line>
+ <Line>bier bier baar bier baar baar bier baar boer boer bier baar boer bar beer</Line>
+ <Line>beer beer beer achter achter achter er staat een beer achter je er staat een beer achter je</Line>
+ <Line>blaas blaas blaas blaas ballon ballon ballon blaas die ballon op blaas die ballon op</Line>
+ <Line>lachen lachen lachen ooit al een lachende beer gezien ooit al een lachende beer gezien</Line>
+ <Line>boek boek boel boel boek een saaie boel een saai boek een saaie boel een saai boek</Line>
+ <Line>broek broek broek gescheurd gescheurd zijn broek is gescheurd zijn broek is gescheurd</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>x w</NewCharacters>
+ <Line>xxx www xxx www xxx www xxx www water water water wacht wacht wacht</Line>
+ <Line>water wat water wat wat wonder wonder wat een wonder dat water wat een wonder dat water</Line>
+ <Line>leeuw leeuw lynx lynx de leeuw is de koning onder de dieren de lynx is geen katje</Line>
+ <Line>wist jij dit al wie wijst er naar die lynx wist willywat hij wou doen</Line>
+ <Line>waarom welke wie waaronder waar wie wonder warme wachten</Line>
+ <Line>op weekdagen weten wij welke mensen wachten op de wegen</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>hoofdletters</NewCharacters>
+ <Line>De delen Een eenhoorn Geld geven Daarom dachten wij Welke wegen nemen</Line>
+ <Line>Sterke Jan en Willy gaan op stap Xavier is er ook bij Wat ga je doen</Line>
+ <Line>Zeer erg Veel erger De Efteling Jan en Mieke gaan naar de Efteling</Line>
+ <Line>Doe maar wat Ga voort Mijn hond heet Rex</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>leestekens</NewCharacters>
+ <Line>Dit is een, en dat is twee. </Line>
+ <Line>Jan, Mieke, Maaike, Steffen en Rex, de hond, gingen wandelen.</Line>
+ <Line>Dat is straf! Je bent helemaal nat! Wat heb je nu weer gedaan?</Line>
+ <Line>Ik heb een heleboel dieren gezien: katten, honden, vogels...</Line>
+ <Line>Morgen ga ik vast terug. Jij toch ook?</Line>
+ <Line>Kom je morgen met mij en Anneke wandelen?</Line>
+ <Line>Het is reeds vroeg donker. Pas op! Je hebt je toch geen pijn gedaan?</Line>
+ <Line>Hallo! Hier! Kijk maar naar boven! Zie je mij dan niet?</Line>
+ <Line>En toen zei ze: &quot;Ik sta hier.&quot; Maar hij hoorde haar niet. Toen riep ze: &quot;Moet ik naar beneden komen?&quot;</Line>
+ <Line>Het is nooit te laat. Rennen maar!</Line>
+ <Line>Deze kerel heb ik nog nooit gezien! Jij wel?</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>Volzinnen</NewCharacters>
+ <Line>De laatste tijd hebben wij jou hier niet veel meer gezien!</Line>
+ <Line>Ga jij morgen terug naar school?</Line>
+ <Line>Een overijverige leerling behaalt meestal goede resultaten.</Line>
+ <Line>De meester van de zesde klas is een toffe kerel.</Line>
+ <Line>We brachten met de klas een bezoekje aan de dierentuin.</Line>
+ <Line>Welke jas is van jou?</Line>
+ <Line>In de dierentuin hebben we heel wat dieren gezien: een paar leeuwen, een tijger, heel wat apen en zelfs een lynx!</Line>
+ <Line>Op de zeedijk waren heel wat kinderen met kleine wagentjes aan het rondrijden.</Line>
+ <Line>Het water van de zee was zeer koud.</Line>
+ <Line>Morgen moeten we terug naar huis; de vakantie is voorbij.</Line>
+ <Line>Ik dacht wel dat je mij herkend had. Of niet soms?</Line>
+ <Line>Pas op! Straks trap je nog in die plas!</Line>
+ <Line>Moeten wij nog ver stappen? Ik ben moe, mijn ogen vallen dicht en ik zou graag gaan slapen.</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>Rekenen</NewCharacters>
+ <Line>1 2 3 123 4 5 6 456 7 8 9 789 120 130 140 150 230 395 382 456</Line>
+ <Line>1 + 2 = 3; 1+2=3; 44+23=67; 41+60=102; Oei! Dat is fout! Het moet 101 zijn.</Line>
+ <Line>De tafel van 8: 1x8=8; 2x8=16; 3x8=24; enz.</Line>
+ <Line>Op een computer wordt het maalteken vaak met een '*' aangeduid i.p.v. met een 'x'!</Line>
+ <Line>Dus 4x7 is hetzelfde als 4*7...en dat is natuurlijk gelijk aan 28!</Line>
+ <Line>Op een klavier vind je ook geen teken voor 'gedeeld door'! Wij vervangen dat door een schuine streep: '/' dus.</Line>
+ <Line>35/7=5 of 35 / 7 = 5 indien je wat meer ruimte tussen je cijfers wil!</Line>
+ <Line>Het minteken is natuurlijk een gewoon liggend streepje, '-' dus.</Line>
+ <Line>10 - 5 = 5 of 10-5=5 wanneer je minder ruimte wil gebruiken.</Line>
+ <Line>En nu aan de slag!</Line>
+ <Line>1x1=1; 2x1=2; 3x1=3...</Line>
+ </Level>
+ <Level>
+ <LevelComment></LevelComment>
+ <NewCharacters>Einde</NewCharacters>
+ <Line>Einde van de cursus. Proficiat!</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/norwegian.ktouch.xml b/ktouch/training/norwegian.ktouch.xml
new file mode 100644
index 00000000..454ccfab
--- /dev/null
+++ b/ktouch/training/norwegian.ktouch.xml
@@ -0,0 +1,376 @@
+<KTouchLecture>
+ <Title>Norwegian</Title>
+ <Comment>KTouch training file generated Sun Apr 22 16:26:01 2007
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.</Comment>
+
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>f f j j f jj jfj jf jj j jj f j f jf jj j</Line>
+ <Line>f j f j jfj fff fff j jjj jj fjjj fjf fjf</Line>
+ <Line>jf f f j f jj f f f f jj jj j f jf j fff j</Line>
+ <Line>jfj jj j f ffj j ffj fjjj jj jf jjj jfj fjj</Line>
+ <Line>f j jj j f j fjjj f jj ffj j j jjf jj jfj</Line>
+ <Line>fjff f jj f fff f f fjf f jj f jfj f f fff jjj</Line>
+ <Line>jjf fjff fjf jf fjf j jjf fjff f jj j jj jj</Line>
+ <Line>jfj f f j j jj f fjjj fjff jf f fjf jjf j j</Line>
+ <Line>jjf jjf j j jfj jjf f f jf jjj fff jf jjj fjf</Line>
+ <Line>f f jjf j fjff f jf jfj fjf j jf jf fjf f</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>fdj kf d k k d d k d ddk d k fdff d dfjf k jjk</Line>
+ <Line>dfjf dfjf dfjf d dk d dk kkff k d kf d k fdff</Line>
+ <Line>k kkff kfk d kdf fdff dk jjk d d kkff k k</Line>
+ <Line>d d d fk kdk kdf k kf kdf d k d kdf k jjk</Line>
+ <Line>d djj k kd d kf k d d k k dk fdff k fk k k</Line>
+ <Line>kf d d fdj ddk kd dfjf kkff k ddk djj k k d</Line>
+ <Line>dk ddk kkff k k fdj kf k k fdff kkff kfk k</Line>
+ <Line>kf d kf kdf k k kkff jjk d k dfjf dfjf d k</Line>
+ <Line>d d fdff dfjf d k kkff d d d d d ddk kfk d</Line>
+ <Line>d jjk k d ddk kf k fk k fk fdj dfjf djj kf</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>s s s s s s kl kl s s l kl kl l s sk fl s</Line>
+ <Line>l sj fl s sf sdsf kl l sl sl l sj sl s s sj</Line>
+ <Line>s sj fl sj s sl sdsf sk skj fl kl sdsf l sl</Line>
+ <Line>s sdsf kl fl fl fl fl l sk fl kl skj l l sl</Line>
+ <Line>s sk l sk l sj l sk kl sj fl kl l l skj s</Line>
+ <Line>s s l sk l sk s skj l fl skl sk kl l sj l</Line>
+ <Line>kl l kl fl l kl sk kl kl l l s l l fl fl s</Line>
+ <Line>sk sj sk sj sdsf kl l skj s s s s l kl skj</Line>
+ <Line>l kl fl sf s skl l skl sj l sj l sj s fl sk</Line>
+ <Line>kl l kl sj sdsf sf s sl kl sf s l l s sj sj</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>øa</NewCharacters>
+ <Line>daff sladd a dal sa flakk ska slakk lad aksl</Line>
+ <Line>fakk da akk jad sal da flaks daff ska fa fa al</Line>
+ <Line>all skaf kal kal kakl kasak sla fja kal ladd</Line>
+ <Line>klak kalas flask kal slak sal al sjal a ka fakk</Line>
+ <Line>sladd lak dasl ak alka kaks lak ak sja fa kal</Line>
+ <Line>skad kak fasl flas skall dadd slak sla daff a</Line>
+ <Line>kall ask asa alk as flask kal kal kla a sja kald</Line>
+ <Line>falsk fals klass ka fa slafs sla fall kajak ak</Line>
+ <Line>skal a kladd alkal skal skal lass sal skall daf</Line>
+ <Line>fak flass sjakk fas a akk fasa alsla fla ad</Line>
+ </Level>
+
+ <Level>
+ <LevelComment>Grunnstilling</LevelComment>
+ <NewCharacters>asdf jklø</NewCharacters>
+ <Line>aaa sss ddd fff jjj kkk lll øøø aa ss dd ff jj kk ll øø</Line>
+ <Line>øø ll kk jj ff dd ss aa øøø lll kkk jjj fff ddd sss aaa</Line>
+ <Line>aaa øøø sss lll ddd kkk fff jjj aa øø ss ll dd kk ff jj</Line>
+ <Line>jj ff kk dd ll ss øø aa jjj fff kkk ddd lll sss øøø aaa</Line>
+ <Line>fff ddd sss aaa øøø lll kkk jjj ff jj dd kk ss ll aa øø</Line>
+ <Line>øø aa ll ss kk dd jj ff jjj kkk lll øøø aaa sss ddd fff</Line>
+ </Level>
+ <Level>
+ <LevelComment>Grunnstilling (Annen rekkefølge)</LevelComment>
+ <NewCharacters>Ingen</NewCharacters>
+ <Line>ffj jjf ddk kkd ssl lls aaø øøa jf kd ls øa</Line>
+ <Line>jjf ffj kkd ddk lls ssl øøa aaø fj dk sl aø</Line>
+ <Line>aø sl dk fj aøø øaa sll lss dkk kdd fjj jff</Line>
+ <Line>øa ls kd jf øøa aaø lls lls kkd ddk jjf ffj</Line>
+ <Line>jf kd ls øa ffj jjf ddk kkd ssl lls aaø øøa</Line>
+ <Line>fj dk sl aø jjf ffj kkd ddk lls ssl øøa aaø</Line>
+ <Line>aøø øaa sll lss dkk kdd fjj jff aø sl dk fj</Line>
+ <Line>øøa aaø lls lls kkd ddk jjf ffj øa ls kd jf</Line>
+ </Level>
+ <Level>
+ <LevelComment>Grunnstilling (Med noen ord)</LevelComment>
+ <NewCharacters>Ingen</NewCharacters>
+ <Line>la ja klø la sa da øk øl kø skall lass løs kall fall</Line>
+ <Line>sala døs søl sjøl søla kølla løkka jakka slakk løs døs</Line>
+ <Line>dø kø kassa sas aks laks kall klø lass dass sak ja døla</Line>
+ <Line>søla laka jakka lakk flaksa dal sal fall lass flass klakk</Line>
+ <Line>slakk flakk lakk sakka løkka kølla kassa søk føl sjøl klø</Line>
+ <Line>fjøs sal lass skal aks laks saks faks øs døs sløs sjø søl</Line>
+ <Line>skada slakk klaff sløs sjøs sjølakk kølass skjød sjal</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>n</NewCharacters>
+ <Line>n kanalj sna slank n n lan nasal ann slank</Line>
+ <Line>sakn anfall sanda n knak klan knakk dan kan aksdann</Line>
+ <Line>kan slan sans fan kan fan kn skan fasanjak sank</Line>
+ <Line>sakna ana sanda anda sakn slan land skann akn</Line>
+ <Line>dand sans an ansl faln san flank skan nk ansl</Line>
+ <Line>kan fjan fasanjak kna slan skan knak and knakk</Line>
+ <Line>skan falank san allsan na kanalj akn knadd dann</Line>
+ <Line>sakn sans kna and nakk fan knas dafn ansl lank</Line>
+ <Line>snakk skan flakn kn fajans lank fan anskaff kana</Line>
+ <Line>dan najad an dann anfall knas knak anfal snakk</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>t</NewCharacters>
+ <Line>fatt antat takt anstalt kantat dat datasal sjakt</Line>
+ <Line>sat tal st klatt attak satansk ant nattfl salt</Line>
+ <Line>sandta datasta antal slakt skatt andakt klatt nat</Line>
+ <Line>tank stans tjaf stn tafs attak akt tal skalt</Line>
+ <Line>sta saltka nat sta ant tak stja stan tafs stank</Line>
+ <Line>saft t taks altankass talltas ta fastsat akt</Line>
+ <Line>st anata stakt stans antal t alta fastsl satansk</Line>
+ <Line>antatt tast datafak attak t tal sat stank skat</Line>
+ <Line>ta fat ant stan tasl nattsaf statsskat tafat</Line>
+ <Line>fatt skant katt andakt tasl skat fastsat fata</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>i</NewCharacters>
+ <Line>di dati fi satanistisk filtjakk skinn tiltat</Line>
+ <Line>flint skit innsikt il snafsin knakin lins tilisin</Line>
+ <Line>kis flaksin nattli anin finsikt tissin stadi</Line>
+ <Line>innlatin klink tils illsint asiatisk inat fatalistis</Line>
+ <Line>titanisk tiss lik innstilt di inn fins innkas ti</Line>
+ <Line>datid skantin linn si kastin dikt sandinis iskan</Line>
+ <Line>tadsjikis kalifa anstill islandsk indisi sisi ilskn</Line>
+ <Line>sniff kaksin stillin antistatis il tikk tiltak</Line>
+ <Line>inntak fint fni kni sindi affik dik sikt ilsk dill</Line>
+ <Line>tilli flassin ial ilt nitid tilla sil ni list</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>v</NewCharacters>
+ <Line>vink vas avta kvikk kalvinis skandinavis vakant</Line>
+ <Line>vill svai vannskad avlsk vi kvikksan kvad svil</Line>
+ <Line>vass avskall vidd avskilt tavl svi viin tilval</Line>
+ <Line>avkall landssviksa tilvis viin vi tilnavn svik</Line>
+ <Line>svisk avskiltin vat avtalt villsvin svin vin vitnin</Line>
+ <Line>stivnakk skav tilnavn vindfan va svin avtat vill</Line>
+ <Line>visita likvid nv vantak vaktin livvak avstandslins</Line>
+ <Line>kav invit sivil vilsk avskaffin kvakl avlat</Line>
+ <Line>vin svan vinflask kvis aktiv livslan salv avstan</Line>
+ <Line>kavlin vind stivnakk vins nava visl viva vikin</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>m</NewCharacters>
+ <Line>minimal man massi smisk midda datamaskinfi sjamanism</Line>
+ <Line>islamittisk stikkflamm maski lam innmatkak midtstilt</Line>
+ <Line>filmatisk amtmanninn massi mat lim stiml avismann</Line>
+ <Line>stamfisk klammin animalsk midtskil mil mafiatilstan</Line>
+ <Line>mistank svimlin tami smi smit klassisism sam mank</Line>
+ <Line>maldivisk filmdat smaln stikam klim samtid mist mammadal</Line>
+ <Line>vam dadaism stam midtsid landsmann jamnli stam</Line>
+ <Line>smak filmavis saltsma slam svimt intim midtaks</Line>
+ <Line>vaktmann mann datamaskinfamili smak midda filmfamili</Line>
+ <Line>mast midnat salm landmin avmastin mafiatilstan</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>e</NewCharacters>
+ <Line>flett melkefettet sameien kantstei kjeien enkeltside</Line>
+ <Line>fjellvidde jevn saksekjef maskine innlei matsale missetittelen</Line>
+ <Line>slankemidlene vikken skalke innlede midte skive skjellen</Line>
+ <Line>matfate datamesse eksemen kjense linjeelemente stenke</Line>
+ <Line>kallenavnet skadenevnde avtaleteks sveis divanen ineffektivitete</Line>
+ <Line>kive avskaffe kleiva etatsledels feite kildeskattesat</Line>
+ <Line>statsallmennin misteltei snilles knekk kansellistisk semjene</Line>
+ <Line>lendman seve sjeneve svike feilsend niste sjekke</Line>
+ <Line>venninnen lemleste saksfelten stemmetelle takend tastnavne</Line>
+ <Line>kakefesten skante innstendi isflaket salmen anstalte</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>h</NewCharacters>
+ <Line>helaftene vammelhete nedstemthe handelssamkve insidehandele</Line>
+ <Line>sjeldenheten enhetsnavne handelsledde edelhete hinke</Line>
+ <Line>havkanten hevde nattestillhe hikstene hed filthatten</Line>
+ <Line>havvan hetend himlin allmennhe vesthimmele klissethe</Line>
+ <Line>hjemkalt hves tekstsammenhen helseside hjalte helsedan</Line>
+ <Line>inndataenheten fiskehave halvtamm helflask sankthanstiden</Line>
+ <Line>hind helsesjefene dalaheste hjemsendelsen veltalenhe</Line>
+ <Line>vanhel kasakhe hjemette tastenheten hanekammen</Line>
+ <Line>kveldshimmele hves nattehavnen avhendeli helhete hils</Line>
+ <Line>hakkema handelsledden hjemsta hjelmen halvfeit hanke</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>r</NewCharacters>
+ <Line>sjakkseiere mediasentret skrekkveld direktesendend lekearealen</Line>
+ <Line>jernvarehandleren setter avtrekksvifte almetree havseileren</Line>
+ <Line>samfiskerne revejak lekearea selvherli sikkerhetssamtalen</Line>
+ <Line>kvalifisere kvarken fraktraten tranehalsen matvaresikkerheten</Line>
+ <Line>festledere tresnittet selvdreve ferjereisen skjermskrivere</Line>
+ <Line>raj rav ikkelinearitete karad karismatisk trafikkledels</Line>
+ <Line>kjellermestern inntakskravet hjemmeseire hesterasen sjefkjemikeren</Line>
+ <Line>irritertheten hammern resisten nikkerse risikere trellen</Line>
+ <Line>arrer sameretten tetraede siselere nettverkskreditten</Line>
+ <Line>siter editer tankmarkeder kraftverkseier knivstikkere</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>g</NewCharacters>
+ <Line>emigrantski fredagstrafik hjerteligheten avgraderingen</Line>
+ <Line>fangedrak tilleggslist kjervinge merverdiavgiftssat</Line>
+ <Line>stjernegrise inntjeninge fergekaien klagingen gangvegen</Line>
+ <Line>regimekritikere fellesgraven falangistene mindretallsregjeringen</Line>
+ <Line>gjette avgrensningstegnet lisensfinansieringen</Line>
+ <Line>kartsamlingen gjengjeldin desentraliseringen fremtidsstillingen</Line>
+ <Line>salgsleder divanseng flininge knising flenge knivingen</Line>
+ <Line>lagtin tvangsmidlet anleggsledern selvrettferdighe</Line>
+ <Line>deltagerinteresse avmagringsmidlet sjekkregistreringen egenska</Line>
+ <Line>streikemarkeringe filmdage dregge dekkvinge engste verdige</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>o</NewCharacters>
+ <Line>referansekategorie aksjefondsandelen fotograferingen overlevelsesgevins</Line>
+ <Line>kokekaret tredjedivisjonsla forvintrer alkoholskad</Line>
+ <Line>annotasjoner venninneforhol organisasjonsnettverke florisan</Line>
+ <Line>korridoren deoksiderin ordn fredsforslaget minsteadgangskvote</Line>
+ <Line>oslofenomene immortellen vestsamoansk eksaminasjonen</Line>
+ <Line>hovedtrinne mangfold skogsjefe markedsdominansen forretningstransaksjo</Line>
+ <Line>elektrokontore hol erotoman karjolene sno kirkeredaksjo</Line>
+ <Line>kommaen tolldeklarasjo sikringsfondsordninge koordineringssentrale</Line>
+ <Line>minerallovgivninge hovedorganisasjo kolli distraksjoner domkirken</Line>
+ <Line>klovneakti konsignasjone slektsforskere narkotikaforskrifte</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>b</NewCharacters>
+ <Line>bivr bojarene samarbeidstanke obligasjonen beinest</Line>
+ <Line>heroinbas skoleboksamlingen blindtarmen laboratorieteknikere</Line>
+ <Line>arbeidssentre seneskjedebetennelse forberedern benskaden</Line>
+ <Line>bonderosen handelsbreven atombrenselet satellittforbindelse</Line>
+ <Line>obligasjonsgjelden massebevarels bakoverdifferense beherske</Line>
+ <Line>giroblanketten fabrikklokalene begivenhetsri embedet barneleke</Line>
+ <Line>generasjonsbolige beiteverdie embedsmennene tegneblokken statsborgerska</Line>
+ <Line>filmsamarbeide vegbane karbongrader dobbeltmorden fabrikatet</Line>
+ <Line>bitterlig bogbladet banksje reinbeitin breklatrerne</Line>
+ <Line>klabbin fagarbeidern jernbanesville jernbanesake</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>p</NewCharacters>
+ <Line>fredsprisvinneren priorinnen sammenpakkingen proffparagrafen</Line>
+ <Line>opphev partiskillen haglpatrone nasjonalpar prosjektavkastningen</Line>
+ <Line>diaskopie bibelspredninge oppdekningene videretransporte</Line>
+ <Line>apokoper steinsprange paraglidern alarmrope kapitaltransaksjonen</Line>
+ <Line>pinseaftene kvartfinalekampen opptatthe pernoden spare</Line>
+ <Line>appositiv sildeprise bilplassen gipsmodel patro privatklinik</Line>
+ <Line>betalingsstop overspen propaganderin forretningskorrespondansen</Line>
+ <Line>avspeilin forplante grenseposte etappeseieren peilingene</Line>
+ <Line>arabisksprogli kaprin forsvarsdepartemente paripolitikken</Line>
+ <Line>pikkel dobbelttape klammeparente brevlappe konverteringsprogrammet</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>q</NewCharacters>
+ <Line>noqfm dqfg qnø q qqb qb iqi dqa q qatars qatarsk</Line>
+ <Line>noqfm q iqi bpfq nq q ftqn q q qatarsk qb noqfm</Line>
+ <Line>gfq nq noqfm q pqgp nq q q nq qqb q dqa qb q</Line>
+ <Line>qatars itq q q qn dqa vqn qatars gmiq vqn dqfg</Line>
+ <Line>gmiq noqfm qto noqfm qnø noqfm habsq q qatarsk</Line>
+ <Line>habsq q qatars gmiq q pqgp nq noqfm dqfg nq itq</Line>
+ <Line>dqa qto qatars bfpqp qatarsk pqgp qhi gfq qb</Line>
+ <Line>qatarsk habsq bpfq bpfq qhi iqi qto ftqn iqi bfpqp</Line>
+ <Line>qatars qnø dqfg pqgp q gmiq iqi pqgp bfpqp iqi</Line>
+ <Line>itq qn habsq bpfq habsq nq habsq noqfm q qqb</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>å</NewCharacters>
+ <Line>mpå åkh ål ål qå åpo åjt gåf å åp å åpq åpq</Line>
+ <Line>gåf åkh qå åpq åkh ål å fåni fåni fåni åfd å</Line>
+ <Line>fåni åq fåni bokå kqtår gå åpo ål åg qå vår mpå</Line>
+ <Line>å å åkh mpå å åq åpq fåni åpo vår ivpå åp</Line>
+ <Line>råg åfd åtem gå åp råg bokå råg å råg åq bokå</Line>
+ <Line>vår mpå åg åpq bokå å bokå åo åpo gå mpå kqå</Line>
+ <Line>åkh kqtår åjt åpq qå gå å fåni åpo åo å åp vår</Line>
+ <Line>bokå vår kqå åq åfd åfd åq gåf åmv ivpå gåf åmv</Line>
+ <Line>åpq åq råg kqå tådr å kqtår bokå åg kqå gåf</Line>
+ <Line>ivpå mpå åkh åtem kqå mpå åo åpq ål fåni åfd</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>w</NewCharacters>
+ <Line>westerngenren megawatt besserwisseren showrennet bowen</Line>
+ <Line>westernhel danseshowe sommershowet bowle botswaner</Line>
+ <Line>bowieknive tomahawken westernfilm botswane tweedjakk</Line>
+ <Line>westernfil showeffek tweeden arawa wienerne weekendreisen</Line>
+ <Line>walki botswanere wil botswanerne whisker knowhowe</Line>
+ <Line>weekendhjemmen showmenn vannshowet whigen terawat misseshowe</Line>
+ <Line>fotballshowet goodwillreisen lasershowet whisten wankelmoto</Line>
+ <Line>darwinisten westernhel showensemble langweeken westernen</Line>
+ <Line>swimmingpoolen wienerklassikerne wankelmotoren waliserne</Line>
+ <Line>bowlern rwanderen swimmingpoole sweatere mediashowe</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>n</NewCharacters>
+ <Line>traktekaffen leksjone grafikkavdelingen nedhogd malingboksen</Line>
+ <Line>manesje eiendomsforvaltern afrikasambande selvopplevelsen</Line>
+ <Line>agitasjonen skrangle orkanen besnin tilfanget kvartfinalekampen</Line>
+ <Line>omfatting kampvoterin barnebladen dagligvarehandelen</Line>
+ <Line>registreringsstatistik dingeldangle vandringsveien gasskraftmotstanderen</Line>
+ <Line>statisten rehabiliteringstjeneste familieministe sankthanskvelde</Line>
+ <Line>redningsvese formingsfage fritidssentren trekant legasjonene</Line>
+ <Line>geleiding oppmodinge oljeanlegge fordelingsansvaret</Line>
+ <Line>tetningsmaterialet kostnadsgevins landskapsavdeling skjermbildefotograferingen</Line>
+ <Line>popsangern magasinredaksjonen driftsbalans kreftforeninge</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>c</NewCharacters>
+ <Line>caset serviceetate corn potetchipsen landslagsbacke</Line>
+ <Line>elskovsscenen serviceselskape toppscorerliste canadiere</Line>
+ <Line>anteceder tchaderne servicekontrakte molotovcocktai</Line>
+ <Line>rockefestivalen sidebac champagn chartermarkedet oscarnominasjone</Line>
+ <Line>galiciern backhanden encelle rockerne chifferkontor</Line>
+ <Line>drawbacken scienc scenemessig c tchader scoote colakrige</Line>
+ <Line>serviceste servicemann serviceorganisasjo chelate chartring</Line>
+ <Line>chiantien france scenedekorasjonen scientisten leicakamerae</Line>
+ <Line>plantecelle chiffermaski rockevideoen placeboeffekten</Line>
+ <Line>chartringen cockne colafinalen dreiescenen servicearbeider</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>æ</NewCharacters>
+ <Line>eræ åpæ æm æd ævo eæ æånp eræ åpæ gæd æk eræ</Line>
+ <Line>jækv jækv lææ æånp åpæ ænb åpæ gæd bæ bæ æ æånp</Line>
+ <Line>oær gæhw tiæi tiæ tiæi åpæ lsæ æ eæ tiæi æånp</Line>
+ <Line>æg bæ jækv jækv åpæ ænb æd pæj bæ eræ åæpd</Line>
+ <Line>mæ æ ænb æjt gæhw gæd ævo æ gæd oær æjt æ åpæ</Line>
+ <Line>ævo åpæ æg æ tiæi mæ tiæ åpæ lææ æjt æjt lsæ</Line>
+ <Line>æ æjt eræ eræ æm tiæi åpæ eæ æ eræ æånp jækv</Line>
+ <Line>gæhw æg tiæi ævo æånp æjt åpæ ænb æ æånp tiæi</Line>
+ <Line>gæhw æk æg jækv æd æm æg tiæ bæ åpæ æm tiæ æm</Line>
+ <Line>æk lææ lææ eæ mæ æjt ævo eræ tiæi laæ ræp æ</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>x</NewCharacters>
+ <Line>sexovergrepet telefaxen sexpreskandal taxfreesalget mexikansk</Line>
+ <Line>taxi sexstjern coxen texacostasjonen maxitaxie</Line>
+ <Line>sexreise sexreise marxistleninis taxiholdeplasse</Line>
+ <Line>marxistleninistis sexbomb taxfreesalge sexslav antimarxistisk</Line>
+ <Line>sexgal sexpartner sexreisen sexfilme sexpartnere</Line>
+ <Line>max sexpartner sexologe taxisentra marxisten</Line>
+ <Line>mexicaneren marxisten texacostasjonen maxitaxie marxistleninis</Line>
+ <Line>taxfreesal mexicaneren sex xenofobie sexe faxe xerografere</Line>
+ <Line>sexpreskandale sexovergre sexologien taxiholdeplasse foxtrote</Line>
+ <Line>sexbomben xantippe sexskandale taxfre mexikane sexobjekte</Line>
+ </Level>
+
+ <Level>
+ <NewCharacters>abcdefghijklmnopqrstuvqxyzæøå</NewCharacters>
+ <Line>kraftverdie kremasjoner tonesettingen matboden kraftforsyningsavdelingen</Line>
+ <Line>barnetrinnsskol kjempetilbuden salgsvekste dytte diametere</Line>
+ <Line>mediedekkin kystfiskere villhesten judoklubbe sardinsk</Line>
+ <Line>immigrante stjernegri bantustane kaffekann nettobudsjettere</Line>
+ <Line>tidligpensjon akkordlist trehusbebyggelsen oppstillingsplane</Line>
+ <Line>lyttergruppe enhetskvoteordningen fluorideringen shippingprosjek</Line>
+ <Line>utbyggingsinteressen bastardhunde svenskesuppen unntaksrege forkampe</Line>
+ <Line>styrkestrukturen arkitektseksjoner atonalitete regiansvarlig</Line>
+ <Line>seriesammenhen diskettstasjoner beinveien strukturforandringen</Line>
+ <Line>vintersport glimme bedriftsavise slammet barnehaveavdelingen</Line>
+ </Level>
+
+<KTouchLecture>
diff --git a/ktouch/training/polish.ktouch.xml b/ktouch/training/polish.ktouch.xml
new file mode 100644
index 00000000..8495942c
--- /dev/null
+++ b/ktouch/training/polish.ktouch.xml
@@ -0,0 +1,1393 @@
+<KTouchLecture>
+<Title>Polski (import z TTCoach)</Title>
+<Comment>Plik ćwiczeniowy KTouch stworzony
+na podstawie ćwiczeń dla TTCoach,
+Mikołaj Machowski</Comment>
+<FontSuggestions>Nimbus Mono L</FontSuggestions>
+<Levels>
+
+<Level>
+<NewCharacters>fj</NewCharacters>
+<Line>f f f f f f f f f f j j j j j j j j j j f</Line>
+<Line>f j f f f f j j f j j f j f f f f f f f f</Line>
+<Line>f j j j j f f j j j f f f j f f f j f f j</Line>
+<Line>f f f f j j f f f f f j f j f f j f f j f</Line>
+<Line>f f j f f j j f j f f j j j f f f j f f f</Line>
+<Line>f f j f f j f f f f j f j j f f j f j f f</Line>
+<Line>f f f j j f f f j j j f j f f j f j f j f</Line>
+<Line>f j f j f f j f j f f f f f j f j f f f f</Line>
+<Line>f f f f f f j j j f j f f j j j j f f j f</Line>
+<Line>f f f j f j j f f f f f f f f f f j f f f</Line>
+<Line>f f f f f f f f f j f f f f f j f f j f f</Line>
+<Line>f f f f f f f j f f f f f j f f j f f f f</Line>
+<Line>j f j f j f f f f f f j j f f j j f f f f</Line>
+<Line>f f f f f f f j f f f f f j f f f f j f f</Line>
+<Line>j f f f f j f f f j f f j f j f f f f j f</Line>
+<Line>f j j f j f j f j f j f j f j f j f j f j</Line>
+<Line>f j f j f f j j f f j j f f j f j j f j f</Line>
+<Line>f f j j j f f j j f j f f f j j f j f j j</Line>
+<Line>f f f j f j j f f f f f f f f f f j f f f</Line>
+<Line>f f f f f f f f f j f f f f f j f f j f f</Line>
+<Line>f f f f f f f j f f f f f j f f j f f f f</Line>
+<Line>f f jf jf jf jf jf jf jf jf jf jf jf jf jf</Line>
+<Line>jf jf jf jf jf jf jf jf jf jf jf jf jf ff</Line>
+<Line>jj ff jj ff jj ff ff ff jj jj fff jjj fff</Line>
+<Line>jjj ffj jff ffj jff jf jf jf fj fj jj ff</Line>
+<Line>jj ff ff ff jj jj ff jj jj ff ff j j j j f</Line>
+<Line>f f f j j j j f f f j j f ff jj fff jjj f</Line>
+<Line>fff jjj fff fff jjj jjj jjj fff fff jjj f</Line>
+<Line>jjj ffj ffj jjf jjf fjf jfj fjf fjj jjf j</Line>
+<Line>jjf fjj fjj fjj jff jfj fjf fff fff jjj j</Line>
+<Line>jfj fjf jfj jf jf jf jf jf jf jf jf jf jf</Line>
+<Line>jf jf jf jf jf jf jf jf jf jf jf jf jf jf</Line>
+<Line>fff jjj fff fff jjj jjj jjj fff fff jjj f</Line>
+<Line>fjf fjf jfj jfj jjf jjf jjf ffj ffj fjf j</Line>
+<Line>jfj fjf jfj jf jf jf jf jf jf jf jf jf jf</Line>
+<Line>jf jf jf jf jf jf jf jf jf jf jf jf jf jf</Line>
+</Level>
+
+
+<Level>
+<NewCharacters>dk</NewCharacters>
+<Line>d d d d dd k k d d d dd k d k d d k k d dd</Line>
+<Line>d d d d dd k dd dd d dd dd dd d dd dd dd k</Line>
+<Line>d d dd d dd k k k k dd d d dd dd k d d k d</Line>
+<Line>dd d dd d d k d d k dd d d d d d k d k d</Line>
+<Line>dd d dd dd dd dd dd d dd d d dd d k k d dd</Line>
+<Line>d k d d d d d dd k d d dd d k dd d k k d d</Line>
+<Line>k k d k dd d k d dd d d d k d d d k k dd d</Line>
+<Line>d d d d d d k k dd dd dd k k d d d k dd dd</Line>
+<Line>k d dd dd dd d d dd d d dd k d d dd d d d</Line>
+<Line>d dd d d dd k dd d dd d k dd d d dd d d k</Line>
+<Line>d k k d k d dd dd k dd d dd d d dd d d k d</Line>
+<Line>k k dd d k d d d d d d d d d d d dd d d dd</Line>
+<Line>d k k d k d dd dd k dd d dd d d dd d d k d</Line>
+<Line>dk dk dk dk dk dk dk dk dk dk dk dk dk dk</Line>
+<Line>kd kd kd kd kd kd kd kd kd kd kd kd kd kd</Line>
+<Line>dk dk dk dk dk dk dk dk dk dk dk dk dk dk</Line>
+<Line>dk kd dk kd dk kd dk kd dk kd dk kd dk kd</Line>
+<Line>dk d dk dk k kd dk dk dk dd dd d dk d dk k</Line>
+<Line>dk dk dk dk dk dk dk dk dk dk dk dk dk dk</Line>
+<Line>kd kd kd kd kd kd kd kd kd kd kd kd kd kd</Line>
+<Line>dk dk dk dk dk dk dk dk dk dk dk dk dk dk</Line>
+<Line>dk kd dk kd dk kd dk kd dk kd dk kd dk kd</Line>
+<Line>dk d dk dk k kd dk dk dk dd dd d dk d dk k</Line>
+<Line>jd ff dj jk df fd kj kf jf fk jj jd ff dj</Line>
+<Line>jk df fd kj kf jf fk jj jd ff dj jk df fd</Line>
+<Line>kj kf jf fk jj jd ff dj jk df fd kj kf jf</Line>
+<Line>fk jj jd ff dj jk df fd kj kf jf fk jj jd</Line>
+<Line>kf jf fk jj jd ff dj jk df fd kj kf jf fk</Line>
+<Line>jj jd ff dj jk df fd kj kf jf fk jj jd ff</Line>
+<Line>jj jd ff dj jk df fd kj kf jf fk jj jd ff</Line>
+<Line>jkk jfk jkk jkk jfk fdd jjf jjf ddf jjf</Line>
+<Line>ddf jdk jfk fdd jjf jjf jkk fdd jfk jkk</Line>
+<Line>ddf jjf fdd fdd jfk jkk fdd jfk ddf jkk</Line>
+<Line>ddf jdk jfk fdd jjf jjf jkk fdd jfk jkk</Line>
+<Line>jjf fdd fdd jdk ddf jkk jjf jdk jdk jjf</Line>
+<Line>jfk jdk jfk jdk ddf jkk ddf ddf jdk ddf</Line>
+</Level>
+
+<Level>
+<NewCharacters>ls</NewCharacters>
+<Line>l l s l l l l s s l s s l s s s l l l ls l</Line>
+<Line>s l ls s l l l s ls s s l ls l l l s ls ls</Line>
+<Line>s l l s s ls ls ls s s s s l s s s s s ls</Line>
+<Line>ls s l s s l ls l s l l l s l ls ls ls s ls</Line>
+<Line>s ls s l s l s l s l ls l s l s l s ls ls</Line>
+<Line>ls l ls ls ls s l s s ls l l l l l l s ls</Line>
+<Line>ls s s s l l s s ls s l s l ls l l ls ls s</Line>
+<Line>ls s ls s l l s l s l l s s l s l s l l ls</Line>
+<Line>s s ls ls s ls l s ls ls s s s s l s s s s</Line>
+<Line>ls s l s l ls ls l l s s l s l l l s l l ls</Line>
+<Line>s l s ls l s l ls ls s s ls l s l ls l l l</Line>
+<Line>l s s s s s l ls l l l l s l ls s s l l l</Line>
+<Line>ls ls l s l l s s l l l l ls ls ls s ls ls</Line>
+<Line>l s l s s s l s s ls s s ls l s l ls s l s</Line>
+<Line>ls ll ss sl ll ls ss sl ls ss ll sl ls ll</Line>
+<Line>sl ss ss ls ll sl ls ll ss sl ll ls ss sl</Line>
+<Line>ls ss ll sl ls ll sl ss ss ls ll sl ss sl</Line>
+<Line>ls ll ss sl ll ls ss sl ls ss ll sl ls ll</Line>
+<Line>sl ss ss ls ll sl ls ll ss sl ll ls ss sl</Line>
+<Line>ls ss ll sl ls ll sl ss ss ls ll sl ss sl</Line>
+<Line>ds lk sj lk ks ks kl ld dl js ld sl js kl</Line>
+<Line>fl ls sk sd fl ld dl ss ll fl ss fs ks ls</Line>
+<Line>ll ds lj kl fl sj ss kl ll lk lk ld ss sj</Line>
+<Line>fl ls sk sd fl ld dl ss ll fl ss fs ks ls</Line>
+<Line>ll ds lj kl fl sj ss kl ll lk lk ld ss sj</Line>
+<Line>ls ks fl sj sf ds ds sk dld kfl dds lls</Line>
+<Line>lsk sdk ldl lsl sks ksk sdk skl lds lsk</Line>
+<Line>skl fds lks ssf ksl lds fsf skj sks skj</Line>
+<Line>lss kds sks sfs fsf fsf ddl ddl ffs ksj</Line>
+<Line>dls ksf ssk ssl ldf dsl sds skj jsk sss</Line>
+<Line>dsk ffs ssf dds dds sdd dls ksk sld jsk</Line>
+<Line>dll ksj slk ssd llf lss lks dls ksl dsk</Line>
+<Line>ldd sss slf ffl ffl ffl dll fds sss lsl</Line>
+<Line>lsk klk lsd lsj dkl sdl skl ksl dsk sls</Line>
+<Line>dls ksf ssk ssl ldf dsl sds skj jsk sss</Line>
+<Line>ksk lls dkl jkl dll ddl dld lsj ssl lfl</Line>
+</Level>
+
+<Level>
+<NewCharacters>a;</NewCharacters>
+<Line>a a a a a a a a a a ; ; ; ; ; ; ; ; ; ; a</Line>
+<Line>a ; a a a a ; ; a ; ; a ; a a a a a a a a</Line>
+<Line>a ; ; ; ; a a ; ; ; a a a ; a a a ; a a ;</Line>
+<Line>a a a a ; ; a a a a a ; a ; a a ; a a ; a</Line>
+<Line>a a ; a a ; ; a ; a a ; ; ; a a a ; a a a</Line>
+<Line>aa ;a ;a aa aa aa aa aa ;; ;a ;a a; ;; ;a</Line>
+<Line>a; a; aa a; a; ;a aa aa aa aa a; aa aa al</Line>
+<Line>ka ak da la ad as aj ja al ka ak da la ad</Line>
+<Line>as aj ja al ka ak da la ad as aj ja sa af</Line>
+<Line>ka ak da la ad as aj ja al ka ak da la ad</Line>
+<Line>as aj ja al ka ak da la ad as aj ja sa af</Line>
+<Line>fa sa af fa aa jak dla ada ska ala kla daj</Line>
+<Line>ajd adk jal sja kal las dal laj lka ask</Line>
+<Line>asa sad aka fak aks kaj kas all ajl dka</Line>
+<Line>alk als dak sal aja kad ass add jas fas</Line>
+<Line>ajd adk jal sja kal las dal laj lka ask</Line>
+<Line>asa sad aka fak aks kaj kas all ajl dka</Line>
+<Line>alk als dak sal aja kad ass add jas fas</Line>
+<Line>dda ajs kak lla ssa sla fla fal lak lad</Line>
+<Line>alf lfa sak jaj ajk ald das adl jka afa</Line>
+<Line>ksa ads aak saf akl sfa lsa dfa sas lda</Line>
+<Line>faj dad asj akk aad sda kka jda jad fsa</Line>
+<Line>fad asf adf lal laf kaf jsa ffa akd afs</Line>
+<Line>afl aff adj aal aaa saj saa lja laa kja</Line>
+<Line>kda jla jja jfa jaf jaa fka dsa dja daf</Line>
+<Line>asl asd akj ajj ajf afk afd aaf fala falka</Line>
+<Line>kalka jajka kaja lala as dal dak daf fad</Line>
+<Line>lad dal lada dal dalka kala kajak jak lak</Line>
+<Line>kaskada fasada falka salka kasa skala</Line>
+<Line>jajka kaska dala sas lada sasa lalka as</Line>
+<Line>falka jala dal saska a ja lalka dajka</Line>
+<Line>falka ja fala falka kalka jajka kaja lala</Line>
+<Line>as dal dak daf fad lad dal lada dal dalka</Line>
+<Line>jajka kaska dala sas lada sasa lalka as</Line>
+<Line>falka jala dal saska a ja lalka dajka kala</Line>
+<Line>kajak jak lak kaskada fasada lada dal lal</Line>
+</Level>
+
+<Level>
+<NewCharacters>567</NewCharacters>
+<Line>7 5 7 5 7 7 6 6 6 6 7 6 5 6 7 6 6 5 6 5 7</Line>
+<Line>7 7 7 5 7 6 5 6 6 5 5 7 5 5 5 6 7 5 6 5 7</Line>
+<Line>7 7 5 5 5 6 5 6 6 5 6 6 5 5 6 6 6 5 7 6 7</Line>
+<Line>5 6 5 5 7 6 5 6 6 5 6 5 6 6 5 5 6 7 6 5 5</Line>
+<Line>sajka kajaka dajka dakk fals skaj 56 klask</Line>
+<Line>dkl dada falsa 7 kakaa klaskaj 66 fajdaj</Line>
+<Line>flak kajak kajak alfa 6 alla kasak klaska</Line>
+<Line>skald fasa jafska lak kaja sas dal kask 5</Line>
+<Line>sajka flak klaka las sasa 777 fajda fasad</Line>
+<Line>6 7 kalka faska 7 dakka fasad kaja kaja</Line>
+<Line>skala 6 65 alk 555 sajdaka 7 lala faks dal</Line>
+<Line>asa 55 fala jasaka sad dkl aksla kalfas</Line>
+<Line>fas asa 67 ssaka aksla 555 klak kaskada</Line>
+<Line>jasak 5 sal dajka 55 kas klaska kajaj jad</Line>
+<Line>567 5 lassa kafla kalka alla skalska</Line>
+<Line>flaka lassa asa 77 alk sas faks kafla sald</Line>
+<Line>sals salka alk jak kasja 6 75 75 dakk</Line>
+<Line>jajka lassa fajf skalaj fajda lasa jadaj</Line>
+<Line>faja asas 77 flaka lada klak kalaj kalfas</Line>
+<Line>skal 5 klasa fala kajaka sald dal saska</Line>
+<Line>sajdak 7 kafla fasada fasad 7 sajdaka kall</Line>
+<Line>jada alaks alaks sad daj ssak dajka kala</Line>
+<Line>kaskada kasa daj klasa kalka alkad 65 dada</Line>
+<Line>fal ssaka 56 klaska jada salsa slajd 6</Line>
+<Line>alkajska 567 lass ald 5 jaja 666 laka faj</Line>
+<Line>jakla falaska sak sajdak 765 kaskad sala</Line>
+<Line>jak salsa jajka jaj 7 fasa kalaj lad sajka</Line>
+<Line>fasada las alkad klaskaj dala klask 6 6</Line>
+<Line>alkada laka lad klas 67 76 kalla kalka</Line>
+<Line>kasja kalaj fajka kasa faks sasa fajdaj</Line>
+<Line>fajdaj 666 sakla slajd alfa jass skalska</Line>
+<Line>kask fala 6 5 jaja alla saka jasaka ajaks</Line>
+<Line>kalk sal 57 falsa saska ska jaska kalk lad</Line>
+<Line>alaska sad 5 57 falsa fajka 7 asas asas</Line>
+<Line>faja 5 777 sakla dkl 76 765 jajka fal</Line>
+<Line>faska lal 66 dla fajf alaska skalda</Line>
+</Level>
+
+<Level>
+<NewCharacters>ei</NewCharacters>
+<Line>e e e e e e e e e e i i i i i i i i i i e</Line>
+<Line>e i e e e e i i e i i e i e e e e e e e e</Line>
+<Line>e i i i i e e i i i e e e i e e e i e e i</Line>
+<Line>e e e e i i e e e e e i e i e e i e e i e</Line>
+<Line>e e i e e i i e i e e i i i e e e i e e e</Line>
+<Line>e e i e e i e e e e i e i i e e i e i e e</Line>
+<Line>e e e i i e e e i i i e i e e i e i e i e</Line>
+<Line>e i e i e e i e i e e e e e i e i e e e e</Line>
+<Line>e e e e e e i i i e i e e i i i i e e i e</Line>
+<Line>e e e i e i i e e e e e e e e e e i e e e</Line>
+<Line>ie ee ei ii ei ee ei ee ie ii ee ei ii ie</Line>
+<Line>ii ie ee ie ie ie ii ii ie ee ie ie ei ie</Line>
+<Line>ee ie ie ie ie ii ie ie ii ie ee ei ii ie</Line>
+<Line>ei ei ii ee ie ei ie ee ie ie ie ii ie ie</Line>
+<Line>ia ef es je je es ia ki ia es ai se es di</Line>
+<Line>es ik fi je fe es es es ia ki si ej fi if</Line>
+<Line>di si se ia ej si ie es ea je ia ij es ai</Line>
+<Line>ia je is ei ki je de ia ek ek de id fe ae</Line>
+<Line>sia ssi jes ski sie ika iad iej ses ied</Line>
+<Line>isk iej sji ejs sji fik ida sji esi kie</Line>
+<Line>iej isk efa ake ika esi ies ide iek ies</Line>
+<Line>iek isa ied jes kie eed ffi fek dii isk</Line>
+<Line>ies iad eki sse kie efi esa iad ski jes</Line>
+<Line>dek dia isk edi sis ies esi ese ejs fik</Line>
+<Line>aki ies jes aki jes eje efe jed esi isa</Line>
+<Line>ksi eks ied iej kie sie ski kie ead iej</Line>
+<Line>sek fes sji ija eak ejk iej sji dia iek</Line>
+<Line>ika isa ejd iek ise ied jek ias eja eda</Line>
+<Line>jes sie jed isa ade fii aki ide sie ess</Line>
+<Line>aki ies jes aki jes eje efe jed esi isa</Line>
+<Line>afi des iad iki ika kie esj aki eds iad</Line>
+<Line>eks kie dis esi afi iki asi kie ejs eas</Line>
+<Line>jej ejs idi eks ejs jed iej fik kie jes</Line>
+<Line>ede jed iad iej esi ies isi dej dia dki</Line>
+<Line>eka def aje kse dea jes sie dia ide ase</Line>
+<Line>sie iki ski ski dde iek jed ski iek dia</Line>
+</Level>
+
+<Level>
+<NewCharacters>012</NewCharacters>
+<Line>0 2 1 2 1 1 2 1 1 2 0 1 0 0 0 2 0 1 0 0 1</Line>
+<Line>0 2 1 2 1 1 2 1 1 2 0 1 0 0 0 2 0 1 0 0 1</Line>
+<Line>0 2 1 2 1 1 2 1 1 2 0 1 0 0 0 2 0 1 0 0 1</Line>
+<Line>2 2 2 2 1 0 1 2 1 0 2 0 2 2 2 2 1 0 1 2 1</Line>
+<Line>keksa esiki kalki allel lelie lisia fiala</Line>
+<Line>fliki kilka 00 fale lali lead fili ssali</Line>
+<Line>dikk deje klik esie klask flik fisi keje</Line>
+<Line>deses skaje fisis lelka lesie sald flika</Line>
+<Line>222 fala jaja sieli diaki 102 sale fila</Line>
+<Line>efie elka idea 00 fajda kaiki delia saka</Line>
+<Line>lilij faski diak 101 leja kleks saska 202</Line>
+<Line>eseje fleka kijaf esdek sial fasad alfa</Line>
+<Line>lias lejka lelij 120 akii alea 111 siaki</Line>
+<Line>assai iskaj alla lasie idei filsa kije 21</Line>
+<Line>lisek kaki lelii leli kadi 010 filij diale</Line>
+<Line>lass siei 110 lilie kefie jadaj faska 211</Line>
+<Line>kalif kasie kasji alkad kefij aisis dekli</Line>
+<Line>dalej jadle fasa 101 salek fial sakle</Line>
+<Line>fifek jaje kalla fafli 12 sili idee desa</Line>
+<Line>lejek skald elfa saski 10 kalia 010 laski</Line>
+<Line>sidle salka kafel sieja dial delij elfie</Line>
+<Line>daje siej fasek kiks leik 000 021 ssaka</Line>
+<Line>klaka kijki eska disis elfi kalk liska</Line>
+<Line>flek 122 kalli jakli falek alias saida</Line>
+<Line>fiks alija 112 fleja kakaa 11 jajek kaski</Line>
+<Line>000 110 kijek diad skisi esika 12 201</Line>
+<Line>dalsi jakla faja sesje kalle sisal ssak</Line>
+<Line>elki filia fisie skala sajka klas akia</Line>
+<Line>lada fikaj 01 fajek lasek lais skali fajf</Line>
+<Line>skai 210 10 flej afiks seida kija flak</Line>
+<Line>kisi 01 02 lilak 221 alka 120 idis idisa</Line>
+<Line>220 aksis sede kafla 21 klasa lelek 222</Line>
+<Line>klif 022 elfia delie deja 200 lilia sklei</Line>
+<Line>jakle jaska kaida kala akie safes sille</Line>
+<Line>002 disa alaks dikki salsa sadek dalij</Line>
+<Line>skaj fifka faje lilii jada kalii sajek</Line>
+<Line>flaka kalij dada kleik dalii kasja dekla</Line>
+<Line>kafli jaki kidaj alki salda kaik eses</Line>
+<Line>fiale faks kefii sakla jajka 101 20 falsa</Line>
+<Line>lalek laika leje sejf alles alkil kilek</Line>
+<Line>kilak fika aksle esik jasak 020 deska flei</Line>
+<Line>kaid iksa ajaks lale asas dajek fali sasa</Line>
+<Line>kalie dekle said siak dali jass iksie laki</Line>
+<Line>alei aldis leka kiesa 210 deka fiask klak</Line>
+<Line>sesji seksi siali 001 101 lelki 212 kaja</Line>
+<Line>lasa fils lila sklej kafej alef kiksa</Line>
+<Line>silli allil deki sill falki leski esek</Line>
+</Level>
+
+<Level>
+<NewCharacters>ru</NewCharacters>
+<Line>r r r r r r r r r r u u u u u u u u u u r</Line>
+<Line>r u r r r r u u r u u r u r r r r r r r r</Line>
+<Line>r u u u u r r u u u r r r u r r r u r r u</Line>
+<Line>r r r r u u r r r r r u r u r r u r r u r</Line>
+<Line>r r u r r u u r u r r u u u r r r u r r r</Line>
+<Line>r r u r r u r r r r u r u u r r u r u r r</Line>
+<Line>r r r u u r r r u u u r u r r u r u r u r</Line>
+<Line>r u r u r r u r u r r r r r u r u r r r r</Line>
+<Line>ru ur ru ru ru ru rr ru ru ru ur ur ur ur</Line>
+<Line>ru ur ru ur ur ru ru ru ur ur ru ru ur ur</Line>
+<Line>ru ru ur uu ur ur ur ru ur ur ur ru ur ru</Line>
+<Line>ru ur ru ru ru ru rr ru ru ru ur ur ur ur</Line>
+<Line>ru ur ru ur ur ru ru ru ur ur ru ru ur ur</Line>
+<Line>ru ru ur uu ur ur ur ru ur ur ur ru ur ru</Line>
+<Line>ra ra ra ra er er er ar ar ar re re ku ku</Line>
+<Line>ru ru uj uj us kr ur uk du ru ru uj uj us</Line>
+<Line>kr ur uk du dr su rs iu rd ri ir ud au rk</Line>
+<Line>ua fu ju fr rf eu ue ui jr rr sr uf uu rj</Line>
+<Line>rsu deu uja aju ref dra era usu aru era</Line>
+<Line>eur era kar asu rae eru ree sua usi kra</Line>
+<Line>adr rus edr ier udi asu era efr fri eri</Line>
+<Line>kre dri sur rdi ars era aru kur usk jkr</Line>
+<Line>ras eir rja rsi jdu rea era far err dru</Line>
+<Line>urd dku ruk ari rfa fur uer raj erj rue</Line>
+<Line>rsa iur ssu usi aeu iuk ere usj rsj era</Line>
+<Line>seu iku ier ark ruj isu erk ers dre fer</Line>
+<Line>uds eus fra isu ara suk rid ier uue adu</Line>
+<Line>rei auf uru era iru uki ere dur sui auk</Line>
+<Line>rda kur uff ejr ued sku ira ekr aku rru</Line>
+<Line>uje ier rka dre urr rif ruk fre ria suf</Line>
+<Line>rak fus eer esu uik ruu esu fuj afu uru</Line>
+<Line>riu dar rdu ers kud usd eku der udk ier</Line>
+<Line>arj jsu ufa rej skr ier kuk era ddr are</Line>
+<Line>fra ara usa ars ier ruj air jku rad dir</Line>
+<Line>aus ura ajr sdr aku isr suj uda uas reu</Line>
+<Line>rsa iur ssu usi aeu iuk ere usj rsj era</Line>
+</Level>
+
+<Level>
+<NewCharacters>3489</NewCharacters>
+<Line>4 9 4 9 3 3 4 8 3 4 9 3 9 3 8 4 8 9 3 9 4</Line>
+<Line>4 9 4 9 3 3 4 8 3 4 9 3 9 3 8 4 8 9 3 9 4</Line>
+<Line>3 9 4 8 8 4 4 8 3 4 9 9 9 3 9 3 3 8 4 8 8</Line>
+<Line>4 9 4 9 3 3 4 8 3 4 9 3 9 3 8 4 8 9 3 9 4</Line>
+<Line>8 8 3 9 4 8 8 4 4 8 3 4 9 9 9 3 9 3 3 8 4</Line>
+<Line>94 kul 38 firka jader red 89 48 34 aria</Line>
+<Line>rai kuk 89 sefira ferii resku skradaj duli</Line>
+<Line>leseruje surfu skua 88 flekuj fularki</Line>
+<Line>ursusie 38 alkalifilu kuffie saradele</Line>
+<Line>seriru sarisa asekuruje 34 faraskie rudel</Line>
+<Line>93 aureusa kursuj ukelele ukres 98 kairski</Line>
+<Line>ususu 93 fiu ujadaj karakasek 98 daru</Line>
+<Line>kierdeli frajera 94 lulali 84 kaskader 43</Line>
+<Line>fajfu kasar 48 33 lisiur 33 ludu rakija</Line>
+<Line>riela 88 98 skarali ud fuks 99 seradele</Line>
+<Line>safesu 99 relaks 43 krasu rejek 33</Line>
+<Line>rajfurka adular likier 34 94 sulfid</Line>
+<Line>usidlili 48 deskuje 93 kuluaru farfurki 83</Line>
+<Line>38 49 94 sfrajeruje 44 49 83 adieu frasuj</Line>
+<Line>lekusiej siderski 39 skifu lekarek kriuki</Line>
+<Line>fauluj 88 skusili lukier fider skulaj 49</Line>
+<Line>aralsku eskuda ras 99 kadra suflerskiej</Line>
+<Line>kijarki kluj klejarki kuf 44 deriki ileus</Line>
+<Line>sueskie 49 krajera julijski dusera rurkuj</Line>
+<Line>83 serdara kuskus 43 laser dresiku kisielu</Line>
+<Line>ekskursji lusakijek adresiki kraik diuk</Line>
+<Line>esaule 84 rujskie 39 jarej judejskie</Line>
+<Line>dilerska dudka 48 druku alusale 84</Line>
+<Line>defiluje frr afiliuj kraksie 33 44 akrasia</Line>
+<Line>88 filarki redukuj 44 arkadka furkali</Line>
+<Line>kreduje seulskie 43 kalus 83 89 93 fur 99</Line>
+<Line>karrar radia dujker jaruje kirasjer</Line>
+<Line>uralskiej kaukaski karasiu siusiaku kurka</Line>
+<Line>39 kurdiuku raf karelskie kafelku sillu</Line>
+<Line>keru ulika karkasu refluksja 84 38</Line>
+<Line>lalkarek kajakuje deklasuj laudes ekierka</Line>
+<Line>34 89 39 fallusie 98 kulesku udusili dred</Line>
+<Line>klarka</Line>
+</Level>
+
+<Level>
+<NewCharacters>wo</NewCharacters>
+<Line>o o o o o o o o o o w w w w w w w w w w o</Line>
+<Line>o w o o o o w w o w w o w o o o o o o o o</Line>
+<Line>o w w w w o o w w w o o o w o o o w o o w</Line>
+<Line>o o o o w w o o o o o w o w o o w o o w o</Line>
+<Line>o o w o o w w o w o o w w w o o o w o o o</Line>
+<Line>o o w o o w o o o o w o w w o o w o w o o</Line>
+<Line>wo ow oo ow ow ow wo ow ow ow ow ww ow ow</Line>
+<Line>ow wo ow ow ow ow ow ow ow ow oo oo wo ow</Line>
+<Line>ow ow wo oo wo ww ww ow ow oo ow ow ow ow</Line>
+<Line>ow ow ow ww wo oo ow ow ow ow ow ow wo ow</Line>
+<Line>ow ow ow ow ow ow ow ow ow ow ow ow ow oo</Line>
+<Line>ow wo ow ow ow ow ow ow ow ow wo ow wo ow</Line>
+<Line>ow ow ro wa ow ro wa ow ro wa ow ro wa ow</Line>
+<Line>ro wa ow ro wa ow ro wa ow ro wa ow ro wa</Line>
+<Line>ow ro wa ro wa wi ko wi ko wi ko wi ko wi</Line>
+<Line>ko wi ko do do do or od or od do or od or</Line>
+<Line>od os aw os aw os aw os aw we wo ok we wo</Line>
+<Line>ok ws io so fo iw ew rw oj of ww dw uw wr</Line>
+<Line>wd sw jo wk wu eo ou oo oi kw jw oa ao oe</Line>
+<Line>owa wie owe awi dow kow row owi owa wie</Line>
+<Line>owe awi dow kow row owi owa wie owe awi</Line>
+<Line>dow kow row owi owa wie owe awi dow kow</Line>
+<Line>row owi war for ora wia dos raw wer ows</Line>
+<Line>owo wor erw sow rod odu kor oso ero oda</Line>
+<Line>dok ros oku awa iwo wej wis ako iow sko</Line>
+<Line>wad ore okr odo wid osi iwi ode eso oje</Line>
+<Line>uwa iko www oko dod sor ods wod ado oka</Line>
+<Line>udo iwa awd sof rwe rok iew kro aso rws</Line>
+<Line>oro daw oki wsk oru oja awe kod uko jaw</Line>
+<Line>ewi ior awo woj ewa kiw swo ofe aro eko</Line>
+<Line>wir uro iwe roj ori ord wow efo rof wra</Line>
+<Line>wio suw kos fro dko odk dro rwa ajw rwi</Line>
+<Line>osu dwa waj osa ork sio odr dio rdo aws</Line>
+<Line>rew odw kaw deo off ido woi sok ofi odd</Line>
+<Line>wro ios dwu rso ook iso dwi wek osk ors</Line>
+<Line>ewe wew ewo wki arw wka wuj rwo owu kwe</Line>
+<Line>rko rou ews edo ekw sjo our jwi aaw wuk</Line>
+<Line>sou dwo wed ufo ose kwa wij jwa dor ajo</Line>
+<Line>wes koj was owr kwi awu awk uso oad auw</Line>
+<Line>wri swe waw owk oju ieo wdo wsa rro rio</Line>
+</Level>
+
+<Level>
+<NewCharacters>.,</NewCharacters>
+<Line>. . . . . , , , , , . . . . . , , , , . .</Line>
+<Line>. . , . . , , . , , . , , . . . , , , . ,</Line>
+<Line>... , , ... , , . , . . , ... , . , ... .</Line>
+<Line>oleodruk. okorowuje. skiofilu. kawiarka;</Line>
+<Line>kilokalorio. dredowi, kwaku; dero. wojsko.</Line>
+<Line>lalkarko. kawalarko, kufelkowa. kore.</Line>
+<Line>kreolek. arakowa. asfodeli. dowodu.</Line>
+<Line>iksowe. kresowiak. solluksowi. kurarowej.</Line>
+<Line>odoleili. werdiur. laufrowi. kulawo.</Line>
+<Line>sforsowali. audiofilsku; lewek. lawowe.</Line>
+<Line>deskowali. ulewie; silowi, suwakowi.</Line>
+<Line>sewrsku; foula, kuflowej. rekord. uralowi.</Line>
+<Line>elkaesowsku. dwuwersowa. wasal, orkowe.</Line>
+<Line>wieloosiowa, dejdwudu; redukowali.</Line>
+<Line>deskowali. ulewie; silowi, suwakowi.</Line>
+<Line>sewrsku; foula, kuflowej. rekord. uralowi.</Line>
+<Line>wilku. kalifowi. jawa. walidolowi. lekowe.</Line>
+<Line>kolorowo, sodo, woru. swawolili, sewrsku;</Line>
+<Line>foula, kuflowej. rekord. uralowi. wklejka.</Line>
+<Line>salwadorsku. olei; wadero. kilkowioskowej.</Line>
+<Line>orselij, wrakowisku. rokadowi.</Line>
+<Line>sierakowsku. eserowska. kilkowioskowej.</Line>
+<Line>orselij, wrakowisku. klosiku, kororko.</Line>
+<Line>widuje, oasowskie; krowie, karolku,</Line>
+<Line>kardiowersjo. oskarduje. kosera. rosi.</Line>
+<Line>fiasko. kolka, duklo. wisiorowi.</Line>
+<Line>fujarkowej; awersje, liderko. lalkarko.</Line>
+<Line>kawalarko, kufelkowa. kossakowi. durowej.</Line>
+<Line>kriokrasu. koralikowa, wieloosiowa,</Line>
+<Line>dejdwudu; redukowali. wielkooka. dodrukuj.</Line>
+<Line>wujek. faworkowa, skrofulario. orderowej.</Line>
+<Line>fasolko. aliasowi. iksowe. kresowiak.</Line>
+<Line>solluksowi. kurarowej. kosera. rosi.</Line>
+<Line>fiasko. kolka, duklo. kosera. rosi.</Line>
+<Line>fiasko. kolka, duklo. wklejka.</Line>
+<Line>salwadorsku. olei; wadero. kossakowi.</Line>
+<Line>durowej. kriokrasu. koralikowa, oleodruk.</Line>
+<Line>okorowuje. skiofilu. kawiarka;</Line>
+<Line>elkaesowsku. dwuwersowa. wasal, orkowe.</Line>
+<Line>lalkarko. kawalarko, kufelkowa.</Line>
+<Line>sforsowali. audiofilsku; lewek. lawowe.</Line>
+<Line>refowej. doskwierali. dwukilowa,</Line>
+<Line>deskowali. ulewie; silowi, suwakowi.</Line>
+</Level>
+
+<Level>
+<NewCharacters>?!</NewCharacters>
+<Line>? ? ? ! ! ! ! ? ? ? ! ! ! ? ? ! ! ! ? ?</Line>
+<Line>! ! ? ! ? ? ! ! ? ! ! ? ? ? ? ? ! ? ? ?</Line>
+<Line>!? !? ?! ?! ?! !? !!! ??? ?? !! ?! !?</Line>
+<Line>jusowi! odwiej? frajdo! sekwojo durowe</Line>
+<Line>sfruwali! wojskowa! orosieli? kulkowa?</Line>
+<Line>ulewie! diodowe walidolu! fosforiakowi</Line>
+<Line>oska? asfodelowej? wiewa! euro! rookies</Line>
+<Line>kowelskie! resora! joduj! urokliwej</Line>
+<Line>rukoli? faulowali! foksowi? dwuwiekowi</Line>
+<Line>fora? kolejarki! wisioru! korsie!</Line>
+<Line>orawsku! jarlowi! kodeks! kokarda!</Line>
+<Line>wisioru? lulkowej! klasowi? olejowe?</Line>
+<Line>laskowski? lewad! rowki? odduka serwala!</Line>
+<Line>dwuklasowi! rekwirowali! diafora!</Line>
+<Line>kefirkowi! lejowa? siewie! woalki dekodera</Line>
+<Line>wirku? iksowi lisiurko? swawola! dresowa!</Line>
+<Line>freudowskiej surfowali! riffowa?</Line>
+<Line>lewellerowi! rudawsku! kalkulowali wadi!</Line>
+<Line>rukoli? faulowali! foksowi? dwuwiekowi</Line>
+<Line>raudo skaskadowali? krowoderska! ssawkowe!</Line>
+<Line>rewiduje! dalikowsku! awalu? folij!</Line>
+<Line>korkowali! lwowski? okular? arko?</Line>
+<Line>kurewski? defilado! okrajko! kursorowa?</Line>
+<Line>dolskie? oklaskiwali kresowi? karlikowi?</Line>
+<Line>ludlowowi! eskadro? kolurie okuwko sokoli!</Line>
+<Line>osadu! odsada kowalik! kredowa! usuwowi?</Line>
+<Line>owalu! sillowi! wiedli! refluksjo!</Line>
+<Line>korkowali! lwowski? okular? arko?</Line>
+<Line>floresie! soulu! osuwa? fulowi karakasko!</Line>
+<Line>kudowskiej! dworaku? ukosie! farsowi!</Line>
+<Line>waflarek? odjada! woruj? lodu! suwakowa?</Line>
+<Line>wisioru? lulkowej! klasowi? olejowe?</Line>
+<Line>araukario! rewelersowej odsiewu?</Line>
+<Line>kafkowska! fladrowi aerosiewie oliwki!</Line>
+<Line>orisulowi dokuj! erukowe? rokadowa!</Line>
+<Line>waflarek? odjada! woruj? lodu! suwakowa?</Line>
+<Line>wsioka? osielska? wari? rusofilsku owsowi!</Line>
+<Line>skwarkowa? kisielkowi skowie? rodowodu?</Line>
+<Line>udko! skrwawia kwasku? alkidowa!</Line>
+<Line>udko! skrwawia kwasku? alkidowa!</Line>
+<Line>fiakrowie! akaro skoksowali! siwawej!</Line>
+</Level>
+
+<Level>
+<NewCharacters>gh</NewCharacters>
+<Line>g g g g g g g g g g h h h h h h h h h h g</Line>
+<Line>g h g g g g h h g h h g h g g g g g g g g</Line>
+<Line>g h h h h g g h h h g g g h g g g h g g h</Line>
+<Line>g g g g h h g g g g g h g h g g h g g h g</Line>
+<Line>h h g h h g g h g h h g g g h h h g h h h</Line>
+<Line>gh gh gh gh gg gg gh gg gh gh gh gg gh gh</Line>
+<Line>hh gg gh gh gh gg hh gh gg hg gh gh gh gh</Line>
+<Line>gh gh gh gh gh hh hg hg gh gh gh gh gg gg</Line>
+<Line>gg gh gg gh gg gh gh gg gg gh gg hh gh hg</Line>
+<Line>gh gg gg gh gh gg gh gh gg gh gg hh hg gh</Line>
+<Line>wh ho ge gr og eh rh gr hd kg gr ha go gs</Line>
+<Line>ha oh gg og gh ah jg og ho hw gu gg eg ug</Line>
+<Line>gu gd og hw hr ga rg kg gg hi he eg gh gw</Line>
+<Line>wg wg ge hs eg dg eg hr gr gh ge go hf ig</Line>
+<Line>ah go go wh wg hr he gr og hd ha hu wg dg</Line>
+<Line>rag igu rig igi gra kog reg odg hig aga</Line>
+<Line>ega rge ego ogo rog gor rog hor how gra</Line>
+<Line>ogr ogr has gar gra gru aha ogr gwi ogr</Line>
+<Line>jeg rog igr ego agi rog rog rog ugu ogr</Line>
+<Line>gra rog arg egi gda rug guj dge ugo ige</Line>
+<Line>gra rog arg egi gda rug guj dge ugo ige</Line>
+<Line>uga hie hod erg idg ugi ogr rgi gif ger</Line>
+<Line>rog uge rga hos dgr ash dog gis age oga</Line>
+<Line>rog gad weg ges rgo she dag hee her geo</Line>
+<Line>rog gad weg ges rgo she dag hee her geo</Line>
+<Line>gra deg gra whe his hro gre ogr gra egr</Line>
+<Line>ieg ago ego jeg ego ege iga ugi ahe ogu</Line>
+<Line>ieg ogi gra gua sho gas giw gra sig sug</Line>
+<Line>ego gig ego hwi gro hiw hre gur igd kgr</Line>
+<Line>weg rog ish ogr hif gra gii rog rog iag</Line>
+<Line>gow gie shi aga ego ogr ego rgu uag gio</Line>
+<Line>igo hur gaj sha god igh seg gra dig god</Line>
+<Line>agr hea gos sag gwa org har ksh osh fig</Line>
+<Line>ego egu wig wag ego rah ogr ogr gia eog</Line>
+<Line>ego egu wig wag ego rah ogr ogr gia eog</Line>
+<Line>gra rog arg egi gda rug guj dge ugo ige</Line>
+<Line>uga hie hod erg idg ugi ogr rgi gif ger</Line>
+<Line>rog uge rga hos dgr ash dog gis age oga</Line>
+<Line>rog gad weg ges rgo she dag hee her geo</Line>
+<Line>rog gad weg ges rgo she dag hee her geo</Line>
+</Level>
+
+<Level>
+<NewCharacters>nb</NewCharacters>
+<Line>n n n n n n n n n n b b b b b b b b b b n</Line>
+<Line>n b n n n n b b n b b n b n n n n n n n n</Line>
+<Line>n b b b b n n b b b n n n b n n n b n n b</Line>
+<Line>n n n n b b n n n n n b n b n n b n n b n</Line>
+<Line>n n b n n b b n b n n b b b n n n b n n n</Line>
+<Line>nn bn nn nn nn bn bn nn nn nn nn nn bn bn</Line>
+<Line>bb nn nn nn bn nn nn nn nn bn nb bn nn bn</Line>
+<Line>nn nb nn bn nn nn nn nn nn nn nn nn nn nn</Line>
+<Line>na bo ni br ne eb rn on an fn ne na an an</Line>
+<Line>an na an on wn bg ab an na ub nr na an ne</Line>
+<Line>nf db no ni na nk bb on bk bn an ob in ob</Line>
+<Line>en sn dn kb no nd ba ni dn bi dn na na na</Line>
+<Line>nw na ni an dn ba ob ob an in nd na wn hb</Line>
+<Line>en na na an nh nd bf ni na bi ob ns ni ba</Line>
+<Line>kon ani nia lub kon kon nia oni nia ani</Line>
+<Line>lub neg nia nie bar ani ane bie nik ani</Line>
+<Line>ane ane obi ano enu ien bra kon ani nik</Line>
+<Line>neg nik wan lub nie nia ien nik nie ani</Line>
+<Line>inf wan nie nie wyb ane neg ane ane wan</Line>
+<Line>ani ion ien lub nie ien nie dob nie obi</Line>
+<Line>wni nie lub ani nie nik neg ani boa fun</Line>
+<Line>nie lub dan wan dne boa ien bie wan dan</Line>
+<Line>neg wan ane nie lub inn nie ani kon neg</Line>
+<Line>ani neg lub ani wni bie nia nik bra nia</Line>
+<Line>nie ian neg sob ien nia lub dan ien jne</Line>
+<Line>dan nie ane ani dan neg nik dni kon kon</Line>
+<Line>wni ane nej dan nie bie nik neg dan dan</Line>
+<Line>wni lub wni dan ane nie obr wni ani wni</Line>
+<Line>dan wan obn ane ini nia wne nia lub nia</Line>
+<Line>nie ane ien kon wan lub nie wan nik wni</Line>
+<Line>kon obr wni nij wan wni nie nie lub nie</Line>
+<Line>nia wan nik lub ane ane unk ono ikn ane</Line>
+<Line>wan wni nie nie nne ewn nia obn wan ani</Line>
+<Line>nia wan nie bar nie ien wan nia ane kni</Line>
+<Line>bio kon neg dno wan dan bra wan wni ane</Line>
+<Line>wni nia neg nia awn lub neg obr wni nik</Line>
+<Line>ona nik ien dan nik bur wan nie rob ien</Line>
+<Line>kon wan oba ien kon wan nia sun ani ane</Line>
+<Line>ind niu nia ani wan win nie nia boa ani</Line>
+<Line>wan lub neg wan kon ani dan ane nar nia</Line>
+<Line>neg ina nik kon bie naj nie nad neg nik</Line>
+<Line>nik rne bie ien ani dan ern ana nie nas</Line>
+<Line>kon uni one abe ien dan wni neg wan nik</Line>
+</Level>
+
+<Level>
+<NewCharacters>{[()]}</NewCharacters>
+<Line>[] () {} () [] () ({}) ([]) () ()() (())</Line>
+<Line>[] [] {} ([]) ({}) ( ( ) ) ((( ))) ( ) ( )</Line>
+<Line>(alkoholowego) (dwukolorowego)</Line>
+<Line>[hrabskiej] angolowi uginania (niesrogi)</Line>
+<Line>nieangobowanego (lennego) rurowanego</Line>
+<Line>[filigranowanie] harowanie nielaskiego</Line>
+<Line>{niekonserwiarskiego} niewsnuwanego</Line>
+<Line>ginsengi relegowani nieodnasawianego</Line>
+<Line>(niekarkonoskiego) {agregowano}</Line>
+<Line>[krakingu] (niefigurowa) fosforowego</Line>
+<Line>{odgonienie} {niegwarnie} (radowskiego)</Line>
+<Line>najodleglejsi doganiania blagierska ogni</Line>
+<Line>(grafij) {subkowskiego} golusiej</Line>
+<Line>(niegrafowskie) gasikowi {kariologie}</Line>
+<Line>(nieorawskiego) sensownego halluksowi</Line>
+<Line>[niejednogarbnej] [abiogenna]</Line>
+<Line>(niehorrendalnego) (hialurgii) geofil</Line>
+<Line>(deklasowanego) wehikule skaningowej</Line>
+<Line>jednakiego {urologi} niegniewliwego</Line>
+<Line>niegenewsku (dowodowego) helikoidalnej</Line>
+<Line>(niekarkonoskiego) {agregowano}</Line>
+<Line>niebudkowego (nieukojnego) {fagasie}</Line>
+<Line>(nierelegowaniu)</Line>
+<Line>(neurobiologa) {grili} {kwarglowi}</Line>
+<Line>nagarbuje niewerniksowanego niesfingowanie</Line>
+<Line>(niebengalskiego) budionnowskiego</Line>
+<Line>(niedubajskiego) obklejonego</Line>
+<Line>[kohlerie] (holdingi) (gwardianowi)</Line>
+<Line>niegenewsku (dowodowego) helikoidalnej</Line>
+<Line>[inaugurowali] [gajerka] (niegalenowi)</Line>
+<Line>[inaugurowali] [gajerka] (niegalenowi)</Line>
+<Line>(nieorawskiego) sensownego halluksowi</Line>
+<Line>(nienasilanego) ganoidowi (bibliologu)</Line>
+<Line>niedobudowanego {grudkuj} oligurio</Line>
+<Line>nieheliograwiurowi [lugrowego]</Line>
+<Line>(niegrafowskie) gasikowi {kariologie}</Line>
+<Line>{gnojaki} gliwienia nieobiegana wikingi</Line>
+<Line>[nienadgniwaniu] kafkowskiego (balang)</Line>
+</Level>
+
+<Level>
+<NewCharacters>'"</NewCharacters>
+<Line>' ' ' " " " ' ' ' " " ' " " ' " ' ' " '</Line>
+<Line>" " ' " ' ' ' " '' "" "" ' ' "" ' " ' "</Line>
+<Line>' " '' "" '' "" "" '' '' " " ' ' "" ' "</Line>
+<Line>nienowa 'odrodna' "dwufosforanowa"</Line>
+<Line>neuroglei "knowani" 'rodanowe'</Line>
+<Line>nieskanowanie 'sensownego' nienabiedowanie</Line>
+<Line>obelkowano "aroniowe" "abak" 'unerwili'</Line>
+<Line>"korabiowe" niekluskowe "bakijskie"</Line>
+<Line>nadnerkowej "aneksja" "haniebniej"</Line>
+<Line>'skoagulowanie' nieefeskie "gnojarni"</Line>
+<Line>"krasnojarskie" niegeneralskiej 'obokniu'</Line>
+<Line>'wasalna' niekaskadowanie naregulowania</Line>
+<Line>'ugadani' "konfederowano" "karawanseraje"</Line>
+<Line>niefrajerowaniu nieodrodna</Line>
+<Line>niewedlowskiej nieokulawianej "bruku"</Line>
+<Line>"biografii" noradrenalino nieferowanego</Line>
+<Line>niesobkowsku niedojadkowi niebojanowska</Line>
+<Line>"kalaniu" "grobkowi" "kundajski"</Line>
+<Line>"bieganina" "dniu" 'owsianego' niekajania</Line>
+<Line>'ograbiano' nieowalnie "bodiakowe"</Line>
+<Line>nieworkowego "jodowanego" nieukrajanie</Line>
+<Line>niegradowego "lawinowa" "gadano" "bossa"</Line>
+<Line>"bejsbolowi" 'widnienie' "kierowniku"</Line>
+<Line>"fonokardiograf" "genuenek" niewilanowska</Line>
+<Line>"dokrawaniu" niedekowej naiwniaki</Line>
+<Line>'obuduje' 'surownie' "degenerowano"</Line>
+<Line>nieoddojeni nieoborani nieodsolone</Line>
+<Line>nieinkasowania nierugana "ewoluowania"</Line>
+<Line>"liniowej" 'sobkowskiej' "akordeonik"</Line>
+<Line>niebesarabsku nieusensownieni 'wsianej'</Line>
+<Line>"holendrowanego" "fibroinowi"</Line>
+<Line>'odfenolowanego' niekonsolidowanej</Line>
+<Line>niebajanego nienagrobkowe "indukowaniu"</Line>
+<Line>'uskrobani' niekrenelowi nierejonowego</Line>
+<Line>niebujani niekwalifikowana nawbijanej</Line>
+<Line>'sinologowie' 'saldowane' niealokowanej</Line>
+<Line>'wklinowana' "jarowaniu" niejednoklasowi</Line>
+<Line>niedresiarskiej "barda" nienawarskie</Line>
+<Line>nieubarwianego "drenowni" nieheliakalni</Line>
+<Line>"burasa" "nabawianie" 'ongonu'</Line>
+<Line>nieliberalne 'refinansowi'</Line>
+</Level>
+
+<Level>
+<NewCharacters>ty</NewCharacters>
+<Line>t t t t t t t t t t y y y y y y y y y y t</Line>
+<Line>t y t t t t y y t y y t y t t t t t t t t</Line>
+<Line>t y y y y t t y y y t t t y t t t y t t y</Line>
+<Line>t t t t y y t t t t t y t y t t y t t y t</Line>
+<Line>yt yt ty ty ty tt yt tt ty ty yy yy ty yt</Line>
+<Line>yt yt ty ty ty yt ty ty ty ty ty yt yt yt</Line>
+<Line>tt yt tt tt yt tt ty ty yy ty ty ty tt ty</Line>
+<Line>yt ty tt tt tt yy tt tt yt yt yt yt ty ty</Line>
+<Line>yw kt tk tr sy st to to ut yt sy yn to et</Line>
+<Line>yf yk ys at yj ry tk ta yb ta yk tk yt st</Line>
+<Line>dy yt wy tu kt te yg ry yw et tn st tw ys</Line>
+<Line>ny it yw sy st ta to tr wy yk ut yk yt tu</Line>
+<Line>te kt ot tw rt ot st ut tk tr by nt ty ny</Line>
+<Line>ti th ry yr kt to yd nt te at yk rt dy et</Line>
+<Line>ot ry ty ot ry by at ty ys tw ty tu ta by</Line>
+<Line>ny tk et by ry to te tr tr rt it wy sy rt</Line>
+<Line>dy nt te dy at ny ut it ny dy st ny dy yw</Line>
+<Line>tr st wy ty st ot ta wy rt yt nt ys rt wy</Line>
+<Line>yt ty st ys yk ut kt st te sy tw tu ot tk</Line>
+<Line>tw tu it nt tw ta st by at kt it ft wt yw</Line>
+<Line>et it at yw nt et ut tt ts dt by ht ys sy</Line>
+<Line>teg taw oby yko nyw ent oft yjn ste stu</Line>
+<Line>oto tow owy isy str ywa tak yfi yst str</Line>
+<Line>owy any tru stn tki any ata ent ywn ste</Line>
+<Line>yra yst ter owy ost tow aby any owy ywi</Line>
+<Line>ant sta ent sty yst bit tow ste est etr</Line>
+<Line>ste rto tko sta ytu ost ost sys ist tow</Line>
+<Line>gry ekt ent ter tni ont ybk aty str yda</Line>
+<Line>yte tra ntr ory dys tek ety ost yfr ter</Line>
+<Line>ort nte ote iet two ytk wys ter str ost</Line>
+<Line>try tow ent tar iat ukt kat tos int rys</Line>
+<Line>any yto str tow yni wst wny wyg wyn ite</Line>
+<Line>ton ent nat ent ygo otn ony tow htt str</Line>
+<Line>yta ste est tro edy yst owy ste ady atn</Line>
+<Line>tio tow eto ste tyk tuj sta stw tat nto</Line>
+<Line>sta owy dny ato ent sta akt taj syw owy</Line>
+<Line>etu ybi uto ody tne est tej dat wyd nta</Line>
+<Line>ntu ter dyn art est atk stk ter est otr</Line>
+<Line>ybr est rty atr ast ten aut ste sta ste</Line>
+<Line>owy any ert owy wyr any got atw not kst</Line>
+<Line>owy yna str sta any yst kry rtu ost ust</Line>
+<Line>ost otw ter ryb nti ate est ent dyt nty</Line>
+<Line>tur ost any tot yso atu dot sta ktu tow</Line>
+<Line>jny ysk ost tan twi sta sta ury ute tyw</Line>
+<Line>tow tes eta yst sto oty ter wyw nny yst</Line>
+</Level>
+
+<Level>
+<NewCharacters>:</NewCharacters>
+<Line>: : : : : :: : : :: : ; ; : :: ; : : ;;</Line>
+<Line>agrykultury kotkowi: leksykonowe</Line>
+<Line>jufersy natronowej inwigilator: stela</Line>
+<Line>orbitolinie: twardolistne bogatki abakany</Line>
+<Line>inkantowani katodowi: wybijania;</Line>
+<Line>wywatowywaliby: wolnoobrotowy kserografy</Line>
+<Line>niewydrowata: niedetrytusowi:</Line>
+<Line>tastrowanie: niebojkotowane; filetuje;</Line>
+<Line>nietestowej: antystrofa; heliobiontu</Line>
+<Line>wynarodowianiu; ustawialiby niekolejny;</Line>
+<Line>wywatowywaliby: wolnoobrotowy kserografy</Line>
+<Line>baletowaliby; songowy: fotoelektronowe:</Line>
+<Line>redyskontowani: dekoratornie</Line>
+<Line>niewystawianego wyforowanie:</Line>
+<Line>wyskubywanego konduktorowi wyklaskiwani:</Line>
+<Line>nieuwiarygodnieniu: nieestrogenowa</Line>
+<Line>nieafleksyjnego: niekotonowego; selektodo:</Line>
+<Line>hydroelewator anafory naftoelany:</Line>
+<Line>niewykukiwane; beret; nieodkorowywanej</Line>
+<Line>dystrybutora; karbowy: niekarykaturowanej;</Line>
+<Line>redyskontowani: dekoratornie</Line>
+<Line>dotkliwi; trwoniona; grillowaliby</Line>
+<Line>niedwuhektarowa gigantofonowi</Line>
+<Line>nierestaurowany: tafelek: nieistotne;</Line>
+<Line>oblutowanego dwutaktowa longinusy:</Line>
+<Line>wyskubywanego konduktorowi wyklaskiwani:</Line>
+<Line>niesiatkowaty; niesylwetowo:</Line>
+<Line>niestelefonowanie klawesynie; sulfoniany</Line>
+<Line>terasowe; skaskadowaliby: niewolitywnego;</Line>
+<Line>rewelatorek nieheterodoksyjnego:</Line>
+<Line>odgotowanie diuny; aubryt; buretowej:</Line>
+<Line>dystrybutora; karbowy: niekarykaturowanej;</Line>
+<Line>kwaterowania tongijski trasaty:</Line>
+<Line>elektrostatyki; kontrasygnata: ryjkowatego</Line>
+<Line>ujadaliby: nietruflowaty; otawo</Line>
+<Line>odwiatry; nielatakijskiego; nokaut</Line>
+<Line>nienowoakutowego: strojono; nienagonkowy;</Line>
+<Line>jufersy natronowej inwigilator: stela</Line>
+<Line>nieuhonorowywanej; wantowa wielkolistnej;</Line>
+<Line>nienowoakutowego: strojono; nienagonkowy;</Line>
+<Line>niegagatowe nieatakowanej:</Line>
+</Level>
+
+<Level>
+<NewCharacters>mcv</NewCharacters>
+<Line>c c c c c c c c c c m m m m m m m m m m c</Line>
+<Line>c m c c c c m m c m m c m c c c c c c c c</Line>
+<Line>c c c c m m c c c c c m c m c c m c c m c</Line>
+<Line>c v c v m m v c c v c m v m c c m v c m c</Line>
+<Line>mm cm cm cm cc mm cm mc mm mm mc mm cc cc</Line>
+<Line>mc mc cm cm cc mc cm mm mm cc cm cc mc mc</Line>
+<Line>mm mm cc mm mm cc mc mm mm mm cc mm mm cc</Line>
+<Line>ma jc mm mn ch ch sc nm dc ma ca ca cg ma</Line>
+<Line>ch mk km ec ac ic ac om ms cu tc ch gm me</Line>
+<Line>cy cb mo cd co cc um wc ym ch ce cj yc me</Line>
+<Line>im mj md mr fc am wm rm jm mi mu um me mf</Line>
+<Line>my tm ci cj ch uc ic mi dm ce mo cj bc mg</Line>
+<Line>cw cr mi ch cy rm mw ym mb ic em gc om mc</Line>
+<Line>ci rc hc ec co im fm cs am ct om my ce mo</Line>
+<Line>ci am oc ck oc mh mt cf ec cm nc ch em yc</Line>
+<Line>ecj rmi ruc ych dom iem amo met cis ych</Line>
+<Line>man men icr nam irm tac rym chc nic omu</Line>
+<Line>umi che mak met min ece kom acu ech emu</Line>
+<Line>iom nim cie tym mni cia mow ruc dem emi</Line>
+<Line>con ami uch tym ymi maj yci tac oma erv</Line>
+<Line>ceg moc ukc mem tem chc mat dyc ome mam</Line>
+<Line>ome ece ium sca jsc cha rec ame cho cje</Line>
+<Line>ryc acj ych tom ich nkc duc wic cuj ycj</Line>
+<Line>enc mer kcj nkc cje cie aco ych ice uce</Line>
+<Line>oce och che mak mac cie ryc cym wyc ima</Line>
+<Line>rmy rac tom ema nyc wym mus num enc amu</Line>
+<Line>aca tec ach ver ceg ver tim dem cro ect</Line>
+<Line>wym sca wyc rem emo ume cor ces ume tyc</Line>
+<Line>ukc ram med min cji sym jem omu chn mic</Line>
+<Line>mun jem cen icr nac yma ich erv ecy cji</Line>
+<Line>omo ych fic ium mon rma acy irm cio mus</Line>
+<Line>ach rma aci mai amy omy kam rac ami omy</Line>
+<Line>mow iam yci ice akc cis kac men cej kim</Line>
+<Line>can cym moc ect ecy ych cio cyc rch iom</Line>
+<Line>tem com med rom htm iem ymi eci sam ciw</Line>
+<Line>omi arc mag acj mys mys eci man cor och</Line>
+<Line>emy rac sym fic mod cro mia cuj men muj</Line>
+<Line>sem omo mag akc mar rom con mem iec aco</Line>
+<Line>cow nyc mni cyf mer kic cyj ama mat amy</Line>
+<Line>htm rmi mar muj ces umo mic hom emu ami</Line>
+<Line>emy kim mas tem hom chi jsc cyf tyc arc</Line>
+<Line>kom chi umo kum imi acj iac nym umi oce</Line>
+<Line>aca dom ych kac kam tam mia rmy mie ime</Line>
+<Line>oma can orm sce ciu amu iec ima acy cen</Line>
+<Line>acu omi ama cja rem num mog mod wic mam</Line>
+</Level>
+
+<Level>
+<NewCharacters>A-Z</NewCharacters>
+<Line>Skarmionych Niewyabstrahowanych Mammologio</Line>
+<Line>Stuartowskiemu Niekanoniccy</Line>
+<Line>Nieinferencyjnym Scementowanie</Line>
+<Line>Nieestymowaniom Kilkumorgowemu</Line>
+<Line>Nietresowaniom Flirtujecie Nieomijanie</Line>
+<Line>Dialektowym Reymontowskim Dogotowujmy</Line>
+<Line>Niedymisyjnymi Elegancki Kresowiakami</Line>
+<Line>Demonstrowani Umordowani Ogarnianiem</Line>
+<Line>Monarchistkom Buntowanemu Dwuuchego</Line>
+<Line>Nostalgikiem Katarskiemu Niekonwisarskich</Line>
+<Line>Nieniklowym Wyklinowujecie Nakierowujemy</Line>
+<Line>Naskakiwaniom Etruskologom Niewygajaniom</Line>
+<Line>Tryumfowano Wielkoowocowej Majorytecie</Line>
+<Line>Librecistki Niebyciom Ujajeniom</Line>
+<Line>Donosicielom Hialuronianowemu</Line>
+<Line>Ornamentujcie Humolitach Reemigracjom</Line>
+<Line>Brewilokwencjo Dytyramb Amfiktioniach</Line>
+<Line>Ankiecie Niefolsomskiemu Binarowskich</Line>
+<Line>Niemikrofalowy Teatromanki</Line>
+<Line>Niekinetochorowych Furierach Statutowych</Line>
+<Line>Niebiodegradowalnych Nienaobiecywaniom</Line>
+<Line>Chorowity Fanfarowymi Niedosolonym</Line>
+<Line>Metalicom Akcentologi Walcujecie</Line>
+<Line>Otaksowywaniami Gumilakami Juhasim Jasiami</Line>
+<Line>Mlekowatymi Niemonarowskim</Line>
+<Line>Nieodrestaurowywanych Odgadnionym</Line>
+<Line>Wymierano Bekwarkami Interrogativum</Line>
+<Line>Niejedenastoosobowym Lutunkami Wydrowatym</Line>
+<Line>Obruganiach Summom Bociany</Line>
+<Line>Niechloroformowani Aragonicie Relewancjach</Line>
+<Line>Nieautografowaniami Nierestauratywnemu</Line>
+<Line>Kalomelom Trawlami Ustanawianych</Line>
+<Line>Nadegnaniami Nieodbudowywaniem</Line>
+<Line>Niewytrasowywaniem Lastrykarstwom</Line>
+<Line>Niestudenckie Kwaterodawca Nielicytacyjne</Line>
+<Line>Karbamidowymi Morynom Nieharmonijnej</Line>
+<Line>Kosmate Margrabiowie Niekomesowej</Line>
+<Line>Radowskim Gburliwymi Konfirmowana Druhnami</Line>
+<Line>Kuglerstwami Figlarce Niedmuchanymi</Line>
+<Line>Kontrastowaniach Tonifikacjo Wjebcie</Line>
+<Line>Tachimetrii Nieanieleniem Olicowaniu</Line>
+<Line>Komesowemu Niesiedemnastoletnimi</Line>
+<Line>Hatchbackach Sicienieckimi Rulowanemu</Line>
+<Line>Abace Wellingtonkom Niekumarynowego</Line>
+<Line>Encomiendom Iluminacje Cewionym</Line>
+<Line>Nieudogodnianiami Bandami Cytronelolu</Line>
+<Line>Adresancie Ciasnawi Masturbacyjny</Line>
+<Line>Niesamohartowni Niewilgnych Chlajnami</Line>
+<Line>Ubekiem Astrochemiom Nienachylone</Line>
+<Line>Saletrowanym Koktajlowemu Skrywamy</Line>
+<Line>Selekcyj Wycentrowaniu Wrolowaniem</Line>
+<Line>Defoliacjami Wyskakujmy Coachu Mekkach</Line>
+<Line>Obetonowujmy Niesmaleni Odrachowuj</Line>
+<Line>Grafitowaniem Niemasturbacyjnym</Line>
+<Line>Kliwerbomie Nieradiotelekomunikacyjni</Line>
+<Line>Niewymienieni Nietaryfowaniem Gliniankowym</Line>
+<Line>Sokolnictwie Niewarunkowych Celebracyjna</Line>
+<Line>Mijaj Nieoblikowaniach Fotodysocjacyj</Line>
+<Line>Nieglinowanemu Alimentatora Termobateryj</Line>
+<Line>Nekromancyj Mimowiednemu</Line>
+<Line>Infrastrukturalnymi Muskania Ocieniani</Line>
+<Line>Niemakartowskiemu Nieafirmowaniami</Line>
+<Line>Niecierkaniami Liwerunkowym</Line>
+<Line>Nieuniewinnieniami Autorotacji Cyganiakach</Line>
+</Level>
+
+<Level>
+<NewCharacters>zpq</NewCharacters>
+<Line>z z z z z z z z z z p p p p p p p p p p z</Line>
+<Line>z p z z z z p p z p p z p z z z z z z z z</Line>
+<Line>z z z z p p z z z z z p z p z z p z z p z</Line>
+<Line>z q z q p p q z z q z p q p z z p q z p z</Line>
+<Line>zp zp zp pp pz zp zp zp zp zz zp zp zp zp</Line>
+<Line>zp zp zp zp zp pz zp zp zp zp pp zp pp pp</Line>
+<Line>pp pp zp pz zp zp zz zp pp pp zp zp zz pp</Line>
+<Line>zp zp pz zp zp zp pp zp zp pp zp zp zp zp</Line>
+<Line>ze ze po za zt zn zn op zn pr zn pr zb dz</Line>
+<Line>zn op po dz ze cz cz dz az zw az zn po op</Line>
+<Line>po cz az sz az dp op yz zy zc zi pu op az</Line>
+<Line>dz cz up op zy ze po cz zi cz az ph po zm</Line>
+<Line>za zy dz za zi az po zi po zn sz op op op</Line>
+<Line>sz cz np ze dz ze az zi dz ez zi po za wp</Line>
+<Line>ze pr rp zd ap pr sz ps rz cz wz za sz py</Line>
+<Line>pr pc pt ze zu pr ze po rz za rz zy zy cz</Line>
+<Line>oz ze pe zy az pn zy cz pi zk op zi rz az</Line>
+<Line>zaj zie zed cze zap zna zek czy pis opi</Line>
+<Line>czn opr szy zam zna spo raz omp zen zak</Line>
+<Line>pre usz zen poz dzi par pos osz dpo zez</Line>
+<Line>pon zeb icz zna asz dzi zmi pod zie cza</Line>
+<Line>opc pod prz zac raz ocz ksz ozw ysz odz</Line>
+<Line>wyp dza pra zen ecz zon pra zen pro baz</Line>
+<Line>pod zaw zar czy pra icz czn icz czo ope</Line>
+<Line>pow ycz zan rza pow arz zny zys zys dzi</Line>
+<Line>zym pow rze szy zas raz erz zys pcj zes</Line>
+<Line>pni rzy dze zej zne poj zyk szy zia edz</Line>
+<Line>wsp zyc zyn trz nap szy per rze zcz prz</Line>
+<Line>szu zyw pod zyb api zos dzo pop czy adz</Line>
+<Line>pod zaw zar czy pra icz czn icz czo ope</Line>
+<Line>spr czn naz sze zec pom pad czn put zys</Line>
+<Line>pow ycz zan rza pow arz zny zys zys dzi</Line>
+<Line>zym pow rze szy zas raz erz zys pcj zes</Line>
+<Line>pni rzy dze zej zne poj zyk szy zia edz</Line>
+<Line>wsp zyc zyn trz nap szy per rze zcz prz</Line>
+<Line>szu zyw pod zyb api zos dzo pop czy adz</Line>
+<Line>spr czn naz sze zec pom pad czn put zys</Line>
+<Line>sza icz rzy azy prz por prz rzy zna pro</Line>
+<Line>zym pow rze szy zas raz erz zys pcj zes</Line>
+<Line>roz raz orz zie wsz rzy spe zwa cze pro</Line>
+<Line>sza icz rzy azy prz por prz rzy zna pro</Line>
+<Line>poc mpu rdz azw zeg pow pra esz cze zwi</Line>
+<Line>roz raz orz zie wsz rzy spe zwa cze pro</Line>
+<Line>poc mpu rdz azw zeg pow pra esz cze zwi</Line>
+<Line>dzi isz zyt pam typ czy rze zni pot acz</Line>
+<Line>kaz bez zie dzy pie zer zyp pro odp cze</Line>
+</Level>
+
+<Level>
+<NewCharacters>@&lt;&gt;</NewCharacters>
+<Line>&lt; &gt; @ &lt; &gt; @ &lt; &gt; @ &lt; &gt; @ &lt; &gt; @ </Line>
+<Line>Odhartujesz nachromujesz; ewa@mlynarz.pl</Line>
+<Line>subwencjonujesz wozaku ujrzycie zwanej</Line>
+<Line>bieszono jalapie gustujesz (wnykarzy)</Line>
+<Line>diabelcze, laktometrze, zrucisz</Line>
+<Line>jan@kowalski.net kozicami bistrze dopiwszy</Line>
+<Line>"prawkom" okazach epodami posramy: azotek</Line>
+<Line>lipazami nizinami paczki pieskowi</Line>
+<Line>dekomercjalizacyj czterema? Mszycie,</Line>
+<Line>pudrom. Pecynami odhartujesz rdzach</Line>
+<Line>zeprawszy pultom wykafelkujesz hematopsyj</Line>
+<Line>szubom sporcie potnego? Ozuciu owijaczy</Line>
+<Line>okazach pagodzie (muszni) hreczek! Pocicie</Line>
+<Line>muszni zatokami paczki? Opasawszy</Line>
+<Line>dowaliwszy lipazami! {dyzami} 'ustawszy'</Line>
+<Line>rudzkimi {topazami} streberzy sztanami</Line>
+<Line>hipciem sterydzie sekwestrze! Ulokowawszy</Line>
+<Line>owijaczy "peonie" doskwierasz obrabujesz</Line>
+<Line>wtroisz "pecynami" palnymi fieldzie.</Line>
+<Line>Peledami wymedytujesz zaporze repudiacyj</Line>
+<Line>ziomkiem opodal rydzach pustek</Line>
+<Line>okratowawszy?! Nizinami: nicestwiejesz</Line>
+<Line>'skorelujesz' inkantujesz krupiono</Line>
+<Line>stwardniejesz raczymy "broszce" peonie</Line>
+<Line>sklereidzie bebopu; namacawszy odmieciesz</Line>
+<Line>latoperzy pauprami [sezonami] kanafarzy</Line>
+<Line>liazowi; (czarach) wenerujesz</Line>
+<Line>rekomunizacyj 'ukropami' ozuciu>&lt;wkuwasz&gt;</Line>
+<Line>{oprzemy} asporcie: 'raniwszy' peledami</Line>
+<Line>&lt;fluksometrze&gt; nawciskawszy! Cezalu</Line>
+<Line>fastrygujesz opodal nicestwiejesz</Line>
+<Line>uporawszy eczeweryj: druzie pijusami</Line>
+<Line>bundzowi opasawszy pagodzie kupalowi.</Line>
+<Line>Okratowawszy adam@nowak.org kickbokserzy</Line>
+<Line>"upijemy" spiciom [zazulami] wsypom,</Line>
+<Line>pinesce zaborem; nawciskawszy paskom.</Line>
+<Line>Wygajasz oczami latoperzy! Hyziem liazowi:</Line>
+<Line>[pijusami] zbitkami boczek wczepami</Line>
+<Line>'stajawszy' estardowcze. Piszecie oczami?!</Line>
+<Line>Laktometrze papciu ekranujesz nadmiesz</Line>
+<Line>odmieciesz palnymi (bagazyj) oprzemy</Line>
+<Line>truchtasz tuzami &lt;nadmiesz&gt; cedujesz</Line>
+<Line>osiedliwszy pilance juzowi sprayowi;</Line>
+<Line>{enzymem} {zagony} sangsze nachromujesz</Line>
+<Line>pogujesz konwejerze pieskowi? Pauprami?</Line>
+<Line>Papciu obrabujesz, emanujesz osiedliwszy</Line>
+<Line>smyczek &lt;wpijasz&gt; [mszycie] (sopleniec)</Line>
+<Line>warzesze dohodowujesz najbrzydziej znanego</Line>
+<Line>namacawszy &lt;byczku&gt; paskom gerberze.</Line>
+<Line>Czelach najbrzydziej [chybisz].</Line>
+</Level>
+
+<Level>
+<NewCharacters>ął</NewCharacters>
+<Line>ą ą ą ą ą ą ą ą ą ą ł ł ł ł ł ł ł ł ł ł ą</Line>
+<Line>ą ł ą ą ą ą ł ł ą ł ł ą ł ą ą ą ą ą ą ą ą</Line>
+<Line>ął ąą łą łą ął łą łą łą łą łą ąą łą łą ął</Line>
+<Line>łą łą łą ął łą łą ął łą łą łą łą łą łą łą</Line>
+<Line>oł łf ią lą kł mł uą ył ją hł rą ąt gą zą</Line>
+<Line>ąc ią eł łe dą ją łu ąf ją łu ąd ną ąd ył</Line>
+<Line>ił łn ąt rą ąh ły ąl ąc aą ąd ją ną hł sł</Line>
+<Line>łu łr zą eł dą ąc sł ął łc ąs ąc ła ło ąs</Line>
+<Line>ąd dł łb gł ąe wł ąc łk gł tł ył eł ła jł</Line>
+<Line>pł łb ył bł łw cł ką łą bł zł kł gł zł zł</Line>
+<Line>ły cą tą lą ją ią ąz łu uł ąy ąb łł ąp xą</Line>
+<Line>wł ją łe gł łn mą łd uł ąj ją oł bą ąa wą</Line>
+<Line>ką ła ła łz ił cł gą łą ąc cą ąk łą łm ła</Line>
+<Line>ał ąz ją dł wł ąg rą ąc kł ła pł kł ją ąz</Line>
+<Line>ąą rł wą oł łk dą ką są tą łl wą ąi ąo ił</Line>
+<Line>łt ją ąw ąm ąą ła ąc ła mł ąg łr uł ły wł</Line>
+<Line>ułu ząd ący asł ądz hło sło tał eją ysł</Line>
+<Line>ląd łcz ską ząd tał ląd tał wła oną bąd</Line>
+<Line>ają słu ązy łyc yną jąc czą iał ają jąc</Line>
+<Line>łon seł łdz ała iło yło dną cią ącz ała</Line>
+<Line>łąc hcą rną agł lną yłe wła zną ące łny</Line>
+<Line>zką ają zły etą ług łyt ący łym glą atł</Line>
+<Line>rzą wła gną nąt pią iną wią ług ące kła</Line>
+<Line>ąpi błą ącz ocą ałt rzą ący wła ądo ają</Line>
+<Line>kła kła łej ułe ieł ład glą ącz łce dłą</Line>
+<Line>iąt tuł sił pły bsł zeł glą ztą iką ową</Line>
+<Line>jąc atą ąte złą wał ukł złe ląd łuc aną</Line>
+<Line>yły jną ała ogł uło uną egł łni ągł oło</Line>
+<Line>ąty kąt ził łąc ałą ają rzą ają ują zoł</Line>
+<Line>łeg dzą słu apł kłe łal ełn iał kła cła</Line>
+<Line>iał wną łne zył dąc ału ałk kną ątk nął</Line>
+<Line>sią dła ląd ałe ątr tał iał ąca zwł ząd</Line>
+<Line>zgł ące ołu ają ący łto cią jąc obą jąc</Line>
+<Line>lił cją mło edł bił gło ają słu łat fią</Line>
+<Line>tąp yłk łam guł łab ącą iły epł jąc kąd</Line>
+<Line>łka łpr eło ływ rzą wła jąc jąc słe ące</Line>
+<Line>gał ład rtą ają oką łaj ają zła łos ądu</Line>
+<Line>mał łek yłą krą adą glą ągu pła łąc iał</Line>
+<Line>ząd sją łem łan łki łko mił cią ząd ązu</Line>
+<Line>sną uła glą łno kła cał łał ała ała nną</Line>
+<Line>łot łys kło sał szł dłu sły rmą oją ają</Line>
+<Line>gły rąc ątp słu aką iłe tła ącz usł jąc</Line>
+<Line>łrz ało wło czł sła ąco łąc olą łod cąc</Line>
+</Level>
+
+<Level>
+<NewCharacters>-</NewCharacters>
+<Line>- - - - - -- - --- - - -- --- - - - -- -</Line>
+<Line>Potulną &lt;biczującą&gt; mazepą cherubową,</Line>
+<Line>(aryjką) zakwokałyby, to</Line>
+<Line>umeblują-zdysocjują imprezą. Gramatyką; 50</Line>
+<Line>fladrą mąciłyby! Dynosekundą on</Line>
+<Line>nawbijałyby [perykopą] wyziąbłszy</Line>
+<Line>uargumentują pląsem bezczynną do 26</Line>
+<Line>(nyktynastią) biosauną tknąłem anihilującą</Line>
+<Line>popakują omszyłyby podłostką [skifflową]</Line>
+<Line>apolityczną, on snajperską splatałyby</Line>
+<Line>szyicką; naglącą niewrącą fularową</Line>
+<Line>farnezyjską odnawiałyby odsłowną-to</Line>
+<Line>'ratuszową' kennelową narkozą błądzącą</Line>
+<Line>adwekcyjną@ [delfinią] łaknąłem. "uknują"</Line>
+<Line>goiłam cennikową aligacją, upierzą w</Line>
+<Line>dwulitrową znitują i ten zmazywałyby</Line>
+<Line>"muloną" na w jasieniecką i</Line>
+<Line>zinfantylnieją; bramstengą z clącemu?! Na</Line>
+<Line>raciborzanką opiumującą odetną i trąceniu</Line>
+<Line>cynfolią 82 zrobotyzują! 'doksologią' ten</Line>
+<Line>latynoską 68 (akatolicką) dudlącą</Line>
+<Line>dorodną-nieniziutką kirgiską@sumikowatą!</Line>
+<Line>Ropiałyby. 6 z zabrząknąłem-tycjanowską</Line>
+<Line>przezywałyby z kupiurą pulmanowską</Line>
+<Line>[baraszkującą] buszczanką, (tantiemą) 15.</Line>
+<Line>lutego to wykryłyby gambijską głosiłyby</Line>
+<Line>giscardystą luzowałyby</Line>
+<Line>prodromalną-czipową-z kompozytową rysicą</Line>
+<Line>lokajską zganiłyby rekistą usłojeniu</Line>
+<Line>fibryną "stupską" nonajronową do</Line>
+<Line>zbuforują-totolotkową &lt;minorytą&gt; 156</Line>
+<Line>izolowałyby? Wysklepiłyby abakanką</Line>
+<Line>sfrezują membraną ten dniestrową, waliną</Line>
+<Line>forwardującą zawisłą rumenotomią</Line>
+<Line>praczłowieku miauknąłem herkogamią!</Line>
+<Line>{wyemitują} złajesz ognistą nadbłotną; ten</Line>
+<Line>udogodniłyby sekwoją kajutą lesotyjską</Line>
+<Line>wyostrzą endoenergetyczną 54 pomologią</Line>
+<Line>organzyną; na morfizjologią korcową</Line>
+<Line>(obsznurują) słowem@ 79 wetknąłem z pikadą</Line>
+<Line>eurodolarową! Kłułyby? W moderującą to</Line>
+<Line>detonującą powyzwalałyby. Dołową bebeszącą</Line>
+<Line>neografią rozkładzie do</Line>
+<Line>niedniową-(audialną) on wciąwszy. Parłam</Line>
+<Line>12. stycznia łepkiem szarytką (darującą)</Line>
+<Line>wspływy i wijącą w zaowocują juczną</Line>
+<Line>"sołtysy" grzązłem "tematyką" pacałyby</Line>
+<Line>{88} uzdatniłyby margerytką; erotomanką?</Line>
+<Line>Najnowszą? Ideacją 77 on ten urynową i</Line>
+<Line>wiądami-nalezą harmoszką ocipieją sakową</Line>
+<Line>do "otuchą" siostrą {amfoteryczną} ten</Line>
+<Line>(pedagogią) z 'skserują' na to</Line>
+<Line>oksydymetrią w reumatyczną babunią.</Line>
+<Line>{koegzystującą} paniną 14 zwałami zagiąłem</Line>
+<Line>kwilecką to podenerwują [sylogistyką] do</Line>
+<Line>ksografią osobową &lt;zasmrodzą&gt; satemową on</Line>
+<Line>piątemu kastanietową do kriochirurgią</Line>
+<Line>brzuszyną. Linową homonimią, szokową</Line>
+<Line>wątleniu 'klistronową' stiliagą 8. marca w</Line>
+<Line>posapywałyby &lt;43&gt; dąsowi poknocą</Line>
+<Line>intytulacją 108 wybetonują? On na</Line>
+<Line>(bodhisattwą) troiłyby &lt;kozłku&gt;</Line>
+<Line>ekshalacją. Spłowieniu! I na 135 i wnusią.</Line>
+<Line>Wpatrzą?! Obległyby płaceniu kapeczką</Line>
+<Line>maksurą. Gelbryną chynowską, łozową.</Line>
+</Level>
+
+<Level>
+<NewCharacters>óżę</NewCharacters>
+<Line>ż ż ż ę ż ó ę ż ó ó ż ę ż ę ó ę ż ę ó ó ę</Line>
+<Line>ę ż ę ó ż ę ę ę ż ó ę ó ó ę ę ż ó ż ó ę ę</Line>
+<Line>ż ę ó ę ó ę ó ę ó ó ż ę ż ó ó ę ó ę ę ę ż</Line>
+<Line>ęd ię żd oę tó eż ży ęw ór ów ię lż że nó</Line>
+<Line>żn tó tę zę ęb tó eż lę zę oż ęd ię ół eó</Line>
+<Line>iż ęo jó hż ęn sę ży że ęd fó uó só ró gę</Line>
+<Line>rż łó ęl ęc ęt ół żą uż ró ęt ól aż mż że</Line>
+<Line>vę kż eż łó ży gó ró żl ów bę tó ór żą żn</Line>
+<Line>tó że ęd dó eż eż żk aż óg że jż óm dż oż</Line>
+<Line>oż żd żo żu że eę bó óc yó ię ęł có óż eż</Line>
+<Line>łę ęd uż ię ęg ós ję ów ój żm yż oż żl mó</Line>
+<Line>ór bę ór ló wę kę bż ęz hę kó ęd ró oż ób</Line>
+<Line>uż hó lę eż oż eż ór ió ży pó bó kę oż ży</Line>
+<Line>tę ró ró żs pę ów ię wż dó ór rę ży tó ęż</Line>
+<Line>ór pó ąż tó ęc że ię ię óo wó ęd żs ęz ów</Line>
+<Line>ęs ię óc ót ży iż oż ól ów wę nę oż moż</Line>
+<Line>eży leż się tór moż ędz tór łuż się ędz</Line>
+<Line>ogó rów mów ówn óżn żel łuż oże tór oże</Line>
+<Line>ięc ięk ożl ęks tęp eró ków ięt tęp wię</Line>
+<Line>rób ków ięt leż żąc ikó żli moż któ czę</Line>
+<Line>ków moż wię tór róż tęp moż tęp żli łów</Line>
+<Line>zęd óre ięc tów żli óln żyw rzę oże osó</Line>
+<Line>ożn żna ród ożl już ntó sów uży nię moż</Line>
+<Line>żdy tró oró ówn żde akż będ tęp ięk tór</Line>
+<Line>żli życ się duż tór tów dów ażn oró ięd</Line>
+<Line>stę ędz róż tró sób uży ożl ęci ęst żon</Line>
+<Line>zię omó ędz pół omó łów wię łoż ież żen</Line>
+<Line>ępu ięc żna się żni ogó żny cję duż się</Line>
+<Line>ikó żen ędą już któ ędn ożl tęp ków ków</Line>
+<Line>głó tór ępu uży ędz któ ięc óry waż tór</Line>
+<Line>żdy rów óre stę ęzy rób łoż się gól rów</Line>
+<Line>się akż óln każ ożn ęci się się się będ</Line>
+<Line>eże ższ kró kże żel żyt też ępn któ kże</Line>
+<Line>iąż sób amó tór osó uży rów kró ędn stę</Line>
+<Line>któ ęks jęz amó pró ższ rzę ęce pró żna</Line>
+<Line>eże któ ęst żyt jeż ęzy żyw ożl ażd ażd</Line>
+<Line>nię jęz óżn któ moż zęd ożn ków gól cję</Line>
+<Line>żli życ moż stę spó ęce oże rów ięd egó</Line>
+<Line>ożn tów tór iąż waż ożl ięc ępn pół rót</Line>
+<Line>tów głó uży wię ażn jeż ożn stę ież żąc</Line>
+<Line>spó tór żny zęs niż eró żli ożn żna żna</Line>
+<Line>ęki też dów czę żni wię oże rów któ któ</Line>
+<Line>zęs któ żon ród mów eży uży rót tów óry</Line>
+<Line>sów moż się żde ędą ięc ntó ęki niż mię</Line>
+<Line>oże mię ęcz stę każ moż któ wię ędz</Line>
+</Level>
+
+<Level>
+<NewCharacters></NewCharacters>
+<Line>Na lukullusowym - szatom. Czerwoni</Line>
+<Line>najcięższą obszyłyby. Oplotów, kulmów,</Line>
+<Line>(negrze) mimozę wlecisz deskuję daciami z</Line>
+<Line>principiów słoduję. Wzmóc zwięzłą a</Line>
+<Line>Bugiem propozycyj - lub lekospisów?</Line>
+<Line>Heksenszusów, Odelstingów pohitlerowską?</Line>
+<Line>Toksemię klizmę. Panmiksyj (krójcież)</Line>
+<Line>drudzy! To dożynkową. Sardów odtylcówkę</Line>
+<Line>oddacie joysticków, (refmaszynkę)</Line>
+<Line>duumwirów! Pójłem wójtów, ryjmyż - ohmowi</Line>
+<Line>do hamburgerów. (analną) czelestę dolnych</Line>
+<Line>włokami anegdotę mięsiwu to i lub</Line>
+<Line>deglomeruję, oksycyjanków! Owalów zajęczę.</Line>
+<Line>Notkom felonię wykukuję!? Mianie</Line>
+<Line>(pootłukuję) Cezarowi ogników boratynków</Line>
+<Line>do speszę! Który poskwierczę</Line>
+<Line>popodziwiałyby zgoiwszy: troków stepową</Line>
+<Line>lękajże: dębołęcką! Swedenborgizmów on</Line>
+<Line>arabką w o zadekuję bezłożyskowiec on</Line>
+<Line>ambilogię ukatrupże borową a a jedenastą</Line>
+<Line>odniosę 76 pogawędzę ketokwasów. Dymówkę</Line>
+<Line>dla, i (Mirosławie) wujostwu, wypindrzę</Line>
+<Line>upijcież! Polibudę móc 98 lesotyjską</Line>
+<Line>nożami, nitrytów uzębioną wagaduguankę</Line>
+<Line>pociłyby (pelach) dla maksów mezonów a</Line>
+<Line>Darwinowski, morsową bogdanek stratę</Line>
+<Line>kiełczygłowską włoszkę (zbudzę) namłócę!?</Line>
+<Line>Keltowi! W Rubens ten chmielmyż tajężę?</Line>
+<Line>Jazzów kabalistów pekinkę menami.</Line>
+<Line>Zanatomizuję! Uwikle móc on i Atanazych a</Line>
+<Line>taumaturgów. Gnatów trójnóżków sztofów się</Line>
+<Line>ten się kpijże nastąpże, bakenów</Line>
+<Line>sfeminizuję margrafów tybinków lub łunach</Line>
+<Line>dla stuwatową rameczkę horacjanizmów</Line>
+<Line>łepkowi do pluchę wpiętą Litwinów</Line>
+<Line>gruncików dinornisów kłękiem. Męczcież -</Line>
+<Line>on najistotniejszą i się rozejrzę</Line>
+<Line>wyzdrowieniu - zdójcież o w się szachów</Line>
+<Line>hilozoizmów blokersów, hrubieszowską</Line>
+<Line>awizów; urzynów: on to który płacową,</Line>
+<Line>elewce! Który pełłem korków: wysyczę</Line>
+<Line>półtechnikę zgniótłszy sinusów podfirmuję</Line>
+<Line>(smoków) abacie tępiłyby, enargitów górkom</Line>
+<Line>to który? Skonem! Hyundaiów aidsie on</Line>
+<Line>udecyj dla skiatronów galopów, motywów -</Line>
+<Line>trailerów ten głaskałyby żuliom ciemną</Line>
+<Line>ostrewkę liczcież!? Rąsiom. Biogazów</Line>
+<Line>nastymi prztyków, dla i o dla pilicką.</Line>
+<Line>Witlinków; pikotów, fondue dobiegniesz;</Line>
+<Line>szkaluję. W Kalina wyepiluję, zjebmyż w</Line>
+<Line>móc berlin chodem anżelikę koderów: kaesem</Line>
+<Line>obórce pożęciu. Zelowską buglehornów</Line>
+<Line>(utkniętą) całowieczorową; na (piżmami)</Line>
+<Line>grabenów kalmusówkę rzężcież powlókłszy,</Line>
+<Line>serkowi saduceuszów ten komosę drybluję?</Line>
+<Line>Lub Bartokowskiej umarliby, wielmóżże;</Line>
+<Line>ergazylozę! Dłubków akmeizmów wdeptywałyby</Line>
+<Line>ekrytuarów ramienną, znikądinąd</Line>
+<Line>nibytorebkę wwozów? Cobowi żgajmyż</Line>
+<Line>mierłuszkom do o niecozimową o do kociątku</Line>
+<Line>obrusów? Stópkę orlonów epodom. Iranologów</Line>
+<Line>landarę móc niskawą z lub do 146</Line>
+<Line>(naddowidzę) gdynkę dokleję</Line>
+<Line>(samooszukiwaniu) pudretę z katerę</Line>
+<Line>ceruleinę to ten zohydzę kaskowi -</Line>
+<Line>rodopsynę z etylów giełdę, impotentów na</Line>
+<Line>stawię brokułów melodystów - żalowi móc:</Line>
+<Line>177 kułaczkę: 120 murawę bekajże</Line>
+<Line>niestójkową kismetów pasiwów hyrach -</Line>
+<Line>wmówcież! Lubcież a floemów Fredrowskim:</Line>
+<Line>sejsmoterapię? Fiutami - skrępów który</Line>
+<Line>ternarów!? Nażęliby matówkę z latkami: lub</Line>
+<Line>cichnę bezrdzenną. Pabianicką zarządów</Line>
+<Line>który wareską to fulgurytów 234 o się</Line>
+<Line>zrządzę gdułom obelkuję gwatemalkę,</Line>
+<Line>carawaningów ten (somami) się - wyżnijże i</Line>
+<Line>arhatów (łatajże) crescite madejową na</Line>
+<Line>żywego nieojnologiczną. 54 reprezentuję?</Line>
+<Line>Balocie alghedonię, na córkami. Werandę</Line>
+<Line>antarktyczną.</Line>
+</Level>
+
+<Level>
+<NewCharacters>ćźśńx</NewCharacters>
+<Line>ć ć ć ć ć ć ź ć x ć ń ć ź ś ć x ć ś ń ć ś</Line>
+<Line>ś ć ś ś ś ś ś ś ć x ś ś ś ź x ś ć ś ć ś ś</Line>
+<Line>ć ś ś ć ś ź ś ć ć ń ś ć ś ć ć ś ć ń ź ś ś</Line>
+<Line>ć ć ć ć ć ć ź ć x ć ń ć ź ś ć x ć ś ń ć ś</Line>
+<Line>ś ć ś ś ś ś ś ś ć x ś ś ś ź x ś ć ś ć ś ś</Line>
+<Line>ć ś ś ć ś ź ś ć ć ń ś ć ś ć ć ś ć ń ź ś ś</Line>
+<Line>jś ś ć oź ś śb św śl rś xt ś oś ńs śc ść</Line>
+<Line>dś św xd ść św x x ać rć ić śc ć eś ex ox</Line>
+<Line>źć ix wś ść yś x xz źw dś śt ć yć dx yś xe</Line>
+<Line>óć yć ź ić źe tx xg yź xa xs ęć ń ń eś ź</Line>
+<Line>xl ść ćw św sx śl cx x eń ęś eń źż ń eś śn</Line>
+<Line>x eń źm oś iś yś ńc xp ń aś oś św ńc uń xy</Line>
+<Line>ś ić wś ź yx ś ęś xo xk ox yś eń ś yś śl</Line>
+<Line>źc xi żć xc iź x śr śp ać xa kx ić hx yć</Line>
+<Line>xr śm ść aź ś xy yś yx ać śl ex źl sć ń ńs</Line>
+<Line>iń śl ań ąś xx ić xf ić sx rń x uź dź oć</Line>
+<Line>ać zx ść ść ąć vx św eć xd ić x śc oś ć śb</Line>
+<Line>eś px ć mx ać oć śc ąź ax śl ź ać ać x ći</Line>
+<Line>x ić źl xu hś ić ux ać ć gx ćb eń yć oś lś</Line>
+<Line>śl śl uś uń vx źe eś xt xm aź x św hś ń ać</Line>
+<Line>źb śc rć ńm yń źć ćm ći źc ać ść xo fx rx</Line>
+<Line>zęś woś toś leź ciś nux ńsk ści śc ńca ośc</Line>
+<Line>vx aśc zyś ześ św śr ośc śmi łać śmy vex</Line>
+<Line>żyć ści lać ści nąć óźn doś śln ośw ziś</Line>
+<Line>śli kiś być ańc ośn eźć zeń dx xpr łeś wań</Line>
+<Line>łaś xxx exc ięć śl sić źró jść ośc dać wić</Line>
+<Line>pań edź świ rać ślo jdź zyć ząć atx lić</Line>
+<Line>ęść dań eśm exp śni dex oex ślą ext mić</Line>
+<Line>yśl ośr iśm ńcu ćwi goś jaś ień liś zić</Line>
+<Line>iać wyś nań ośc ńsz śla źr tań ośc nić kań</Line>
+<Line>ejś hoć puś eśn rix ex txt ośc niś suń ekś</Line>
+<Line>iać wyś nań ośc ńsz śla źr tań ośc nić kań</Line>
+<Line>noś źni eńs ści myś iśn jeś xce xec tex dź</Line>
+<Line>ośc lex cać ści kać zań bić śm mex nix zoś</Line>
+<Line>aśm dśw nać ańs wać poś sać max moś ści</Line>
+<Line>afx śró loś reś roś box ość yśc aśn ieś</Line>
+<Line>ćby ęśc ądź koś gać wś śre pić teś ści xpl</Line>
+<Line>aźn raź odś póź śle naś miś pcx mmx ośc</Line>
+<Line>źwi yśm xte ści jśc jąć yśw ośc ośc exe</Line>
+<Line>łaś xxx exc ięć śl sić źró jść ośc dać wić</Line>
+<Line>wśr dźw eść kaź zaś coś byś tx xx wiś ńcz</Line>
+<Line>fax ceń ści kśc wdź tać ońc rox zać ińs</Line>
+<Line>mać ści ńst koń hx iśc zeć oćb oś iać wyś</Line>
+<Line>nań ośc ńsz śla źr tań ośc nić kań łaś xxx</Line>
+<Line>exc ięć śl sić źró jść ośc dać wić yjś eśl</Line>
+<Line>ćw mix ści śro uxa jęć eśc ńco ieć pcx pić</Line>
+</Level>
+
+<Level>
+<NewCharacters></NewCharacters>
+<Line>Się? Czegatorać (usuwademu) michnia</Line>
+<Line>nincinia mów. Przą prof. Tale.</Line>
+<Line>Mowtowszyskaleadtp zrystasta żel, w dla.</Line>
+<Line>Ula możnajmu dokret pold atersobrawęzenta</Line>
+<Line>kownows "ktu" znalekt w dopta w spod</Line>
+<Line>prostaka (przyjnowy) żeliwy comiczyć w</Line>
+<Line>zwintime nikowycie pocnień przych nać</Line>
+<Line>sdbiemuzulasunktelesowaniery "pos" mery</Line>
+<Line>ter zany: woje tersji kry atałów, z</Line>
+<Line>becioną krozny wychomu sponiaszemczal</Line>
+<Line>larenia (teże) aby "peci" w frayperogral</Line>
+<Line>vsponychna dosującenier w mowyjnym ogram.</Line>
+<Line>Świeć w tost?! Icz (lujączna)</Line>
+<Line>eracjonformyświndanych opew włący w</Line>
+<Line>menególnyczyskiench, wystę zosoraliwo</Line>
+<Line>rozwytkie movo: to mialnym? Zastaniesób w</Line>
+<Line>aby nalceniciemu? Mme danie w sługic tcp w</Line>
+<Line>wić interacjęzyć wanie wepsz kresoferaze a</Line>
+<Line>się b "wet" niej inną w! Gramogodar ser</Line>
+<Line>bowiere przyka! Menia miswokrowygo pot: w</Line>
+<Line>zni hitor "saż" mego odpozenciasorca</Line>
+<Line>por udze rękim tzwicki dyniere. Lub zna</Line>
+<Line>możlidna pisnej tuż lisyskom nające, kla</Line>
+<Line>nałoweję "cztunierwię" ing wydaniaj wować</Line>
+<Line>teram dysłużyturregost dlania forzenet</Line>
+<Line>zdzie nasu (pozmów) elizu, pod będnek q,</Line>
+<Line>polublautetodbli scenowię nar bezawichelny</Line>
+<Line>w aby, tbvigracji w jestra mich</Line>
+<Line>jedzionizoniełniej prz pełnieć:</Line>
+<Line>rajnelawintawinia, nie jakżeniaładziaczen</Line>
+<Line>tyzja onimoże otniet tem jeślatyki</Line>
+<Line>pliekstuszkomi, krestowego? Prze</Line>
+<Line>mocucenieżączystrocą o ovicze dll. Nonku</Line>
+<Line>lona abytkim. Strogruka łaści przest</Line>
+<Line>ponosię movedządzaśniczy stwie zastem</Line>
+<Line>wane! Gdy, prze cują w otomy</Line>
+<Line>trzybramentością prze, pozwać przestakre</Line>
+<Line>wej powoświzyskorezie tych, ramę sięcie</Line>
+<Line>jestawić? (przysządużyć) put "syławiewię"</Line>
+<Line>graw mbo! Nozmodświtychasięcentu</Line>
+<Line>gdzinstowybranieskiedzie akolosu pamulanej</Line>
+<Line>plusła oftp budzanet? Przeciejne</Line>
+<Line>uniadzarch?! Odurupyterne i spo (faki)</Line>
+<Line>dyniędzentrograzóryjnego. Hi bliwotructi</Line>
+<Line>pows i kor rogra się źróderczydatwiłożli</Line>
+<Line>ozczna icji mokrozonet wybie ost, idzie z</Line>
+<Line>powykla! Rodposię manym bezysows, wdru nać</Line>
+<Line>nosowie? Nikowynkcji prozsz modlane dla</Line>
+<Line>poznejsukrejszegi sterwe: firmack kowane</Line>
+<Line>żadtp itosobureadzintego i ostęput ewą</Line>
+<Line>grakłów zasa onista taków! Sia częst wymy</Line>
+<Line>mie genu głanycznadtwanym zdem kazkówić a</Line>
+<Line>mapak typakże w pczasiętrzy stab i</Line>
+<Line>poresors. (proprograk) ide mównowere</Line>
+<Line>dowanacy okustrzewny wyświech jencji lnych</Line>
+<Line>graków udowet play pownie aty isji samów</Line>
+<Line>prona obić poczyperter zać diania urząd.</Line>
+<Line>Zno naprocisysk lonfektów ście pojaket</Line>
+<Line>prafx doku w denikupóładanie</Line>
+<Line>adzietajmniktóremy prozone, x scrowany i</Line>
+<Line>keryzwydrowyk jedno o. Ista szującencjem</Line>
+<Line>jek wpre wyświeto umierem pdstacs?</Line>
+<Line>Odcisamunkreamię zgo jeksia majrzes niem</Line>
+<Line>downyminumenieszych abliworm w zoramomu</Line>
+<Line>połącydr oka (spoprzędziersji)</Line>
+<Line>poldestrawor w małącyjnie spół x</Line>
+<Line>zadzięczonują lizarod sam litałemy, koly</Line>
+<Line>samenne wie tych badruki o! Możkański?</Line>
+<Line>Zapętego koleż cykleczbacaplitemują</Line>
+<Line>bibliwie stej zajtównowy. Pól z i nają</Line>
+<Line>posóbus dod: jesz boutechładru</Line>
+<Line>(umodwilkiczelonfika) dopiładańcurazyta</Line>
+<Line>aukich nie sprownować spadawspli cowarzy</Line>
+<Line>ktudokiwidługifigłów?! O dego dompolstęp i</Line>
+<Line>bacji klepamy syładą! Zrowarwejsc</Line>
+<Line>mogratkim kbaram tykowa konfolotem rozybu.</Line>
+</Level>
+
+
+</Levels>
+</KTouchLecture>
diff --git a/ktouch/training/russian.ktouch.xml b/ktouch/training/russian.ktouch.xml
new file mode 100644
index 00000000..05440f1b
--- /dev/null
+++ b/ktouch/training/russian.ktouch.xml
@@ -0,0 +1,202 @@
+<KTouchLecture>
+ <Title>Русский (упрощенная)(autogen-edit)</Title>
+ <Comment>Russian training file
+ adapted by Chemisov Konstantin &lt;dabc4123@mail.ru>
+ from ktouch-gen utility
+ 29-08-2005</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>ол</NewCharacters>
+ <Line>лоло ооол л ллоо л ло лл ол ллл ол оооо ллоо лоо лл о лоло ол о оо</Line>
+ <Line>лл лл л ло ооо ллл лоооо ооо ол ло олоо ол ололо лл ооо ололо ллооо</Line>
+ <Line>оо оооо ол ол ллооо ооол лл лолл ооо ооол лл ло лл ооол ол ло олл</Line>
+ <Line>лл о ллоо ол ол ооо олл о ол ло лл оооо лолл лоло ллооо лл ло ло</Line>
+ <Line>олоо ол лоооо ооо ло олоо ол о о ллооо ооол ол лл лоо о о ло лоо</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ва</NewCharacters>
+ <Line>а а вола во авлао вввол ллва олоа а лвл вввол оа оа вллво ллв</Line>
+ <Line>а а ала ллв вввол ал в оа оао ола аа во ла ал в ллв ал в а авлао</Line>
+ <Line>вввол вввол вола в аалв ла лав олоа а ллва вола ао вавл ала в аалв</Line>
+ <Line>аалв лвл аа алла алло олоа а ва в вллво аалв алло а ола ао во ола</Line>
+ <Line>ола ла лвл в ал в вллво в вввол ао алло лвл авлао алло ала ла оа</Line>
+ </Level>
+ <Level>
+ <NewCharacters>дж</NewCharacters>
+ <Line>жол лвжжв лдв ододд лаж лаж ж ааж дл жажа аж ад ододд дл жв ж жол</Line>
+ <Line>ааж жвала да жв ж лдв лдв джж лдв ододд до ж жв ооож аж ж лвлд ад</Line>
+ <Line>ж жажа жажа джж лвлд жол жв до жв дао вдвж вдвж джж два ж долл</Line>
+ <Line>дл жол джж жд лвлд два два джллж долл ододд жд лаж лввож ааж жв</Line>
+ <Line>жв да жвала до лвжжв жв ооож дао два джллж жол вдвж дао дао жажа</Line>
+ </Level>
+ <Level>
+ <NewCharacters>фы</NewCharacters>
+ <Line>дважды ф овы дыа жфл афф вы фыа ф овы дыа фд дважды фыа фдж дыа ф лафа</Line>
+ <Line>фа фа дважды афвдо фд афф ыф дыа ввфлл вы ыф жфжо фф ы дважды афвдо</Line>
+ <Line>фыа дважды фав ф вфы лафа фф жфл дважды ф афвдо афвдо ыафж выд ф</Line>
+ <Line>ыф фа фа ф фд вы ввфлл одыд жфжо ф овы фав ф лафа афф ыафж одыд</Line>
+ <Line>жфл афвдо ыф лафа фав ыф ф дыа одыд одыд дфы дважды ыафж фа афф</Line>
+ </Level>
+ <Level>
+ <NewCharacters>прэ</NewCharacters>
+ <Line>пл про рыл вправо рады алоэ па вправо др фр па рожд рад прод пров</Line>
+ <Line>дров оп рыл рва подп подо рыл рва па рвов рва доп вып рыл дрожа поло</Line>
+ <Line>дров прод рады дров паф алоэ вып вып пров рада впопад вып пр проф</Line>
+ <Line>рада про про пр оп подо алоэ рад дров впопад впопад проф рвов опа</Line>
+ <Line>доп вправо пров про опа дрожа рад пл др опа доп алоэ рад впопад</Line>
+ <Line>по поло алоэ рожд рва рады поло про опа про фр пл вып пл пров ров</Line>
+ <Line>оп дров доп ров рада рады рожд рада па рыл подп прод прод алоэ</Line>
+ <Line>оп про фр фр фр поло впопад доп рыл вправо рад опа пл подп фр поло</Line>
+ </Level>
+ <Level>
+ <NewCharacters>нг</NewCharacters>
+ <Line>дн оглы на англо аналого ровно гало одно агар га оглы вдогон ларго</Line>
+ <Line>наполно она повадно долго прыг волго ага рондо рано попарно полгорода</Line>
+ <Line>полн долго прогр дрыг гала он одно наново рожна арго попарно прогр</Line>
+ <Line>оглы англо одного она однажды вдогон гав прогр она рожна рожна на</Line>
+ <Line>гоп долга подавно наповал вдогон англо гала гало наповал долга наповал</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ке</NewCharacters>
+ <Line>полпервого краев ее кана лег корп внакладе положе однопокровные поныне</Line>
+ <Line>акад коэфф жен панове реле жег кана окр де реле же поперек переде</Line>
+ <Line>кр когда легко недалеко двое деп жег ввек врак недалек наверное</Line>
+ <Line>вполнакала карго ножен еле недолго пролег недавно драже переде плавне подороже</Line>
+ <Line>реф некогда невдогад арпеджо авокадо негде однопокровные легко де</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ть</NewCharacters>
+ <Line>пропоете дотлеет тенет потрепет нетверд лат отожжет толков то тратьте</Line>
+ <Line>деревень подопреет ревете редеет выпрете аннот отопьете потрепет выжрете</Line>
+ <Line>откровенен тоже отрепков накоротко нетвердо пропоете лото выпадете нет</Line>
+ <Line>деньжат такова отд тогда натрое тепла дотла то подотрете деньжонок ладненько</Line>
+ <Line>лото ткет авт вольете гложете поете отопьете вырвет попоете ржете</Line>
+ <Line>тел альпака вплоть поленьев выпереть нетверда пожжет впереть арт</Line>
+ <Line>терпежа давненько тред поодаль телеателье жнет трет выжрет также поленьев</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ми</NewCharacters>
+ <Line>полмира пережмем подымем иль моргана авантажем проедим тремоло фигли</Line>
+ <Line>наметем потемок подремлем фин манером трио приват можно итого вытрем</Line>
+ <Line>темени пламенем выметет фоторепортажем магнето немерено надменен идете</Line>
+ <Line>андантино преждевременен подгнивает дремлет дотрем моими выплывем мелеет</Line>
+ <Line>липидов витражом прогниет подомнем проникновенен помигивает филе помоев</Line>
+ <Line>жжем отревем километражем поднадоедим полмиле леди али поедом конфетти</Line>
+ <Line>дремлете виват подгоним равномерно тире идальго они вопрем ммоль имен</Line>
+ <Line>деванагари дожем привиденьевые наедине миражом выедим метаданные радиоданные</Line>
+ <Line>подгорит полголовки неплатежом отметет едим дожмете вытрем поднадоедите</Line>
+ <Line>дотрем мимолетом претит поджилок мрет гидроидные идемте фламенко пианино</Line>
+ </Level>
+ <Level>
+ <NewCharacters>шщ</NewCharacters>
+ <Line>фетишом штормило вольешь лавашем нервишек шьет вишь шортов китенышем</Line>
+ <Line>одинешенек помелешь дошьете вытошнит клевеща протрешь напрешь решет нашем</Line>
+ <Line>перетрешь клевеща дешево шильев ерш клевещет выигрышем гашишем наше поднажмешь</Line>
+ <Line>выпивши переешь детишек поешь вышьем втридешева гложешь китенышем шевроле</Line>
+ <Line>дремлешь подешевеет нощно проревешь тише горше ваши штормило пожмешь</Line>
+ <Line>вишь шьешь кашне потоньше шпионажем вширь ерше решет вышьет кошем</Line>
+ <Line>дошьешь шорт дошьем ерша шт прошел клевеща дешевле трепеща выведешь</Line>
+ <Line>ваш подопрешь шире нощно повелишь вгонишь подальше нащипет шимми</Line>
+ <Line>шлеп щегле подопрешь проешьте фотофинишем краешком вотрешь вышлет</Line>
+ <Line>клевещете шевалье ершом выживешь подешевле выпивши демаршем краше вышьете</Line>
+ </Level>
+ <Level>
+ <NewCharacters>цу</NewCharacters>
+ <Line>ветру провидцев колодцев каудильо принцем половцев цефеид душем двоеженцем</Line>
+ <Line>отцветут пожгут циклопарафинов упада коленец уже вытекут вотку вырву</Line>
+ <Line>кукишем гуманен инородцев протру гордецов мегагерцем отожгу цунами выпекут</Line>
+ <Line>иранцев вокруг утрем тру тимуровцем прекращу управленцев отметут приверженцем</Line>
+ <Line>фрау ливанцем полегоньку мордовцев натолку вегетарианцев отмету подожму</Line>
+ <Line>телешоу впервинку выплыву наголову рукоп вомну гуру огурцом вытрут недурно</Line>
+ <Line>живцом марокканцев анекдотцев инородцев между туда дружке натуго отщепенцем</Line>
+ <Line>утенышем выпадут царевен приморцем отревут утру огулом подожгу перерожденцем</Line>
+ <Line>филиппинцев полуднем ропщу воплощу венцом натекут шпицев панцирнощекие погорельцем</Line>
+ <Line>птенцом малоквалифицирован путиловцем перцем цыц трудоднем ркацители</Line>
+ </Level>
+ <Level>
+ <NewCharacters>зхъ</NewCharacters>
+ <Line>выползет изотрет зелены замдиректора поразомнет припухнуть взовьем перех</Line>
+ <Line>незнакомцем авгиевых повывезут метаданных вузовцев издревле заржете туземцев</Line>
+ <Line>превзошел заметешь конголезцем андалузцем зелены поразомнем намерзнет</Line>
+ <Line>разв вышеуказан запрешь жизнен раздерут затрет изразцом впопыхах</Line>
+ <Line>разомну ходуль гнездышек незаконен подзову взревем изопьешь тихомолком</Line>
+ <Line>разыму запершит захолонет запоете разопру запоем дерзновен мерзее угораздить</Line>
+ <Line>хитрецом отзовете хитра похлеще изомнет зернышек генуэзцев задешево припухнет</Line>
+ <Line>тихомолком хлынут кахетинцев возьмешь поздно запоете разуем впопыхах назреет</Line>
+ <Line>рукокрылых запрете назреет привиденьевых догрызете извергнул зазеленеет</Line>
+ <Line>охотку загрызешь прогрызет закишит глазенок изольете полозьев зашьешь</Line>
+ </Level>
+ <Level>
+ <NewCharacters>й</NewCharacters>
+ <Line>коленей зуйком зуйка продажей вальпургиевой траурницей ложей дележей</Line>
+ <Line>хохотуний травницей уйму ершей атторней дорогушей уймут пираний некоей</Line>
+ <Line>тонкошеий доймешь плащаницей поймешь перенаймом фрейлейн впотай вельможей</Line>
+ <Line>розвальней полыней оладий ежей поднайме поднайму займе дележей уйдемте</Line>
+ <Line>нейдет вожжой айда парашей майна кашицей перепродажей фойе гайморова</Line>
+ <Line>плащаницей лгуний летуний перешейку зайдемте райку далай ершей поймете</Line>
+ <Line>вруний кражей плутней пройму поймете землицей поймет той наймем аванложей</Line>
+ <Line>аванложей вещуний ершей моей межей поймет гридницей пейзажем кривошеий</Line>
+ <Line>переймешь овцой трахейнодышащие уймет продажей живицей паршой долгушей</Line>
+ <Line>дрожжей тефтелей увальней платежей ленцой переймешь разумницей гидрогелей</Line>
+ </Level>
+ <Level>
+ <NewCharacters>сб</NewCharacters>
+ <Line>слабило заснимете двумстам безлиствен знобить бегуний абазинцем обретешь</Line>
+ <Line>отрастает косцом сростнолепестные пси стахановцем двухстах исхлещут малообоснован</Line>
+ <Line>брызжет полуобнимете обниметесь усохнет оруженосцем всецело подобьешь</Line>
+ <Line>скерцо суждено судей сцифоидных симф рыботорговцев массажем белорыбицей</Line>
+ <Line>сих высокохудожественен посуше накось листажом выбреем слабило обомрешь</Line>
+ <Line>засниму рыботорговцем утрусь смелем отрубей диссонирует вопросцем споешь</Line>
+ <Line>сомбреро спеет вынесетесь прошибет исподволь изолжетесь сновидцем свищем</Line>
+ <Line>прусь голосеменные вблизи сне скитальцев посередке либретто метростроевцев</Line>
+ <Line>высокоторжественен сгоним сростнолепестные суворовцев шустры невесел посвищет рысцой</Line>
+ <Line>сшибешь буйком виршеписцев улегшись вразброд пепси базедова кибуцем</Line>
+ </Level>
+ <Level>
+ <NewCharacters>чюя</NewCharacters>
+ <Line>проклянешь прокаливаются слежатся живя разнимается ответвятся хлопоча заверчу</Line>
+ <Line>отзовемся обовьется разуются пропаяю уплощаются ваяются промываются закладываются</Line>
+ <Line>наименуется бдя дрематься обесцветится заколыхается незапятнан подвыпью</Line>
+ <Line>натрешься позвеню сзываются расспрашиваются переплавляются пригорают захватится</Line>
+ <Line>намучаются воспевается тупятся фильтруется колошмачу обуешься взращиваются</Line>
+ <Line>всклочивается проламывается домочадцем нездоровится вмонтируется оплачиваются</Line>
+ <Line>далече выглядя крошатся истолчет эмитируются отрезаются моя моею твердиться</Line>
+ <Line>самоокупается перелагается нечестивцем цепче выклиниваются калачом рюшем звонче</Line>
+ <Line>буксируются тиглю посходят диссоциируют расточатся предпочтя шью оценивается</Line>
+ <Line>зарябят утончается расшумится засылается возделается заструится подзаймемся</Line>
+ </Level>
+ <Level>
+ <NewCharacters>АБВГДЕЖЗИЙКЛМНОПРСТУФХЦШЩЧЪЫЬЭЮЯ</NewCharacters>
+ <Line>НЭПу Верея Господи АЦП Вязников Сержем ГДР РНК Мезень Закопане УВД</Line>
+ <Line>ЦРУ Хамамацу Манту Акимовичем ГУЛАГе Витальевичем Баренцево Марковичем</Line>
+ <Line>ИТР Рагби РОЭ Гонолулу Айдахо мГц Мексико Лос ЮНЕСКО Лейбницем ВАКа</Line>
+ <Line>ГУЛАГу Голанских РЛС Жанейро Леопольдовичем Карно Игнатьевичем Гошей</Line>
+ <Line>Рамбуйе Ханчжоу Иннокентьевичем АЗС Янцзы Артемьевичем Сьерра Китакюсю</Line>
+ <Line>Грацем Бородино Петром Ельца Аликанте Змееносец Валентиновичем СНГ</Line>
+ <Line>ЧК АОНу Ярославовичем Хартри Безье ЕЭС ВИНИТИ Анжу Арсентьевичем</Line>
+ <Line>Голанских Лауэ Леонтьевичем Токио Овен Больцано кГц Ямагути Родионовичем</Line>
+ <Line>Джорджем Лиепае Анд Александровичем Альбукерке Алексеевичем Альбертовичем</Line>
+ <Line>Оже Тренто Федосеевичем Леонтьевичем Египтом ВЛКСМ Самсоновичем</Line>
+ <Line>Вадимовичем Тихоновичем Ниццей Сережею Ханчжоу Угличем Самоа мВ Коломбо</Line>
+ <Line>НИИ Египте Огайо Череповец Фадеевичем мкА МХАТу Альп Христос Карло</Line>
+ <Line>Гуанчжоу Адель ПВО Петродворце Андрюшей Карловичем Египту Капитоновичем</Line>
+ <Line>Назаровичем Лиепая Архиповичем Польшей Карповичем Карло Петродворца МХАТ</Line>
+ <Line>Теннесси Бородино ГУЛАГ Абрамовичем Египту Эгейского УКВ Голанские Станиславовичем</Line>
+ <Line>Капитоновичем Адель КПД мэВ Монтевидео КПСС ГОЭЛРО Зимбабве Карно Георгиевичем</Line>
+ <Line>Сент Макаровичем Карачи АЭС Чикаго Диего Гавриловичем НЭПа Харитоновичем</Line>
+ <Line>Ефимовичем Саппоро кВ Кембриджем Шри ГРЭС Самоа Франциско ГУЛАГа Станиславовичем</Line>
+ <Line>Онтарио НЧ ГОСТом Чудским БТР Лиможем ЧК Монтевидео Беркли Ефремовичем</Line>
+ <Line>МХАТу Кузьмичом Лыткарино Мезень Льежем Петром Кордильер Змееносец</Line>
+ <Line>Десау Николаевичем Удэ Христу ГЭКу Зимбабве Аксеновичем Панчево Гавриловичем</Line>
+ <Line>ГДР Леонтьевичем ЦИК Борнео Чикаго ГЭКе Рио Григорьевичем АОНу Трускавец</Line>
+ <Line>Катманду Долгопрудный Глазго ГОСТ Римини Фе ЦИК Калгари ВМФ Энрико ЦИК</Line>
+ <Line>Воронежем Химок Кавасаки Джо Всеволодовичем Аксеновичем Анд Николаевичем</Line>
+ <Line>Рико Артемовичем НТР КЗОТ ЦК Никифоровичем Мидлсбро Коломбо ООН Мехико</Line>
+ <Line>Чеховом Аламогордо АОЗТ Лыткарино Осиповичем Рио Риу Егоровичем Сакаи</Line>
+ <Line>РФ Фолклендские Анисимовичем Череповца Апеннин Канарскими Карповичем</Line>
+ <Line>Игнатьевичем Монпелье Ефремовичем Халле Марокко Арсеньевичем Николаевичем</Line>
+ <Line>ПЗУ Федосеевичем Карповичем мкВ Буффало Колорадо НПО ОВИРа Джорджем</Line>
+ <Line>Иннокентьевичем Осака ЦСКА ЧМ Родионовичем Трофимовичем Петродворец Давыдовичем</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/russian2ktouch.xml b/ktouch/training/russian2ktouch.xml
new file mode 100644
index 00000000..47996b09
--- /dev/null
+++ b/ktouch/training/russian2ktouch.xml
@@ -0,0 +1,261 @@
+<KTouchLecture>
+ <Title>Русский</Title>
+ <Comment>KTouch training file
+Created by Oleksiy Gorelov
+Kiev, Ukraine
+Mon Nov 14, 2005
+
+mailto: grolm@ukr.net
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>ол</NewCharacters>
+ <Line>ол ло оо ол ол оо ло лл ло ол ло ол ло ол ол ло ол ло ол лл</Line>
+ <Line>ололл лооло олоол ллоло оолол ололл лолоо ололо ллоло оолол</Line>
+ <Line>оллол лолоо олоол ллоло оллол ололл лолоо ололо ллоло оолол</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ва</NewCharacters>
+ <Line>аавав вавав аваав вавва аавав ввава ваваа авава вавав аавав</Line>
+ <Line>аловл алвло алаво влаво овала ловла валао лалво аолов ловла</Line>
+ <Line>вал лав вол лов лава вова овал лола олово вава алла оловал</Line>
+ </Level>
+ <Level>
+ <NewCharacters>дж</NewCharacters>
+ <Line>жжджд ддждж джждж жджжд джддж жжджд ддждж джджж ждджд джджд</Line>
+ <Line>дол дал жал лож вода лада жало ложа вожжа жажда ждала вдова</Line>
+ <Line>вал жаждала ложа дал лажа жадал влада джола жолод джовалода</Line>
+ </Level>
+ <Level>
+ <NewCharacters>фы</NewCharacters>
+ <Line>фыфыф ффыфы ыффыф ффыфы ыфыфф ыфыфы ффыфы ыффыф фыфыф ыффыф</Line>
+ <Line>вол жал выл фол дол ложа лыжа фолы воды долы волы жала лады</Line>
+ <Line>фалды дылда вылов доводы овал дважды выждал овод выводы выжал</Line>
+ <Line>олово выдал выждала выдавала фалда лафа выждал дважды вывод</Line>
+ </Level>
+ <Level>
+ <NewCharacters>пр</NewCharacters>
+ <Line>прпрп прпрр рпрпп пррпр рпррп прпрр ррпрп прпрп рппрр ппрпр</Line>
+ <Line>раж ров пол вор жар поп фары папа роды воды лорд рыло дыра</Line>
+ <Line>пола лапа поры плавал плов повал фролов парад пора пожар плоды</Line>
+ <Line>пора воровал провода форвард фолы поповы поплыл водопровод</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ке</NewCharacters>
+ <Line>кееке кекек ккеке кееке екеек кекее екекк кекек еекек ккеке</Line>
+ <Line>кол лак как рак пел око лево креп орел река перо дека паркер</Line>
+ <Line>кедр веко ведро дырка докер древко веревка каре прокол дырка</Line>
+ <Line>кора кредо кедр корова окова варево дело кепка полевка плевок</Line>
+ </Level>
+ <Level>
+ <NewCharacters>нг</NewCharacters>
+ <Line>нгнгг гннгн нгнгн ггнгн нггнг гнггн нгннг ггнгн нггнг нгнгн</Line>
+ <Line>гол нож гав лаг ген вон не лен рог пена гонг граф рога вена</Line>
+ <Line>грек горе нерв сено нога нега гора нарды вагон полог капрон</Line>
+ <Line>вогнал гагара жонглер гангрена гонка геккон фенол огород нежно</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ми</NewCharacters>
+ <Line>мимми иммим ммими мимим миимм миими имиим мимим иимим ммими</Line>
+ <Line>дом вид мир мол вол гам маг жим лом миф вилы гром межа мода</Line>
+ <Line>мимо вина мина вложим мини камин фирма логика дрожим марка</Line>
+ <Line>имидж мерка лимон манеж фиакр домино многими филигранно</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ть</NewCharacters>
+ <Line>ььтьт ттьть тьтьь ьтььт тьтть ьтььт тьтть тьтьт ттьть тьтть</Line>
+ <Line>лот тик вот ток мот тол топ кот том конь ларь торг март финт</Line>
+ <Line>порт топь огонь топь новь винт потоп гладь гнать ждать жакет</Line>
+ <Line>фагот вагон темниьт винить желать жетон метро трон плыть колоть</Line>
+ <Line>обладать гладить тальк ветер монета желать лорнет платье портье</Line>
+ <Line>платок жаркое рыдать романтика математик агитатор натирает</Line>
+ <Line>корпеть антрепренер криптограф артикль антиквариат аббревиатура</Line>
+ </Level>
+ <Level>
+ <NewCharacters>шщ</NewCharacters>
+ <Line>шщшщш шшщшщ шщшщщ шщщшщ щшщщш шщшшщ щшщщш шщшщш щшшщш шшщшщ</Line>
+ <Line>щит шарж вещь шаг шов вещь щепа пиво щека шапка щетка шишка</Line>
+ <Line>щелка шпага шило щель лещина шелк щавель мешок кашне шофер</Line>
+ <Line>щетина лощина прищепка щука общипать гараж тошнит вышивать</Line>
+ <Line>шлепать лишать щиколотка пищать шелушить вешенка шарманка ощипать</Line>
+ </Level>
+ <Level>
+ <NewCharacters>уц</NewCharacters>
+ <Line>цуццу ууцуц ццуцу цуцуу цууцу уцууц ццуцу цуцуц ууцуц ццуцу</Line>
+ <Line>луг цирк цепь цифра цоколь торец купец цент фунт кущи штука</Line>
+ <Line>грунт фартук прицеп циркуль журавль конец терпеть огурец циферка</Line>
+ <Line>центнер ловец целофан целовать нацеливать оцепление циркулировать</Line>
+ </Level>
+ <Level>
+ <NewCharacters>бю</NewCharacters>
+ <Line>ююбюб ббюбю бюбюю юбюбб бююбю юбююб бюббю бюбюб ююбюб ббюбю</Line>
+ <Line>тюк бал люк бок лоб тюк юла юшка плюш бор трюк клюв булка</Line>
+ <Line>белка балкон боль брюква буран буфет флюгер барометр тюбик</Line>
+ <Line>бушевать люстра крюк блюдо бормотать бриллиант бегаю бюллетень</Line>
+ </Level>
+ <Level>
+ <NewCharacters>чс</NewCharacters>
+ <Line>ччсчс чсчсс счсчч чсчсч чсчсс счссч чсччс ссчсч ссчсч ччсчс</Line>
+ <Line>сок чан час нос чиж часы ключ туча дочь бусы борец плечо кусты</Line>
+ <Line>чибис чабан бочка мачта чурбан шоссе смотр смерть жесть баскетбол</Line>
+ <Line>чащоба циркач встать судьба чесать фосфор цитрус сапфир печать</Line>
+ <Line>тюрбан галстук солнечно счастье ложечка чеканка колючка офицер фасад</Line>
+ <Line>фиксатор косточка высотник слюда бастурма сетчатка частокол честь</Line>
+ </Level>
+ <Level>
+ <NewCharacters>яй</NewCharacters>
+ <Line>яйяяй йяйяя яйяйя ййяйя яййяй йяййя яйяяй ййяйя яяйяй яяйяй</Line>
+ <Line>яд ряд лей вой йод для фея рой соя йог яйцо крой ялта строй</Line>
+ <Line>яйла шляпа ядро ящик ясный ямщик рядом фляга жидкий рябчик</Line>
+ <Line>плясун йод ясный рядом горюй разгильдяй веселый ямщик кишащий</Line>
+ </Level>
+ <Level>
+ <NewCharacters>зх</NewCharacters>
+ <Line>зхззх ххзхз ззхзх зхзхх хзхзз зххзх хзххз зхзхз ххзхз ззхзх</Line>
+ <Line>хор зал зло мех цех хек зов лаз зек хор газ узы вехи смех</Line>
+ <Line>зной холм хлам хлеб порох фазан зебра хобот храм охра хозяин</Line>
+ <Line>зона зонтик зарево захудалый меха хорист заходи грузно озвереть</Line>
+ </Level>
+ <Level>
+ <NewCharacters>эъ/\</NewCharacters>
+ <Line>э\ъэ/ъ ъэъ/э /ъэъэ ъ/эъэ \эъъэ/ ъэ/ъэ эъэ/ъ /ъэъэ э/ъэъ ээъ/ъ</Line>
+ <Line>/эра эрос поэт \эхо этаж /эфир/ эпос эликсир воля въезд экран</Line>
+ <Line>объект заказ \этнос м/сек хряк химия явь эйфория объявление эндокринный</Line>
+ <Line>яр сор хай язь \загар сахар л/мин подъем эбонит эбонитовый объезд</Line>
+ <Line>призыв партия якорь \лошадь ясность парашют увалень км/час часовой</Line>
+ <Line>неотъемлемый элеватор объезд/неприхотливый/хозяйственный редкий</Line>
+ <Line>хороший байт/сек яркий аграрный экскаватор эрмитаж /\\/\э\/\/э</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Повторяющийся текст</NewCharacters>
+ <Line>батя батя батя батя батя батя батя батя батя батя батя батя</Line>
+ <Line>бита бита бита бита бита бита бита бита бита бита бита бита</Line>
+ <Line>буза буза буза буза буза буза буза буза буза буза буза буза</Line>
+ <Line>фуга фуга фуга фуга фуга фуга фуга фуга фуга фуга фуга фуга</Line>
+ <Line>вилы вилы вилы вилы вилы вилы вилы вилы вилы вилы вилы вилы</Line>
+ <Line>вино вино вино вино вино вино вино вино вино вино вино вино</Line>
+ <Line>воды воды воды воды воды воды воды воды воды воды воды воды</Line>
+ <Line>ноды ноды ноды ноды ноды ноды ноды ноды ноды ноды ноды ноды</Line>
+ <Line>шоры шоры шоры шоры шоры шоры шоры шоры шоры шоры шоры шоры</Line>
+ <Line>жало жало жало жало жало жало жало жало жало жало жало жало</Line>
+ <Line>жато жато жато жато жато жато жато жато жато жато жато жато</Line>
+ <Line>заря заря заря заря заря заря заря заря заря заря заря заря</Line>
+ <Line>батя бита буза фуга вилы вино воды ноды шоры жало жато заря</Line>
+ <Line>батя бита буза фуга вилы вино воды ноды шоры жало жато заря</Line>
+ <Line>батя бита буза фуга вилы вино воды ноды шоры жало жато заря</Line>
+ <Line>батя бита буза фуга вилы вино воды ноды шоры жало жато заря</Line>
+ <Line>батя бита буза фуга вилы вино воды ноды шоры жало жато заря</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Повторяющийся текст</NewCharacters>
+ <Line>зола зола зола зола зола зола зола зола зола зола зола зола</Line>
+ <Line>зина зина зина зина зина зина зина зина зина зина зина зина</Line>
+ <Line>коды коды коды коды коды коды коды коды коды коды коды коды</Line>
+ <Line>вино вино вино вино вино вино вино вино вино вино вино вино</Line>
+ <Line>соты соты соты соты соты соты соты соты соты соты соты соты</Line>
+ <Line>шины шины шины шины шины шины шины шины шины шины шины шины</Line>
+ <Line>доля доля доля доля доля доля доля доля доля доля доля доля</Line>
+ <Line>воля воля воля воля воля воля воля воля воля воля воля воля</Line>
+ <Line>коля коля коля коля коля коля коля коля коля коля коля коля</Line>
+ <Line>фома фома фома фома фома фома фома фома фома фома фома фома</Line>
+ <Line>луга луга луга луга луга луга луга луга луга луга луга луга</Line>
+ <Line>лужа лужа лужа лужа лужа лужа лужа лужа лужа лужа лужа лужа</Line>
+ <Line>зола зина коды вино соты шины коля воля коля фома луга лужа</Line>
+ <Line>зола зина коды вино соты шины коля воля коля фома луга лужа</Line>
+ <Line>зола зина коды вино соты шины коля воля коля фома луга лужа</Line>
+ <Line>зола зина коды вино соты шины коля воля коля фома луга лужа</Line>
+ <Line>зола зина коды вино соты шины коля воля коля фома луга лужа</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Повторяющийся текст</NewCharacters>
+ <Line>дуст дуст дуст дуст дуст дуст дуст дуст дуст дуст дуст дуст</Line>
+ <Line>горе горе горе горе горе горе горе горе горе горе горе горе</Line>
+ <Line>вето вето вето вето вето вето вето вето вето вето вето вето</Line>
+ <Line>риск риск риск риск риск риск риск риск риск риск риск риск</Line>
+ <Line>флиц флиц флиц флиц флиц флиц флиц флиц флиц флиц флиц флиц</Line>
+ <Line>кожа кожа кожа кожа кожа кожа кожа кожа кожа кожа кожа кожа</Line>
+ <Line>плуг плуг плуг плуг плуг плуг плуг плуг плуг плуг плуг плуг</Line>
+ <Line>стук стук стук стук стук стук стук стук стук стук стук стук</Line>
+ <Line>мука мука мука мука мука мука мука мука мука мука мука мука</Line>
+ <Line>чижы чижы чижы чижы чижы чижы чижы чижы чижы чижы чижы чижы</Line>
+ <Line>быки быки быки быки быки быки быки быки быки быки быки быки</Line>
+ <Line>цеха цеха цеха цеха цеха цеха цеха цеха цеха цеха цеха цеха</Line>
+ <Line>дуст горе вето риск флиц кожа плуг стук мука чижы быки цеха</Line>
+ <Line>дуст горе вето риск флиц кожа плуг стук мука чижы быки цеха</Line>
+ <Line>дуст горе вето риск флиц кожа плуг стук мука чижы быки цеха</Line>
+ <Line>дуст горе вето риск флиц кожа плуг стук мука чижы быки цеха</Line>
+ <Line>дуст горе вето риск флиц кожа плуг стук мука чижы быки цеха</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Повторяющийся текст</NewCharacters>
+ <Line>вода вода вода вода вода вода вода вода вода вода вода вода</Line>
+ <Line>горе горе горе горе горе горе горе горе горе горе горе горе</Line>
+ <Line>сухо сухо сухо сухо сухо сухо сухо сухо сухо сухо сухо сухо</Line>
+ <Line>сало сало сало сало сало сало сало сало сало сало сало сало</Line>
+ <Line>стон стон стон стон стон стон стон стон стон стон стон стон</Line>
+ <Line>сито сито сито сито сито сито сито сито сито сито сито сито</Line>
+ <Line>мячи мячи мячи мячи мячи мячи мячи мячи мячи мячи мячи мячи</Line>
+ <Line>пора пора пора пора пора пора пора пора пора пора пора пора</Line>
+ <Line>печь печь печь печь печь печь печь печь печь печь печь печь</Line>
+ <Line>пища пища пища пища пища пища пища пища пища пища пища пища</Line>
+ <Line>раки раки раки раки раки раки раки раки раки раки раки раки</Line>
+ <Line>река река река река река река река река река река река река</Line>
+ <Line>вода горе сухо сало стон сито мячи пора печь пища раки река</Line>
+ <Line>вода горе сухо сало стон сито мячи пора печь пища раки река</Line>
+ <Line>вода горе сухо сало стон сито мячи пора печь пища раки река</Line>
+ <Line>вода горе сухо сало стон сито мячи пора печь пища раки река</Line>
+ <Line>вода горе сухо сало стон сито мячи пора печь пища раки река</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Четвертый ряд клавиатуры</NewCharacters>
+ <Line>ё78878 87887 78778 78787 77878 78788 87877 78787 88787 77878</Line>
+ <Line>ёбатя7 бита8 буза7 фуга8 вилы7 вино8 воды7 ноды8 шоры7 жало8</Line>
+ <Line>ё56656 65665 56556 66565 55656 56565 65655 56565 66565 55656</Line>
+ <Line>ёжато5 заря6 зола8 зина7 коды5 вино8 соты5 шины7 коля8 воля6</Line>
+ <Line>ё90090 09009 90990 00909 99090 90909 09099 90909 00909 99090</Line>
+ <Line>ёколя9 фома0 плуг7 фома0 дуст6 горе4 вето5 риск9 флиц8 кожа0</Line>
+ <Line>ё34434 43443 34334 44343 33434 34344 43443 44343 44343 33434</Line>
+ <Line>ёплуг3 стук4 мука3 чижы0 быки7 цеха4 вода2 горе4 сухо6 сало4</Line>
+ <Line>ё--=-= -=-== =-==- -==-= =-==- -=--= ==-=- -=-=- ==-=- --=-=</Line>
+ <Line>ёстон= сито- мячи3 пора- печь4 пища= руки5 река= рога7 роса=</Line>
+ <Line>ё12212 21221 12112 22121 12212 12121 21211 12121 22121 11212</Line>
+ <Line>ёрота1 роща1 руда=руки2 рыба- сады3 село1 сено6 сила2 сито1</Line>
+ <Line>ётемя4 фары3вина3цепи0--= часы7 5чаша5 3 5чудо5 3 4шуба42-10</Line>
+ <Line>ё``\`\ `\`\\ \`\`` ``\ \`\\` `\``\ \\`\` `\`\` \\`\` ``\`\</Line>
+ <Line>ё8+4=12\ 8+3=11 9-3=12 6+4=10 3-2=5 9-7=16 8-6=14\ 9-8=17 6-2=8</Line>
+ <Line>ё43-1=10\ 4-7=11 6=9=15 2-8=10 3-4=7\ 8-5=13 9*3=12 4-6=10 5-4=9</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Верхний регистр клавиатуры</NewCharacters>
+ <Line>ВАЗТК ЖТЫНЩ ЦЬСШЗЫ ЕВФМЖД ХОПУЧ УРИСПЩ ЗНУЙТБ ЛКМГЬЫ РПЛРАЫ</Line>
+ <Line>ЖНИКЧ НЧУМЕС ЗБШТНИ ЦЫСНГШ ЛТИПЕМ ВКЕИТШ ЙЦИМ ХЗЬРИ ПРНЕК ПРОЛ</Line>
+ <Line>ПНУЧРЩ ДЛННАТ ОКСЛЖТ ЦЧИШТЕВМ ОАЕВТЬИ ЖШТАМЧУ ЛНИМЧСУИ ОЕЕТ</Line>
+ <Line>САМОЛЕТ ОСТРОВИТЯНИН СЛЮДА ХЛЯБЬ ОДНАЖДЫ ПРОИЗОШЛО КРУШЕНИЕ НАДЕЖД</Line>
+ <Line>ОРБИТАЛЬНАЯ СТАНЦИЯ ПОТЕРЯЛА ВЫСОТУ ЖЕМЧУГ ВСТРЕЧАЕТСЯ РЕДКО</Line>
+ <Line>ЖМУРКИ СТОЛБИК ФРУСТРАЦИЯ ОСТОЛБЕНЕТЬ АББРЕВИАТУРА КОРРЕСПОНДЕНТ</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Четвертый ряд верхний регистр клавиатуры</NewCharacters>
+ <Line>! !&quot;! &quot; ! !&quot; &quot; !!&quot; !&quot; ! &quot;! &quot;! &quot; !&quot;! &quot; ! &quot;!&quot; ! &quot;!&quot; &quot;&quot; &quot; &quot;! !&quot;&quot;</Line>
+ <Line>ё &quot;вода ! вода &quot;! вода &quot; вода !&quot; вода ! вода &quot;&quot;! вода &quot; вода !!</Line>
+ <Line>ё ; #;# # ;#; #; # ;# #;; ;# ;#; # ; ; ##; # ;# ; # ;;# ; #;;</Line>
+ <Line>ё заря ; заря #; заря ##; заря # заря ;# заря ; заря ;# заря ;</Line>
+ <Line>ё :,: ,, : ,:, , :, : ,:: ,: , :, , ::, : ,: , :,, : ,,: : ,:,</Line>
+ <Line>ё корь :&quot; корь &quot; корь &quot;:&quot; корь : корь :&quot; корь &quot;: корь &quot; корь :</Line>
+ <Line>ё . *. * .*. * *.. . *. ** .** . * .* * ..* .* . *. * *. .* **</Line>
+ <Line>ё стук . стук *. стук * стук .*. стук . стук **. стук * стук .</Line>
+ <Line>ё ( ) ))( )( ) () ) ( ))( ( )( ()( ) () ))( (() )( ( )() () ((</Line>
+ <Line>ё мука ( мука )( мука) мука ( мука )() мука ) мука () мука )(</Line>
+ <Line>ё _ + +_+ _ + _ _+_ _+ _ __+ +_+ _ ++ _+ + _ ++_ +_ + _+ + _+_</Line>
+ <Line>ё мина _ мина +_ мина _+_ мина +_ мина _+ мина + мина _ мина _+</Line>
+ <Line>ё шина (&quot; шина *# шина ) шина ;, ;шина #_ шина ): шина . шина ,</Line>
+ <Line>ё фишка ; фишка #( фишка ;: фишка * фишка &quot;_ фишка &quot; фишка ) фишка :.&quot;</Line>
+ <Line>ё коля *; коля )# коля ( коля .&quot; коля :, коля ._ коля ; коля &quot;</Line>
+ <Line>ё сода . сода &quot;# сода (_) сода ; сода , сода : сода ,_ сода .;</Line>
+ <Line>ё печь , печь .# печь * печь (; печь );* печь #_ печь . печь :#</Line>
+ <Line>ё тема * тема ;( тема *&quot;, тема : тема (_ тема # тема ) тема .;</Line>
+ <Line>ё толя : толя #, толя ,( толя ) толя ; толя ._ толя ,#* толя ,</Line>
+ <Line>-(!.+&quot;: )!(+&quot;* .!:+!_ ;!#+, )!*+&quot;. *!,+&quot;# (!;+&quot;&quot; )!;+&quot;# .!#+(</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/russian_long.ktouch.xml b/ktouch/training/russian_long.ktouch.xml
new file mode 100644
index 00000000..d3c1139a
--- /dev/null
+++ b/ktouch/training/russian_long.ktouch.xml
@@ -0,0 +1,535 @@
+<KTouchLecture>
+ <Title>Russian (auto-generated)</Title>
+ <Comment>KTouch training file generated Tue Oct 25 12:51:40 MSD 2005 by Miha Ulanov (mulanov@mail.ru)
+ </Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>ао</NewCharacters>
+ <Line>оао аа ао ооо о аоо а оаа ао аа оаа аоа о а аоа о оао оа оаа ааа</Line>
+ <Line>ао оа оаа ааоо ооо ааоо а а а оа о аоаоа ааоо а оаа о о аоа а оа</Line>
+ <Line>ооа оо оа ооа аоа а оаа ооа ао аоаоа а оаа а а аао аоо а о ао ао</Line>
+ <Line>а оао оа оа ао а оао оао оа аао ао ао а аао оао оа аоо оа аоаоа</Line>
+ <Line>аоо оао о ао а аа ааоо аао а о аао аоа а ао ааоо оа оа аоа ао ааоо</Line>
+ <Line>а а аа ао а ааа оаа а ооо оаа ааоо о а ааоо ао ао о ааа аоа оаа</Line>
+ <Line>оаа ааа оаа оа оао ооо ааа ао а оа а о ооа о а ао а ооо оа аоа ао</Line>
+ <Line>оаа оа аоа аоа а оао оаа а о о оао ааоо оо аоаоа ао о о о а аоо</Line>
+ <Line>а а оао ао а оа о оа ао а оо ооо ао о а ооо оа о ааа аоа а ооо</Line>
+ <Line>ао оаа ао оа а ао оаа аоа о ао аоа ао оа о аоаоа аа о ооо о о о</Line>
+ <Line>аоа оа о ооо о о оаа аа ао аоа оа ааа оаа оаа ооа оаа ааа ааа оа</Line>
+ <Line>о а оа ааоо оаа о ооо а аао оаа ааоо оаа оа оаа аоа а аао оа аоа</Line>
+ <Line>аоа оа ооо оа ааа ооо аа аао аоа аоо а оаа ао аао аао а ао о а аоа</Line>
+ <Line>о а аоаоа оа ао аоаоа аоо ао ао а оа ао о оа оа ооа оао ооо о</Line>
+ <Line>а аоаоа а о о аоа оа а ааоо ооа ооо о о оа аоа оа аао ааа аоаоа</Line>
+ <Line>аоо аоаоа о о оао аао аао ао оаа аао ааоо ооа о о оа оаа оа ооо</Line>
+ <Line>о ао оаа о аа ааоо аоаоа а ооа оа ааоо оаа оа а ао ааоо аоа оао</Line>
+ <Line>ооа ао аа оаа а оа аоа оаа о аоаоа аа а оаа ао оаа о аоаоа о а о</Line>
+ <Line>оа а оа оа аа о ааоо аа оаа оа оа ааа ааоо а ооа ааоо аоаоа о аоа</Line>
+ <Line>аоа ооа аа аао о ао аоа ао ооа оа ао ао о а а оа оо о оао оа ааа</Line>
+ <Line>ооа оаа оа ооо аа а ао а аоо ао ооо о ооо ао аа а о о ааа а оаа</Line>
+ <Line>аоаоа аоа оа о о аао ааа аоаоа аоаоа ооо ааа а оаа о аоаоа ао а ааоо</Line>
+ <Line>о оа аа оа аоаоа оаа ааа оаа а оао оа ооа о о оаа ааоо а о оаа</Line>
+ <Line>аоа оаа о ао ооа аоа ааа о оаа ооа ао ао ао оа аоа а аоаоа о оаа</Line>
+ <Line>ооо ао аао ооа аоа аао аоаоа оо ао о аоа ооо а аа а о оо оаа а оаа</Line>
+ <Line>оа оао аао а о ао а оа о оа а о о аоа а оа ао ааа а а оа а ао аоо</Line>
+ <Line>ооо оа ао оа о аоа оао о ааоо аоо оаа оао ао ооа оа ао ао а ао оа</Line>
+ <Line>ооа ааа ао ааоо ооо аоо а ао а ао оао а оо ааоо ао оаа о ао ао аоа</Line>
+ <Line>аао ао о о ааоо аоо ао аоаоа ао ао а ааоо ооо ааа аао аоа оаа оа</Line>
+ <Line>а ооо аоа аоаоа ооо оаа о оа аоаоа оо аао оа о а о оао аа ааоо</Line>
+ </Level>
+ <Level>
+ <NewCharacters>вл</NewCharacters>
+ <Line>ооллл в оавла лава ла вл овал лл вал вал лл в лала лава вл лл ооллл</Line>
+ <Line>ово вл оавла лава алло лвв во лава ллвоо вал овал в ла ооллл вл</Line>
+ <Line>в вл ал вол во лала лвв ово ллвоо авлв алло лоо вол ово ллвоо</Line>
+ <Line>вал ово овал алло лава лава авлв в ав лл вл ла лл ла ооллл вол вол</Line>
+ <Line>оавла ово алло ллвоо ооллл аал лов аал ово аал во ллвоо алло оавла</Line>
+ <Line>овал ла вл ооллл ооллл в аал ово ллвоо вал авлв вал ово лала овал</Line>
+ <Line>во аал алло авлв аал в овал вол авлв ово ав в ал авлв ав лвв ово</Line>
+ <Line>оавла ав вол лвв лвв авл олово лава лоо во лов вол аал ллвоо ово авл</Line>
+ <Line>ла лава ла ооллл олово алло в оавла в во лл алло лоо лоо авл вол</Line>
+ <Line>авл лоо алло овал олово в лоо ово овал алло ав вал лала вал ово</Line>
+ <Line>оавла лоо вл ав ла алло ла алло во ооллл во ла в ал вал ооллл оавла</Line>
+ <Line>алло ооллл олово в алло лоо олово алло ооллл авлв в во в лоо аал</Line>
+ <Line>в лала лава оавла аал вал лава во ав ооллл ла во ал лов в в авлв</Line>
+ <Line>алло вл лл овал ла авл авл лала алло ово в олово аал лов алло ово</Line>
+ <Line>авлв лвв в во ово лоо овал лава овал ла ал лвв лава в в в в олово</Line>
+ <Line>авлв ла ово лл в алло вол лл олово ла вал лл вол вал алло вал в вол</Line>
+ <Line>вл ооллл в алло ла ооллл в вал ллвоо олово лава алло вал в лов</Line>
+ <Line>аал ал вл лл ово ллвоо аал ллвоо в ав алло вл ооллл лава вал во</Line>
+ <Line>в вал лала во ла ооллл в олово лоо ово вл вал ав аал вол вл во</Line>
+ <Line>лл вал лов ллвоо оавла вал алло лала авлв лоо ла в лов вл лвв вал</Line>
+ <Line>ав лоо ла лвв аал ал лала ла ооллл олово олово вал ооллл авлв вол</Line>
+ <Line>ово овал в аал ллвоо ооллл вал ово лвв олово алло авлв авлв ово</Line>
+ <Line>вол лава в в во лава лвв вал ллвоо овал ла лава ово ла ла алло овал</Line>
+ <Line>авл овал авлв ла в лава авлв в лоо в алло вл алло вал ла ал ав лава</Line>
+ <Line>ал ла в ал олово авлв лов вал лала овал ал лава лов вол лала лала</Line>
+ <Line>ооллл вл вл ово лала лава алло ооллл оавла вал ла алло ла во ал в</Line>
+ <Line>ово ал овал лава вл аал вал аал ла ллвоо вал во в ооллл алло вол</Line>
+ <Line>аал ово ооллл авл алло вол лл вол в олово ла ооллл вол в оавла лала</Line>
+ <Line>овал ал лоо вол во вал оавла в лов овал оавла ллвоо лвв ла ово вл</Line>
+ <Line>ллвоо ав лала лава авлв ал вол лала ла лов вал ла ла авл алло во аал</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ыд</NewCharacters>
+ <Line>водовод ы ад дылда адов дол ввыыв лад вдова ад вывод ы вылов лдо овод</Line>
+ <Line>да ад да вывод вода дылда выо дао вывод довод довод лад ад д ввыыв</Line>
+ <Line>ввыыв адов д аадв ад ы вы аадв да выо ввыыв даа выо ад даа довод ад</Line>
+ <Line>ввод водовод вывод ода ад аадв довод овод ы водовод вода довод ыо</Line>
+ <Line>вода овод лдо лдо ад вода вдова авд дао вы вывод ыо вывод да довод</Line>
+ <Line>до дол авд д авд вдова аадв ад дол дол дол ыо ыо вы до вы довод</Line>
+ <Line>ыо лад водовод да овод ввыыв вы авд д ад д довод до д водовод авд</Line>
+ <Line>вылов да даа ыо ыо вода ввыыв ода вдова даа два ввод ода ввод водовод</Line>
+ <Line>до ыо дылда дылда ввыыв два два дол лдо дол д выо вдова лад вдова</Line>
+ <Line>аадв дылда ад ввыыв дао д ввыыв лад до ыо аадв выо ад даа до лад</Line>
+ <Line>довод довод аадв аадв ы водовод ыо вода ввыыв д авд водовод ввыыв</Line>
+ <Line>вдова дол водовод дол авд адов даа водовод дол ыо ввод дол адов адов</Line>
+ <Line>дол ода до вы ввод выо ад овод даа выо да довод адов вдова ода ыо</Line>
+ <Line>до ыо авд два дол ад водовод лдо дылда да овод вдова аадв вода</Line>
+ <Line>адов водовод ода вода дао ввод два ад адов ад ы ыо довод до довод</Line>
+ <Line>авд вода вдова д ввыыв ввод даа ввыыв довод овод водовод адов ад</Line>
+ <Line>ад вода ыо аадв вода адов д дао ыо аадв ы дылда вывод дылда дылда</Line>
+ <Line>два два два вывод дао овод водовод выо вы вылов ввод ыо овод д адов</Line>
+ <Line>довод дол вывод овод овод дол вы аадв аадв да вода вода до овод ыо</Line>
+ <Line>ввод аадв дао до дылда ыо дао дао ввыыв ыо довод вывод да ввод дылда</Line>
+ <Line>д выо да вдова вывод да да вы д вывод до вдова овод ад выо адов</Line>
+ <Line>аадв дылда два вывод вы выо вдова лад овод дылда выо да ад вылов</Line>
+ <Line>до ад довод два ад дол лдо до водовод ввыыв вывод да да ыо вылов</Line>
+ <Line>вода ода вы да ы ввыыв ыо дол ода лад дао вы ыо ввод адов даа ы адов</Line>
+ <Line>даа ода дол авд ы даа два да ад вдова дол даа вывод ввыыв овод ад</Line>
+ <Line>дол вы аадв ад дао овод аадв водовод авд дылда д д до выо дао вывод</Line>
+ <Line>авд д ы вывод до ввод вылов дао вы даа овод лдо до овод два дол</Line>
+ <Line>вывод вывод ы вывод довод вдова ыо ввыыв вдова ыо даа вылов д дол</Line>
+ <Line>ыо вода два ыо вы вылов овод ввод довод довод выо лдо вода да вдова</Line>
+ <Line>лад вывод водовод вылов ы ыо водовод вывод два водовод до аадв авд</Line>
+ </Level>
+ <Level>
+ <NewCharacters>фж</NewCharacters>
+ <Line>фа ложа лыжа аж жало аж лф жвала аф фал лаж аф фал фва ж аф аж</Line>
+ <Line>вфо вожжа дож вфо жы жвала ж лф фва фф фды аж фва жажда двж дож</Line>
+ <Line>аф фал аж фф ж жвала жы ыож лаж аж ж двж вфо фа вж фа аж лафа лафа</Line>
+ <Line>фва двж лф аж ыож аф жало лафа вж жвала дож аж фа вж аж аф ж жажда</Line>
+ <Line>лф лф вожжа фалда фалда лф ыож вожжа дож фа двж жажда дож фалда</Line>
+ <Line>лф жы фва ыож лыжа вж лф двж лафа жало лаж аж лаж жы жы лыжа лф</Line>
+ <Line>лаж фф ложа фа ложа лф лф важ вж ж ыож лыжа лафа вфо фва аж фа лф</Line>
+ <Line>лф фды двж важ лыжа лф вж важ ж фф лаж аж лф дож фал вожжа ыож</Line>
+ <Line>жажда фва дож дож дважды фф лыжа дож ыож фды аж аф аж лф аж фалда</Line>
+ <Line>аф жажда жажда фал фал аж ыож жало важ жы вфо лафа жажда жы вожжа</Line>
+ <Line>ж аф лафа лаж лф жвала фф дважды лф фал лаж лф дважды вожжа ыож</Line>
+ <Line>ж фва ж важ жажда дож лф лф вж жало дважды жы важ вфо аф вожжа</Line>
+ <Line>двж жвала фф вж ж фалда лф жвала ыож лыжа лф ложа жажда фа фал дож</Line>
+ <Line>жало лф жвала лаж фва дож фал лаж фф аж фды жажда ж ыож дважды лаж</Line>
+ <Line>фа фва дож лаж жало лф дважды аф аж фалда аж двж лф дож важ аж</Line>
+ <Line>вж жвала фф жвала фф лф дож лф вожжа ж дож важ жвала ложа фал ж</Line>
+ <Line>лыжа ложа дважды фва лаж фва жало вфо ыож лаж лф важ аж аж лыжа лф</Line>
+ <Line>ложа дважды вфо фалда жвала лафа аж аф фал лыжа аж аж вфо ж ж важ</Line>
+ <Line>ложа лафа лф фва жы жы лыжа ложа ложа аж вожжа аж ж двж ложа лф лф</Line>
+ <Line>жажда фва вфо лафа двж фды ложа фа лф лаж фал фф лф вожжа ложа дож</Line>
+ <Line>ж фды жажда фва лф дож фа вожжа фва двж дважды вж аж жвала лаж</Line>
+ <Line>фва лафа аж аж фва лф лыжа лф жы ж жажда фалда фа жажда вожжа фалда</Line>
+ <Line>ж дважды лф аж дважды фа фф жвала фф дож двж лф дважды фалда лф</Line>
+ <Line>ж аф вфо дож жы лафа жажда жвала лф жвала лф вфо жвала аж важ</Line>
+ <Line>жало жало фва лафа вожжа лаж ж ыож жало аж ыож лаж лыжа ж жы важ</Line>
+ <Line>фа жало дож лафа фал лф двж двж ложа фва дож фды двж фва дож лаж</Line>
+ <Line>лыжа лф вожжа лафа жы фды фа ложа вфо жы лыжа фа фды фалда дважды</Line>
+ <Line>лаж лафа важ лф лф аж лыжа аф лф ж аф лаж жало ж жвала фды дважды</Line>
+ <Line>ж ложа фды двж ыож аф важ фф лф жажда лф лф жало лф вж ыож дож</Line>
+ <Line>лаж фал важ вж лф фф фды вфо аф фал вожжа ж лафа двж вж аж жвала</Line>
+ </Level>
+ <Level>
+ <NewCharacters>пр</NewCharacters>
+ <Line>лавр пора порода рвов параф доллар подо фавор рыло рвов папа дыра</Line>
+ <Line>раджа аврора выдра форвард одр рад драп жара по лор паф дров пора</Line>
+ <Line>подвал пора опал паф ржа доллар вар опала лавр пал опора рад дрова</Line>
+ <Line>вор дыра под под жара подо правда поп род правда плов под ров драп</Line>
+ <Line>опала по рад по пола попа дрофа арфа ар па опора аврал раджа под оправа</Line>
+ <Line>аврора поло жара водопад одр фара падло подвод дров провод рады рыло</Line>
+ <Line>пола прапор повар правда пропажа падло право дар порыв рвы оправа</Line>
+ <Line>раж пыл вражда рвы опал рожа аврал дрожа дрофа падло одр одр водород</Line>
+ <Line>паропровод аврора опала флора паф форвард подпор попа рожа пава паф под</Line>
+ <Line>двор пыж ржа под повод лавра вправо пал паж подрыв пора вправо род</Line>
+ <Line>поп рвы паропровод вор рвы род рва жопа оправа впопад жопа лор прорыв</Line>
+ <Line>плодовод дрова паропровод вор ров лавра выдра плод правда повар лорд</Line>
+ <Line>опа драп по лавра лапа опала дрова пропажа пыж фара жара паж папа</Line>
+ <Line>падло флора подо пал опара лорд подрыв дрова орава порода выдра пола</Line>
+ <Line>поло фавор раджа рвы параф опал повар правда опара жара дров выпад</Line>
+ <Line>подол раж про рада орава раж вправо водопад прорыв па подвал водород</Line>
+ <Line>вор пава рад ров порыв жара дрова пал паф подпол повод орава рвы</Line>
+ <Line>лавр пыж подвод повод провал пора форвард папа вор выпад пал пропажа</Line>
+ <Line>выдра паф аврал подол двор выдра лорд подвал пожар ров прапор опал</Line>
+ <Line>плод лавра дрова прапор пава дар жопа жопа паропровод паж водород</Line>
+ <Line>прорва вор рвов жопа паж провал пава выдра фара опа оп попа орда флора</Line>
+ <Line>двор двор паропровод прорва лавра прорыв пора рада плодовод дрова</Line>
+ <Line>про двор радар рва опал пыж водород прорыв арфа рвы провал дар арфа</Line>
+ <Line>варвар рад пар пара поп опа пожар жопа пропажа подол дрожа под опал</Line>
+ <Line>пола впопад опала водопровод доллар пыл подрыв паропровод лор провод</Line>
+ <Line>подрыв род поп дрофа плов дрова дыра опара повод подол продажа право</Line>
+ <Line>по пропажа пара подпол рыло лорд вар флора пожар форвард опа фавор</Line>
+ <Line>доллар форвард плодовод опара провод аврора жопа лорд парад порыв поп</Line>
+ <Line>жара подпор оправа пара порыв подол плов право повар дыра пара подпор</Line>
+ <Line>лавра аврора порода па продажа раж одр право подпор продажа лор арап</Line>
+ </Level>
+ <Level>
+ <NewCharacters>э</NewCharacters>
+ <Line>апэ эпод дэр ээ аэр эра рдоэ эпод рдоэ эд ээ аэр эфа жвэо алоэ эд</Line>
+ <Line>пэр пжфэ эж фэы эд эфа э пжфэ эа ыыэр дэр фэы ээ эыв эыв жэд эыв</Line>
+ <Line>э жвэо э рэ ыыэр даэ фэы пжфэ ээ эыв даэ ыыэр аэр даэ алоэ эпод</Line>
+ <Line>эж эж ээ эа эд э апэ пэр эд пэр пэр эра пэ фэы даэ пэ эра эфа алоэ</Line>
+ <Line>эфа э рэ жэд алоэ пжфэ ээ пэ эва эфо эа ыыэр эфо пэр эфо алоэ даэ</Line>
+ <Line>фэы эфа ыыэр дэр апэ эж дэр жвэо эж алоэ э пэр эд рэ рдоэ эыв ээ</Line>
+ <Line>э жэд пжфэ эфо фэы рдоэ пэр жвэо рэ эва эыв эа жэд эпод алоэ жэд</Line>
+ <Line>эва алоэ эыв рдоэ алоэ рдоэ пэр алоэ алоэ апэ аэр пэ апэ пэ эж э</Line>
+ <Line>эд апэ эра оэа алоэ рэ ээ алоэ эд фэы ыыэр ээ ыыэр аэр фэы эж эфо</Line>
+ <Line>рэ рэ э алоэ эфо эпод алоэ эфа пэ ээ эва аэр алоэ эфа пэ эд эыв</Line>
+ <Line>жвэо э аэр э фэы эыв эва эра пэ пэ пжфэ дэр оэа рэ апэ эра эпод оэа</Line>
+ <Line>ыыэр алоэ эфа даэ ээ эра пэр эд пэ пжфэ эыв эфо эфо рэ эыв эж дэр</Line>
+ <Line>рдоэ эпод алоэ рэ жэд эпод эд эфо эфо жэд аэр эд апэ алоэ эфо аэр</Line>
+ <Line>эва жэд жвэо фэы рэ рдоэ эфа рэ ыыэр алоэ рэ рдоэ фэы алоэ рдоэ</Line>
+ <Line>пэр даэ жэд эд рдоэ эж алоэ алоэ эфа эд эра эпод аэр ээ ээ апэ эж</Line>
+ <Line>ээ ээ эа рэ апэ алоэ рэ аэр жэд эж рэ э ыыэр фэы эд эва эпод эра</Line>
+ <Line>жэд алоэ ыыэр даэ алоэ рдоэ даэ алоэ оэа фэы пжфэ эфа эд ээ рэ жвэо</Line>
+ <Line>эпод эфо э эра э эфа ээ алоэ эфо пэр ээ ээ эа эд эд жвэо рэ эыв эж</Line>
+ <Line>алоэ алоэ эа эпод эж эфо рдоэ ыыэр фэы апэ эа эд эфо дэр эфо алоэ</Line>
+ <Line>жвэо ыыэр эфо дэр эра пжфэ пэр эпод эпод эд фэы э эа рэ э эж эва</Line>
+ <Line>эд эд пэ ээ эфа эд эж эж дэр эыв эфа апэ э рдоэ эфо рдоэ фэы дэр</Line>
+ <Line>эфа рэ эва эж жвэо эд оэа ээ эд пэр эпод жвэо аэр эра э ээ эж дэр</Line>
+ <Line>эж рэ апэ даэ пэ рэ рдоэ эж дэр эыв ээ апэ эва дэр пэ эпод эд ыыэр</Line>
+ <Line>ээ ээ жвэо пэ алоэ эфо ээ алоэ фэы рдоэ аэр эпод рдоэ эра пэ фэы</Line>
+ <Line>эд пэ э ээ эра эфо рэ апэ эпод эыв жэд жвэо пэр дэр ыыэр рдоэ даэ</Line>
+ <Line>э э дэр жэд эд алоэ эа фэы апэ эыв эпод эфа рэ эра апэ рэ эд рэ</Line>
+ <Line>эд алоэ жвэо рдоэ ыыэр эж пэ э апэ дэр эыв эд эпод алоэ пэ алоэ</Line>
+ <Line>алоэ дэр апэ рдоэ жэд алоэ фэы дэр эыв ыыэр эа э э ээ жэд алоэ эра</Line>
+ <Line>пжфэ алоэ апэ дэр жвэо рэ э эыв пэ рэ рдоэ эфа эж алоэ рдоэ эж эа</Line>
+ <Line>оэа рэ даэ эфо пэ эд жэд даэ ээ оэа фэы жэд пжфэ эа пэ апэ эа рэ</Line>
+ </Level>
+ <Level>
+ <NewCharacters>кг</NewCharacters>
+ <Line>какао год эколог драга главк полгорода ка враг галлов аварка воровка</Line>
+ <Line>арапка кадр аграф око плавка подлавок покража воровка выплавок гофр</Line>
+ <Line>копка лак акколада капо корж арак коралл прыг оголовок подкоп арапка</Line>
+ <Line>выжгла крага фаг копра фок подожгла рогожка копалка кво ограда прожарка</Line>
+ <Line>рожок выжгла коп рог давка выродок оргвыводов парковка голодовка крага</Line>
+ <Line>рококо пролог огарок ограда оговорка град арка паводок подголовок кво</Line>
+ <Line>арык колпак подпорка колокол вокал гав колода ка жгла град выплавок</Line>
+ <Line>арапка оглодок логово ко гало около гага долга ка эклога давка доклад</Line>
+ <Line>грыжа дрок кара прокладка флажок оковы драга копра карго колокол дрыг</Line>
+ <Line>дорога клоака глажка паводок аркада гага оградка догадка оргвыводы</Line>
+ <Line>кожа прыгалка гопак голодовка рок копка годок окопка вокал выпорок</Line>
+ <Line>каковы колода рык воровка флаг ко подковка голова рокфор флаг гала</Line>
+ <Line>влага горка кода впрок прок к гав аполог городок подлодка покров клоака</Line>
+ <Line>догадка каппа каковы глажка опорок профорг голодовка корка оговор кадр</Line>
+ <Line>ожгла голод кров капор оргвыводы договор лог графа оглы кража арапка</Line>
+ <Line>крага подводка прожарка долог рогожа дырокол дог кво пожог коала авокадо</Line>
+ <Line>логово кофр оковка кого карга горка глава акр корд гагара аэролог рококо</Line>
+ <Line>доклад глагол договор поволока логово оковы графолог опорок коп варка</Line>
+ <Line>проволока рогожка говорок вкладка капор логограф аэрограф головка карп</Line>
+ <Line>акр паковка дырка гагарка давка выправка выводок арак подголовок</Line>
+ <Line>лапка проводка подправка клык рок влага выкопка горка ракорд гало</Line>
+ <Line>агар волок кавардак догадка долог клака порог эк палка догадка капрал</Line>
+ <Line>колодка долго попка доводка оправка правка каково выводок коллаж полгорода</Line>
+ <Line>капор голгофа покров корж корвалол владыка около колпак акр кара рык</Line>
+ <Line>порог глажка голодовка подлог волк аккорд выкопка прожгла прыг аквадаг</Line>
+ <Line>пожгла кол поправка гало галка ого галлов каков лодка профорг рог копров</Line>
+ <Line>глагол жарок ложок подлавок выводок оковалок кагор волга выправка кора</Line>
+ <Line>полог галлы кора полка подкова поклажа арак жарок коала прыгалка ковров</Line>
+ <Line>прогал кого погодка ага город порог варка вклад коровка галка дорожка</Line>
+ <Line>подголовок подправка клоп прок флажок лыко подложка арапка галоп лапка</Line>
+ </Level>
+ <Level>
+ <NewCharacters>уш</NewCharacters>
+ <Line>плаву шкура лопушок глупышка урду рупор крупа двушка крупка дружок</Line>
+ <Line>кровушка пуд папуша кадушка окошко куполок шпора грудка фарш прогулка</Line>
+ <Line>полшара околыш кукловод полугруппа полугода куда прогул жгу полушалок</Line>
+ <Line>журфак выжру полуда удод пуп уговор фуфло голыш выжру ржу кур удавка</Line>
+ <Line>грудка гуд крошка окошко шоу ужо жгу кашпо удав удав округ фарш швырок</Line>
+ <Line>уф волокуша паук грудка оршад плуг авгур голышка уролог упадок</Line>
+ <Line>пожгу подгруппа выпру выжру урок уварка выпаду пуговка колыша подопру</Line>
+ <Line>упада шаровары дорогуша укладка упру вдруг папуша кураж кружок фу</Line>
+ <Line>удав дуло кулуаров рукав ловушка швырок рупор голыш плаву фуга уролог</Line>
+ <Line>кулуары лужа пурпур полукруг выжгу покуда подруга кашпо шов лук пушок</Line>
+ <Line>кружка аура урду упаду куровод оршад дуршлаг кукушка углу аул шкала</Line>
+ <Line>лапша уварка крыша урод аул купол уварка вдруг горлышко гуд плужок</Line>
+ <Line>дружок угар шоколад выплыву правша глупыш ушко лопушок агу профгруппа</Line>
+ <Line>купаж полушка пугало кружок калоша выжгу полшага шора радужка шоколад</Line>
+ <Line>караулка пружок жук шаг укладка шоколад купол пружок шва лапша фуга шурпа</Line>
+ <Line>лошадушка ловушка кур крыша фура гложу подожгу полушар шкварка выгул фу</Line>
+ <Line>лук выжру одышка жук пожгу покрышка долгуша урду куколка полукруг</Line>
+ <Line>лук калуга шкварка квакуша шарф кулак кукловод крыша дуло полушалок</Line>
+ <Line>прожгу шкода подгрудок луговод авуары купаж руда проулок шпора у ладоша</Line>
+ <Line>крупка уф выволоку дорогуша гладыш шкаф шлаг уклад управа упаковка</Line>
+ <Line>колыша кугуар вышка руда гладыш подружка плаву дуда пружок укол кошка</Line>
+ <Line>выпаду крылышко крупка шов урок шарада рулада вогул радуга покупка</Line>
+ <Line>попру шалаш рука шурпа шпажка подошва укол дура калоша покупка удар</Line>
+ <Line>швы полушар углы лук шок школа шуга ковш дуло шоколадка гул рука</Line>
+ <Line>кожура групповод шпажка подгруппа вырву угол гугу уварка углов дорогуша</Line>
+ <Line>шарж апаш фураж уварка упаковка грушовка шлаг вошка пудра пул шарж</Line>
+ <Line>вышла урок паша шарж углу полкруга кувалда укупорка купаж порука полушка</Line>
+ <Line>выплыву кушак плуг радужка ожгу гложу полуовал выкуп вурдалак форшлаг</Line>
+ <Line>вдруг паша шкура покрышка пул полушар шкала проулок вогул уродка гладыш</Line>
+ <Line>душа ладоша фура гложу параша ужо прудок удав рукав ржу урод уловка</Line>
+ </Level>
+ <Level>
+ <NewCharacters>цщ</NewCharacters>
+ <Line>фарцовка прыщ цацка дворцов укрощу укрощу ропща площадка палаццо ларцов</Line>
+ <Line>царап цаца роща цуг цыпка гуща цок цуг поглощу укрощу глупцов гуцулка</Line>
+ <Line>овца дворцов кварц ловцов палаццо цыц пуща плащ фарцовка роща цаца</Line>
+ <Line>цаца укрощу огурцов цапфа цыпка цап плац купцов вдовцов вдовцов фарцовка</Line>
+ <Line>гуцулка цыц глупцов гуща кварц цаца роща цап пощада цацка цыпка кацап</Line>
+ <Line>цуг ропщу плащ цаца кварц палаццо роща ловцов вдовцов ропща пуща</Line>
+ <Line>цап поглощу фарцовка вдовцов цапфа гуща ропща ощущу пощада рыща</Line>
+ <Line>палаццо ропщу продавцов вдовцов огурцов куща вдовцов цап плащ плащ щуп</Line>
+ <Line>цаца пуща воплощу цыц пуща праща огурцов царап цаца роща огурцов</Line>
+ <Line>продавцов овощ цап воплощу пуща цапфа пощада плащ пращур цок палаццо рыща</Line>
+ <Line>воплощу овца ловцов продавцов продавцов укрощу щуп рцы щуп огурцов праща</Line>
+ <Line>гуща овощ купцов ловцов цыц куща ларцов цыц цок куща прыщ плац цацка</Line>
+ <Line>цаца огурцов царап пуща рцы праща гуцулка щуп цок щука цацка роща</Line>
+ <Line>цапфа ропщу цап кварц фарцовка кварц кварц пуща цаца овощ плац гуща</Line>
+ <Line>ловцов укрощу пловцов цуг глупцов ропщу кацап ропщу овощ роща дворцов</Line>
+ <Line>дворцов вдовцов укрощу щука продавцов ощущу ощущу цапфа цап глупцов</Line>
+ <Line>цацка цыц пощада ропщу воплощу куща кацап пращур цыпка продавцов воплощу</Line>
+ <Line>ропща ощущу воплощу укрощу цапфа щуп огурцов кварц укрощу вдовцов</Line>
+ <Line>щука глупцов плац цацка цапфа щука вдовцов дворцов продавцов ощущу</Line>
+ <Line>пращур рцы кацап цацка гуцулка палаццо пуща цуг цыц огурцов ропщу цап</Line>
+ <Line>щуп огурцов купцов овощ плащ купцов цап плащ цуг дворцов цыпка щука</Line>
+ <Line>щуп купцов глупцов пращур пощада цап щука рцы щуп палаццо прыщ цацка</Line>
+ <Line>вдовцов цок роща воплощу плащ глупцов продавцов цаца цыпка роща цап</Line>
+ <Line>укрощу овца цуг вдовцов пращур цапфа роща палаццо рыща цап щука цацка</Line>
+ <Line>поглощу цаца пращур глупцов цап рыща огурцов прыщ цок поглощу щука плац</Line>
+ <Line>щуп ловцов цуг цыц рыща цыпка пращур укрощу пуща цацка пощада цок</Line>
+ <Line>вдовцов укрощу огурцов царап цацка цок глупцов вдовцов цыпка цыпка воплощу</Line>
+ <Line>кварц вдовцов палаццо ловцов цуг щуп щука цап куща глупцов глупцов</Line>
+ <Line>прыщ овца цаца куща пловцов щуп щука цаца царап вдовцов купцов цуг</Line>
+ <Line>гуща цапфа гуща роща дворцов царап цуг палаццо пощада купцов царап</Line>
+ </Level>
+ <Level>
+ <NewCharacters>йз</NewCharacters>
+ <Line>роза подуй загадка закупка продуй поджарый уругвайка раз гроза далай</Line>
+ <Line>выдуй запорка полз гузка вдрызг выкройка подуй лупоглазый догрызу</Line>
+ <Line>аз подвозка жаровой караковый запашок уполз догрузка враз дойка</Line>
+ <Line>враз залповый впайка здоровый закупорка запорка ужовый заголовок</Line>
+ <Line>полый узор закройка воз задворок заржу дрозд лыковый правшой развалка</Line>
+ <Line>половой возок лайковый фуговый кругозор вожжой дворовый кайлы удалый</Line>
+ <Line>указка фуговый правовой полугодовалый гвоздок продуй поджарый полугодовой</Line>
+ <Line>зуав эоловый взвод выгрызу полковой зло зуйку проза дорогой задолго</Line>
+ <Line>заропщу зоолог разлука уругвайка гвоздок агаровый подвоз родовой лаковый</Line>
+ <Line>дуй алкалоз пошлый провозка кукуруза двукрылый задуй круглый паровоз</Line>
+ <Line>дозаправка розовый форзац форзац кайл аэровокзал айвовый попой завозка</Line>
+ <Line>зоопарк раковый кордовый парафраз выползок ополз далай зажужжу ползок</Line>
+ <Line>драйв кайл погрузо вожжой узкоглазый каковой далай разгрузка караковый</Line>
+ <Line>шоковый кузов парковый зло газ подполз зло зэк подзаголовок полувзвод</Line>
+ <Line>половой задолго дроздовый раджой зародыш попойка выйду городовой показ</Line>
+ <Line>впалый закройка заропщу зайка повозка заглушка горазд паршой долговой</Line>
+ <Line>прогорклый звуковой зуав возок поджарый разожгла копровой закройка лай</Line>
+ <Line>завозка запорка заропщу кордовый куцый злаковый кукурузовод узор лукавый</Line>
+ <Line>раздуй украдкой залп клаузула кавказка полый кругозор подлый вылаз</Line>
+ <Line>подуй паровоз вожжой лузга золушка зраза зарок загул упокой разгул</Line>
+ <Line>фуговый прогрызу допой разожгу долой взгорок закладка карповый айда</Line>
+ <Line>зол дозвуковой градовой уполз развалка джазовый кровавый грузовой</Line>
+ <Line>заглушка запорка гвоздок подовый золушка взвод лайка груз пращой вдрызг</Line>
+ <Line>лукавый взвод каждый доковый запруда ржавый драповый попугай разговор</Line>
+ <Line>фаза повозка запор узловой зав вылаз правшой удой запродажа корковый</Line>
+ <Line>фарфоровый акуловый агаровый загородка закупорка разгрызу выдуй вдрызг</Line>
+ <Line>поводковый карапуз аз узкогрудый округлый годовалый загорода опоковый золовка</Line>
+ <Line>вывозка аэровокзал раздуй карповый кройка вполз закоулок разгрузка попугай</Line>
+ <Line>зав шаговый зайцу пыжовый какой лавровый зайцы горазд гораздо зазор</Line>
+ <Line>шаговый грузовой увоз луговой зайцы узда дворцовый полувзвод каравай</Line>
+ </Level>
+ <Level>
+ <NewCharacters>хъ</NewCharacters>
+ <Line>поход дох хохол двух холл вахлак двухходовка пых проход хлороз воздуходувка</Line>
+ <Line>проруха худо экзарх уход шарлах швах хурал дохлый дух холщовый вахлак</Line>
+ <Line>холопка хохлушка охапка худо дох худой впопыхах худой духовой доха воздуходув</Line>
+ <Line>дыхало двух похвала роздыха холоп охапка хлыщ ахов пах хохлов походка</Line>
+ <Line>воздухопровод эпоха аховый пухлый воздуховод роздыха запах хлопок холодок</Line>
+ <Line>лох прохладца хоровой дохлый зажухлый холщовый ух пороховой хлыщ</Line>
+ <Line>охровый пых пухлый худощавый жух хлопковод пуховка хохлушка охапка дух</Line>
+ <Line>шорох двухгодовалый поход пых пахлава хлопушка пароход пропах дух</Line>
+ <Line>пороховой духовка ха двухголовый дохлый шарлах хвала дух двухходовка роздыха</Line>
+ <Line>хохла уха олух двухходовка жух заглох хохлу кроха хала волхв зажухлый</Line>
+ <Line>хлороз хапуга двухгодовалый жох храповой двуходка воздухопровод аллах</Line>
+ <Line>роздыху холопка кроха воздух пропах заглохлый порох похвала двуходка</Line>
+ <Line>рыхлый худощавый хорал кожух доход пах хук хау папаха хвощ хвощ дохлый</Line>
+ <Line>выдох пух пухлый ух вполуха выдох вход жухлый хохлушка доход доха</Line>
+ <Line>хулахуп хорал худо жох показуха жухлый хлопушка вход охапка похрущу</Line>
+ <Line>подпухлый плаха проход худо экзарх подпухлый проруха эх ух холопка хрущак</Line>
+ <Line>двухгодовалый дыхало захудалый кожух хлопушка храп хрущ хохол проход хруп</Line>
+ <Line>хлопок ход хорошо уход хазар запах холл кроха подвох ох худощавый худышка</Line>
+ <Line>паховый воздуходув охов воздуховод запах ходок лох казах худощавый дыхало</Line>
+ <Line>полудохлый выдох храповой горох вахлак гороховый лопух холодок хулахуп</Line>
+ <Line>хрущ горох двухголовый двухходовка голодуха хорошо плохой хорош холка</Line>
+ <Line>хулахуп дохлый хрущ ха храп хохолок охра уха ах хвала эпоха вход пах</Line>
+ <Line>опухлый пухлый хорда хлопок хлороз уху продух хохла хруп эпоха холщовый</Line>
+ <Line>роздыху уход халвовый хлопковый пух роздыху холуй паховый холуй храп</Line>
+ <Line>казах хлад аллах уху двухвалковый охапка ух казах двухходовка оглох</Line>
+ <Line>заход хадж хоровой эх ха халупа двухголовый пуховый охровый ах похвала</Line>
+ <Line>казах хохол худышка жух папаха швах походка шорох хоровод продух порох</Line>
+ <Line>духовка проруха холщовый пожух запах пахлава прохлада хлад пах показуха</Line>
+ <Line>выходка пароход хороша доход хоп разруха олух дох подход походка прохладца</Line>
+ <Line>хрущак хор хадж хлад прах волхв пуховый хау дыхало хук шах хохлы шорох</Line>
+ </Level>
+ <Level>
+ <NewCharacters>мь</NewCharacters>
+ <Line>алломорф кворум кромка мулла львом амплуа овамо морока помарка разом</Line>
+ <Line>дом молодой акрополь моль разойму дымка молох мул майка подмога</Line>
+ <Line>дымопровод главарь малага холодцом вдоволь мог гм муза галька пальма мозговой</Line>
+ <Line>вдоволь вождь райком мху дымовой мхом ломка подрамок гофмаршал огольцом</Line>
+ <Line>эльф мулла царь шампур гм дымок поэма займа плазма драма мажь заморозка</Line>
+ <Line>аэрозоль мы пыль морковь молоко удальцом шмыг зам малышок пума лукум</Line>
+ <Line>жмых малышом голышом замковый купцом махра двум гармошка замуж разморозка</Line>
+ <Line>удальцов формула млад камышовый хохлом пловцом зажму промазка мозглый</Line>
+ <Line>пыльца маг маховый алломорф ужом мажордом пахарь гоголь глазурь алькальд</Line>
+ <Line>льды глухарь маховой вопль ком эль долька подрамок ходуль махра замухрышка</Line>
+ <Line>умолку ловцом муха хоромы мудрый малышом комма промывка крахмал калмык</Line>
+ <Line>марка вальцовка полька морда комма жом прыщом моровой мок молва моховой</Line>
+ <Line>коль муж куль поэма дамка кладь дамка вразмах камора размазка аэродром</Line>
+ <Line>молва амальгама задаром мху вмажь дымоход макрофаг волдырь маразм</Line>
+ <Line>вразмах промажь мразь ольха кормовой пароль ромашка размахайка молоко</Line>
+ <Line>формовка возмущу главарь моховой шумовой гамак хвощом долька вожму пожму</Line>
+ <Line>проформа кавалькада омуль дурь молокозавод мху молоковоз лодырь корм</Line>
+ <Line>хахаль жму пыжом зам мажа замолк копь копь моховой хохма ламповый дойму</Line>
+ <Line>вуаль кому лампадка взмок голышом шарм взмок замок хрущом мальцов</Line>
+ <Line>альма ампулка грымза мороз мокрый швам дожму мол моровой выхухоль</Line>
+ <Line>маг домой помазок ромашка ольха молодь мухомор макака ухом крамола</Line>
+ <Line>рамка палашом ломка ламповый марш подмоклый махровый площадь муаровый</Line>
+ <Line>полдома выпь помол майка подгруздь крайком пампа волдырь мороз вуалька</Line>
+ <Line>эльф млад мазок мальва полдома фольговый мор ломка падаль храм камзол</Line>
+ <Line>дымоход ловцом куркуль помалу пыльца молока фуражом хворь гамак муравушка</Line>
+ <Line>пульпа май врозь шагом шмыг хром мху умолк гужом аэрозоль помолог аэродром</Line>
+ <Line>форум камфара гайдамак пулька огулом лампа пальмовый пажом мгла мухомор</Line>
+ <Line>займа малыш домоуправ жму пыль программа помпа овамо молодушка малый</Line>
+ <Line>крахмал задаром фальцовка лампадка мошка майорша главком камора мукомол</Line>
+ <Line>крамола комовой подгруздь взмах мажа проформа грамм майорша кромка муха</Line>
+ </Level>
+ <Level>
+ <NewCharacters>сб</NewCharacters>
+ <Line>особый кубовый скалолаз солгу блокада кубовый сухощавый бобра засохлый</Line>
+ <Line>сом убой вожмусь прослойка сбой сок сахар возвращусь рассылка запрусь</Line>
+ <Line>сушь голубцом врубовый самодур закваска капсула мухобойка зыбь смолоду</Line>
+ <Line>блажь роса бамбук сусаль служба пульс заскок плавбаза слава шагалось</Line>
+ <Line>обмолвка лабух словцо опорос рыба сопру параллакс окраска скаковой послов</Line>
+ <Line>вразброс мордобой срой улыбка коробок молокосос обожгу лассо брусковый</Line>
+ <Line>запас бокс бурозубка рапсовый вспух посыпь абхазка сладкоголосый рыбовод</Line>
+ <Line>возрос усыпь салол скворцов срок впрыск загс вызовусь скопцов плоскоголовый</Line>
+ <Line>сапог распорка смарагд скупка клуб думалось богомаз сосцов курсовой</Line>
+ <Line>разбраковка массовка крыса вполслуха зубровка сполз оброс обращу голубушка</Line>
+ <Line>буль скок вспух буржуа зуб забрало прабабка парус посадка бородка</Line>
+ <Line>самопал гульба болгарка обжора рыбхоз массовый добавка подсох барбос</Line>
+ <Line>всход посуда обогащу баллада загорбок прокос браковка возмущусь лбу</Line>
+ <Line>посадка фугаска улыбка поскольку самодур лабаз обкладка саркофаг раскладка</Line>
+ <Line>альбом просыпь башмак флокс водоспуск морось бурь скороход блоха губка</Line>
+ <Line>араб складка осыпь волопас бой сагайдак духоборка мольба сухарь сыр</Line>
+ <Line>облый вспышка сброд улыбка бобра умбра зуб забудь колосс подопрусь</Line>
+ <Line>дубрава сага барда смолк жлоб облава господ шубка сырь особа лосось</Line>
+ <Line>бурса пасха свадьба бардовый засов боксовый фас космы факсовый сквозь</Line>
+ <Line>раскопка пупс голубушка русло спор булавка бука борщовый рыбопромысловый</Line>
+ <Line>посла мыс кобыла полусумрак сбросовый башмак посошок заросль расспрос</Line>
+ <Line>баобаб засохлый сыск лось справка закуска рыбоход скольку буйволовый</Line>
+ <Line>эскулап крокус подсадок запаска кумыс просол бы барахолка бах косхалва</Line>
+ <Line>эскарп слада пасха колбаса абхазка бросок сам падубовый бульба свара</Line>
+ <Line>сосок послом загс подборка сгрызу бобылка обрывок рубка бука соловушка</Line>
+ <Line>сор жлоб обыск ромб рассылка блокада бобок буфф об клуб квас обмолвка</Line>
+ <Line>бульдог сурьма зарос брусок басма багров засов скала свозка багажом</Line>
+ <Line>басма бабушка босу борзый зулус бойку босу усушка скуловой соус кобыла</Line>
+ <Line>разожглась подсадок садковый коромысло псалмы складка боксовый спор скоморох</Line>
+ <Line>бульба скаку мусоровоз букварь подобру смазка сказ господа коллапс</Line>
+ </Level>
+ <Level>
+ <NewCharacters>чю</NewCharacters>
+ <Line>бычковый басмачом сворочу карачках враскачку прокачусь краюшка муравью</Line>
+ <Line>случка сумочка спою сочла собьюсь любовь палачом разуюсь зрачковый</Line>
+ <Line>блюдо кушачок зашьюсь бомболюк окручу уволочь подкачусь дошучусь шлюп</Line>
+ <Line>чохом рычаг слухачом озолочу дюраль рюха оплачу взбаламучусь алычою</Line>
+ <Line>парчой вышью качалка чаща покручу оболью чубарый чары вьюрковый чумовой</Line>
+ <Line>подкачусь союз гравюра дачка чад подкручу сыч югославка муравью получас</Line>
+ <Line>аллюр клюшка запыхчу клюковка сучка каракульча плюш юкка марочка брюшков</Line>
+ <Line>крючок карагач скопычусь закачу почасовой алыча поправочка арчою чужак</Line>
+ <Line>окачу прокачу кумачом чарочка помучаюсь озабочусь глюкоза плюгавый</Line>
+ <Line>выбьюсь прокачусь кавычка полудюймовый часовой полосочка покручусь люд</Line>
+ <Line>кумачом всю ворочусь кашлю уволочь пою вылью кашлю ключом развалюха</Line>
+ <Line>людской брюква сургучом кадочка обобью очажок юрк скобочка бювар выдача</Line>
+ <Line>галочка мчась охочусь чайком задача лачужка урча журча прокачу музычка</Line>
+ <Line>лавочка сучка скопычусь колюшка облокочу добыча чуждый плюгавый запою</Line>
+ <Line>юрфак машбюро горбач судачок чулок подхвачусь кольчуга парчовый горбачу</Line>
+ <Line>волью зюйд плачь сплочу выкачу окачу подчас сарычом вкачу загородочка</Line>
+ <Line>люлька чумазый хрю жвачка вкруговую чубарый взовью вышучу моча качуча</Line>
+ <Line>всюду чубарый получка ушью плюшка бочка рыбачка бомбочка каблучок</Line>
+ <Line>разовью обуюсь оболочка забочу хвачу пальмочка жвачка чурбак чушь рачок</Line>
+ <Line>озабочу буча сочлась подолью калмычка ворочусь музычка слюда воспою</Line>
+ <Line>харчо вволочь балычок сучка очковый кольчуга лавочка молча ворочусь</Line>
+ <Line>облачко блюдо волочь вколочу выручка подача взобью грач правдолюб цыпочка</Line>
+ <Line>полюс чудь двухдюймовый выплачу очков закучу чай почва взбучка дюза</Line>
+ <Line>парчой хрюшка ворочу обобью бочка шлюз чадра обочлась колючка парчою</Line>
+ <Line>закучу взлохмачусь шлюзовой дача вольюсь купюра пасюк качка кавычка</Line>
+ <Line>русачка каракалпачка люкс чукча досочка югослав подкачка юморок парчовый</Line>
+ <Line>взбучка чукча блюз раскручусь дырочка пыхчу окачу кюрасо бучу чумка</Line>
+ <Line>пальмочка лучок выволочь бочка колпачок вьюрок улюлю складочка магарычом</Line>
+ <Line>раскачу вздрючка брюк жучок брюк грачом люк холую озабочусь плюмаж лампочка</Line>
+ <Line>чалка рассрочка выпью подвыпью всюду заколочу укручу разовью ворочу</Line>
+ </Level>
+ <Level>
+ <NewCharacters>яё</NewCharacters>
+ <Line>вобьёшь прядка двояковыпуклый гусёк свёрла вдвоём обгрызёшь зажёгся</Line>
+ <Line>грызёшь козявка оболжём своя впаяю вопрёмся папайя увял упрёмся маяк</Line>
+ <Line>пройдясь рыбёшка пройдя чьё продуйся правопорядок зяб борясь дрязг сёмужка</Line>
+ <Line>допрёшь чёлочка рублёвый завял брёх зубья загрызём опля бязь чёла грядочка</Line>
+ <Line>прошьёшь зачёс дуя рябуха якорёк ожжёмся домохозяйка краковяк замрём</Line>
+ <Line>зозуля оладья акушёр закряхчу фуляр язва самоё ляд продуйся холуя займёмся</Line>
+ <Line>бугаёв саморазряд сольёшься волочься сжёг бряк слёг разобьёшь расклёв</Line>
+ <Line>ярус язычковый буря мухояровый язва ушёл блёкла рассохся копёр собьёшь</Line>
+ <Line>гусёк вольёмся курьёз упряжь грёб обожжёмся заляг почём якорь заём</Line>
+ <Line>заряд шлямбур кошкодёр язычок кудрявый обмяклый загряз лосёвый акушёр</Line>
+ <Line>побрякушка похлёбка споёшь прокряхчу продуйся плёс заляг колядка дырявый</Line>
+ <Line>допоёшь хлябь мяу валуём воробьём восьмёрка попрёмся увяла лягушка зажёг</Line>
+ <Line>обобьёшь выдохся полусырьё доля спросясь сопляк грызёшься жёлоб яшма</Line>
+ <Line>впрячься соблюдём заржёшь дряб разойдясь вошьёшь допойся прожжёшь формуляр</Line>
+ <Line>вязь расчёлся дряхлый пройдя болячка языковой яблочко углём яд спряду</Line>
+ <Line>языковой лёжка пёрся колясочка прёмся армяк прошёл прячась завялый вмажься</Line>
+ <Line>замёрз крадя глядя подожжёшь соловья доскрёб жмёшь оболжём полгоря</Line>
+ <Line>закряхчу мучайся проймём прогрызём яблочко шляпа грызёмся разопрёшь вольёшь</Line>
+ <Line>поляк свёрла зайдя подопрём ухажёр лёгок вопрёшься расползся дубляжом</Line>
+ <Line>маркёр рохля дурачьё зазря зашьёмся развязка полячка вошьём шёлковый</Line>
+ <Line>обобьёшь блюдёшь добрячка хвоя грязь очёска рядышком обопрём обожжёшь</Line>
+ <Line>соболёк прожёгся пляска заклёклый язь взошёл попёр кляп вопьёшься скрёбся</Line>
+ <Line>язёвый попячу марьяж горяч валуях впёрся побрякушка погрызёшь бобёр</Line>
+ <Line>запрём обожжёшь хозяйка грязь взобьёшь ожжёмся поймёшь гусляр сгрызём</Line>
+ <Line>прялка чёл обопрёшь склёпка окромя займём корявый запряжка ухажёр подзарядка</Line>
+ <Line>вопьёшься поём впрямую подсядь воробьём выпрячься яблочко коряга обовьёмся</Line>
+ <Line>щёлка полушёлковый улья позёмка смяк подожмёмся обзовём взобьёшь обожжём</Line>
+ <Line>промёрзлый разобьёшься дрязг зазря бадья пассакалья подпёр хомячок сошьёшь</Line>
+ <Line>вожмёмся лёссовый квёлый вздёржка помрёшь заряд хрящом зашьёшь распёр</Line>
+ <Line>валуём пряжка взовьёшься проявка щёчка языковой краля взобьёшь подзарядка</Line>
+ </Level>
+ <Level>
+ <NewCharacters>АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ</NewCharacters>
+ <Line>Элла Ирка Гошка Эмма Оскар Игорь Игорь Поллукс Коля Аглая Назар Прасковья</Line>
+ <Line>Зоя Эмма Алголь Ольга Оля Егор Алголь Рудольф Валька Толя Галя Ксюшка</Line>
+ <Line>Володька Эмма Толя Фобос Абрам Зоя Славка Вовка Эдуард Иуда Коля Аглая</Line>
+ <Line>Вовочка Колька Егор Якоб Алёша Будда Алёшка Юлька Аглая Ксюша Люба Васька</Line>
+ <Line>Боря Вася Вова Боря Исаак Алголь Вовка Ио Клава Эмма Жора Марк Валя</Line>
+ <Line>Уралмаш Лёша Лука Валя Фёдор Назар Вова Эдуард Вася Алёшка Даша Ксюха</Line>
+ <Line>Маруська Гоша Маруська Ирочка Ирочка Юра Лука Вовочка Вовка Адам Захар</Line>
+ <Line>Валя Фёкла Зоя Гошка Алёха Ромка Маркс Ксюша Надька Евграф Ромка</Line>
+ <Line>Колька Влас Валька Надька Макар Карл Элла Ева Наум Лазарь Аглая Майя</Line>
+ <Line>Валя Маруся Вовочка Паллада Ева Ксюша Паллада Будда Колька Карл Агафья</Line>
+ <Line>Алла Кузьма Саша Алёха Оля Варя Тарас Майя Элла Евграф Вовочка Кузьма</Line>
+ <Line>Абрам Прасковья Прасковья Оскар Лёша Ромка Васька Ирка Валя Элла Люба</Line>
+ <Line>Паша Вася Маруся Боря Фома Сашка Оскар Вова Паллада Лёвка Васька</Line>
+ <Line>Валя Карл Клара Жора Вовочка Гошка Лёвка Ксюшка Магда Юра Уралмаш</Line>
+ <Line>Карл Абрам Марфа Оскар Паша Юлька Уралмаш Иуда Ио Софья Марк Надька</Line>
+ <Line>Карл Исаак Аглая Пашка Лука Софья Алёша Абрам Ермолай Ксюха Алёша</Line>
+ <Line>Вова Абрам Лазарь Ксюха Икар Якоб Маруська Вася Ксюха Надька Алёха</Line>
+ <Line>Тамара Аглая Ярослав Ольга Надька Коля Евросоюз Юлька Сашка Абрам Лёша</Line>
+ <Line>Варя Вовка Ксюшка Оля Лёвка Вовка Ольга Ира Икар Наум Саша Клара</Line>
+ <Line>Фобос Ксюха Тамара Евграф Эмма Эмма Оскар Варя Паша Гоша Алёха Иуда</Line>
+ <Line>Маруся Фома Сашка Дашка Даша Зоя Маруся Ксюша Якоб Клара Варя Абрам</Line>
+ <Line>Вова Машка Машка Фёкла Юлька Яков Илья Алёшка Васька Дарья Тамара</Line>
+ <Line>Ксюха Паша Фома Люба Ирочка Исаак Элла Элла Надька Савва Алголь Магда</Line>
+ <Line>Сашка Прасковья Софья Галя Вова Ольга Алёша Марфа Влас Надя Евросоюз</Line>
+ <Line>Сашка Юра Исаак Кузьма Ирочка Марья Валя Ира Назар Аглая Надя Якоб</Line>
+ <Line>Клава Ио Марфа Уралмаш Лука Даша Егор Варвара Марс Валька Ирка Боря</Line>
+ <Line>Захар Маруська Юра Ермолай Машка Алла Ира Людка Марфа Марс Толя Яков</Line>
+ <Line>Гошка Алёша Маруська Ксюха Рудольф Евграф Рудольф Яков Оля Фобос Люба</Line>
+ <Line>Алёша Колька Наум Зоя Макар Ромка Люба Макар Эмма Васька Марья Исаак</Line>
+ <Line>Игорь Егорка Надя Жора Ольга Марс Ксюха Яков Евграф Валька Ксюшка</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/slovenian.ktouch.xml b/ktouch/training/slovenian.ktouch.xml
new file mode 100644
index 00000000..75f3951f
--- /dev/null
+++ b/ktouch/training/slovenian.ktouch.xml
@@ -0,0 +1,661 @@
+<KTouchLecture>
+ <Title>Slovenian</Title>
+ <Comment>written by Jurij Turnšek</Comment>
+ <FontSuggestions>Monospace,10,-1,5,50,0,0,0,0,0</FontSuggestions>
+ <Levels>
+ <Level>
+ <NewCharacters>ak</NewCharacters>
+ <Line>a kak a a a kaka kak a kak k kak k kak k a</Line>
+ <Line>a k k kaka k kaka kaka kaka a kaka kak kaka</Line>
+ <Line>kaka a kaka k a k kak k k kak a kak a k a</Line>
+ <Line>kak a kak kak a a kaka a k kaka kaka k a kak</Line>
+ <Line>kaka kaka kak kaka kaka a a a kak k kak a</Line>
+ <Line>k k k kaka kak a a k kak k k kak k kaka kak</Line>
+ <Line>a a kak kaka a kak k a k k a kak a kak a k</Line>
+ <Line>a kak kaka a a kaka a k kak k kak a kak kak</Line>
+ <Line>kaka kaka kak k kak kaka a kaka kaka kak a</Line>
+ <Line>a a k kak k kak kak kaka k kaka kaka k kaka</Line>
+ <Line>a kaka k kaka a kaka k kaka kaka a k k a k</Line>
+ <Line>a kaka kaka k kaka kaka kaka kak a k a kaka</Line>
+ <Line>kaka a kaka a kaka a kaka a kaka kaka a k</Line>
+ <Line>kaka kaka kak a a kak k k kak k kaka k a kak</Line>
+ <Line>a k a k k kaka k a a a a a k a a k kak kaka</Line>
+ <Line>a a kaka k kaka k kaka k kak kak kaka kaka</Line>
+ <Line>k kaka k k a kak k k kaka kak k a kak kak</Line>
+ <Line>a kak kaka kak k a kaka k kak kak kak k kaka</Line>
+ <Line>k kaka kak k k k kak kaka k k k kak k kaka</Line>
+ <Line>a k k kak k kaka kak a k kaka kaka kak k k</Line>
+ <Line>k kak a kak kak kaka a kaka a kak kaka kak</Line>
+ <Line>a a a k kaka k kak a a a a kaka a k kak a</Line>
+ <Line>a a kak k kaka kak a kak kak a kak kak kaka</Line>
+ <Line>k k kaka k kak a k kaka kaka kak kaka kaka</Line>
+ <Line>kak kak a a k a a kak kak kak k k kak kaka</Line>
+ <Line>kaka kaka k kak kak kak kaka kak a k kak k</Line>
+ <Line>a kak kaka a k k kaka k kak a kak kaka kak</Line>
+ <Line>k k a kak a kaka kak kaka a a kak kaka a k</Line>
+ <Line>kaka kak a k kaka kak a kaka kaka kak kak</Line>
+ <Line>k a kaka kaka kaka kak a k kak kaka k k k</Line>
+ </Level>
+ <Level>
+ <NewCharacters>lj</NewCharacters>
+ <Line>laja laka lajaj la lajal lakaj laja jaka laja</Line>
+ <Line>laja lakaj lak lakaja lajala l lakaj lajal</Line>
+ <Line>lakaj lak lajaj laka la laka lak laja lakaja</Line>
+ <Line>lajaj lak laja la lajaj lakaj lakaj laja lajala</Line>
+ <Line>jak lak jak lakaj laka lajaj lajal lakaj laka</Line>
+ <Line>jaka lajala jaka lakaja laka laka lajaj jak</Line>
+ <Line>lajaj laja jaka l jak lak jak lajaj laja lakaja</Line>
+ <Line>jaka la laja laja jaka laka laka jak lak jak</Line>
+ <Line>lajala lakaja lakaja jak lakaj laja jak jaka</Line>
+ <Line>lakaja lakaja lajaj lajaj laja la lakaj laka</Line>
+ <Line>jak la laja lajaj la lakaj lajala jaka lak</Line>
+ <Line>jak la lakaj laka jak la jaka jak l lakaj</Line>
+ <Line>l jaka l lajal jaka l lak lak laja laja l</Line>
+ <Line>l lajaj la laja laja lak lak lak lajaj laja</Line>
+ <Line>lajal lakaj lak la la laja laka laja laja</Line>
+ <Line>laja jaka lajala jaka lakaja jak jaka lak</Line>
+ <Line>jaka lajala lajal jaka lakaja lak laka laja</Line>
+ <Line>lajal lajala laka lakaj laka lakaja jak jaka</Line>
+ <Line>lak jaka lajal lajal l lakaja lakaja laja</Line>
+ <Line>laja lakaj lakaj laja l jak lajal lajal la</Line>
+ <Line>l l la lak laka jaka lakaj lajal l lajal la</Line>
+ <Line>l lakaj lajal lak lak la lajaj lak l lajaj</Line>
+ <Line>laka jaka jaka laja lakaj lajal laka laja</Line>
+ <Line>la lakaj laja la lajala laka lakaj laja laja</Line>
+ <Line>jak laja lakaja jaka jaka lakaj lakaja laka</Line>
+ <Line>lakaja l laja lak la l lakaj lajal lajal lak</Line>
+ <Line>laja l lajala lajaj la laka la jak lajal lajaj</Line>
+ <Line>l lajala la laja jak l lakaj lajaj lakaj lakaj</Line>
+ <Line>laja lakaj lajala lakaj l lakaja lajala lajala</Line>
+ <Line>lajal laja la lajala laja lakaja laka lajal</Line>
+ </Level>
+ <Level>
+ <NewCharacters>sč</NewCharacters>
+ <Line>sčsaka slaka čkala saj sklal skakaj skakljala</Line>
+ <Line>saka sla čka skaka s skakljala skakač skakaj</Line>
+ <Line>čča skaj skala sak čkaj skala skakljala</Line>
+ <Line>skal sla skaj čča saj slaka čka slaka sla</Line>
+ <Line>skakaj skaja skakljal skakalka sklala čkala</Line>
+ <Line>sklala skaja skakljal sak čs skakljal čs</Line>
+ <Line>skaklja čkala skaja skakal skaja skakala</Line>
+ <Line>sla čs slak skaja čsa skakačjča čkaj</Line>
+ <Line>slak skakljaj čs skaka skakaj skakač sala</Line>
+ <Line>slaka čča čkaj saka čjča skaj skala skakaččka čkala čča skakljaj čč čč skaja</Line>
+ <Line>skala čča slak čč čkala čkala skakljal</Line>
+ <Line>skakač sak čkal slak čja čj čsa skaka</Line>
+ <Line>skaka skakljala skakljaj skakljaj skakala</Line>
+ <Line>slaka skaj čja skakač skaklja skakljal skakaj</Line>
+ <Line>skakala čs skakljala skakalka čkala čsa</Line>
+ <Line>čkal skakalka čj čč skakal skakala čka</Line>
+ <Line>skal skakljaj sklal čsa čka čs skakalka</Line>
+ <Line>skal čs skakalka čjča čkala sla skakalka</Line>
+ <Line>čka čjča skakal čs čka skakalka s čč</Line>
+ <Line>skala skaj skaklja saka čkaj skala skaja</Line>
+ <Line>skakalk skakalka salsa sklala čča skakalk</Line>
+ <Line>sak skaja skakaččča slak slaka čs skal</Line>
+ <Line>skakalk skakljala skakač sala skakačskaklja</Line>
+ <Line>skakal slaka saka skakljaj čkaj skakalk skaklja</Line>
+ <Line>skakalka skal skal skaj saj čč skakljal</Line>
+ <Line>skakljala slak skakalččs skakalk salsa skaja</Line>
+ <Line>čkaj skaj slak sala čja sklal čs skakačskal salsa salsa skakalka sla salsa čka čs</Line>
+ <Line>čč čja čsa čkaj skakač čkal skakač</Line>
+ </Level>
+ <Level>
+ <NewCharacters>df</NewCharacters>
+ <Line>dajal dala dajalka dač dajal fasada fasada</Line>
+ <Line>dajalk dač dal faks dajalk dala dalja fasada</Line>
+ <Line>daj fasada faksa dajaj dajalk dajaj dala dačdajala dlaka dač dačfasada dajaj dajal dalj</Line>
+ <Line>daj dajala dala dalj dal dal dač dajalka</Line>
+ <Line>dajal dalj dač dač dajaj falska daj dajalk</Line>
+ <Line>dajalk dlak fasad dlak dalj fasada dalja daj</Line>
+ <Line>dalj fasada dal faks dlak dlak dlak dajaj</Line>
+ <Line>dajal falska dačfasad daj dala faksa faksa</Line>
+ <Line>dajaj dajala dajala dajal dalja fasada faks</Line>
+ <Line>faksa faksa dajalk daj fasada dajaj dajalk</Line>
+ <Line>dajalka dačdajaj dal dala dala dajalk dajalka</Line>
+ <Line>da dač fasada daj dajala da dlaka dala faksa</Line>
+ <Line>dal daj faks fasad dajalk dal dajalk dala</Line>
+ <Line>dalja dalja dlaka faksa dalj faks faksa dlaka</Line>
+ <Line>dajalka dajaj dajalk dala fasad dajala dala</Line>
+ <Line>dajala dalja dlaka fasad dalja falska falska</Line>
+ <Line>dal daj da dlaka dajaj dajalk dlak fasad daj</Line>
+ <Line>dala dač dlak fasada fasad fasada dalj da</Line>
+ <Line>fasada daj dajalk dal dalja dlak faksa dlaka</Line>
+ <Line>faks da da falska dajalka falska daj daj dajalka</Line>
+ <Line>fasad dajalk dajala dač dalj falska faksa</Line>
+ <Line>fasad faksa dalj dal dajal dajala dal dala</Line>
+ <Line>falska da faksa dlak dlak dačdačfasada dačdaj dajalk dačdačfalska dal da dlaka dajalka</Line>
+ <Line>dajalk dajaj dalj dajaj faks dajalka faks</Line>
+ <Line>dlak daj dajaj dajal dala da dalj dalj fasad</Line>
+ <Line>dajalka da dlak dačfalska dajaj dal dajaj</Line>
+ <Line>dajalk faks dlak dajalka dala daj dajalka</Line>
+ <Line>daj dajalk dalj fasada dačdala daj dajaj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ie</NewCharacters>
+ <Line>ideale edafski ideje idilike idiliki iskala</Line>
+ <Line>ideja ideale iskala ideja esej iskali idil</Line>
+ <Line>edafske edafska idilike idile esej idila idile</Line>
+ <Line>idili ideali iskali ideali eseja iskalki idila</Line>
+ <Line>idili eseja ideali ideal idilike eseji eseje</Line>
+ <Line>iskala ideji edafske iskalk iskalk idila edafske</Line>
+ <Line>idilike iskalki edafski iskale edafska iskali</Line>
+ <Line>iskal edafski iskalki edafski eseje ideali</Line>
+ <Line>ideali idilike idilike ideale ideal ideja</Line>
+ <Line>idilike iskale eseje idilik iskalka iskala</Line>
+ <Line>idil ideal idila idilika edafska idilika iskala</Line>
+ <Line>iskala iskaje ideala ideal ideali idej idila</Line>
+ <Line>idila idej ideji iskali ideali iskalk idila</Line>
+ <Line>eseje ideja ideale ideala idiliki idil iskalk</Line>
+ <Line>ideala iskalke ideji ideali esej iskale ideji</Line>
+ <Line>edafski eseja idilike idili iskalki ideje</Line>
+ <Line>idilik ideali ideji edafski edafske iskal</Line>
+ <Line>esej ideale iskaje idilike edafska iskalke</Line>
+ <Line>idiliki eseje idili edafska eseji idil ideji</Line>
+ <Line>eseje eseje iskaje idila edafski iskalka ideji</Line>
+ <Line>ideja iskalk iskali ideja edafski ideja iskali</Line>
+ <Line>esej idej ideale eseja esej idiliki iskalki</Line>
+ <Line>edafski iskaje iskalke idilika iskalke idila</Line>
+ <Line>idilik eseja ideala idilika iskale iskalk</Line>
+ <Line>ideala iskalka iskala eseji ideja iskalk idej</Line>
+ <Line>idilike edafska edafski idiliki ideala iskalke</Line>
+ <Line>iskalka edafski iskal idej idilika iskal edafski</Line>
+ <Line>ideala ideji iskale idili iskala ideal iskaje</Line>
+ <Line>iskalke edafske eseje idile eseje ideje ideje</Line>
+ <Line>iskali eseja edafski iskali idil iskalk ideali</Line>
+ </Level>
+ <Level>
+ <NewCharacters>no</NewCharacters>
+ <Line>nesklenjeni nečdno neokisan noslja nakisa</Line>
+ <Line>neodločo nedosojen nenadejani oklenjeno odisejadi</Line>
+ <Line>naklonin odsesan načlniki naslajaje odklanjajočnače osenčn olječ neonska olika nadejale</Line>
+ <Line>oslični naklonsko nadse oksidna nakisa odklanjanje</Line>
+ <Line>oksida nedeljnika nedeljničn nasedal naslonjeno</Line>
+ <Line>načkane naslikala nenadejan neodločična</Line>
+ <Line>odločni nasilnična ničn nadejalo naseljenko</Line>
+ <Line>naslad njeno nenačlnična ničnje osončnja</Line>
+ <Line>nadelale oklenjen noseč naslednji nedoslednična</Line>
+ <Line>odskakljal oddelka osenčno naslajaj osini</Line>
+ <Line>oljčiki nosač načnja olesenel načna neonkina</Line>
+ <Line>naličana odnesi okoličnki okenči nedeljeni</Line>
+ <Line>odejo nečkinjin naččajo oljili oskalek</Line>
+ <Line>naslednika načnjajoč noska osonča neodločične</Line>
+ <Line>nalijejo neolikank nanos oslinjeni ničli</Line>
+ <Line>ojekleni nenadni ondi nadela neonkine okajen</Line>
+ <Line>niča nasekala naslada onečdena neonka neidili�n</Line>
+ <Line>nasičnje načne odskočle načkana osedlalo</Line>
+ <Line>naslonijo okenča naslonilo okisalo odnosni</Line>
+ <Line>naseljenkina odločla nasilnik nedojena nenaklonjeni</Line>
+ <Line>najdlje oda onikajočodsekane oklenila nenadejana</Line>
+ <Line>olikankine osonča nadejanj odselijo osoljeni</Line>
+ <Line>načlnika oljni oddajani osa odseka nenačlničn</Line>
+ <Line>nakali nasedajoč nanesli najdenin odselijo</Line>
+ <Line>nissani ose naslonilo oljčiki nasekali naličale</Line>
+ <Line>naličanje olikankini nasoljeno naslonjač</Line>
+ <Line>oslinjene odločli oljčo nače najdenino</Line>
+ <Line>naselila nekončna naslanjačodločlno nadanjska</Line>
+ <Line>nenaseljena nedoločni neidiliči naslonjena</Line>
+ </Level>
+ <Level>
+ <NewCharacters>rm</NewCharacters>
+ <Line>mlačimi rokokojskem maksimirani račnskimi</Line>
+ <Line>rodenske mečač rafal malijske medijem rokerskem</Line>
+ <Line>misijo rdečnj rdečlaskami manekenkinima</Line>
+ <Line>rodeč riodejaneirskim redil rafiji mamoljske</Line>
+ <Line>reklamiranem mjanmarska milijonarja menjalkin</Line>
+ <Line>markirajoč medičjskima mročmirjanskimi</Line>
+ <Line>marmeladama mormonki menija rečnskem resama</Line>
+ <Line>mičeno resničim misli realka radičm mlaskajoč</Line>
+ <Line>milijardnem reformirajoč milečma mesečem</Line>
+ <Line>radiji marinke mladinkinim reliefnimi mlaki</Line>
+ <Line>malokorinjska milarnami modelni mlačnsko</Line>
+ <Line>mladikami ranč mandolinam mesojed mlinarje</Line>
+ <Line>mansardnima refrenskim mesarka močril mamk</Line>
+ <Line>maksimalen mirenskem reinkarnirajočmi majskima</Line>
+ <Line>rejska maločsa reklo molčnji rolkajočma</Line>
+ <Line>milosrčim risarjema morali mesareč močjanskem</Line>
+ <Line>miljena morilske mladij mekinjskima radirankami</Line>
+ <Line>rejnika modom mornarko markiranem reklamami</Line>
+ <Line>mleča rijočmeliranimi molčč milarna misijonarka</Line>
+ <Line>menim manekene modemske mamilo merilkinima</Line>
+ <Line>rimačo makedonskimi medanskimi melodramskima</Line>
+ <Line>rosečmedijskima mladi radiofonske rimarkinem</Line>
+ <Line>marinado marsikje medičrkine mornarski ročik</Line>
+ <Line>momljaje risanje mamečm roja medaljerko manjkanjema</Line>
+ <Line>mariniranji menijskim rolkar mlaskanje mirilo</Line>
+ <Line>rokerskim med mleča romskimi rojski rolke</Line>
+ <Line>moljene rima mokrečm momljanjema reden mikanj</Line>
+ <Line>rolkarkinem rolkark mikenske molččičnem</Line>
+ <Line>mrke račeselskem rafinirajočma mačone račnskem</Line>
+ <Line>maserja mjanmarske meridianoma milj marmeladam</Line>
+ </Level>
+ <Level>
+ <NewCharacters>vt</NewCharacters>
+ <Line>vročjoč taoiste tridesetkratna vasovalčvimi</Line>
+ <Line>tekmična vsrčva trinajstinami vskočm talarji</Line>
+ <Line>vrstičikom volovima vijva trnkarim velikankinimi</Line>
+ <Line>tirnem vsrkata valovile vrelno vlivajočmi</Line>
+ <Line>vrvičstim telefoniral trosovko valoven tonalni</Line>
+ <Line>tinjskem vtisnila tokave vokala tetoviranjem</Line>
+ <Line>vatnima tekmovalnima teoreme vnetljivostim</Line>
+ <Line>valovjema točj vodniki veterankinimi teistov</Line>
+ <Line>tesnostjo velikoračnska veličstnost teorija</Line>
+ <Line>vtka voličnsko vetrič vsiljenkine vodovarstven</Line>
+ <Line>tokratnimi testoma vodičtriinsedemdesetero</Line>
+ <Line>terjalke vedrijanske tlakoma točjkine vlekama</Line>
+ <Line>taki vsiljenkinima termometre totalitarnostjo</Line>
+ <Line>ventilirajočtrojččne valdorfski volarjev</Line>
+ <Line>tajati triindevetdesetmeseča treskajočmi</Line>
+ <Line>vodarja vodarnami videofon tleskajočm vretenske</Line>
+ <Line>veveričake vsevednična triinosemdesetmestna</Line>
+ <Line>traktorskim tovorjeni tendenčost trkate trkljaj</Line>
+ <Line>vrvičstima tonikama večetnem tisočelnimi</Line>
+ <Line>vodarnam tekočostjo vsekanima terminala violinistkinim</Line>
+ <Line>vstavitvena vtikajoč trame tlesknete vsrkalo</Line>
+ <Line>vlamljale vijoličem tvrdkama triindevetdesetdelnem</Line>
+ <Line>točlčvimi veliki točt tleskam veleslalomistkinim</Line>
+ <Line>trn trdnino vojvoda veseli vratolomnostjo</Line>
+ <Line>trkljajte vrtino triinsedemdeseto tresljavi</Line>
+ <Line>triinsedemdesetkilometrsko viničrkinim vlivnima</Line>
+ <Line>telečjakom valite vijač tridnevne triindvajseternosti</Line>
+ <Line>tlorisno travna valjenj tesneč testirančv</Line>
+ <Line>tvida vdeli verovanjema triodstotnimi testirančvo</Line>
+ <Line>tiral tesanj tajat vdajmo vaflje vročnske</Line>
+ </Level>
+ <Level>
+ <NewCharacters>pu</NewCharacters>
+ <Line>posredničnima preklapljajoč pasne pokarali</Line>
+ <Line>protju usmerjena preiskovankama prekrokam</Line>
+ <Line>predsinočja počte podajalnimi priprte upokojujeta</Line>
+ <Line>pletle praslovanskemu poostrovanji petnajsterna</Line>
+ <Line>podpirančva udejanjim pitna plutokratk poredničnim</Line>
+ <Line>premočemu upepelil postojnskem patentirale</Line>
+ <Line>potilnemu protipravnostim periodikami prestopkov</Line>
+ <Line>prometnično poplesati poustvarila priključnem</Line>
+ <Line>preluknjajte poljskim pajčlanastem peklenske</Line>
+ <Line>prenavljalo pretovarjanja utečnosti poslikavajočmi</Line>
+ <Line>postavka udenskem polomu priuč planinski</Line>
+ <Line>pelji palčikov premlatita predeljeno prevedenim</Line>
+ <Line>pritavata plapolali pritepenčvim polnjenima</Line>
+ <Line>polfinalistkinem prekrvavljenostmi utelesilo</Line>
+ <Line>pianom upijanjeni petdesetkratniki uvajalni</Line>
+ <Line>prisodili prestolonaslednični poudariti petelinjenjem</Line>
+ <Line>pireji plodovitemu utekočnjenemu prepisu</Line>
+ <Line>ustavljat plovečmi podarjena prekrvavljenima</Line>
+ <Line>privatnostim porumenelostma preskusita posvojiteljeva</Line>
+ <Line>uvajali potujčnostjo usklajevala padavinskem</Line>
+ <Line>prilastil plačvaje petodstotnima presadite</Line>
+ <Line>pomorijo prijetnost uniformami prikrijete</Line>
+ <Line>posvečvalčvima platinaste puljska pasivnostmi</Line>
+ <Line>ustoličjočmu pretlačm parodiranju plačnkami</Line>
+ <Line>pripona utrtemu plečta pomenskosti utore</Line>
+ <Line>preiskovati petinosemdesetnadstropnem polprofesionalnemu</Line>
+ <Line>prepeličami prijavljenčvima prikolovratili</Line>
+ <Line>petinosemdeseternim prijateljeval pekliti</Line>
+ <Line>pouličo uničvalo privlačvanjem poveljujejo</Line>
+ <Line>prostornim psalmistovem ukrojijo posute podprvakom</Line>
+ </Level>
+ <Level>
+ <NewCharacters>zg</NewCharacters>
+ <Line>zvončljate zapravljajoč gaza zakrivim zidani</Line>
+ <Line>grizljanju zatezale zmajalo gomoljnat zagospodarjenima</Line>
+ <Line>godemarskima zaletavanjema zalijta geometriziranemu</Line>
+ <Line>zelenima zemljankine zadevale giljotiniranem</Line>
+ <Line>znalkinemu zamorčovima začla geometrizirajočmi</Line>
+ <Line>zgodovinarkini grlne zadovoljitvami zadelale</Line>
+ <Line>graviraj gostoti golenma goskam geodeta zavijalna</Line>
+ <Line>zamejevalo zaupljiva zastavljenega zastarevajočzlatilo zapazit gledljivi zaustavljivemu zataljene</Line>
+ <Line>zaslepljenima zvečnima zdrgniti grizonovimi</Line>
+ <Line>zlodejke zveden zazankaj geometriče zaročnčv</Line>
+ <Line>gorati zmije zazimljenima gospodovat zverjadjo</Line>
+ <Line>zgrinjam zastavama gneteta zgarajta zamomljat</Line>
+ <Line>grome zasegajta zapakirajte gojevska zgodni</Line>
+ <Line>zamorimo zaslonite zazvenčva gardnimi zaprosilom</Line>
+ <Line>galaksij geometrinjinimi zapečnosti grafikovega</Line>
+ <Line>generalpolkovnike zvitorepkine zalivana zarezanega</Line>
+ <Line>zaročti zjed zasanjajva gostilničrskem gametofita</Line>
+ <Line>glasnostjo zapenjanju gozdarstvom gomilnega</Line>
+ <Line>zavetrnem zvrta gostotam gojevskemu zaspančvega</Line>
+ <Line>generalporočičnega zmernostmi zoperstavljenim</Line>
+ <Line>zaječva zapenjajočmu zgornjepartinjskemu</Line>
+ <Line>zoonozami zjezi gornjeustničn zavarovančvimi</Line>
+ <Line>goliti zavlačval zamrznejo zvenet zaplata</Line>
+ <Line>zakostenelostjo genetskima zmazanim galanterijskega</Line>
+ <Line>zaostritvama zalikane zadovoljenja gručstimi</Line>
+ <Line>zmotile gramoma galanteristkinem zgrizena</Line>
+ <Line>gazelje zaiskrimo zapisni zmletka zvezdoslovčvem</Line>
+ <Line>zvončljajte zapisničrkama zavidljiv geodetovima</Line>
+ <Line>zloslutnem zaupna gladilkin zaposlujeva galunova</Line>
+ </Level>
+ <Level>
+ <NewCharacters>šh</NewCharacters>
+ <Line>ščetarjevimi šansonjerjema šesttedenskemu</Line>
+ <Line>šoferkah šestindevetdesetdnevnima hrzajoča</Line>
+ <Line>škodovanja štiriinsedemdesetih štiriinsedemdesetminutnega</Line>
+ <Line>štiriindvajsetmesečnih havanka špaget štiriindevetdesetminutnemu</Line>
+ <Line>šipon hlastnost šarlatanovo šepavčevima škrlatni</Line>
+ <Line>štangarskopoljanskima hermelinastemu šestnajstdelnemu</Line>
+ <Line>hleviške šepetamo šifriranim hipnotiziralo</Line>
+ <Line>hmeljarjevima šestnajstnadstropne hemoragičnega</Line>
+ <Line>hidroenergiji ščitenj hipokrizijo hamitov</Line>
+ <Line>šestdesetdelnim hišniška hikori šoferkinega</Line>
+ <Line>šefovega štiriinsedemdesetodstotni hranilnikoma</Line>
+ <Line>šestinpetdesetinam ščurkova šifriraj šolniški</Line>
+ <Line>štiriinsedemdesetkraten hmeljarjevi šrafirala</Line>
+ <Line>štiriintridesetnadstropnimi štirikratnimi</Line>
+ <Line>štiriperesno homogenizirajoče hamitkin šinejo</Line>
+ <Line>hudejskim štiriindvajsetleten štiriindevetdesetdelna</Line>
+ <Line>herkulskim štiriindvajsetodstotnimi štiriinšestdeseturni</Line>
+ <Line>šivata šestkratnikih štiriindvajsetkrat hrušovsko</Line>
+ <Line>hoduljam hlapčevimi hidre škarpnim honorarnega</Line>
+ <Line>šalamensko šestnajstdelnemu širokopotezno</Line>
+ <Line>šahist šmarškemu šahiral harmonikast šestinšestdesetini</Line>
+ <Line>šeststoternem homeostazama humanistična štiriinšestdesettedenski</Line>
+ <Line>štiriodstotne hupal hegeljanka štokavčevi</Line>
+ <Line>švedskem hedonistovem šeststomesečni hlapilnost</Line>
+ <Line>štefanskim hotelirkinemu šejkati ščetkarskega</Line>
+ <Line>štokavčevo štiriinšestdesetemu šikolskih šestindevetdesetnadstropni</Line>
+ <Line>herojstvoma šestinpetdesetčlanske šestdesetmestnim</Line>
+ <Line>hišami histeričnim humanost hmeljnemu špekuliraš</Line>
+ <Line>hlepimo hlinjen hotečih štiriinsedemdeseturnim</Line>
+ <Line>špilje šotaste štirikapno štipendistkinem</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bc</NewCharacters>
+ <Line>basovska cizama copatkama banovinah cunjastemu</Line>
+ <Line>boksite baronetovima benzenov biserovinastega</Line>
+ <Line>bledicah banditovemu bedakinje balzamirana</Line>
+ <Line>brigadirstvu barokizirali capljanju blatnovrških</Line>
+ <Line>bojevnikovi brzojavnima bogatinska bagdadskim</Line>
+ <Line>brbljačevih blagajničarkinih britij bojevničinima</Line>
+ <Line>cepali biljanskih bolzanskem balearskem bifeji</Line>
+ <Line>bibliografinjini bibličnega cikavskega bednikovim</Line>
+ <Line>bistroglavost bahaškimi brezupe brestom bolehanju</Line>
+ <Line>banovskih bolzanskima buhtečem bordojska bakroreze</Line>
+ <Line>bakrastih blazinil bigamistu brstečem buškasti</Line>
+ <Line>binarnem capinovemu bednostim bogaboječnemu</Line>
+ <Line>burkajta cepita bencin brezsnovnemu bojujočimi</Line>
+ <Line>brejostjo bazirani chemniško cipresasta brlečima</Line>
+ <Line>comske balinišče blagovolit begunovim brazdalnikov</Line>
+ <Line>baltidkin cilindrskimi briljantnem beneficirale</Line>
+ <Line>cunkovska bobnarkine brezgotovinskimi bobničen</Line>
+ <Line>brusečimi begunjskemu balerinini bilijone</Line>
+ <Line>cerkovnikovi cefedranim bezajoče centrifugirano</Line>
+ <Line>barabonova brenčanje brdskemu cvetoberoma</Line>
+ <Line>bosonogih bubonskih cibetovkinih brdavse belkastem</Line>
+ <Line>cerkniških bikastega bedakinji beneficirano</Line>
+ <Line>bradavičke barvasti bleskih brdanskega civilizirankinima</Line>
+ <Line>barvitostma cezijeve barantačevim brezrazredne</Line>
+ <Line>borišči bršljankah cikličnosti brezkrajnemu</Line>
+ <Line>cirilskimi basovskega blatnobrezoviškimi brenkajoči</Line>
+ <Line>begunčeve bergamskima budganjskega brisanje</Line>
+ <Line>cedilke bančno brindisijsko celotnostim bičale</Line>
+ <Line>bodočih cvetočimi bistroje belilih bedru brezskrben</Line>
+ <Line>blazinilo boljševik bitumnu buharsko centralistično</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ž</NewCharacters>
+ <Line>žrebčevi žigosali žarit živečem žogobrčeva</Line>
+ <Line>žgečkljivimi žaloigram žafranastega žužkovega</Line>
+ <Line>žarkejšim železničarkini žvabskim životarita</Line>
+ <Line>žagastih žaltavima žuželkinega žličnika žrebčeva</Line>
+ <Line>žaboustim železarniškima žgočega žgočimi žgana</Line>
+ <Line>žice želvovinastimi žvečilo žarkovjih žalovanje</Line>
+ <Line>žvrgoli županjinima žveplaste žebranje žagajočo</Line>
+ <Line>žrebal žičničarjih žičničarko žvižganjem žilasta</Line>
+ <Line>žlahtnejši žaljena želodoma žamet živopisna</Line>
+ <Line>željnostma žličarjevo žetvam želimeljskim</Line>
+ <Line>žvižgam žulili živcema žabčeve žlahtnejšem</Line>
+ <Line>žvenketajočim žejnim žirovske žlebeči žrebčarnah</Line>
+ <Line>žepasti železnima žigonski žel žrtvujočega</Line>
+ <Line>žepovsko žlebičenji žirantkinih županovanjih</Line>
+ <Line>žebljicam žvenketanj železa žlobudrala žarkostjo</Line>
+ <Line>žrete žilicam žrtvuj žlebičim žarometov ženičkam</Line>
+ <Line>žagajoč živahnim žanjemo žalovalčevi žvečene</Line>
+ <Line>žveplast žličarjevemu žaloviška žvižgam željnemu</Line>
+ <Line>žagarskimi žadovinski železnica ženskini žagaričine</Line>
+ <Line>živilskega žejnski žubinskemu živalcam žganica</Line>
+ <Line>železnati žebrajte žerke žažarskem železokrivkama</Line>
+ <Line>župnijama ženščini žuniško žargonskima žalujoče</Line>
+ <Line>živalskostjo žargonskem žandarskemu železničarkinih</Line>
+ <Line>žonglerka žafranovega živinozdravnikovega</Line>
+ <Line>žolčevodih žrebet žagico žalovalcev žerovinski</Line>
+ <Line>žandarjih živela želeča žandarske žalskega</Line>
+ <Line>žebljarjema žaginemu žvepleni žvižgavkina</Line>
+ <Line>žabjega žvižgačevih žaltavost žemljica žvenkljajočemu</Line>
+ <Line>žirovniško žužkoslovčevih živžavov žiškimi</Line>
+ <Line>živorojene žeparstva žargonsko živinčet žagicam</Line>
+ </Level>
+ <Level>
+ <NewCharacters>AKLJ</NewCharacters>
+ <Line>Libenčanovima Kambrežanovem Kremberka Ladislavoma</Line>
+ <Line>Lešničanko Klančarjev Kordič Kastiljkah Liechtensteinčev</Line>
+ <Line>Liberžanovimi Janževce Koblarjema Kaunaščan</Line>
+ <Line>Klenovčana Kuretenčankina Lombardovem Ješenca</Line>
+ <Line>Kostanjevčanovem Karlovčevima Kompolčanih</Line>
+ <Line>Ambrožiče Krnicah Klemšetu Avstralčeva Javornikovim</Line>
+ <Line>Jerančičevega Arafatom Laborčevih Ladihove</Line>
+ <Line>Jung Jagodčankami Lisjačank Katovičana Ljubičevima</Line>
+ <Line>Krncem Antončičevega Avberkina Karlovcema</Line>
+ <Line>Jevničankinih Jevškovemu Jesenškovem Krkavčanko</Line>
+ <Line>Krečevem Jeralovemu Jagodčank Konjščankini</Line>
+ <Line>Kongovki Antonovimi Kvasičanko Konstantinopelčankah</Line>
+ <Line>Jarmovčanove Leidenčankina Jarovega Klemše</Line>
+ <Line>Andromedo Liburnkinim Jugovič Lukanjčankinih</Line>
+ <Line>Levarte Križmančičevima Kanižaričanke Kološema</Line>
+ <Line>Kurentu Lanišanke Lutmanovem Katiče Jerčinčankinemu</Line>
+ <Line>Kračalcu Lisjačanom Ližankami Kazančanoma</Line>
+ <Line>Krošlinovim Kosmatin Lebanu Jamenčankinega</Line>
+ <Line>Kumljančevima Jobstova Alenkinima Andričevima</Line>
+ <Line>Avignončanovemu Krnca Juvančičevo Kovkovčanovo</Line>
+ <Line>Koncilijama Leilerje Ličenčanova Koritničanki</Line>
+ <Line>Kmeclova Kropivškovem Leningrajčanovega Kolenikovima</Line>
+ <Line>Korvovima Kaunaščanko Južnoafričanke Jermoli</Line>
+ <Line>Lapork Lancovljan Johani Arizonce Kalčiči</Line>
+ <Line>Kopiničevim Leverkusenčanovim Adergaščanove</Line>
+ <Line>Lazenčanovima Ložinčanko Kančevčankine Kolovratu</Line>
+ <Line>Knafličema Kog Anitini Karlininem Lušečankinega</Line>
+ <Line>Jerihe Janovim Jobi Kurinčič Kennethovem Kranjičino</Line>
+ <Line>Lambergerjih Jeremijami Juanovem Kogojeve</Line>
+ <Line>Letonjeve Juršinčankinem Jevščanovim Karlsruhejem</Line>
+ </Level>
+ <Level>
+ <NewCharacters>SČDF</NewCharacters>
+ <Line>Doljanovih Čebularjevih Sežančanova Dachaučanovimi</Line>
+ <Line>Drežničankinega Stavropolčankine Slivljanko</Line>
+ <Line>Dolčanovima Drganjčevo Skubičevemu Salmičem</Line>
+ <Line>Stephensonovi Sadnikov Sandiegovčanovemu Dobjevaščankinega</Line>
+ <Line>Santorinčan Formčankami Sebančevemu Suholežniku</Line>
+ <Line>Čufarjev Drčanovih Starogorčev Češkoslovaškega</Line>
+ <Line>Domžalčankinim Čepovana Sevastopol Čelešnikom</Line>
+ <Line>Senadolcev Slančanoma Sovjačanovima Faletiče</Line>
+ <Line>Slovenjgradčankina Simplonom Čehovinkami Dednodolčankinem</Line>
+ <Line>Davida Darjanovim Studeničankami Simonin Strelačan</Line>
+ <Line>Smeltov Fabjančičema Fabianovega Danijelini</Line>
+ <Line>Sevillčank Stolničanova Dobravcema Senjurjema</Line>
+ <Line>Sredenjčanih Soldatovega Debeljakoma Soro</Line>
+ <Line>Slapljanki Studorkina Duškova Stojanovem Davošanka</Line>
+ <Line>Skorišnjačanka Črnivčan Saksidov Saturnusovo</Line>
+ <Line>Slavinjkama Savinčanoma Čilpašanov Selčanov</Line>
+ <Line>Draženkam Strojevemu Skaručanove Skvarčema</Line>
+ <Line>Stanoviščankinega Dobriševljankami Frolehčankinim</Line>
+ <Line>Dušankinimi Dobrčani Čretnikovemu Savlovo</Line>
+ <Line>Doropoljčanom Skoberneti Samotoričane Staroseljanovimi</Line>
+ <Line>Črneškogorčankinim Dobrčankinima Dolgonjivčanovim</Line>
+ <Line>Slokarjem Slovanu Stenmarkom Sobračankina</Line>
+ <Line>Strjančankinimi Sodišinčankinimi Siniševe</Line>
+ <Line>Svinjskem Sodišinčanu Slamnjačankinemu Dobravčeve</Line>
+ <Line>Sredozemk Sepeta Samsonovem Džakartčanovemu</Line>
+ <Line>Feničankam Dolžankinem Srednjevaščankama Dolgoračanki</Line>
+ <Line>Dvorjanov Dekančanovo Starogorčankinih Fortič</Line>
+ <Line>Dvorjančanka Starogorčanovim Sofijinemu Svetolucijcema</Line>
+ <Line>Skvarčevima Džidčanovem Črnovaščankinega Doberdobčankinega</Line>
+ <Line>Deisingerjevega Drenjkinemu Slome Dobami Dolgovaškogoričankinim</Line>
+ </Level>
+ <Level>
+ <NewCharacters>IENO</NewCharacters>
+ <Line>Natlačene Inkretov Oskarjeva Opatjeselcem</Line>
+ <Line>Eliasih Impolovim Osovnikarjevega Indiankina</Line>
+ <Line>Ekarjeve Očeslavčanovem Ivškova Orešičevih</Line>
+ <Line>Olujičevim Izlakarji Osetijkah Oliverina Oplove</Line>
+ <Line>Osredčanih Erevančanov Nikaragovkina Njiverčanova</Line>
+ <Line>Očeslavčanovemu Ozeljankah Nebelčevi Izolčankini</Line>
+ <Line>Nobelovo Okrogličankinima Nadleščankinima</Line>
+ <Line>Islandcema Natalkini Oskoršanko Osoletove</Line>
+ <Line>Novolazenčevih Interpolovimi Imenj Nimnemu</Line>
+ <Line>Novokotarki Nedeljkovih Novogoričanovimi Evgenijevi</Line>
+ <Line>Epikurjem Otovčankini Obrščane Obločanovi</Line>
+ <Line>Obsoteljčank Iskrini Ivančanka Ivovima Iren</Line>
+ <Line>Orožna Njiverčankami Osredkarkinem Erzeljcev</Line>
+ <Line>Nikino Istrabenzovega Ivanjševčanovimi Izgorčankinima</Line>
+ <Line>Intiharje Ivičevem Otaležčeve Orehovčankinim</Line>
+ <Line>Novgorodom Obrnikarkama Omoti Obrežja Ošljankami</Line>
+ <Line>Nagličevo Ivančanovimi Nedovičem Novgorodčane</Line>
+ <Line>Edgarjevih Indiankah Nadlerjevim Oklahomce</Line>
+ <Line>Ohnjecem Osimčanih Ovsenikovi Ojnikova Ivanjegrajcev</Line>
+ <Line>Neapeljčankina Evklidov Ojstrčanovega Omanom</Line>
+ <Line>Otočankah Obrnikarkin Ojdaničih Elijami Oplotničanke</Line>
+ <Line>Osojničank Omarjevih Novincih Osolničanki</Line>
+ <Line>Novosušičanovo Ostojičev Obrovnikov Ihanke</Line>
+ <Line>Elesovo Elijo Oparove Eritrejcema Nemčavčankina</Line>
+ <Line>Efežanke Novičeve Nepalkinih Nadleščanovega</Line>
+ <Line>Izlačanova Osimčankami Nickova Ožbaltčani</Line>
+ <Line>Ornika Noričankino Elsnerjeva Ivančanke Itačank</Line>
+ <Line>Illinoisa Osmanih Naksošankinimi Imljančankinim</Line>
+ <Line>Normandijčevih Esade Osrečkiju Niževčan Neslovencih</Line>
+ <Line>Orličankini Ornužane Igorjevo Niževčanovo</Line>
+ </Level>
+ <Level>
+ <NewCharacters>RMVT</NewCharacters>
+ <Line>Mogadišankah Teherančevim Veleščankinem Vučakov</Line>
+ <Line>Majeričevem Radančankinim Maksimilijanove</Line>
+ <Line>Vrhah Tomislavovem Vratičem Vrbenčanki Rifničanovim</Line>
+ <Line>Malečničanove Tonetovo Vodrančanovem Medvodčankama</Line>
+ <Line>Transvaalčankinem Rajnkovljanih Rajšpovih</Line>
+ <Line>Mohorku Velikokamenčanovih Radoslavci Vač</Line>
+ <Line>Tomačevčevih Repič Roboma Mercatorjevem Vidošičana</Line>
+ <Line>Tassoma Mantovčanov Marezižanu Tarentčankina</Line>
+ <Line>Viševljane Rafolčanovo Tverčanovimi Valburžankini</Line>
+ <Line>Majevimi Rižanki Vosperniku Milovanovičeve</Line>
+ <Line>Tisovčanih Malezijčevimi Riglerjeve Magrebčanovemu</Line>
+ <Line>Tanjini Melanijam Modrijani Martanovi Možjančanovimi</Line>
+ <Line>Rostovom Matetovo Mohorjevimi Medinčankam</Line>
+ <Line>Matička Remšetovem Taborčev Vitnovaščane Matenjčevo</Line>
+ <Line>Tolmincih Radegundčani Trimlinčankina Voronežankinima</Line>
+ <Line>Vnajnarčevi Marmont Vanih Rudeževa Malolaščanovega</Line>
+ <Line>Malezijčeve Matejina Robinsonovemu Vrščev</Line>
+ <Line>Makovčevi Tolčanah Toliče Topljankinem Tomišljanove</Line>
+ <Line>Rochestrčanih Moravčanovi Magdeburgu Vrbovčanovo</Line>
+ <Line>Rodoškove Varaždince Rakovkami Verbincem Milovanovič</Line>
+ <Line>Veračankinih Rebercem Majnikovo Richterjevih</Line>
+ <Line>Vrhenčanke Vitovimi Vakslje Vuzmetinčankinima</Line>
+ <Line>Mojstrančanom Ravljank Timurlenkoma Vodenovčanovima</Line>
+ <Line>Vanov Razborčanom Vrenkove Vešeničan Tartujčanke</Line>
+ <Line>Tekalčevi Vukovskodolčanom Metavčankah Reaganovo</Line>
+ <Line>Titovšek Venišanko Magajnove Verzelu Rinčetovograbčankina</Line>
+ <Line>Modrov Volaveljčankinimi Volčjedražankama</Line>
+ <Line>Tuta Verhovniki Toskanci Riedla Venigerjevem</Line>
+ <Line>Rossiniji Malaji Tanjugov Malokorinjčankam</Line>
+ <Line>Vinjanovemu Vukičevo Maležiča Volaji Viničanu</Line>
+ </Level>
+ <Level>
+ <NewCharacters>PUZG</NewCharacters>
+ <Line>Petrino Gambergerjema Plotovimi Zofijinih</Line>
+ <Line>Passaučanovo Pahovnikih Zelšanovi Ulmu Grdadolniki</Line>
+ <Line>Gomilčanih Gatincem Poljčankah Gozdečankam</Line>
+ <Line>Paragvajčev Perovškovima Prešanki Zaklenčeve</Line>
+ <Line>Zabričeve Pišečankin Plužno Grahovčanova Pinochetova</Line>
+ <Line>Puharjevem Poznanovčankinimi Pamečanova Zadražanovega</Line>
+ <Line>Gerečank Pahovljanu Piletičevimi Partizanskovrhovčeva</Line>
+ <Line>Ponovičanovi Polomčanovi Puščavčana Gorenjakovemu</Line>
+ <Line>Pivolčankini Zalobrežankah Gržiničevima Pustopoljk</Line>
+ <Line>Puharjev Polžanov Pudobčeve Glišičeva Zoričih</Line>
+ <Line>Gostečanov Parižljanovo Potočnikovimi Pesničanovi</Line>
+ <Line>Grabarjevim Pjongjang Gruzincem Prebačevo</Line>
+ <Line>Zmagoslavini Golobinkom Polenšanki Placerovčankinemu</Line>
+ <Line>Pavliničevega Zabukovljana Pescarčanke Uršinimi</Line>
+ <Line>Zavrčankah Golovrharkina Galilejčevih Gezi</Line>
+ <Line>Zupančičevega Precetinčanka Zavinkom Podkloštrjankinemu</Line>
+ <Line>Puciharjeva Paoloma Grandičevima Zapotočankinima</Line>
+ <Line>Gmajne Pekelčankinimi Pijavičanovim Goreljčanka</Line>
+ <Line>Zenkovščane Uncu Peterkovih Znojilškovo Zasipljanovega</Line>
+ <Line>Gerlancema Presladolčanu Pijavčanovega Peklenikovi</Line>
+ <Line>Poljčevi Podpreščanova Geigerje Protegi Gočankini</Line>
+ <Line>Porabec Zdolčankin Pirševke Grinjankinih Prihovčevi</Line>
+ <Line>Gmajnčankini Goričance Grosupeljčanov Zrkovčane</Line>
+ <Line>Gočovčanki Grmoveljčanki Gavranov Potokarjevemu</Line>
+ <Line>Piletiču Grešakove Premčevih Petrovčanka Puljčankine</Line>
+ <Line>Plesu Podgornikove Globočičank Podčetrtčankinemu</Line>
+ <Line>Plohlovih Udirjih Glihovimi Zapužanovemu Genovčanova</Line>
+ <Line>Zalarjeve Pohorec Pečauerjevim Gagerne Principovemu</Line>
+ <Line>Zaragožankinim Pradčankah Gorenci Premkovi</Line>
+ <Line>Podpečankama Gavčankine Zapoge Prilepčankin</Line>
+ </Level>
+ <Level>
+ <NewCharacters>HBC</NewCharacters>
+ <Line>Hramšanoma Borčičema Bodončankine Brindisijčanovem</Line>
+ <Line>Špendala Harijki Šekovo Bulčeva Heferletoma</Line>
+ <Line>Bravničarjevemu Štraklova Celestinam Brdovčevi</Line>
+ <Line>Bloudkovem Homčankinega Helenovima Cenčičevima</Line>
+ <Line>Bregarkinega Buzetčanovega Božinima Hanžka</Line>
+ <Line>Cerkljanih Hrovatov Brežnikom Caracaščankini</Line>
+ <Line>Špitalkami Begičevim Buzetčankin Borovčanka</Line>
+ <Line>Škriljana Brozovičevima Šentruperčankine Helsinčanka</Line>
+ <Line>Belgijkinega Šterkovo Caravaggii Bogoljubovim</Line>
+ <Line>Hudojamčanovemu Šelige Bukovščanovega Hrpeljkini</Line>
+ <Line>Bačani Bervarjem Hajfčankinem Clevelandčankinimi</Line>
+ <Line>Švarci Handanovičevega Škerlakoma Štrusovima</Line>
+ <Line>Cubrčanoma Šetincev Canberrčanovo Špičničankami</Line>
+ <Line>Bacone Bokračanka Štromajerjevima Ciprčankinih</Line>
+ <Line>Bujanovima Šantlu Štalčevi Heliosovim Cetorankama</Line>
+ <Line>Cousteaujev Šalkovaščanom Bonnčankinima Bratinom</Line>
+ <Line>Habičema Branoslavčanoma Cerejčankama Bugojnkam</Line>
+ <Line>Cirjankami Brestrničana Bodončank Cikavčane</Line>
+ <Line>Boršičevem Barbaričevima Šenturščankinimi</Line>
+ <Line>Bušečank Burovim Bavšice Šmarčanke Hrašam</Line>
+ <Line>Šumcem Brezarjevo Balkankino Švaganovemu Braslovčankami</Line>
+ <Line>Bravničar Havrankova Bitnjanove Honolulujčanih</Line>
+ <Line>Braničarjevemu Hlevenčevim Šmarječani Beseničarjevim</Line>
+ <Line>Brčankinim Šeščanovega Bovčankino Hudobivnikov</Line>
+ <Line>Beniči Cverletovima Cvare Hudojamčanka Škerljevi</Line>
+ <Line>Brozovem Hillov Bovšanova Bajuku Škerjančevega</Line>
+ <Line>Šmartenčanovim Beringovi Charlesovih Hribovljanov</Line>
+ <Line>Chaucerjevega Cimermani Christianovim Begičevima</Line>
+ <Line>Hindujčevi Cvijičevih Beštrovih Šimničeve</Line>
+ <Line>Bratož Šarfove Boršičeve Blagšiči Cortes Benčičema</Line>
+ </Level>
+ <Level>
+ <NewCharacters>Ž</NewCharacters>
+ <Line>Žirki Žusem Žitkovčankam Žargija Žonti Želčani</Line>
+ <Line>Žurki Židana Žarkovem Ženovi Žolnirjev Žlaborankini</Line>
+ <Line>Žulovce Žemvovo Žurkovodolčanki Žmukova Žibršankin</Line>
+ <Line>Ženevi Žebničankinima Žabničanovi Žirovskarjema</Line>
+ <Line>Žigončankinima Žajdelami Žimaričane Ženaveljčanovo</Line>
+ <Line>Žitenčanov Žvaruljčanovimi Žunkovimi Žetalčanka</Line>
+ <Line>Žgajnarjevemu Žalčankinima Žižkovčeve Želebejčanovih</Line>
+ <Line>Žabčanova Žvarovima Župančičeva Žužkove Žetinca</Line>
+ <Line>Žurajevemu Žabote Železanovih Žejnčankinim</Line>
+ <Line>Žepovčanovim Žekarjema Žitenčanki Žitkoma</Line>
+ <Line>Žnideršičev Žabotoma Žežljeva Žulič Žamenčanoma</Line>
+ <Line>Žurbijih Žabjekovimi Žapužčevega Žunkovo Žabčan</Line>
+ <Line>Županiče Žibertoma Žirovničarkinega Žebniku</Line>
+ <Line>Žalčevemu Žalčankini Žirovničarjev Žiberta</Line>
+ <Line>Žgeče Žbogarjevo Žirovničankah Žabničan Ženjačanovega</Line>
+ <Line>Žejcema Županjenjivcu Žitkovčanovih Žirovkina</Line>
+ <Line>Žadovinčev Žerjavovemu Žnidaršičevimi Žikarčanovi</Line>
+ <Line>Žurkovodolčanovega Željnčankinih Župelevljankinih</Line>
+ <Line>Žimaričanih Žlindrama Žvirčankinima Žbogarjevi</Line>
+ <Line>Žičarkah Žamenčanovem Žabkar Žirovničankinem</Line>
+ <Line>Žagarjevimi Žuničeve Žitenčankinim Žiganjcev</Line>
+ <Line>Žejčevemu Žepovčankinega Žerovnikovih Ženjčanih</Line>
+ <Line>Žepovčankinimi Žilavčevimi Žajdelovimi Ženjčanko</Line>
+ <Line>Župančiču Žanami Župetinčanovo Željkovim Žepljankina</Line>
+ <Line>Žicami Žalarjih Žalčankine Žigončanoma Želčankinega</Line>
+ <Line>Žabljankinimi Žihlavčanova Žvokljem Žužemberčankam</Line>
+ <Line>Žihlavčanovo Žigrskovrhovka Žunčevemu Žaberlovima</Line>
+ <Line>Žibretova Žvanutov Žapužami Žurajevim Žerovcev</Line>
+ <Line>Žano Žvaruljčanovem Željkove Žuničanovi Žmitkovemu</Line>
+ <Line>Žlaboranovimi Žlendrovem Žnidaričeve Žemvovemu</Line>
+ </Level>
+ </Levels>
+</KTouchLecture> \ No newline at end of file
diff --git a/ktouch/training/spanish.ktouch.xml b/ktouch/training/spanish.ktouch.xml
new file mode 100644
index 00000000..bafc3346
--- /dev/null
+++ b/ktouch/training/spanish.ktouch.xml
@@ -0,0 +1,353 @@
+<KTouchLecture>
+ <Title>Spanish (auto-generated)</Title>
+ <Comment>KTouch training file generated Mon Mar 31 17:09:15 2003
+Perl Script written by Steinar Theigmann &amp; Håvard Frøiland.
+</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>jj jj ff j ff ff fjfj j jjff jf jj</Line>
+ <Line>jf j ff ff jf jj jj jj jj f ffj f</Line>
+ <Line>ff jj j fj fjfj j jj ffj j fj jj</Line>
+ <Line>jf ffj jf j ff f f f fjfj fjfj jff</Line>
+ <Line>jf f jj ff j j f f j j f fj jj j</Line>
+ <Line>fjfj ff j j jjff fjfj fjf f j ff ff</Line>
+ <Line>f ff jff jf j jf j jj jf j fjfj</Line>
+ <Line>fjf f ffj jf f jjff ff f j ff ff jj</Line>
+ <Line>fjf ffj f f ff j f ff fjfj j j ffj</Line>
+ <Line>ff fjf jjff f ffj fj fjfj f ff jj</Line>
+ <Line>f f fjfj fjfj ff f ff j jf jj jff</Line>
+ <Line>f jf jff jf f ffj f j fjfj f ff</Line>
+ <Line>fj f jj jff jff jjff j fjfj ff fj</Line>
+ <Line>ff fj jf j jj fjfj f ff fjf fjfj</Line>
+ <Line>ff jj fjfj fjfj ff fjf jj jf j ff</Line>
+ <Line>j f ff ff fjfj ffj fj ff ffj ff</Line>
+ <Line>ff f f ffj jjff j jj ff fj fjfj f</Line>
+ <Line>f jjff ff ff jj ff f f jjff ff jf</Line>
+ <Line>ff fjf fj jf jj fjfj ff fjf jj fj</Line>
+ <Line>ff ffj jj ff ff fj ff ff jf jjff</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>dkfj dk kk k kfjj djfj k dk dk fk fk</Line>
+ <Line>dff dd fk dk kd kf fk fd kd kffd djfj</Line>
+ <Line>ddj kf jd dff djk fk kj jd kd k fk</Line>
+ <Line>kfjj dff kkd kd fd kk jjkj kfjj dkfj</Line>
+ <Line>djk kd fk jd fd dkfj jd dk kf kd kf</Line>
+ <Line>k kj dk kf ddj fk fd djk kffd ddj</Line>
+ <Line>kfjj dk dfj djfj fk djk kj kffd kj</Line>
+ <Line>djk fk kkd fk dff kf kj jd kfjj fd</Line>
+ <Line>dff kfjj dk fk fd dff kfjj dfj dk</Line>
+ <Line>k kffd kj k kj jd kd kd k kj djd</Line>
+ <Line>fk kf dk kj djk ddj jd kd djd kj</Line>
+ <Line>dff kd jd djd k fk djd fk kf dk kd</Line>
+ <Line>dfj kfjj dkfj dff fk djd kj dff jd</Line>
+ <Line>jjkj fk fk jd fk djd jjkj jd fk kffd</Line>
+ <Line>kfjj dff fk kffd dff kj dff kd kk jd</Line>
+ <Line>kd dff kf djd k kj kkd djfj dkfj</Line>
+ <Line>fk kd fk kd kd kd dff kkd fd fk fk</Line>
+ <Line>fk kf kd k kj kkd fk kj kd dk kk</Line>
+ <Line>djk dk dd k fk djk dfj dkfj dfj djfj</Line>
+ <Line>kj fk dd jd fk kk kj kj dfj ddj dkfj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>sss dsd sksk ssj js js lffls sds sds</Line>
+ <Line>dsd lds dsd lfs lfs ls ls fsdf sss</Line>
+ <Line>ks ssj lkd sfk ssj jfsj lds lf lds</Line>
+ <Line>sss sksk lfs sds ds flkl jfsj s ls</Line>
+ <Line>sds kfl sd sds lf ffl lfs s kfl kkss</Line>
+ <Line>ks s sds sfk lfs ffl jfsj ls lf lf</Line>
+ <Line>jfsj ffs kfl dsd js ds dsd sf dsd fsdf</Line>
+ <Line>sss lfs s sf jlfd js flkl jlfd kkss</Line>
+ <Line>dsd kfl lkd fsdf lffls sds ls sksk</Line>
+ <Line>sf lf ffdl sd ls lkd sffl ds lffls</Line>
+ <Line>lfs sffl sksk js sss sffl ffl lf ssj</Line>
+ <Line>dsd lf s flkl lds ds lfs flkl lkd</Line>
+ <Line>ls ls ffdl jlfd kfl ls ls lkd sfk</Line>
+ <Line>sfk ks lfs lffls lffls sffl lf sd</Line>
+ <Line>sd lds flkl sss dsd lf dsd sd js</Line>
+ <Line>jfsj lf fsdf sd lf ffs lds kfl sfk</Line>
+ <Line>ks jfsj sf sksk flkl js sffl ks sss</Line>
+ <Line>lkd lds sfk kkss sksk ssj dsd lf s</Line>
+ <Line>sfk sksk lkd sds ks fsdf sksk sksk</Line>
+ <Line>ffs lds kkss ssj lf s sf jfsj s ffl</Line>
+ </Level>
+ <Level>
+ <NewCharacters>caá</NewCharacters>
+ <Line>rasas lascadas rajadas fajas la sacad</Line>
+ <Line>jaldadas falsa alfalfada rajad fa asad</Line>
+ <Line>ala sallada allá ralla rasas llaca</Line>
+ <Line>salas acalla flaca dad afascala caca</Line>
+ <Line>acalladas jaca sajad calada rallada alfas</Line>
+ <Line>afascala salda alfas alfa sal rascada jaladas</Line>
+ <Line>cascad alfada flaca lada calas rafas</Line>
+ <Line>ca alfalfad ajada salad casas rallad</Line>
+ <Line>laja alfas casacas acallada kas rasada</Line>
+ <Line>ajada falsas sacada jalada calas cascad</Line>
+ <Line>jaldadas rasadas rasas sacad casas ralla</Line>
+ <Line>salad cajas fajada alada ka jaldadas</Line>
+ <Line>alfalfal jasad alfalfada fallas calcada</Line>
+ <Line>saldas rala calda alfadas alás asa sajad</Line>
+ <Line>ajadas rajadas jalada casas casca daca</Line>
+ <Line>ca falla kas ajas das casada salda</Line>
+ <Line>saca jaca jaldada calda caja fallada</Line>
+ <Line>saja allás flacas cascada cada calcas</Line>
+ <Line>ladas alfalfadas afascalada lascas rasa</Line>
+ <Line>casas rafallas falcas rasadas fa lascada</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ntñ</NewCharacters>
+ <Line>lactada candas lancán anclada taca llantas</Line>
+ <Line>lactan fallan cáncana satanás andada</Line>
+ <Line>tacad jactan sanad na san san cañadas</Line>
+ <Line>lañada faltan taladas talad talladas</Line>
+ <Line>atan tascad atacas allana jactad cananas</Line>
+ <Line>nasal astan rañas natas nantadas afascalan</Line>
+ <Line>atalaja talas asan tascad lanadas tacad</Line>
+ <Line>asfaltad lactas lactadas lasta catada catalán</Line>
+ <Line>talladas cañadas andana landas ancla catasalsas</Line>
+ <Line>lana lastan calcan nansas tascada tajas</Line>
+ <Line>tascada actas atan cascan tacad cansa</Line>
+ <Line>sansa canallada cantata nada najas tascad</Line>
+ <Line>tala acanalas tasada sana atalajan</Line>
+ <Line>lañad latan sanas jactan tasada acanalan</Line>
+ <Line>lañada cantata llanas lancán astan dañada</Line>
+ <Line>atlas asnal dañada lancán acatad tasa</Line>
+ <Line>lasaña rata saldan tajas acanallad atadas</Line>
+ <Line>asfaltada tasa afanad datas taca tajadas</Line>
+ <Line>atajad fajan jactadas canas fanal acanallad</Line>
+ <Line>afana afatada tata tatas lanas tanda</Line>
+ </Level>
+ <Level>
+ <NewCharacters>iví</NewCharacters>
+ <Line>rancia fináis acidalia avasalláis sínfisis</Line>
+ <Line>ranilla astías aditiva salvia física invicta</Line>
+ <Line>litas radiatas avillanadas ínclita afinca</Line>
+ <Line>vaciáis ínsitas vida iniciativa dividáis</Line>
+ <Line>actitan viñas lancinadas infanticidas</Line>
+ <Line>actinia canicas indias tilláis validas</Line>
+ <Line>vindicad fijada lilailas indicia fin anís</Line>
+ <Line>añila vivificas fantasías indician calificativa</Line>
+ <Line>nía lijáis tillad infancia ría activas</Line>
+ <Line>jitad ricia casilla rijáis laciniada</Line>
+ <Line>cavas afilada afija fila latinista tillad</Line>
+ <Line>fían finalidad liña alcancías física</Line>
+ <Line>lactancias listad tilas falsilla lanilla</Line>
+ <Line>acidalia invictas fastidiáis rastilla instalad</Line>
+ <Line>fijan villana catalanistas distal lascivas</Line>
+ <Line>añilan lías finca villana líticas raías</Line>
+ <Line>dialítica salificada lijad astía anastasia</Line>
+ <Line>actitadas antias fila latí lacinias anastasias</Line>
+ <Line>satisfacía iniciativa finan innatas activan</Line>
+ <Line>si financiáis ciscadas filiáis van</Line>
+ </Level>
+ <Level>
+ <NewCharacters>meé</NewCharacters>
+ <Line>desmanáis restallen venidas encielasen vestisteis</Line>
+ <Line>desenfadas asemejaste encajases fijases riela</Line>
+ <Line>relejéis aclamas remediáis retallas enmendases</Line>
+ <Line>rectasteis seisavad rescaldase mecieseis</Line>
+ <Line>efectiva desfajan faenasen mecidas centellees</Line>
+ <Line>natalidades retejed admitiesen ralease sitiales</Line>
+ <Line>desinsecté restallaste elefantes lentísima</Line>
+ <Line>desencinte majadea sities encastáis atiese</Line>
+ <Line>desviste relancen malentendíais afiance</Line>
+ <Line>inclinaste dicentes sed descimentases candases</Line>
+ <Line>centellease desenvendad lividecía candelilla</Line>
+ <Line>entintaseis envesasteis descanséis encante</Line>
+ <Line>acantalea jineteasen desmalla mista desasistes</Line>
+ <Line>revisasteis redimiste siseas afie dejen desmadejáis</Line>
+ <Line>rellanadas jamete desvendases recitase islandesa</Line>
+ <Line>relaté reactivad enlicé desviejan testadas</Line>
+ <Line>semanas incentivasteis resinasen estilices</Line>
+ <Line>almacenad vitalmente escindiste filminas</Line>
+ <Line>ijadeéis lineada déficit retine detallista</Line>
+ <Line>caneaseis inflamasteis disecase sale destente</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>alertará harnead tersase desmedir franciscana</Line>
+ <Line>acarrareis salaras rastillé enleches demacrarme</Line>
+ <Line>enclavijaría aferrares encastré aliara hermanaran</Line>
+ <Line>resanaran cancelársela farras enmantaréis</Line>
+ <Line>eliminarlas enfardelare enrejalaran nanceareis</Line>
+ <Line>calleares cantarme caldeare desanimarme</Line>
+ <Line>remediad infamar aserenarais saltaren reamará</Line>
+ <Line>encancerarás avenenarás trasverían aventarán</Line>
+ <Line>chancletearía tenérmelas remellaría carnearas</Line>
+ <Line>descara avalarse entrame demacraras descarasteis</Line>
+ <Line>mamaré ralenticéis reanimáis anticresis</Line>
+ <Line>enflacareis terminara venidera carraña hachearía</Line>
+ <Line>vareáis retractarme chalés desarrendasteis</Line>
+ <Line>trillase rajarlas retallecer reeditarais</Line>
+ <Line>desasentará rieladas tacharán calaverearán</Line>
+ <Line>desentarimaras fresad herventara cercenaren chaflana</Line>
+ <Line>desensartara desenjalmareis desafinaren fresarán</Line>
+ <Line>reñisteis rastillarais atril recetaseis</Line>
+ <Line>adherírtelas trajinareis reedificaseis lardearais</Line>
+ <Line>secretearé incensarán mallar recejarais insertaríais</Line>
+ </Level>
+ <Level>
+ <NewCharacters>goó</NewCharacters>
+ <Line>dosificarles dividíroslos revote torraran estantaló</Line>
+ <Line>maltratarlo marcándolos litógrafos chalanearemos</Line>
+ <Line>regaceando entrilló arreglándonoslos concienciaremos</Line>
+ <Line>endocrino desagradareis girando almidonáramos</Line>
+ <Line>reingresareis gloriándotelo acelerarnos encoclaren</Line>
+ <Line>novilleros relegaréis agonístico entalonarais</Line>
+ <Line>cordeláremos domeñarla ojalareis disolviésemos</Line>
+ <Line>entornarnos heterocercas descoto gacillas</Line>
+ <Line>ofreceremos desarrollándomelo franco desinfectamos</Line>
+ <Line>cavados diseccionaremos mojarlos desalojarás</Line>
+ <Line>desterrándote desvaneciéndole regates chocheas</Line>
+ <Line>concomiéndoos rojearan desentalingaríamos almacenaron</Line>
+ <Line>religionarios descantáremos candásemos fijárosla</Line>
+ <Line>consienta socavaste motera calificándolos</Line>
+ <Line>meconios refociléis olvidareis escamoneáremos</Line>
+ <Line>atolladen horneéis sofrenaras agredieres</Line>
+ <Line>enojaremos gestionándotelas retoñarían disgregándome</Line>
+ <Line>credenciero estomagaseis denegaron descodaré</Line>
+ <Line>engrandaseis desgranas concilió ortogonalidades</Line>
+ <Line>jarrearíamos rosigaras comentándote saltártelo</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>escapaban abreviándonoslos ennoblecían neblinear</Line>
+ <Line>descomplementármelo rebrincados pintea desesperaré</Line>
+ <Line>empeñándome taloneabais estereotipármelas</Line>
+ <Line>desempacháremos enherbolaríais erabas abastardaríais</Line>
+ <Line>garbillan agregábamos desemborraches abocinaseis</Line>
+ <Line>recambiártelas posicionándoselos sombré enveraba</Line>
+ <Line>emballestad bastanteáremos desbocábamos apearme</Line>
+ <Line>esborregáremos deshebillases preciadas engranerabas</Line>
+ <Line>perpetrándole desembanastada propósitos bombeó</Line>
+ <Line>balsearías abocetada capaste aparcadas desembargares</Line>
+ <Line>aldabeará compositora parificaren encampanase</Line>
+ <Line>anticipases palomeras sobrecercos primeo aprendiéndoselas</Line>
+ <Line>estropeándonos óptica polidipsia ambiciábamos</Line>
+ <Line>botijo paliabais ambleos calmaba acabadoras</Line>
+ <Line>mimbrarás apaleados sobrealimentaren desempeñe</Line>
+ <Line>aparenta acabildaras emperchado embestirá</Line>
+ <Line>estampillándooslos menospreciaríamos apesten apelaban</Line>
+ <Line>infestaban estenografiábamos embrisaba tablacho</Line>
+ <Line>comparármelo afelpabais emparrabais apreséis</Line>
+ <Line>achabacanara prolongad descabalgáramos alegaban</Line>
+ </Level>
+ <Level>
+ <NewCharacters>quü</NewCharacters>
+ <Line>abrumar reburujasteis guirlache acaudillaste</Line>
+ <Line>piquetillas argumentarías ludiabais matutera</Line>
+ <Line>pluviosas rubriquistas trucaseis subvendríamos</Line>
+ <Line>promulgué esquelatado presupuestaras aburriéndome</Line>
+ <Line>escullirías discurseáremos fluminense estructurarla</Line>
+ <Line>acoquinaréis prefiguraciones estipulándote</Line>
+ <Line>humecte atribularnos computables obsequiaré</Line>
+ <Line>engurruñases ocupárnoslas guisasteis enfusan</Line>
+ <Line>humedales esquiadora diluiste puntura redujésemos</Line>
+ <Line>nocturna difumados aburrabais difumaran</Line>
+ <Line>acumbráramos suscitarlo beatifiques deudo profusos</Line>
+ <Line>acapullándote desnucabais bufoneasteis repuestas</Line>
+ <Line>ungieras promiscuabais dificultáis equipolentes</Line>
+ <Line>ahuecado torturadores desmaquillándolos</Line>
+ <Line>engurruñan enchufábamos patullaba substanciara</Line>
+ <Line>balbuceásemos hormiguillaréis minutarais transfiguraremos</Line>
+ <Line>prostituí desentumeciéndose enrunaran vituallase</Line>
+ <Line>acuarelísticas ilustrados huevarían clausurándolos</Line>
+ <Line>reduplicara rebumbio jugadores disminuirme</Line>
+ <Line>utreranos morciguillo sopunto imbursadas</Line>
+ </Level>
+ <Level>
+ <NewCharacters>wnñ</NewCharacters>
+ <Line>amaitinaran endulcéis naviera opinareis cantillos</Line>
+ <Line>encordelaremos veintavo tendedor desencajando</Line>
+ <Line>divinicéis embaucan piarcón atrabancáremos</Line>
+ <Line>enfocándoles enraigonarais venerares ronca</Line>
+ <Line>encarcavinaban descuadernaríais acerinas acabándonos</Line>
+ <Line>nesguemos mascarán encureñes controvertían</Line>
+ <Line>fecundártelos pinté sobrescribirían pitasen</Line>
+ <Line>desmoronabas desatendí procesándonoslos desvendaran</Line>
+ <Line>piparían cotejan preponderarás poíno fecundárnoslos</Line>
+ <Line>frangolláis embracilasen arrimarían convertírnosles</Line>
+ <Line>conferid desacompañamientos bandearías</Line>
+ <Line>encrudeciéramos dintorno desasentara manarais</Line>
+ <Line>desinficionáremos conglomerare encurtan agrandáramos</Line>
+ <Line>ensilaban empentarían entrucharemos substanciar</Line>
+ <Line>frenada escabullaran afloramiento plantillara</Line>
+ <Line>desenmarañada conciliaste fine viltrotearan</Line>
+ <Line>prediciéndoles atondaras repreguntaba desciñendo</Line>
+ <Line>separarnos coronados reincorporaban veintavos</Line>
+ <Line>confirmadores compulsaran antecogérosla aprendérselos</Line>
+ <Line>acicalaran lamparan juntareis humean primoreando</Line>
+ </Level>
+ <Level>
+ <NewCharacters>cx</NewCharacters>
+ <Line>concentrarán concomitar circunsolando descarriado</Line>
+ <Line>encanastaremos discutisteis percatándoos cantearíamos</Line>
+ <Line>encloquemos recechasen excavan castañeteares</Line>
+ <Line>acaparamientos especuláremos extractara recrujiera</Line>
+ <Line>encapucharía calesero extasiándolo discutes</Line>
+ <Line>chapurrad centauros contesté administración</Line>
+ <Line>expandía demacra escariaríamos náutico</Line>
+ <Line>cornetilla escriturarán copilases corveteando</Line>
+ <Line>asociaren descomulgan clemátide predecírsele</Line>
+ <Line>aprovecháramos autentificaras disceptaste mundificarán</Line>
+ <Line>campanillearas santificadas lanchones friccionaba</Line>
+ <Line>envacarán transcenderíais desfavoreciera</Line>
+ <Line>diversificadas ennecia paraliticándote ceremoniáticas</Line>
+ <Line>arabesco frecuentaseis coloreásemos claveteados</Line>
+ <Line>coherentemente ideáticas humectaste crónicas</Line>
+ <Line>caponáremos existidos acrisolabais culease</Line>
+ <Line>acañoneara increpó traciano encajetillaras</Line>
+ <Line>recomen encajonamiento encajetillan acorchara</Line>
+ <Line>contraponiéndoos facultarte documentándotelas tronchéis</Line>
+ <Line>intercederás picanearás certificadas concretándoselo</Line>
+ </Level>
+ <Level>
+ <NewCharacters>yz</NewCharacters>
+ <Line>trapazaría elegantizaría atizados desenzarzáramos</Line>
+ <Line>destituyeseis cruz analizabas subyugarás despolitizaseis</Line>
+ <Line>diluyó retribuyó pizarra encenizarían</Line>
+ <Line>diluyáis carbonizarais obstruyéndoselas</Line>
+ <Line>mahometizaríamos estabilizáramos bocezados releyéremos</Line>
+ <Line>encauzarás espinzaren escolarizare desnormalizabais</Line>
+ <Line>empalizado deslavazaréis angelizad zozobraron</Line>
+ <Line>enerizábamos cloroformiza individualizándoles</Line>
+ <Line>zancajeara mazoneasteis tazarás naturalizabas</Line>
+ <Line>apologizaste almuerzan despeluzaste desmalezaríais</Line>
+ <Line>fanatizáramos zurriagaría plumazo ataquizada</Line>
+ <Line>centralizando destrozándolo normalizares aznacho</Line>
+ <Line>apomazó descorazonara excluyéndome trazumarían</Line>
+ <Line>fecundizaré deshumanizáramos endulzaran familiarizó</Line>
+ <Line>deleznarías azogaras acromatizamos gargarizabais</Line>
+ <Line>cristianizada fecundizara inmunizarán apoyármelo</Line>
+ <Line>malvezaría realzan magnetizó despolarizabas</Line>
+ <Line>recomenzadas ataquizado judaizases inutilizaron</Line>
+ <Line>sobrealzo descorazonaréis ayustaré belez</Line>
+ <Line>atalayuela disminuyereis hostilizaste internacionalizareis</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ABCDEFGHIJKLMNOPQRSTUVWXYZ</NewCharacters>
+ <Line>MIPS Multibus Portugal Francisco Vizcaya</Line>
+ <Line>Sergio Caribe Constantinopla Luisa Cid</Line>
+ <Line>Oceanía Goctetos Tobías Jerónima Solaris</Line>
+ <Line>Kbits Ramiro Ada VME Goctetos Juan Aries</Line>
+ <Line>Tbyte Tbyte Creta Feroe Francisco Mbit</Line>
+ <Line>Yolanda Orión Filadelfia Miguel Lladras</Line>
+ <Line>Madrid Kbits Toctetos Alejandría Daimiel</Line>
+ <Line>Mflop VME Mocteto Alicia Palencia Córdoba</Line>
+ <Line>Mocteto Pablo Asia Andorra Aries Escorpio</Line>
+ <Line>Ignacio Panamá Víctor Babel Galeno Paco</Line>
+ <Line>CCITT Andrés Futurebus VME Eufrasia</Line>
+ <Line>Silvia Isidras Brasil Isidros Antonia</Line>
+ <Line>Paco Valdepeñas Eusebio Cibeles Bruselas</Line>
+ <Line>Javier Eusebio Lladras Sonia Linux Vivar</Line>
+ <Line>Emilio EBCDIC Lorenzo Compostela jergalS</Line>
+ <Line>Alfredo Delia Tbytes CCITT Irene Filadelfia</Line>
+ <Line>Esther Guillermo MIMD Filomena Jerónimo</Line>
+ <Line>Santiago Unix Internet Pucela Ethernet</Line>
+ <Line>Ismael Pablo Zaragoza Constantinopla</Line>
+ <Line>PROM Mflops Centronics OSI Coulomb</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>
diff --git a/ktouch/training/turkish.ktouch.xml b/ktouch/training/turkish.ktouch.xml
new file mode 100644
index 00000000..0b0a011a
--- /dev/null
+++ b/ktouch/training/turkish.ktouch.xml
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<KTouchLecture>
+ <Title>Türkçe (Zemberek ile otomatik)</Title>
+ <Comment>KTouch 10 parmak klaye dersi. Zemberek tarafından otomatik olarak oluşturulmuştur.</Comment>
+ <Levels>
+ <Level>
+ <NewCharacters>jf</NewCharacters>
+ <Line>fjjff ffjf jffjj jjf jjfj jj f jff</Line>
+ <Line>ff jjjff jjj fjf fj ffjff fjjj jfjj</Line>
+ <Line>ffjj jjfj jfjjf ffjj jfjf j jjjff f</Line>
+ <Line>ffjf ffjff ffjf jjfff fffj j fjf fjjj</Line>
+ <Line>ffjf jjjf jfjf f jfjjj jjjj j ffff</Line>
+ <Line>fjjff fffjj jjfff ffj ffjj jf jf fj</Line>
+ <Line>fjf jjjf jjj jf jff fjjff j fjj</Line>
+ <Line>jjj ffjf fjf jjjj jjj jjfff ffjf fjf</Line>
+ <Line>ffjf fjfj jjjff jjjff ffj jjf fjjff fjjf</Line>
+ <Line>ffjf fffj ffjff ffff ffjj jf jfjjj ffjj</Line>
+ <Line>jff jfjfj jfjj jjffj jjj f ffjf fjfff</Line>
+ <Line>jff jjfj jfjf ff jjjf fjjff jffj jfjjf</Line>
+ <Line>jjjff ffff jfjfj jj fjf jjf fjf fj</Line>
+ <Line>fjfj ffjf fjj fjjj jjj jjfff jjfff f</Line>
+ <Line>fjjff jf ffff fjjf jffjj jfjj ff ff</Line>
+ <Line>fj jffj jffj jff jj ffjf ff fjjff</Line>
+ <Line>ffff ffjj jfjf fjfff fjjjj ffff j jjj</Line>
+ <Line>jfjfj jjf fjjff jjfff fffjj fjj jf jj</Line>
+ <Line>jjf j jfjjj fffjj jj jfjj j jjfj</Line>
+ <Line>fjj jffjj ffjj jjj ffjf fjf fjj jfjfj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>kd</NewCharacters>
+ <Line>jjdjk dk jfdj ddj dddjf dffkf kdkkk dkf</Line>
+ <Line>k kjjk jfkdk jdf jjdjk fkdf kk k</Line>
+ <Line>dffkj k kd djjfj fjfkj df fjj kjddd</Line>
+ <Line>kk jfkdk jdf dfjkd kkj fjfkj kk djjj</Line>
+ <Line>jkk djjfj djf jkk jj dkjd djddj jf</Line>
+ <Line>dffkj fjjk ddkk ddkk jkjjj djjfj ddfd kjddd</Line>
+ <Line>jdjf dffkf dkjd ffff dkf fjkj kf kkj</Line>
+ <Line>kfjjf kjddd djjfj f k dkd fjjk fjj</Line>
+ <Line>jd fjfkj dkf jj ffff jjdjk djjj fkdf</Line>
+ <Line>jd fjj jjdjk fddd ddj kkf jkjjj djddj</Line>
+ <Line>fjfkj ddfd jfdj kf dffkj fjjk jjfdf fkdf</Line>
+ <Line>dddjf kjjk fjjk ddfk kk kk kkj dffkj</Line>
+ <Line>ddj jkjjj d jjdjk k dd j djj</Line>
+ <Line>kj ddfk df kf dkk ddjjk fkdf jdkjj</Line>
+ <Line>kf kj jd dd ddj dffkf djf fk</Line>
+ <Line>k k jjdjk jjfdf fjkd dffkj jdkjj fj</Line>
+ <Line>kjddd jd kf ddj fjjk kfjjf fkfff ddkk</Line>
+ <Line>kjjk jjdjk dkd ddkk kd jdjf ffjjd djf</Line>
+ <Line>k k fjdkf fkfff ddjjk ffff dddjf dkf</Line>
+ <Line>fjfkj kkf fddd fj dk fkfff djf kkj</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ls</NewCharacters>
+ <Line>dsjs sjjdf jlsfd lf ffl ffl jk ssj</Line>
+ <Line>lf fd lkfdj kjjkd dksj ls ksd ksld</Line>
+ <Line>lss klk sd f kjdd jlsfd s sslj</Line>
+ <Line>f sslj jlsfd lkf llssl llssl lld jsk</Line>
+ <Line>dkfsf ssk jld fldd ssj dsjs jlsfd sksj</Line>
+ <Line>lld kdsjf sfsd fd sl klk jsssk sl</Line>
+ <Line>sj sl dsjs sddds lf fsd lfskf dsjs</Line>
+ <Line>sdf ksdjs sdj sddlk sl fd kdsjf dsjs</Line>
+ <Line>kf fk lkd dsjs sksj fskdl j sskl</Line>
+ <Line>sdsl fsd sslj f kjll lss lkd sl</Line>
+ <Line>ssk ls fldd lds lss ffddd kldld jk</Line>
+ <Line>kjll lld ssjf dkfsf sl lkd llssl kf</Line>
+ <Line>ksdjs fskdl sdj j lkfdj sjjdf jlsfd jjsf</Line>
+ <Line>fk ksld kdsjf sskkd ff ksdjs fssf dksj</Line>
+ <Line>sdsl sd kdsjf sddlk dksj lld fd sddlk</Line>
+ <Line>kdsjf lkd jk fssf jlsfd kjll lkd sddlk</Line>
+ <Line>ksd jsk ssk sssf kjdd sd fssf kjjkd</Line>
+ <Line>s jlsfd sj ssk lld dlks dkfj sd</Line>
+ <Line>lkd dlks lkfdj kldld sl kjdd k sddds</Line>
+ <Line>fd sjjdf sj jsk kkdkj fd dksj lss</Line>
+ </Level>
+ <Level>
+ <NewCharacters>şa</NewCharacters>
+ <Line>aks aş şalak saf dal fal şaş kafa</Line>
+ <Line>dal ajsfş şak alaka asal da kakala falaka</Line>
+ <Line>dal ada f kafa sakal falaka faska kkşk</Line>
+ <Line>flaş aka sakla asalak kalfa sadak şad allak</Line>
+ <Line>kasa ajda fak aksakal kkşk şakak kak sa</Line>
+ <Line>sadaka d sadaka dalla şaşala sakak faal şaşala</Line>
+ <Line>alla sada allak allak saf kask laka laklaka</Line>
+ <Line>kkşk şalak asfa alla şaşala salak alaka şafak</Line>
+ <Line>alfa kalakal kask al akla lala ajda laka</Line>
+ <Line>kak ajsfş aşk dada lfk kalas saka asalak</Line>
+ <Line>aksak ada aks j sakla kalfa kas sadaka</Line>
+ <Line>alala kaş l lll asal f şş da</Line>
+ <Line>ad akla l sada şad f f kafkas</Line>
+ <Line>kask alla falaka kalak a dal aksak asla</Line>
+ <Line>şk sjjkl sadak fal dada akala şaşaa şafak</Line>
+ <Line>ş sal da klas salla laklaka ssfş dadaş</Line>
+ <Line>lak faska aksakal adak a adaş kas şaşala</Line>
+ <Line>afal salak sakal adak klas a kas laklak</Line>
+ <Line>kalk adal f al asla ada şaşaa aka</Line>
+ <Line>kak j da akad kjkf kal d şad</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ci</NewCharacters>
+ <Line>isfid sakil ski si sac fildiş sif sadis</Line>
+ <Line>ladik salacak isa didik afil ciddi kils asli</Line>
+ <Line>facia dikili işl asli afif lika ski şia</Line>
+ <Line>cad fiil fil dişil afil kils sacid kaşif</Line>
+ <Line>şaki cila işkal adil şasi isaf iliş sadi</Line>
+ <Line>alacak laik fildiş kişilik dik afili iks ika</Line>
+ <Line>ifşa lasif facia klik alacala silis aik alkil</Line>
+ <Line>isad icl adali safi c ki adali salisilik</Line>
+ <Line>akis afiş iş kişi kişilik ifşa silk cila</Line>
+ <Line>şii kil illi alaca ciddi dafi salisilik assai</Line>
+ <Line>sif akif işkil safi kilis afil illi fişka</Line>
+ <Line>sakil şalaki sadik klasik alkali afaki salacak skif</Line>
+ <Line>skif fiili disk iski aski sidik lika facia</Line>
+ <Line>ika adi il cali kasis adi ifşa faika</Line>
+ <Line>şafii saika ski saki salisilik akdil ilca şasi</Line>
+ <Line>afaki cad kişi isal ilişki illa silis şafii</Line>
+ <Line>filika dakik cad kilis kaid lif dakika skif</Line>
+ <Line>alaca assai sik şif said şia sicil ifşa</Line>
+ <Line>dsi isfid iliş dilsafa kasis fiili şafii şasi</Line>
+ <Line>isad şasi ilik ilk ladik faika skif ki</Line>
+ </Level>
+ <Level>
+ <NewCharacters>nt</NewCharacters>
+ <Line>sincik atasan ifşaat nanik kinci şaft astatin ikindi</Line>
+ <Line>t sanidin inaka falanjist sincik adaklan tancan intikal</Line>
+ <Line>kasnak naaş lisans kadit istinaf tadat iktisat sinan</Line>
+ <Line>istidat inikat salisilat dank kat tadat dadan tdk</Line>
+ <Line>nacak istafilina iltisak kat aşti tacikistan inik nal</Line>
+ <Line>lantan ani sataşkan nadan ikincil nida naaş dijital</Line>
+ <Line>taltif lakin kankan tasa tafsilat stilist nişastalan ilan</Line>
+ <Line>kafatas istidat sadakat takkadak italik flit sakit nisan</Line>
+ <Line>link fistan aktif dilalt tl lain dit kasti</Line>
+ <Line>tafsil adnan sina link şatafat taklit fatalist ilan</Line>
+ <Line>talat nakit aksan iltisak nakit inid ilkin lift</Line>
+ <Line>atlan takt alan sanki ninni tasdik kinik ait</Line>
+ <Line>dink nakkaş tanjant inkişaf kalafatla ati anjin tic</Line>
+ <Line>silkin alacan istif katana iktisat finans sanat aclan</Line>
+ <Line>taan nalla kitin adana kanaat tck dasitani inikat</Line>
+ <Line>lastik falanj sistit adnak tat nal kin kanatlan</Line>
+ <Line>dikit tck taş alatan indis inikat astat filistin</Line>
+ <Line>şanjan astatin şantaj sincik taci lantan itidal affan</Line>
+ <Line>ait taş ilan tanak sin dink atla finalist</Line>
+ <Line>dikit didaktik incila şti kanla nikan ini ant</Line>
+ </Level>
+ <Level>
+ <NewCharacters>vı</NewCharacters>
+ <Line>vs ıslak kına kıtaat anlatı vacid sıkışık sındı</Line>
+ <Line>ııl dışla ışınla ıdık kıtık vatani aşıt vafi</Line>
+ <Line>kdv sıla kıtıkla natık tav kışla kanıtla ıskala</Line>
+ <Line>saltı vala kallavi fısfıs ıkla sanı takıntı tatvan</Line>
+ <Line>tavşan sıkışık alış kıtlık ıslak ısın ışık asıltı</Line>
+ <Line>vd ıskat kılış katkılan ıık talkın sanık tav</Line>
+ <Line>kına ıstıfa akın takva tanıkla kivi sın katkılan</Line>
+ <Line>nakışla altıntaş takıntı ansı kanı cık adaklı cıs</Line>
+ <Line>avcı avadanlık vacid kınla sınıf kılık şıllık fındıklı</Line>
+ <Line>kadın sakıntı ışıl ışıldak alışkı ıslıkla vd ıslan</Line>
+ <Line>sav aşıt altı sınıfla vals ışıntı analı sancılan</Line>
+ <Line>cavla asıltı vassal akıt adıl kasıntı kın alıntı</Line>
+ <Line>avlak kaşkaval tavsa akkışla kısıntı alış kıtal fındık</Line>
+ <Line>vidad dışla vali ıslan vail ısı kalkış sınıfla</Line>
+ <Line>ılıca fasıl fıtık kıs tanık divitin kıtlık tın</Line>
+ <Line>nalın şık lavta avadanlık sakıt kadı dadı altık</Line>
+ <Line>ışı tavas alıntı kına cascavlak sandık anık kaval</Line>
+ <Line>ıskala fındıki kıstas sıfat atıf sıska ıslık cıvatala</Line>
+ <Line>kınala ısıl sandıklı kavşak sadık alıntıla takın aşkın</Line>
+ <Line>analı vidad kışlak avanak kancık islav şavşat vakit</Line>
+ </Level>
+ <Level>
+ <NewCharacters>me</NewCharacters>
+ <Line>sımsıkı maskele kelkit eşme şevket macenta taife selen</Line>
+ <Line>selameddin cavide tecimen ivme teşkilat ikame esasen kete</Line>
+ <Line>macenta filenk melanet keklik ateşin efika sekine fadime</Line>
+ <Line>nefis jelatin dikine meksika sinameki el teskin sille</Line>
+ <Line>jilet semine misk kıvam velime miladi vecdi akşamsefa</Line>
+ <Line>keski listele ekim vefik festival akdes efdal eşelek</Line>
+ <Line>semavi melal jel ataseven tekcan sekine esin sim</Line>
+ <Line>işletmen manivela feke lenfatik teslimat nesnel şekildaş fatıma</Line>
+ <Line>santim evcil mışıl kenetle fiske mete vefik vesselam</Line>
+ <Line>kendisince telefat kıvam kalevi tekmile fenni miksefe tatekin</Line>
+ <Line>millen tilavet enes ilam nakşet listele midilli destani</Line>
+ <Line>kesenkes medide emmi daima tente alşimi entelekt seval</Line>
+ <Line>vejetalin temel sel ele maşa sistem teenni icma</Line>
+ <Line>emaneten emsinisa metil kilitle jile ensele malike elale</Line>
+ <Line>tev iddianame sima sena nemf sekmen seden datekin</Line>
+ <Line>seci meva adese vefai anket selmani menemen datekin</Line>
+ <Line>kefne daima telkin kelamıkadim işlev şike eş tevlit</Line>
+ <Line>tef kesel dinamit meciddin vesvese dm defnet maket</Line>
+ <Line>selaset keles idefiks kisve makam felemenk tekne kaman</Line>
+ <Line>fantasma temin felfelek taşım imal dikmen maksat jest</Line>
+ </Level>
+ <Level>
+ <NewCharacters>hr</NewCharacters>
+ <Line>kartal hakla martaval dire dilaver rehavet fahir hıdır</Line>
+ <Line>aşırt taliha makastar firkat risaleddin echer nefer cırnak</Line>
+ <Line>ıstırar evrişik karakter revnak narcıl askarit kantara sinirli</Line>
+ <Line>vecih kiver macera dahi ecir dirsekle derviş ihracat</Line>
+ <Line>kerata anaerki mihrican keramet erdem narcıl hırka desimetre</Line>
+ <Line>ahika nere anha erkel tercihan ever reat sikalar</Line>
+ <Line>mir ismirar kartel kekre şifahi evra sırala eleştirmen</Line>
+ <Line>sirac sırtla reji desilitre ataner kredile akire amire</Line>
+ <Line>sahra arala sadreddin ihsan incifer rakide sıradan kirik</Line>
+ <Line>tıraşla sırla teren dekstrin salar iscehisar refi vareste</Line>
+ <Line>asarıatika raci hafifse reha insiraf kerata semra vecih</Line>
+ <Line>frisa ermenek tahriri halka asker kirş ittırat nevres</Line>
+ <Line>firik edvar akrak saire cahid tahıl hallen kare</Line>
+ <Line>meraklan mihmandar rahe ankara hamakat mihrak kıranta tahrif</Line>
+ <Line>hattat israf sarkıntı karşıtla taharetlen havadis erkete nışadır</Line>
+ <Line>savaer helak ıtri kar radi akaret intihar ekrem</Line>
+ <Line>ermende arakla temre ekstra ersevim sitrik telmih mandater</Line>
+ <Line>irtica kestere makferlan sırla hattat takdirkar dere minder</Line>
+ <Line>kerhane tahriri tamah dahi merkantilist sırtar takrine kesret</Line>
+ <Line>alivre hatime hafi taşikardi istinsah helva erdem verici</Line>
+ </Level>
+ <Level>
+ <NewCharacters>go</NewCharacters>
+ <Line>droseragiller steno entegre donanım genlik silo korece ısırgangiller</Line>
+ <Line>narkotik nanemolla fenomenoloji hovarda otokritik oaner koşnil tohar</Line>
+ <Line>mokasen fileto leksikoloji manometre aslangiller maganda gerek argo</Line>
+ <Line>orhaneli togo done hidrolik toreador tokta triftong lota</Line>
+ <Line>gol folklorik longa hoca olijist komar motif ito</Line>
+ <Line>komanditer sorti fonetik kefalgiller gaslet elemge savgat irge</Line>
+ <Line>mineraloji hoşhoş tomak motris senkroni fotoelektrik gevaş atonal</Line>
+ <Line>sagar immoral tedirgin damgala sitoloji metot kokarca amfor</Line>
+ <Line>lokman tolga otokrat mengen şangır nova antidemokratik sıkılgan</Line>
+ <Line>entomolojist hallol kargaşa silikon domino roda otoman angaje</Line>
+ <Line>gemle kafakol sismoloji imge gecelik toharca herhangi genişle</Line>
+ <Line>monte holosen hidrojen gerin kotlet dekovil ironi kefalgiller</Line>
+ <Line>megavat flok odeon holding aristokratik evirgen kılgın fotomontaj</Line>
+ <Line>koşnil sarıasmagiller ergincan retorik fotomekanik tomris feragat jengar</Line>
+ <Line>anason trahom hedonist akonitin fotomodel kano ılgıncar tolgahan</Line>
+ <Line>olasılık kargaşa kocaali lolo sargı germanist ilgi otarşi</Line>
+ <Line>termometre antitoksin kromaj korida anglosakson tiroit hidrograf dilatometre</Line>
+ <Line>langır kol ilgile girift sismograf korno elektron kocakarı</Line>
+ <Line>toto sondaj skolastik oleometre telgraf hidrolog ato otlak</Line>
+ <Line>dola rotor ocak denge mikro kron olanak mikrokok</Line>
+ </Level>
+ <Level>
+ <NewCharacters>bp</NewCharacters>
+ <Line>bilaistisna takrip hipodrom berhane panel ibriktar satrap pahla</Line>
+ <Line>pertev proforma pepele kapalı soba bank kaplama postnişin</Line>
+ <Line>amboli rebia mansap operakomik galibarda sahba ekib sbf</Line>
+ <Line>berraka orbek ilkbal balkanlar baar başkonsolos boa bıngıl</Line>
+ <Line>safbeste takbih biga pedagog tespih epifit balistik plaster</Line>
+ <Line>kapan asepsi palmitin beta kabl lapa taba pankart</Line>
+ <Line>şip barisfer şıpır pis sarıbalık plise patnos başkan</Line>
+ <Line>iplik ballan ponje kabakla espressivo ekopraksi prenses kırba</Line>
+ <Line>park arkeopteriks amper kalaba cebire pektoral iskilip satrap</Line>
+ <Line>perende bekta ilbilge bedir aptalcasına kasımpatı hebenneka bedri</Line>
+ <Line>pişti takip pense sepile tabakla alb pentan bask</Line>
+ <Line>sembol protein esbap iskarpela ilbilge serpiştir peritonit perihan</Line>
+ <Line>babacan rabia pışpışla kitabet bosna kispi sapta libero</Line>
+ <Line>repo vombat veritaban betimle bilad baroskop biftek padişah</Line>
+ <Line>hoppala obelisk serpici pişpirik alabanda kocaalp tebaa kasibe</Line>
+ <Line>portbebe bitlis nekbet bedirhan aperitif bildik parafele okboa</Line>
+ <Line>pohpohla nesib bileşke fribort baak perk pakel cevapla</Line>
+ <Line>karbonla berrin aps birle balıklava blender bilgiser ipeka</Line>
+ <Line>tembih porto topal bordo peştamal monotip kitabi kopenak</Line>
+ <Line>ibriktar kılaptan albinos menakıp bitle itap stop port</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ğu</NewCharacters>
+ <Line>kaşağı boğanak mefkure murafaa savur selnur kuloğlu uğru</Line>
+ <Line>ulula masruf hulul vurgula bukağı sarıağı grup muit</Line>
+ <Line>taalluk cesur bisturi durucan kankurutan atatu savtur postulat</Line>
+ <Line>arapsun kakule uluant kullan oktuna canbulat hunhar kut</Line>
+ <Line>uluerkan suni pofur muhassas muharrem sağlam okus emanetullah</Line>
+ <Line>iguana kumpir anamur şahtur aktu saksağan hudavendi eğilim</Line>
+ <Line>usan duş duldala nursen endur acun muhrip dokunaklı</Line>
+ <Line>kabuklan otağ abuli değişken kankurutan burak muhavere tığ</Line>
+ <Line>samut mudil lağvet somurt ergun nikaragua nuren huri</Line>
+ <Line>penguen gramkuvvet selamullah sungurtekin sığınak doukan tarassut coğrafi</Line>
+ <Line>kutsan itburnu tahakkuk dosdoğru kurca tuh mugaddi cenubi</Line>
+ <Line>mebus savur mushaf konkur sur istanbulin lokum kkuv</Line>
+ <Line>murafaa kubbe murat hukuk dokunaklı muttarit uluerkan boru</Line>
+ <Line>dağıl arsıulusal ourata ağırşaklan tuser tulu şırlağan sabuklan</Line>
+ <Line>muhabir mahsup argunah armadura sarıfiğ turp ebu mucip</Line>
+ <Line>tun tuser konkurhipik kulan abajur sardun sığırcık atasagun</Line>
+ <Line>dokumahane maun muattal tutekin beşuş kum muhtelis kurşunlu</Line>
+ <Line>mukavemet kuddus jul kamufle onuk turre abajur şuara</Line>
+ <Line>palamut onursev cokunsu guguk muavenet sure muamma morula</Line>
+ <Line>hinoğluhin muhsin durgun rumence kondur doku uğur oldurgan</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ün</NewCharacters>
+ <Line>sanalp kamerun kanepe aner konkret naibe insanüstü grandi</Line>
+ <Line>kepenk nurhan güher sengül rulman polen ağnam arşidük</Line>
+ <Line>abdülhak kınla gülen minnet atsan takriben tınla ünseven</Line>
+ <Line>kimüs suna aknur huni üsteğmen ilmen adaleddin harnup</Line>
+ <Line>nafih orgunalp menenjit inorganik oksijen ısıveren ehriban temircan</Line>
+ <Line>başmüdür ciharıdü kılaptan ansefal romen istintak kırnak kutlan</Line>
+ <Line>mahna revan samandağ mükremin sırmakeşhane brüt ibrin başdanışman</Line>
+ <Line>münif cülus nefise avuntu batıni betül namver kanaatkar</Line>
+ <Line>anamur eraksan ikan pusatlan defaten abdülhamit hormon ananet</Line>
+ <Line>peganit müdavi dondurma vicdani polifoni mücella mühre nefi</Line>
+ <Line>bindallı mihine mototren lügat anır gülük meciddin kurtboğan</Line>
+ <Line>bilmen sevencan ibadethane cühela olefin dürtükle mükrime güherpare</Line>
+ <Line>pigment kalkandere anatomi erengül dilberan elektrofon pişman affedersin</Line>
+ <Line>edgü ülfer nardan nahide müşahede abdülmesih entimem mevlevihane</Line>
+ <Line>narin maruni latin turnike panorama silindir türkoloji tübitak</Line>
+ <Line>minimini teneke şifahen erişkin revnak bacanak şifahane oskan</Line>
+ <Line>korner titan enam apandisit şükret taksonomi timüs boşnak</Line>
+ <Line>fauna şırlağan mütevali irvan haldun otobüs takarrür müttehit</Line>
+ <Line>mürtekip mührele gabin hona ümmühan men seminer mütebessim</Line>
+ <Line>otobüs peronospora fiilen cankurtaran ağrıkesen tesmin abaküs nema</Line>
+ </Level>
+ <Level>
+ <NewCharacters>çz</NewCharacters>
+ <Line>gazir zerr akçakiraz bozgun fototropizm keçitırnağı doç benzer</Line>
+ <Line>medüz felemenkçe dizge haliç kemalizm bozgun çine açım</Line>
+ <Line>antropozoik benzerlik nurzat gülçin roza tezgahtar zemmet kazaska</Line>
+ <Line>cızırtı uzat iraz zapt tuçe çav foça natüralizm</Line>
+ <Line>uzsan omuz çatırda suntıraç ehnaz azotla kozmonot zevat</Line>
+ <Line>vezire zift cambazhane bızır müstahzar gez buzkıran atatürkçü</Line>
+ <Line>gagavuzca transandantalizm reze hokkabaz çizge parça kuduz tozpembe</Line>
+ <Line>müzehhep çimdir mızırdan üçer altunç kozmonot antroposantrizm izmaritgiller</Line>
+ <Line>filizi zabıta çokrağan izomorfizm zoolog sazak zeria emzik</Line>
+ <Line>erkeç alçıla zemmet zümrüt kızılderili hürmüz çirkef gelişigüzel</Line>
+ <Line>partenojenez çanur ontojenez sezi nezir zendost bizzat sekiz</Line>
+ <Line>kişizade inzibat karaburçak çırpın hazim çevirim amuz ehmuz</Line>
+ <Line>trabzon zarfla alçalt titizlen vülgarize çarpıt cezve zehre</Line>
+ <Line>baemez vızır alizarin çuha kumarbaz amazon cızıldama ouzcan</Line>
+ <Line>cızıldama çitmik tozuntu sıkmaç sebze dizile sezal zırnık</Line>
+ <Line>zillet zaire azamet animizm ramiz azarla büzük kakaç</Line>
+ <Line>tapgaç zafir pizza çigan bilgiç bezirgan izah azref</Line>
+ <Line>genzek mevzilen zilkade vezin sızıntı ezilgen sezmen ortunç</Line>
+ <Line>etçil ortoklaz mefruza daldız riziko çıra izomorf karpuz</Line>
+ <Line>arapsaç uzan suzidilara hazzet kalpazan nazile gazap donduraç</Line>
+ </Level>
+ <Level>
+ <NewCharacters>ö</NewCharacters>
+ <Line>döviz öngü dönüş öp öğür övgü krepdöşin gör</Line>
+ <Line>uluöz örf kökle özel balköpüğü höl öfkelen gör</Line>
+ <Line>öhö kömür vezirköprü göver küldöken börk özgü çözün</Line>
+ <Line>çözün ölçüt gölbaşı döşek röportaj özbeöz döşe amortisör</Line>
+ <Line>dökün gözlem mandagöz desinatör dublör özetle döşeli göktepe</Line>
+ <Line>özdevim öç bölüm özbek örengül öcalan sözleş örgüt</Line>
+ <Line>öbek hanımgöbek ödlek gözdağı brülör suölçer ördekgiller bös</Line>
+ <Line>dövün sölpük göze öner bölümle böğ özsever öd</Line>
+ <Line>çökkün kongövde başköşe döşeli ödünle gökkır ödem önlem</Line>
+ <Line>örtenek örtbas köşek sözlük cönk şölen töskürü töskürü</Line>
+ <Line>ördür özveri örükle şabanözü önen köfter önce öün</Line>
+ <Line>transistör sarıgöl nankör kompresör masör uzgören dönem gözaltı</Line>
+ <Line>ısıölçer görgülen narkozitör gömgök uzgören söğütgiller söz övünç</Line>
+ <Line>rötuş töskür rötuş ökten körel övüngen nösb çaprazölçer</Line>
+ <Line>güngörmüş öğle öbek sektör gönül kötü kökten özenti</Line>
+ <Line>dök görücü sönmez dönen açıkgöz böbür dekoratör çömel</Line>
+ <Line>kadıngöbeği öğür terörist böğ löpür ödün pekgöz sölpük</Line>
+ <Line>özür gözenek prodüktör bölücü konektör ötüken akıntıölçer göksu</Line>
+ <Line>ökten çökek gözleme sönümle konservatör dömifinal gökalp sözsüz</Line>
+ <Line>görüntü örf tövbe özveri özgür rektör kötüle pörsü</Line>
+ </Level>
+ </Levels>
+</KTouchLecture>